addrbookFor publishers
← The evidence ledger

Evidence row 563153

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint af9bf627-917f-4f90-8d9a-545b359f2ead
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
97ea27337077b3e6f896f5dfbfac1cc42b693b55bfc85efb05b35dacd904e9b7
Leaf
0xd97178a00abb5d791d4ab7597c8e597a12967da27e2061d00608fd8c0b123e83

What was observed

{
  "count": 93,
  "tools": [
    {
      "description": "Answers a question about WebinarIgnition — price, limits, integrations, whether it fits — from the connector's verified knowledge base. Read-only: no session is created, no site is touched, nothing is changed. The answer comes only from that base: when it holds no matching entry, the response says so and carries the canonical product address https://webinarignition.com/.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "language": {
            "default": "de",
            "description": "The language the host writes in.",
            "type": "string"
          },
          "text": {
            "description": "What the host said (thema · weiter) or the question in the host's language (frage).",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "wi_answer_product_question"
    },
    {
      "description": "Sends the host's answer to exactly one participant question by email and marks the question as answered in the live console. Side effect: it sends a real email to that participant from the host's site and writes the answer into the console; nothing else changes. Needs `session_id`, `webinar_id`, `question_id` and `answer`. `question_id` comes from wi_get_webinar_questions, never from memory. The answer goes out as the host wrote it, so read it back to them before sending when they spoke it out loud. `subject` is optional. For deleting a question use wi_delete_webinar_question.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "answer": {
            "description": "The host's answer, as it should be read by the participant.",
            "type": "string"
          },
          "question_id": {
            "description": "The question id from wi_get_webinar_questions.",
            "type": "string"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "subject": {
            "description": "The subject of the answer email. Leave it out and the site uses its own.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it. Never invent an id.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "wi_answer_webinar_question"
    },
    {
      "description": "Stops or deletes the explainer clip at the video provider. Side effect: the task is deleted there and, once a clip is finished, the video file itself is removed, which cannot be undone; it stops any further cost. Needs `session_id`, `webinar_id`, the `task_id` from wi_create_explainer_video and a clear yes (`confirm` true). Use it when the clip runs too long or the host does not want it; wi_get_explainer_video shows what the provider reports now.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "confirm": {
            "description": "Must be true, set only after the host said the clip may be deleted.",
            "type": "boolean"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "task_id": {
            "description": "The task from wi_create_explainer_video.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it. Never invent an id.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "wi_cancel_explainer_video"
    },
    {
      "description": "Changes ONE group of the advanced settings of a campaign: protected access (blacklist, whitelist, email verification, single lead limit), WordPress integration, the additional host and support lists, which existing page the registration, thank-you, live, replay or closed view uses, the field names an autoresponder expects, or the wording of the privacy checkbox. Side effect: it writes on the connected WordPress site, a member entry also CREATES A WORDPRESS USER with access, and a changed page link moves where participants land; everything else on the campaign stays. Needs `session_id`, `webinar_id`, `group`, `settings` and a clear yes (`confirm` true). Only the group you pass changes, and an unknown key refuses that whole group. Read the current state with wi_get_webinar_settings first and say what will change before you write.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "confirm": {
            "description": "Must be true, set only after the host said what may change, including any user this creates.",
            "type": "boolean"
          },
          "group": {
            "description": "Which group to change. One group per call.",
            "enum": [
              "protected_access",
              "wp_integration",
              "hosts_support",
              "host_members",
              "support_members",
              "design_pages",
              "ar_settings",
              "privacy_settings"
            ],
            "type": "string"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "settings": {
            "additionalProperties": {},
            "description": "The fields of that group with their new values, as wi_get_webinar_settings names them. Only passed keys change.",
            "propertyNames": {
              "type": "string"
            },
            "type": "object"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it. Never invent an id.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "required": [
          "group",
          "settings"
        ],
        "type": "object"
      },
      "name": "wi_change_advanced_settings"
    },
    {
      "description": "Sets, replaces or clears the photo of the host on the registration page and in the registration animation. Side effect: it writes on the connected WordPress site. Participants see the new face on their next visit. Needs `session_id` and `webinar_id` from wi_list_webinars, plus ONE of: `media_url` (an image from the media library, find it with wi_find_media), `wp_user_id` (that person's avatar, find the id with wi_find_wordpress_user) or `clear` true to remove the photo. The site reads the stored photo back, so report only what the answer names. Never invent an image address.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "clear": {
            "description": "true removes the photo, so the site shows the avatar or a monogram instead.",
            "type": "boolean"
          },
          "media_url": {
            "description": "The image to use, from the host's own media library.",
            "type": "string"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it. Never invent an id.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          },
          "wp_user_id": {
            "description": "Use this WordPress user's avatar as the host photo.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "wi_change_host_photo"
    },
    {
      "description": "Replaces ONE standard line of the participant pages with the host's own wording, for example the hint above the required fields or a standard line of the thank-you copy. Side effect: it writes on the connected WordPress site. The value is stored on the campaign and beats the translation, so it survives a language switch or a rebuild; an EMPTY value deletes the override and the campaign language shows again. Needs `session_id`, `webinar_id`, `key` and `value`. An unknown key is refused with code unknown_label and the list of valid keys, which you then read and never guess. The labels of the form fields (Full Name, Email, Phone) are NOT these lines; they are campaign fields, and the form's own labels are changed with wi_change_registration_fields. The answer names whether the line is reachable on the campaign's pages, so say so plainly when it is not.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "key": {
            "description": "The label key, as the refusal or the settings list names it. Never guessed.",
            "type": "string"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "value": {
            "description": "The host's own wording, or an empty string to remove the override.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it. Never invent an id.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "wi_change_participant_label"
    },
    {
      "description": "Puts the built-in registration animation on a webinar's registration page: the self-running slides from the benefit to the host to the sign-up, either INSTEAD of the video (mode animation) or BELOW it (mode both). Side effect: it writes on the connected WordPress site. Participants see the animation on their next visit; the host's stored video stays stored, so switching back to the video restores the clip exactly. Needs `session_id` and `webinar_id` from wi_list_webinars. `both` needs a video on the campaign and is refused with code needs_video without one. A campaign can render on several pages: without `page_id` and with own copy the site writes nothing and answers code needs_scope while listing the pages, so name one `page_id` or confirm all of them with `apply_to_all`. A page whose animation the host edited by hand is left alone unless you pass `overwrite_edited` with a page_id, and you should ask before that.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "apply_to_all": {
            "description": "Change every page the campaign renders on. Only after the host agreed to that.",
            "type": "boolean"
          },
          "benefits": {
            "description": "The benefit lines of the first slide, in the host's words.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "confirm": {
            "description": "Only after the site answered code admin_editing: the host agreed to overwrite unsaved changes in wp-admin.",
            "type": "boolean"
          },
          "cta_label": {
            "description": "The label of the sign-up button on the last slide.",
            "type": "string"
          },
          "headline": {
            "description": "The headline of the first slide, if the host wants their own.",
            "type": "string"
          },
          "mode": {
            "description": "animation replaces the video or image with the animation, both keeps the video and puts the animation below it. Default animation.",
            "enum": [
              "animation",
              "both"
            ],
            "type": "string"
          },
          "overwrite_edited": {
            "description": "Also change a page whose animation the host edited by hand. Only with page_id and only after asking.",
            "type": "boolean"
          },
          "page_id": {
            "description": "Change only this one page of the campaign.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "subheadline": {
            "description": "The line below the headline.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it. Never invent an id.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "wi_change_registration_animation"
    },
    {
      "description": "Adds, renames, requires, removes or reorders the fields of a webinar's sign-up form, which is what participants fill in before they get in. Side effect: it writes on the connected WordPress site. Participants see the new form on their next visit and the change affects the data every future registrant leaves behind; existing registrants keep what they entered. Needs `session_id` and `webinar_id` from wi_list_webinars. Read the form with wi_get_registration_fields first and pass the slots it returned. Each entry in `fields` is {slot, title} to add or rename, plus optional type, required, options for a dropdown, or remove true to delete it. The type is fixed by the slot: 1 to 4 text, 5 and 6 checkbox, 7 textarea, 8 to 14 hidden, 15 to 18 dropdown. `order` is the complete list of slots top to bottom and REMOVES every field not named in it, so pass it only on purpose. A hidden field is filled from a link, not by the participant. The provider names an autoresponder expects are a different thing (that is wi_change_webinar_autoresponder).",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "confirm": {
            "description": "Only after the site answered code admin_editing: the host agreed to overwrite unsaved changes in wp-admin.",
            "type": "boolean"
          },
          "fields": {
            "description": "The field changes. One entry per field.",
            "items": {
              "properties": {
                "options": {
                  "description": "Dropdown only: one option per line, optionally value::Label.",
                  "type": "string"
                },
                "remove": {
                  "description": "true deletes this field from the form.",
                  "type": "boolean"
                },
                "required": {
                  "description": "true when the participant must fill this field. Not for a hidden field.",
                  "type": "boolean"
                },
                "slot": {
                  "description": "The slot, e.g. ar_custom_1 or ar_custom_9, as wi_get_registration_fields returned it.",
                  "type": "string"
                },
                "title": {
                  "description": "The label the participant reads, in the host's own words.",
                  "type": "string"
                },
                "type": {
                  "description": "The kind of field. Must match the slot; only state it to be explicit.",
                  "enum": [
                    "text",
                    "checkbox",
                    "textarea",
                    "dropdown",
                    "hidden"
                  ],
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "order": {
            "description": "The complete slot list top to bottom. Only these slots appear afterwards, so this also removes every field not listed.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it. Never invent an id.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "required": [
          "fields"
        ],
        "type": "object"
      },
      "name": "wi_change_registration_fields"
    },
    {
      "description": "Changes ONE install-wide WebinarIgnition setting: the sender name, the sender address, the reply-to address, the email signature, the footer text, or one of the switches for footer branding, unsubscribe links and email verification. Side effect: it writes on the connected WordPress site. These settings apply to EVERY webinar on the site and to every email it sends, not only the one in this chat, so say that in one sentence before you write. Needs `session_id`, `field` and `value`. Only this fixed list is writable; anything else (licence, webhooks, legal texts) is refused by the site. For the colours of the emails use wi_change_webinar_colors with target email.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "field": {
            "description": "Which setting to change. One per call.",
            "enum": [
              "sender_name",
              "sender_email",
              "reply_to",
              "signature",
              "footer_text",
              "footer_branding",
              "unsubscribe_links",
              "email_verification"
            ],
            "type": "string"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "value": {
            "description": "The new value. For a switch pass true or false, for the rest the text itself.",
            "type": "string"
          }
        },
        "required": [
          "field"
        ],
        "type": "object"
      },
      "name": "wi_change_site_settings"
    },
    {
      "description": "Connects the registration of a webinar to the host's own email provider (Mailchimp, GetResponse and similar) by setting the form address and the field names that provider expects. Side effect: it writes on the connected WordPress site. From the next registration on, every new registrant is also posted to that provider; existing registrants are not sent again. Needs `session_id`, `webinar_id` and `url` (the form action address the provider gave the host), plus the field names `email_field`, `name_field`, `lastname_field` and `phone_field` when the provider uses its own names. Never invent a provider address or a field name: only what the host's provider documentation says. Test it afterwards with wi_test_webinar_autoresponder. For the form fields the PARTICIPANT fills in use wi_change_registration_fields.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "confirm": {
            "description": "Only after the site answered code admin_editing: the host agreed to overwrite unsaved changes in wp-admin.",
            "type": "boolean"
          },
          "email_field": {
            "description": "The provider's field name for the email address, e.g. EMAIL.",
            "type": "string"
          },
          "lastname_field": {
            "description": "The provider's field name for the last name.",
            "type": "string"
          },
          "name_field": {
            "description": "The provider's field name for the first name.",
            "type": "string"
          },
          "phone_field": {
            "description": "The provider's field name for the phone number.",
            "type": "string"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "url": {
            "description": "The form action address the email provider gave the host.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it. Never invent an id.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "wi_change_webinar_autoresponder"
    },
    {
      "description": "Sets the four brand colours of the webinar pages: background, text, the button fill and the button text. Side effect: it writes on the connected WordPress site. `target` decides how far that reaches: site (default) changes the whole website through the Site Editor styles, and while emails follow the site colours, the emails too; email changes only the email templates. Say which of the two it is in ONE sentence before you write, because target site is the bigger change. Needs `session_id`. Colours are hex like #516028. After writing, the site reads the values back, and only then is the colour really changed. Read the current ones with wi_get_webinar_colors, which can also sample the host's own logo if they do not know their hex codes.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "background": {
            "description": "Page background, hex e.g. #FFFFFF.",
            "type": "string"
          },
          "button_fill": {
            "description": "The primary and call-to-action button colour, hex.",
            "type": "string"
          },
          "button_text": {
            "description": "The text on those buttons, hex.",
            "type": "string"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "target": {
            "description": "site changes the whole website and the emails, email changes only the email templates. Default site.",
            "enum": [
              "site",
              "email"
            ],
            "type": "string"
          },
          "text": {
            "description": "Body text colour, hex.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "wi_change_webinar_colors"
    },
    {
      "description": "Changes ONE call to action in the live webinar room: the offer or booking box, its tab name, its body, its button and whether it is shown, or the moment an evergreen webinar reveals it. Side effect: it writes on the connected WordPress site. Participants see it in the room; nothing else on the campaign changes and no page is rebuilt. Needs `session_id` and `webinar_id` from wi_list_webinars. Leave `slot` out to ADD a new CTA at the end; name a slot (1, 2, 3) to change exactly that one and leave the others untouched; `copy_from` copies an existing slot first. `timing` is the reveal time as MM:SS for an evergreen webinar. For a WooCommerce offer with product, price and voucher use wi_change_webinar_offer, for a checkout page you want to embed check it first with wi_check_embedding. `remove` deletes the whole slot and cannot be undone, so it needs a clear yes.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "button_color": {
            "description": "Button colour as hex, e.g. #6BBA40.",
            "type": "string"
          },
          "button_text": {
            "description": "The button label. An empty string removes the label, together with button_url it removes the button.",
            "type": "string"
          },
          "button_url": {
            "description": "Where the button goes. An empty string removes the link.",
            "type": "string"
          },
          "confirm": {
            "description": "Must be true together with remove, and only after the host said that this CTA may be deleted.",
            "type": "boolean"
          },
          "copy_from": {
            "description": "Copy this existing slot first, then apply the other fields on top.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          },
          "iframe": {
            "description": "Show the body inside an iframe.",
            "type": "boolean"
          },
          "on": {
            "description": "Show this CTA in the room (true) or hide it (false).",
            "type": "boolean"
          },
          "position": {
            "description": "outer is the sidebar tab on the right, overlay lies over the video.",
            "enum": [
              "outer",
              "overlay"
            ],
            "type": "string"
          },
          "remove": {
            "description": "true deletes this whole CTA slot. Cannot be undone, needs the host's clear yes.",
            "type": "boolean"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "slot": {
            "description": "Which CTA slot (1, 2, 3). Leave it out to add a new CTA at the end.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          },
          "tab_text": {
            "description": "The name of the sidebar tab for this CTA.",
            "type": "string"
          },
          "text": {
            "description": "The body of the CTA: HTML or shortcodes, e.g. an [advanced_iframe src=\"...\"] for an embedded page.",
            "type": "string"
          },
          "timing": {
            "description": "Evergreen only: when the CTA appears, as MM:SS after the start, e.g. 20:00.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it. Never invent an id.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          },
          "width": {
            "description": "Overlay box width, e.g. 60% or 500px (overlay only).",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "wi_change_webinar_cta"
    },
    {
      "description": "Changes ONE field of ONE email of a webinar: the confirmation email (signup) or reminder 1 to 5, and either its subject, its heading, its inbox preview line, its body, whether it is switched on, or when it goes out. Side effect: it writes on the connected WordPress site. Every registrant receives the new version from the next send on; no other email and no page changes. Needs `session_id` and `webinar_id` from wi_list_webinars. Read the current texts with wi_get_webinar_emails first and copy the body the host wants to change word for word, because `value` replaces the whole field, not a part of it. For the timing of all emails at once use wi_change_webinar_reminders, for a real mail in the host's inbox wi_send_webinar_test_email.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "field": {
            "description": "What to change in that email. One field per call.",
            "enum": [
              "subject",
              "heading",
              "preview",
              "body",
              "enabled",
              "offset",
              "fixed"
            ],
            "type": "string"
          },
          "fixed_date": {
            "description": "With field fixed: the send date as YYYY-MM-DD, in the webinar timezone.",
            "type": "string"
          },
          "fixed_time": {
            "description": "With field fixed: the send time as HH:MM, in the webinar timezone.",
            "type": "string"
          },
          "mail_cta_url": {
            "description": "The link for a one-click register button appended to the after-live reminder emails. Leave it out to keep the current one.",
            "type": "string"
          },
          "offset_dir": {
            "description": "With field offset: before the start, after it, or at it.",
            "enum": [
              "before",
              "after",
              "at"
            ],
            "type": "string"
          },
          "offset_unit": {
            "description": "With field offset: the unit.",
            "enum": [
              "min",
              "hour",
              "day"
            ],
            "type": "string"
          },
          "offset_value": {
            "description": "With field offset: how many units before or after the start, e.g. 1.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "slot": {
            "description": "Which email: signup is the confirmation, 1 to 5 are the reminder and follow-up emails.",
            "enum": [
              "1",
              "2",
              "3",
              "4",
              "5",
              "signup"
            ],
            "type": "string"
          },
          "value": {
            "description": "The new text for subject, heading, preview or body. For enabled pass 1 or 0. Not needed for offset and fixed.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it. Never invent an id.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "required": [
          "field"
        ],
        "type": "object"
      },
      "name": "wi_change_webinar_email"
    },
    {
      "description": "Puts the host's offer into the live webinar room, or updates the one already there: the product, further products as tiers, the webinar price with its voucher and the window it holds in. Side effect: it writes on the connected WordPress site. Participants see it in the room, and a voucher code is created in the host's own shop, so say that before you write. Needs `session_id` and `webinar_id` from wi_list_webinars. `product` is either product ids from this site's shop (find them with wi_list_webinar_products) or the checkout address of a shop on another domain. `route` says which of the three ways the host sells: own (this site's WooCommerce), other (a shop on another site that also runs WebinarIgnition) or external (Digistore, Freemius, Stripe and similar, where nothing is appended to the link), and you should ask when it is unclear. `price` with `price_type` is the discount inside the webinar window, `coupon` your own code or empty to let WebinarIgnition create one, `window` how long the price holds. `replace_visible` is the special case only: true only after the host explicitly said the offer already standing in the room may be replaced. Read `placed` in the answer: false means the offer is NOT in the room, and `notice` and `next_step` say why, so never tell the host it is in before placed is true.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "affiliate": {
            "description": "The host's affiliate id, if they sell as an affiliate. An empty string removes a stored one.",
            "type": "string"
          },
          "coupon": {
            "description": "Your own voucher code, or leave it out to let WebinarIgnition create one.",
            "type": "string"
          },
          "offers": {
            "description": "Further products of the same offer, in the order they should appear.",
            "items": {
              "maximum": 9007199254740991,
              "minimum": -9007199254740991,
              "type": "integer"
            },
            "type": "array"
          },
          "price": {
            "description": "The webinar price as the voucher value: 50 with percent means 50 percent off, 99 with fixed means 99 off. Leave it out and no voucher is created.",
            "type": "number"
          },
          "price_type": {
            "description": "How the price value is meant. Default percent.",
            "enum": [
              "percent",
              "fixed"
            ],
            "type": "string"
          },
          "product": {
            "description": "Product ids from this site's shop, e.g. 296 or \"296,297\", or the checkout address of a shop on another domain. Never invented.",
            "type": "string"
          },
          "replace_visible": {
            "description": "Special case only: true only after the host explicitly agreed to replace the offer that is already visible in the room.",
            "type": "boolean"
          },
          "route": {
            "description": "own is this site's WooCommerce, other is a WebinarIgnition shop on another domain, external is any other provider where nothing is appended to the link.",
            "enum": [
              "own",
              "other",
              "external"
            ],
            "type": "string"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "shop_url": {
            "description": "The checkout address, when product carries ids and the shop is not this site's own.",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it. Never invent an id.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          },
          "window": {
            "additionalProperties": {},
            "description": "How long the webinar price holds: {start, end} as YYYY-MM-DD HH:MM in the site clock. Leave it out and it runs to the end of the webinar.",
            "propertyNames": {
              "type": "string"
            },
            "type": "object"
          }
        },
        "type": "object"
      },
      "name": "wi_change_webinar_offer"
    },
    {
      "description": "Changes ONE block on the registration or thank-you page of a webinar: its text, or its image. Side effect: it writes on the connected WordPress site. Participants see it on their next visit; nothing else on the page moves. Needs `session_id`, `webinar_id` and `path`, which comes from wi_get_webinar_page_blocks, plus `text` for a text block or `image_url` for an image block. A block that carries its own formatting never loses it silently: when the spot is not unambiguous the site refuses with code formatting_would_be_lost and writes nothing. For the visible page heading use wi_change_webinar_text with target page_heading, for a text of the campaign copy (not the page) target journey_field.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "confirm": {
            "description": "Only after the site answered code admin_editing: the host agreed to overwrite unsaved changes in wp-admin.",
            "type": "boolean"
          },
          "image_alt": {
            "description": "The alt text of the new image.",
            "type": "string"
          },
          "image_id": {
            "description": "The media library id of the new image, if you have it.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          },
          "image_url": {
            "description": "The new image address for an image block.",
            "type": "string"
          },
          "path": {
            "description": "The block path, exactly as wi_get_webinar_page_blocks returned it.",
            "type": "string"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "surface": {
            "description": "Which page the block stands on. Default registration.",
            "enum": [
              "registration",
              "thankyou"
            ],
            "type": "string"
          },
          "text": {
            "description": "The new text for a text block: paragraph, heading, list item, quote or button.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it. Never invent an id.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "wi_change_webinar_page_block"
    },
    {
      "description": "Shows or hides the question area of the live room, so participants can ask questions during the webinar or cannot. Side effect: it writes on the connected WordPress site. Every participant sees the change on the next load; questions already asked stay stored. Needs `session_id`, `webinar_id` and `status`. For reading and answering the questions use wi_get_webinar_questions and wi_answer_webinar_question.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "status": {
            "description": "show puts the question area in the room, hide takes it out.",
            "enum": [
              "show",
              "hide"
            ],
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it. Never invent an id.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "wi_change_webinar_qa"
    },
    {
      "description": "Sets how many reminder emails a webinar sends and which preset decides their timing: factory, all before the start, all after the start, or the mixed 4 plus 1 preset. Side effect: it writes on the connected WordPress site. Every registrant is affected from the next send on; the wording of a single email is not touched, only which of them go out and when. Needs `session_id` and `webinar_id` from wi_list_webinars. Use `count` for how many reminders are active (0 to 5) and `frame` for the preset. For the text of one email use wi_change_webinar_email, for the whole journey wi_check_participant_journey.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "count": {
            "description": "How many reminder emails are active, 0 to 5. 0 switches them all off.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          },
          "frame": {
            "description": "factory keeps the default spacing, all_before sends every reminder before the start, all_after sends them after it, mixed_4_1 sends four before and one after.",
            "enum": [
              "factory",
              "all_before",
              "all_after",
              "mixed_4_1"
            ],
            "type": "string"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it. Never invent an id.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "wi_change_webinar_reminders"
    },
    {
      "description": "Sets which phase the room of a webinar shows right now: countdown, live, replay or closed. Side effect: every participant sees the new phase at once on the connected WordPress site; the campaign itself is not published or unpublished and no page is rebuilt. Needs `session_id`, `webinar_id` from wi_list_webinars and `status`. `confirm` must be true, and only after the host has clearly agreed: a room that jumps to live is visible to everyone. A replay without a recording is refused by the site with a plain reason. Report the phase the answer reads back, never the phase you asked for.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "confirm": {
            "description": "Must be true, set only after the host said yes to this phase.",
            "type": "boolean"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "status": {
            "description": "The phase the room should show now.",
            "enum": [
              "countdown",
              "live",
              "replay",
              "closed"
            ],
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it. Never invent an id.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "wi_change_webinar_room"
    },
    {
      "description": "Moves a webinar to another date, clock time, timezone or length, on an existing webinar and without rebuilding anything; for an evergreen webinar it changes the recurring air-times. Side effect: it writes on the connected WordPress site, the participant pages show the new date at once and the reminders that belong to the time move with it; the texts are not rewritten. Needs `session_id` and `webinar_id` from wi_list_webinars. `start_date` is YYYY-MM-DD and only for a live webinar, `start_time` a clock time such as 15:30, `start_timezone` an IANA id such as Europe/Berlin, `duration_minutes` how long the webinar runs. For an evergreen webinar pass `schedule` instead of a date: {timezone, instant_access, blocks:[{time:\"HH:MM\", weekdays:[\"mon\",\"wed\",\"fri\"]}]}. A bare hour with no am/pm is refused as ambiguous, never guessed. Name the stored start the answer reads back and quote its affected_places_line, so the host sees every place the new date shows.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "duration_minutes": {
            "description": "How long the webinar runs, in minutes (1-1440).",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          },
          "schedule": {
            "additionalProperties": {},
            "description": "Evergreen only: {timezone, instant_access, blocks:[{time, weekdays}]} with up to three air-times.",
            "propertyNames": {
              "type": "string"
            },
            "type": "object"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "start_date": {
            "description": "The new live start date as YYYY-MM-DD. Leave it out for an evergreen webinar.",
            "type": "string"
          },
          "start_time": {
            "description": "The new clock time, e.g. 15:30. A bare hour with no am/pm is refused as ambiguous.",
            "type": "string"
          },
          "start_timezone": {
            "description": "The IANA timezone of that time, e.g. Europe/Berlin.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it. Never invent an id.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "wi_change_webinar_schedule"
    },
    {
      "description": "Changes ONE stored text field of a webinar: the host name, the description, the sales copy, the main headline, the thank-you headline or its sub-headline. Side effect: it writes on the connected WordPress site. The value stands on the pages and in the emails that use it from the next load on; no text is generated and nothing else changes. Needs `session_id`, `webinar_id`, `field` and `value`. Use it when the host wants a field REPLACED as a whole; to change one wording inside a longer text use wi_change_webinar_text with target journey_field, and for the webinar name use wi_change_webinar_title. The host name and the webinar name cannot be emptied, the site refuses that with a plain reason.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "confirm": {
            "description": "Only after the site answered code admin_editing: the host agreed to overwrite unsaved changes in wp-admin.",
            "type": "boolean"
          },
          "field": {
            "description": "Which stored text to replace. One field per call.",
            "enum": [
              "host_name",
              "description",
              "sales_copy",
              "headline",
              "thankyou_headline",
              "thankyou_subheadline"
            ],
            "type": "string"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "value": {
            "description": "The new text, verbatim from the host. Never shortened and never invented.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it. Never invent an id.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "required": [
          "field"
        ],
        "type": "object"
      },
      "name": "wi_change_webinar_settings"
    },
    {
      "description": "Changes ONE existing wording of a webinar without rebuilding anything: a block on the page, text inside the page's raw code, the campaign copy (landing, sales copy, headlines, mail subjects and bodies) or the visible page heading. Side effect: it writes on the connected WordPress site and participants see it at once; no text is generated and nothing else on the campaign is touched. Needs `session_id` and `webinar_id` from wi_list_webinars. `find` is the current wording copied word for word from the site, `value` the new one, and `target` says where it stands: page_block (one block, find = its whole visible text), page_code (text inside the page code), journey_field (the campaign copy) or page_heading (the page title, find is ignored). `surface` picks the page: registration (default), thankyou or webinar. `all` changes every exact hit outside shortcodes and applies to page_code only; leave it out to change exactly one spot. When the wording stands several times the site refuses with code ambiguous instead of guessing, and when it stands nowhere it answers not_found. Report it as done only when the answer carries changed true, and relay a refusal word for word.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "all": {
            "description": "page_code only: true replaces every exact hit outside shortcodes. Leave it out to change exactly one spot.",
            "type": "boolean"
          },
          "confirm": {
            "description": "Only after the site answered code admin_editing: the host agreed to overwrite unsaved changes in wp-admin.",
            "type": "boolean"
          },
          "find": {
            "description": "The current wording, copied word for word from the site. Left out only for target page_heading.",
            "type": "string"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "surface": {
            "description": "Which page the target belongs to. Default registration.",
            "enum": [
              "registration",
              "thankyou",
              "webinar"
            ],
            "type": "string"
          },
          "target": {
            "description": "Where the wording stands. One target per call.",
            "enum": [
              "page_block",
              "page_code",
              "journey_field",
              "page_heading"
            ],
            "type": "string"
          },
          "value": {
            "description": "The new wording, taken verbatim. Needed for every target.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it. Never invent an id.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "required": [
          "target"
        ],
        "type": "object"
      },
      "name": "wi_change_webinar_text"
    },
    {
      "description": "Changes the NAME of an existing webinar: the title in the WebinarIgnition dashboard and in the webinar list, which is what a host means by \"the title\". Side effect: it writes on the connected WordPress site and also updates the linked page title and the places in the copy where the title stands, which the answer names in preview.places; the texts themselves are NOT rewritten. Needs `session_id`, `webinar_id` and `value`. Before you write: read wi_get_webinar (or wi_list_webinars), show the current title and the new one as two blocks line by line, and add the one sentence that the page title moves with it. When the host says only \"add 2026 to the title\" and more than one place carries a title, show the candidates with their current values first and write after the host picked one. For the WordPress page title alone use wi_change_webinar_text with target page_heading.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "value": {
            "description": "The new webinar name, as the host wants to read it in the list. Do not shorten it.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it. Never invent an id.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "wi_change_webinar_title"
    },
    {
      "description": "Changes where the video of a webinar comes from: the live room (100ms, an embedded YouTube or Vimeo clip, or an MP4), the teaser on the registration page, or the video on the thank-you page. Side effect: it writes on the connected WordPress site. Participants see the new source the next time their room or page loads; no text and no date changes. Needs `session_id` and `webinar_id` from wi_list_webinars. Use `provider` for a live webinar (100ms or embed), `video_source` for the embed code or a YouTube or Vimeo link, `room_video_url` for an MP4 in the evergreen room, and `registration_video_url` or `thankyou_video_url` for those pages. `settings` is the long tail of video and room fields by their real name, only passed keys change. Switching a room away from a CONNECTED 100ms account needs `video_switch_confirm`, because the site never silently drops a live connection. For the connected account itself use wi_connect_streaming, for the state wi_get_streaming_status.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "confirm": {
            "description": "Only after the site answered code admin_editing: the host agreed to overwrite unsaved changes in wp-admin.",
            "type": "boolean"
          },
          "provider": {
            "description": "Live webinar: 100ms uses the connected 100ms account, embed uses an embedded YouTube or Vimeo clip.",
            "enum": [
              "100ms",
              "embed"
            ],
            "type": "string"
          },
          "registration_video_url": {
            "description": "The teaser clip on the registration page (MP4 or YouTube link).",
            "type": "string"
          },
          "room_video_url": {
            "description": "Evergreen room: the MP4 the room plays.",
            "type": "string"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "settings": {
            "additionalProperties": {},
            "description": "Further video and room fields by their real name, only passed keys change, e.g. lp_cta_type, webinar_source_toggle, auto_video_length, webinar_youtube_url.",
            "propertyNames": {
              "type": "string"
            },
            "type": "object"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "thankyou_video_url": {
            "description": "The clip on the thank-you page (MP4).",
            "type": "string"
          },
          "video_source": {
            "description": "The embedded clip: a full iframe embed code, or a YouTube or Vimeo link. Works on the free licence too.",
            "type": "string"
          },
          "video_switch_confirm": {
            "description": "Only after the site answered code video_100ms_switch_needs_confirm: the host agreed to move the room off an active 100ms connection.",
            "type": "boolean"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it. Never invent an id.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "wi_change_webinar_video"
    },
    {
      "description": "Publishes a webinar or takes it offline again: `status` publish or draft. Side effect: on publish the registration page and the room are public and can be found, on draft participants see nothing and registrations stop; it writes on the connected WordPress site. Needs `session_id`, `webinar_id` from wi_list_webinars and `status`. `confirm` must be true, and only after the host has clearly agreed. Nothing else on the campaign changes and no page is rebuilt. Report the status the answer reads back (published or draft), never the one you asked for.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "confirm": {
            "description": "Must be true, set only after the host said yes to this status.",
            "type": "boolean"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "status": {
            "description": "publish makes the webinar public, draft takes it offline.",
            "enum": [
              "publish",
              "draft"
            ],
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it. Never invent an id.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "wi_change_webinar_visibility"
    },
    {
      "description": "Checks whether an external page can be shown inside the live room's CTA area (sidebar or overlay): whether it sends the headers that allow embedding, and what would go wrong if it does not. Read-only, it changes nothing. Use it BEFORE embedding a booking or checkout page into a CTA (that is wi_change_webinar_cta), because a page that refuses framing shows an empty box to the participants and no error to the host. Data comes only from the WordPress site this chat is connected to, the site the host approved, never from another site. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "url": {
            "description": "The full address of the page that should be shown inside the room.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "wi_check_embedding"
    },
    {
      "description": "Reads whether email from this site actually sends, whether it lands in the inbox rather than in spam, and how fast it goes out, with one honest verdict per point. A measurement sends real email, so it runs only when the stored result is missing or older than 24 hours; `run` asks for a fresh measurement, `force` overrides the storage. Read-only for the campaign, it changes nothing on it. Use it when the host says registrants did not get a mail, or before a launch. Not for the wording of a mail (that is wi_get_webinar_emails) and not to send a preview (that is wi_send_webinar_test_email). Data comes only from the WordPress site this chat is connected to, the site the host approved, never from another site. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "force": {
            "description": "true measures even when a recent result exists.",
            "type": "boolean"
          },
          "run": {
            "description": "true measures again now instead of reading the stored result. Sends real email.",
            "type": "boolean"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "required": [
          "webinar_id"
        ],
        "type": "object"
      },
      "name": "wi_check_mail_delivery"
    },
    {
      "description": "Traces what one participant experiences in this webinar, in order and WITHOUT sending anything: which confirmation and reminder emails go out at which moment (and which are switched off), when the room opens, when the offer appears, and when the replay shows. Read-only, it changes nothing. Use it when the host asks what the participants get and when, whether a reminder is missing, or why someone would see the offer too early. It is the cheapest way to check the timing before a launch. For how many people really came use wi_get_webinar_attendance_stats, for what the campaign earned wi_get_webinar_revenue_woocommerce. Data comes only from the WordPress site this chat is connected to, the site the host approved, never from another site. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "required": [
          "webinar_id"
        ],
        "type": "object"
      },
      "name": "wi_check_participant_journey"
    },
    {
      "description": "Checks whether a WordPress address runs WebinarIgnition and in which state: not installed, installed but too old, or ready. Side effect: none — it reads the address over HTTPS and changes nothing. Needs `url`.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "url": {
            "description": "The WordPress address (seite). With was=handoff: the host's WordPress address to point the handover link at.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "wi_check_wordpress"
    },
    {
      "description": "Connects the host's own live streaming account so the webinar room can stream: 100ms or Daily.co. Side effect: it writes on the connected WordPress site. The credentials are stored on the site and apply to EVERY webinar on it, not only the one in this chat, so say that in one sentence before you write. Needs `session_id` and `provider`. For 100ms pass `app_access_key` and `app_secret` from the 100ms developer settings, or a `management_token`; for Daily pass `api_key` and `domain`. `template_id` and `subdomain` belong to 100ms, `region` to Daily. With `webinar_id` the campaign is switched onto that provider at the same time, and `create_room` true creates its room right away. Never invent a key: only what the host gave you. Read the state first with wi_get_streaming_status.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "api_key": {
            "description": "Daily: the API key from the Daily dashboard.",
            "type": "string"
          },
          "app_access_key": {
            "description": "100ms: the App Access Key from the 100ms developer settings.",
            "type": "string"
          },
          "app_secret": {
            "description": "100ms: the App Secret. Stored encrypted on the site.",
            "type": "string"
          },
          "create_room": {
            "description": "true creates the webinar's room right away.",
            "type": "boolean"
          },
          "domain": {
            "description": "Daily: the domain of the account.",
            "type": "string"
          },
          "management_token": {
            "description": "100ms: a manually pasted management token, as a fallback when no app credentials are set.",
            "type": "string"
          },
          "provider": {
            "description": "Which provider to connect.",
            "enum": [
              "100ms",
              "daily"
            ],
            "type": "string"
          },
          "region": {
            "description": "Daily: the region the rooms should run in.",
            "type": "string"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "subdomain": {
            "description": "100ms: the subdomain, e.g. 2-conferencing.app.100ms.live.",
            "type": "string"
          },
          "template_id": {
            "description": "100ms: the template id from the 100ms dashboard.",
            "type": "string"
          },
          "use_global": {
            "description": "100ms: true uses the install-wide defaults, false keeps the campaign's own.",
            "type": "boolean"
          },
          "video": {
            "description": "Only with webinar_id: the video source to set, 100ms or embed.",
            "type": "string"
          },
          "webinar_id": {
            "description": "Switch this webinar onto the provider in the same call.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "wi_connect_streaming"
    },
    {
      "description": "Connects this chat to the host's own WordPress site. Side effect: it creates a connect link that the host must open and approve in their own browser — until they do, nothing is connected; no password is seen or stored. Needs `session_id` and `url`.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "url": {
            "description": "The WordPress address (seite). With was=handoff: the host's WordPress address to point the handover link at.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "wi_connect_wordpress_woocommerce_site"
    },
    {
      "description": "Continues an open webinar conversation by exactly one turn: pass what the host said as `text` and get the reply with the next tappable choices. Side effect: the answer is stored in the conversation state (facts, flow position) for `session_id`; nothing is written to a WordPress site and nothing is sent to anyone. Needs `session_id` and either `text` or a chip: when the host taps one of `flow.chips`, pass the open `flow.jetzt` as `flow_step`, the chip's `label` as `flow_choice` AND the same label as `text`; then one call is enough. When the host types freely, pass their words as `text`. The reply carries `flow` ({ jetzt, weiter, auch, chips }) with the next choices. A reply with ready=true means the texts can be written next with `wi_write_webinar_invitation_emails`.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "flow_choice": {
            "description": "which chip the host tapped, EXACTLY as its label read in the returned `flow.chips` (or the label of an own option). The server advances the flow from this.",
            "type": "string"
          },
          "flow_step": {
            "description": "the flow step that was open in the previous answer — copy it from the returned `flow.jetzt`. It tells the server where the conversation stands so it does not have to guess.",
            "type": "string"
          },
          "flow_strecke": {
            "description": "the route (Strecke) that runs — copy it from the returned `flow.strecke`. It tells the server which route to follow so it does not fall back to the default.",
            "type": "string"
          },
          "known_facts": {
            "additionalProperties": {},
            "description": "Everything you already know — send it every turn so nothing is lost on a restart. On the FIRST call (this call or this call) this is how a chat/assistant hands over what it already learned about the host (topic, audience, offer, style/tone) instead of making them repeat it.",
            "propertyNames": {
              "type": "string"
            },
            "type": "object"
          },
          "language": {
            "default": "de",
            "description": "The language the host writes in.",
            "type": "string"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "text": {
            "description": "What the host said (thema · weiter) or the question in the host's language (frage).",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "wi_continue_webinar"
    },
    {
      "description": "Copies the registration and thank-you pages of an existing webinar onto another one, which is how a host reuses a page design after a migration. Side effect: the target campaign's own pages are REPLACED by the copied ones and the copy cannot be undone; the source campaign is not touched. Needs `session_id`, `source_id`, `target_id` from wi_list_webinars and a clear yes (`confirm` true). Say which two webinars are involved and that the target's current pages are overwritten before you write. Read what stands on the target first with wi_get_webinar_page_blocks.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "confirm": {
            "description": "Must be true, set only after the host said that the target's pages may be replaced.",
            "type": "boolean"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "source_id": {
            "description": "The webinar whose pages are copied, from wi_list_webinars.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          },
          "target_id": {
            "description": "The webinar whose pages are replaced, from wi_list_webinars.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "required": [
          "source_id",
          "target_id"
        ],
        "type": "object"
      },
      "name": "wi_copy_webinar_pages"
    },
    {
      "description": "Starts a short explainer clip that SHOWS what the WooCommerce offer in the live room looks like: the offer card with product, price, voucher and buy button, in motion. It is a clip for the host, sales and marketing, NOT a video for the participants, and it touches nothing in the room. Side effect: it costs money on the host's video provider account, per produced second, the provider stores the clip and the description, and video is not covered by zero data retention; say both before the first clip. Needs `session_id`, `webinar_id` and a clear yes (`confirm` true). `prompt` describes the scene and `seconds` is 4 to 15, default 6. `submitted` true means the task really runs; check it with wi_get_explainer_video and never claim a finished clip before that answer says succeeded and carries a link.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "confirm": {
            "description": "Must be true, set only after the host agreed that the clip costs money and is stored by the provider.",
            "type": "boolean"
          },
          "prompt": {
            "description": "What the clip should show. Leave it out for the prefilled WooCommerce offer scene.",
            "type": "string"
          },
          "seconds": {
            "description": "Length in whole seconds, 4 to 15. Default 6. The provider charges per produced second.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it. Never invent an id.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "wi_create_explainer_video"
    },
    {
      "description": "Returns a link that carries everything collected so far into the WebinarIgnition dashboard, so the host can finish there. Side effect: it only creates a link with the session data in it; nothing is written to a WordPress site and nothing is sent to anyone. Needs `session_id` (or `content`), optional `url` and `rating`.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "content": {
            "description": "finished text to carry over, if the session alone does not hold it.",
            "type": "string"
          },
          "rating": {
            "description": "the host's rating (1-10), if any.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "url": {
            "description": "The WordPress address (seite). With this call: the host's WordPress address to point the handover link at.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "wi_create_handoff_link"
    },
    {
      "description": "Creates a short link to a webinar's registration page that counts its clicks and carries the tracking parameters of its channel, so the host can put a pretty address into an invitation instead of a long one. Side effect: it adds a link to the campaign's link list and counts clicks from now on; nothing else on the campaign changes and no page is rebuilt. Needs `session_id` and `webinar_id` from wi_list_webinars. `channel` says where the link will be shared; `word` is an optional short topic word; `count` creates several links at once that differ by running number; `fields` lets a link carry a form value for one person, for example a hidden who-referred-this-person field, which is how one link per person is made. For several sources in one go pass `sources` and get one link per source. Write the returned short address out in full inside the invitation text, never a long UTM address.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "channel": {
            "description": "Where the link is shared.",
            "enum": [
              "list",
              "personal",
              "facebook",
              "whatsapp",
              "instagram",
              "linkedin",
              "telegram",
              "youtube"
            ],
            "type": "string"
          },
          "count": {
            "description": "How many links at once, 1 to 10. Default 1.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          },
          "fields": {
            "additionalProperties": {
              "type": "string"
            },
            "description": "Form values the link should fill in for the participant, e.g. {\"wi_8\": \"Anna\"} for a hidden field. One link per person when each carries its own value.",
            "propertyNames": {
              "type": "string"
            },
            "type": "object"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "sources": {
            "description": "Several sources in one call, one link per entry.",
            "items": {
              "properties": {
                "channel": {
                  "description": "Where this link is shared.",
                  "type": "string"
                },
                "count": {
                  "description": "How many links for this source, 1 to 10.",
                  "maximum": 9007199254740991,
                  "minimum": -9007199254740991,
                  "type": "integer"
                },
                "fields": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "Form values this link should carry.",
                  "propertyNames": {
                    "type": "string"
                  },
                  "type": "object"
                },
                "label": {
                  "description": "A name for this source, e.g. the group it goes into.",
                  "type": "string"
                },
                "word": {
                  "description": "A short topic word for this link.",
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it. Never invent an id.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          },
          "word": {
            "description": "A short topic word of 3 to 10 letters for the address, invented to fit the topic.",
            "type": "string"
          }
        },
        "required": [
          "channel"
        ],
        "type": "object"
      },
      "name": "wi_create_webinar_link"
    },
    {
      "description": "Builds the webinar on the connected WordPress site: it creates the campaign with the facts the session has collected — title, date, room type — and returns the registration and room links. Side effect: it creates real content on the host's site: a campaign with its registration page and its room. It answers within seconds with status `laeuft` and a progress card while the pages are still being built: show that card, then call wi_get_build_status about every 10 seconds until fertig is true. Do not call this tool a second time for the same webinar and do not write any text yourself. Needs `session_id`. Optional `args` overrides single fields (e.g. a different `start_date`).",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "args": {
            "additionalProperties": {},
            "description": "the arguments for that ability, shaped by its input_schema.",
            "propertyNames": {
              "type": "string"
            },
            "type": "object"
          },
          "language": {
            "default": "de",
            "description": "The language the host writes in.",
            "type": "string"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "wi_create_webinar_registration_page"
    },
    {
      "description": "Deletes ALL registrants of one webinar in one step. Side effect: every entry is gone from the site and cannot be restored, the numbers fall to zero, and the people disappear from the funnel; already sent emails are not recalled. Needs `session_id`, `webinar_id` and a clear yes (`confirm` true). Read the count first with wi_list_webinar_leads_registrants and say the number out loud, because this cannot be undone. To remove one person use wi_delete_registrant. For a backup before deleting, read the list with wi_export_registrants_csv.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "confirm": {
            "description": "Must be true, set only after the host said that every registrant of this webinar may be deleted.",
            "type": "boolean"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it. Never invent an id.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "wi_delete_all_registrants"
    },
    {
      "description": "Deletes every question of one webinar, or only the open ones or only the answered ones. Side effect: they are gone from the site and cannot be brought back; no email is sent. Needs `session_id`, `webinar_id`, `scope` and a clear yes (`confirm` true). Read the questions first with wi_get_webinar_questions and tell the host how many would go. To remove a single question use wi_delete_webinar_question.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "confirm": {
            "description": "Must be true, set only after the host said that these questions may be deleted.",
            "type": "boolean"
          },
          "scope": {
            "description": "Which questions to delete: the open ones, the answered ones, or both.",
            "enum": [
              "active",
              "answered",
              "all"
            ],
            "type": "string"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it. Never invent an id.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "wi_delete_all_webinar_questions"
    },
    {
      "description": "Deletes ONE registrant from a webinar, which is what a deletion request from a participant needs. Side effect: the entry is gone from the site and cannot be brought back, and the person no longer appears in the numbers; their emails are not recalled. Needs `session_id`, `webinar_id`, `lead_id` from wi_list_webinar_leads_registrants and a clear yes (`confirm` true). Read the list first and name the person by name and address, so the wrong entry is not deleted. For clearing a whole list there is no tool here on purpose.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "confirm": {
            "description": "Must be true, set only after the host said that this one person may be deleted.",
            "type": "boolean"
          },
          "lead_id": {
            "description": "The registrant id from wi_list_webinar_leads_registrants.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it. Never invent an id.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "required": [
          "lead_id"
        ],
        "type": "object"
      },
      "name": "wi_delete_registrant"
    },
    {
      "description": "Deletes one saved outgoing webhook for good. Side effect: it stops firing at once and cannot be brought back; nothing else on the site changes. Needs `session_id`, `webhook_id` from wi_list_webhooks and a clear yes (`confirm` true). Read the list first and name the webhook by its name, not only by its number.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "confirm": {
            "description": "Must be true, set only after the host said that this webhook may be deleted.",
            "type": "boolean"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "webhook_id": {
            "description": "The webhook id from wi_list_webhooks.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "required": [
          "webhook_id"
        ],
        "type": "object"
      },
      "name": "wi_delete_webhook"
    },
    {
      "description": "Deletes the webinar that belongs to this session from the connected WordPress site — irreversible, it cannot be undone: the campaign and everything attached to it are gone. Needs `session_id`; optional `args` names the campaign when the session holds more than one.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "args": {
            "additionalProperties": {},
            "description": "the arguments for that ability, shaped by its input_schema.",
            "propertyNames": {
              "type": "string"
            },
            "type": "object"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "wi_delete_webinar"
    },
    {
      "description": "Deletes WebinarIgnition's own diagnostic log files. Side effect: the logs are gone and cannot be restored; the campaign, its registrants and its emails are NOT touched. Needs `session_id` and a clear yes (`confirm` true); with `webinar_id` only that campaign's logs go, without it the logs of ALL campaigns on the install are cleared, so pass the id whenever the host named a webinar and say which of the two it is. Use it when the host wants a clean slate for diagnostics, for example before reproducing a problem, then read the state with wi_get_connector_status.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "confirm": {
            "description": "Must be true, set only after the host said which logs may be cleared.",
            "type": "boolean"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "webinar_id": {
            "description": "Clear only this campaign's logs. Leave it out to clear the logs of every campaign on the site.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "wi_delete_webinar_logs"
    },
    {
      "description": "Deletes ONE participant question from the live console for good. Side effect: the question and its thread are removed from the site and cannot be brought back; no email is sent. Needs `session_id`, `webinar_id`, `question_id` from wi_get_webinar_questions, and a clear yes (`confirm` true). To remove a whole set use wi_delete_all_webinar_questions.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "confirm": {
            "description": "Must be true, set only after the host said that this question may be deleted.",
            "type": "boolean"
          },
          "question_id": {
            "description": "The question id from wi_get_webinar_questions.",
            "type": "string"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it. Never invent an id.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "wi_delete_webinar_question"
    },
    {
      "description": "Drops the stored connection between this chat and the host's WordPress site, and also forgets that this site was ever connected (so a later chat does not offer it again). Material loss / hard to reverse: the connection has to be approved again in the host's own browser before anything else can run. The site itself stays untouched. Needs `session_id`. It ends only the connection of THIS app; other apps the host connected stay signed in. Pass `all: true` only when the host said they want every app disconnected.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "all": {
            "description": "Only after the host said so: end every connection of this host, in all apps, not just this one.",
            "type": "boolean"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "wi_disconnect_wordpress"
    },
    {
      "description": "Reads the registrant list of one webinar as CSV text, the same export the dashboard downloads: one row per registrant with the columns the site writes. Read-only, it changes nothing. The text is capped at 20000 characters; when the list is longer the answer says so and how long it really is, and the full file is still the download in the dashboard. Personal data is returned only when the host's licence includes the registrant export. Use it when the host wants the list as a file for a spreadsheet or another tool. For reading and talking about the people use wi_list_webinar_leads_registrants, for one deletion wi_delete_registrant. Data comes only from the WordPress site this chat is connected to, the site the host approved, never from another site. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "required": [
          "webinar_id"
        ],
        "type": "object"
      },
      "name": "wi_export_registrants_csv"
    },
    {
      "description": "Reads one webinar as the full export payload the dashboard produces: every campaign field, the page content, the emails and the settings, as a JSON string. Read-only, it changes nothing. The payload is large (often tens of thousands of characters), so it is capped here at 20000 characters and the answer says when it was cut; the complete file is the Export button in the dashboard. Use it when the host wants to move a webinar to another site and will hand the payload to wi_import_webinar, or wants a backup of the settings. Do not use it to read a single value; wi_get_webinar and wi_get_webinar_settings are the cheaper way. Data comes only from the WordPress site this chat is connected to, the site the host approved, never from another site. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "required": [
          "webinar_id"
        ],
        "type": "object"
      },
      "name": "wi_export_webinar"
    },
    {
      "description": "Searches the media library of the connected site for images and returns id, address, title and alt text. Read-only, it changes nothing. Use it when the host wants a picture somewhere (a page block with wi_change_webinar_page_block, or the host photo with wi_change_host_photo) and names it by what it shows instead of by its address. Data comes only from the WordPress site this chat is connected to, the site the host approved, never from another site. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "limit": {
            "description": "How many images to return, 1-50. Default 10.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          },
          "search": {
            "description": "What the image shows or what it is called. Leave it out to list recent images.",
            "type": "string"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "wi_find_media"
    },
    {
      "description": "Finds the users of this WordPress install by a search word, or lists them: id, display name, email, and the avatar address. Read-only, it changes nothing. Use it when the host names the person whose face should stand on the page (that is wi_change_host_photo), instead of asking for a user id nobody knows. Data comes only from the WordPress site this chat is connected to, the site the host approved, never from another site. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "limit": {
            "description": "How many users to return, 1-100. Default 20.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "term": {
            "description": "Part of the name or the email address. Leave it out to list the users.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "wi_find_wordpress_user"
    },
    {
      "description": "Writes the campaign's real date, time and timezone into the thank-you page where a fixed text still shows an old one, which is the repair for a participant who registers and then reads the wrong day. Side effect: it writes on the connected WordPress site. Only the date text on that page changes; no other wording and no campaign field. Needs `session_id` and `webinar_id` from wi_list_webinars. wi_run_webinar_preflight reports whether such a deviation exists; this tool is the fix for it. For any other line on that page use wi_change_webinar_text.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "confirm": {
            "description": "Only after the site answered code admin_editing: the host agreed to overwrite unsaved changes in wp-admin.",
            "type": "boolean"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it. Never invent an id.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "wi_fix_thankyou_date"
    },
    {
      "description": "Reads how far the build of the webinar on the connected site has come: one card with a bar, a percentage, the step running right now and an honest remaining time, plus `fertig` and the registration and room links once it is done. Read-only, it changes nothing on the site. Call it about every 10 seconds and show the card to the host until `fertig` is true, so they see it moving. Never write or invent texts yourself and never build the webinar a second time: the build is already running. Needs `session_id`; optional `campaign_id` when the session built more than one webinar.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "campaign_id": {
            "description": "The webinar (campaign) id. Leave it out when this chat just built one.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "wi_get_build_status"
    },
    {
      "description": "Reads the technical state of the WebinarIgnition connector: version, protocol, which WordPress site is connected, whether the connection is healthy. Read-only, needs no input and changes nothing. `session_id` is optional: the connection belongs to the signed-in person, so any id of this conversation finds it, and with no id the answer still reports the connected site.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "wi_get_connector_status"
    },
    {
      "description": "Reads the state of the explainer clip of one webinar: queued, running, succeeded or failed, and once it is finished the link to the MP4. The link works for 24 hours; asking again returns a fresh one, so never store it as permanent. Read-only, it changes nothing. Use it after starting a clip (that is wi_create_explainer_video) and never claim a finished clip before this answer says succeeded and carries a link. Data comes only from the WordPress site this chat is connected to, the site the host approved, never from another site. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "task_id": {
            "description": "The task from the start call. Leave it out to read the webinar's last clip.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "required": [
          "webinar_id"
        ],
        "type": "object"
      },
      "name": "wi_get_explainer_video"
    },
    {
      "description": "Reads the sign-up form of one webinar as the participant sees it, top to bottom: every field with its slot, its visible label, its type (text, checkbox, textarea, dropdown or a hidden field), whether it is required, and whether it really renders on the participant page. Read-only, it changes nothing. Use it before changing a field (that is wi_change_registration_fields) and when the host asks which data the form collects or why a field is missing. Not for the provider names an autoresponder expects (that is wi_change_webinar_autoresponder). Data comes only from the WordPress site this chat is connected to, the site the host approved, never from another site. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it. Never invent an id.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "required": [
          "webinar_id"
        ],
        "type": "object"
      },
      "name": "wi_get_registration_fields"
    },
    {
      "description": "Reads the re-notification state of one webinar: whether the date was changed and the new invitation is still pending, how many registered people would receive it, and the banner text and button the page shows. Read-only, it changes nothing. Use it when the host asks whether everyone was told about the new date, or before re-sending the emails (that is wi_resend_webinar_mails). Data comes only from the WordPress site this chat is connected to, the site the host approved, never from another site. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "required": [
          "webinar_id"
        ],
        "type": "object"
      },
      "name": "wi_get_renotification_status"
    },
    {
      "description": "Reads what the current webinar session has collected so far — topic, audience, date, texts state. Read-only: no session is created, no site is touched, nothing is written. The session already holds what it was told, so nothing in it has to be asked again. Needs `session_id`.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "wi_get_session_facts"
    },
    {
      "description": "Returns the step-by-step setup plan for the host's WordPress site — what has to be installed, what to click, what the room needs — without touching the site. Read-only. Optional `session_id` adds what the session already knows.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "has_mcp": {
            "description": "true when the host already uses an MCP/connector — the connector normally sets this itself.",
            "type": "boolean"
          },
          "has_wi": {
            "description": "true when WebinarIgnition is already installed on the host's site.",
            "type": "boolean"
          },
          "has_wordpress": {
            "description": "true when the host already has a WordPress site. Reist als Fluss-Signal mit: ohne es gilt der Standardweg (der Host hat vermutlich WordPress). Mit false wird der Verbinden-Schritt in der Strecke uebersprungen.",
            "type": "boolean"
          },
          "language": {
            "default": "de",
            "description": "The language the host writes in.",
            "type": "string"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "wi_get_setup_plan"
    },
    {
      "description": "Reads whether live streaming is connected on the connected site: the install-wide 100ms connection (app credentials or a manual token, and whether a room can be created) and the Daily.co connection (key and domain), plus, for one webinar, its own room state and which video source its room uses. Read-only, it changes nothing. Use it when the host asks whether their live room is connected, why the room shows no video, or before connecting a provider (that is wi_connect_streaming). Both providers are read in one call, so the answer covers whichever the host uses. Data comes only from the WordPress site this chat is connected to, the site the host approved, never from another site. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, to read that campaign's own room state.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "wi_get_streaming_status"
    },
    {
      "description": "Creates a fresh, free webhook.site test address that needs no account, to be used as a webhook's mirror address, so the host can watch deliveries land without giving anyone access to their real CRM or email provider. Side effect: it creates a new address at that third-party test service and nothing on the connected site changes; each call creates a NEW address, an earlier one stays valid and is not reused. Use it when the host wants to see a webhook work before pointing it at a real system, then save that address with wi_save_webhook and send a test with wi_test_webhook.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "wi_get_webhook_test_address"
    },
    {
      "description": "Reads one webinar of the connected WordPress site by its id: title, type, status, host, start date, page address, and whether the emails are already written. Read-only, it changes nothing. Use it after wi_list_webinars when the host picked one campaign, before reading its numbers. Never invent an id: take it from wi_list_webinars. Data comes only from the WordPress site this chat is connected to, the site the host approved, never from another site. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          }
        },
        "required": [
          "id"
        ],
        "type": "object"
      },
      "name": "wi_get_webinar"
    },
    {
      "description": "Reads how many people registered, how many came live, how many stayed long enough to see the offer and how many watched the replay — with the show-up rate. Read-only, changes nothing. Use it when the host asks how many showed up, what the show-up rate is, whether the reminders worked, or who watched the replay. Do not use it for money or per-person data. Rates are only reported when at least 20 people were in the earlier step; below that the answer says so instead of inventing a percentage. Without a connected site the answer carries example numbers (sample: true) and the next step.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "utm": {
            "description": "Filter the numbers by one UTM value, e.g. a source such as facebook.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id. Leave it out when the session already built one.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "wi_get_webinar_attendance_stats"
    },
    {
      "description": "Reads which colours the registration, thank-you and room pages really use right now: background, text, button fill and button text, and where they come from (the host's own confirmed brand colours, or the site). With `kind` set to logo or favicon it samples the host's own brand image on the server and returns the colours it finds, which is how the host gets a palette without typing hex codes. Read-only, it changes nothing. Use it before changing a colour (that is wi_change_webinar_colors) and when the host asks why the pages do not look like their site. Data comes only from the WordPress site this chat is connected to, the site the host approved, never from another site. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "kind": {
            "description": "Sample the host's brand instead of reading the stored colours: logo reads the site logo, favicon the site icon.",
            "enum": [
              "logo",
              "favicon"
            ],
            "type": "string"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, to read the colours that really apply to it.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "wi_get_webinar_colors"
    },
    {
      "description": "Reads every email of one webinar with its wording and its timing: the confirmation email (signup) and the five reminder and follow-up emails, each with on or off, subject, heading, inbox preview line, body and its offset (how long before or after the start). Read-only, it changes nothing. Use it when the host asks what the registrants receive, when the reminder goes out, whether an email is switched off, or what stands in the confirmation mail. Do not use it to change a text (that is wi_change_webinar_email) and not for delivery problems (that is wi_check_mail_delivery). Data comes only from the WordPress site this chat is connected to, the site the host approved, never from another site. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it. Never invent an id.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "required": [
          "webinar_id"
        ],
        "type": "object"
      },
      "name": "wi_get_webinar_emails"
    },
    {
      "description": "Reads the whole funnel of a webinar — unique visitors, registrations, live attendance, watched enough, offer shown, offer clicked, replay, purchased — with the step-to-step conversion rates, a ranking across the host's webinars and one sentence saying which step to fix first. Read-only, changes nothing. Use it when the host asks how the funnel converts, where people drop off, how the webinar compares to the others, or what to improve. Do not use it for single registrants (that is wi_list_webinar_leads_registrants) or for money in currency (that is wi_get_webinar_revenue_woocommerce). Rates need at least 20 people in the earlier step, otherwise the answer says 'not enough data' instead of a percentage. Without a connected site the answer carries example numbers (sample: true) and the next step.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "all": {
            "description": "true compares all webinars and ranks them by volume.",
            "type": "boolean"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "utm": {
            "description": "Filter the whole funnel by one UTM value, e.g. a source such as facebook.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id. Leave it out to rank all webinars of the host.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "wi_get_webinar_funnel_conversion_stats"
    },
    {
      "description": "Reads one page of a webinar as a flat list of blocks, top to bottom: each block with its path, its type and its current text or image. Read-only, it changes nothing. Use it BEFORE changing a block (the change needs the path from here) and when the host asks what stands on their page. `surface` picks the page: registration (default) or thankyou. For the wording of a campaign text rather than a page block use wi_change_webinar_text with target journey_field. Data comes only from the WordPress site this chat is connected to, the site the host approved, never from another site. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "surface": {
            "description": "Which page to read. Default registration.",
            "enum": [
              "registration",
              "thankyou"
            ],
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "required": [
          "webinar_id"
        ],
        "type": "object"
      },
      "name": "wi_get_webinar_page_blocks"
    },
    {
      "description": "Reads the teleprompter state of one webinar: whether the prompter is switched on for this install, the script the host reads out loud (with its trigger lines such as [TRIGGER:CTA \"...\"]), and the language it is written in. Read-only, it changes nothing. Use it when the host asks whether a script exists, wants to read it, or wants a new one (that is wi_write_webinar_prompter). Data comes only from the WordPress site this chat is connected to, the site the host approved, never from another site. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "required": [
          "webinar_id"
        ],
        "type": "object"
      },
      "name": "wi_get_webinar_prompter"
    },
    {
      "description": "Reads the questions participants asked in the live console: the open (unanswered) and the answered ones, each with its question id, the text, the attendee's name, the time and the state. Read-only, it changes nothing. Use it when the host asks what people are asking, which questions are still open, or before answering one (that is wi_answer_webinar_question) or deleting one (that is wi_delete_webinar_question). The question id from this answer is the one to pass on, never an invented one. Data comes only from the WordPress site this chat is connected to, the site the host approved, never from another site. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "limit": {
            "description": "How many questions to return, 1-200. Default 50.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "required": [
          "webinar_id"
        ],
        "type": "object"
      },
      "name": "wi_get_webinar_questions"
    },
    {
      "description": "Reads one report of a webinar in a normalised shape: single values such as registrations, attendance and conversion, plus the table rows behind them. `type` picks the report: funnel (visitor to registration to attendance to offer), mail_waves (what the live bulk send and the evergreen daily send delivered) or leads (the registrant list with attendance and purchase). Leave `type` out and it lists which report types this installation knows and what backs each one. Read-only, it changes nothing. Use it when the host asks for a report as a whole, or wants the numbers in one table. For one question use the sharper tool: wi_get_webinar_funnel_conversion_stats for conversion, wi_get_webinar_attendance_stats for the show-up rate, wi_list_webinar_leads_registrants for the people. `range` narrows the period. Data comes only from the WordPress site this chat is connected to, the site the host approved, never from another site. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "range": {
            "description": "The period, as the site names it, e.g. 7d, 30d or all.",
            "type": "string"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "type": {
            "description": "Which report to read. Leave it out to list the report types of this installation.",
            "enum": [
              "funnel",
              "mail_waves",
              "leads"
            ],
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id. Leave it out to list the report types.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "wi_get_webinar_report"
    },
    {
      "description": "Reads what a webinar earned: paid orders and the amount per currency, open orders, refunds — and which offer tier (product) sold how often and for how much. Read-only, changes nothing. Money comes from the host's own shop (WooCommerce or any other shop connected to the site), never from estimates. Use it when the host asks what the webinar earned, which package sold, or where the upsell from tier to tier breaks. Do not use it for per-person spending (that is wi_list_webinar_leads_registrants) and never add two currencies together — each line stays separate. Without a connected site the answer carries example numbers (sample: true) and the next step.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id. Leave it out to read all webinars.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "wi_get_webinar_revenue_woocommerce"
    },
    {
      "description": "Reads what can be configured on one webinar and what stands there right now: every editable settings group with each field, its type and its current value, plus the core fields (type, status, date, time, timezone, room phase). `group` narrows it to the catalogue of one area (for example the mail slots, the CTA slots or the schedule blocks) instead of the stored values. Read-only, it changes nothing. Use it when the host asks what a setting is called, what it is set to, or which values are allowed before something is changed. Do not use it for the emails themselves (that is wi_get_webinar_emails) or the colours (that is wi_get_webinar_colors). Data comes only from the WordPress site this chat is connected to, the site the host approved, never from another site. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "group": {
            "description": "Optional: read the catalogue of ONE area instead of the stored values, e.g. mails, ctas, schedule, replay, qa, design.",
            "type": "string"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id. Needed for the stored values; leave it out when you only want the catalogue of a group.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "wi_get_webinar_settings"
    },
    {
      "description": "Turns an old HC campaign of this site into a new webinar: it copies the content, keeps the host's own providers and cleans the payload. Side effect: it creates a new campaign that cannot be un-created, and with mode replace_url it also redirects every old page address and deletes the old HC campaign afterwards, which cannot be undone. Needs `session_id`, `source_id` (the old campaign on this site), `mode` and a clear yes (`confirm` true); a campaign that is already a WebinarIgnition campaign is refused with source_not_hc. The modes: replace_url redirects the old addresses and removes the old campaign, keep_both leaves it in place, adopt_pages copies its pages onto the new one. Say which mode and what happens to the old campaign before you write. A second run on the same source creates nothing and answers already_imported; use `force` only when the host explicitly wants a second copy. For a WebinarIgnition export payload use wi_import_webinar instead, and read the result with wi_get_webinar.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "confirm": {
            "description": "Must be true, set only after the host said which mode and that the old campaign may be removed.",
            "type": "boolean"
          },
          "force": {
            "description": "true creates a second, deliberate copy although this source was already imported.",
            "type": "boolean"
          },
          "language": {
            "description": "The participant-facing language for the new campaign, e.g. de_DE. Defaults to the source.",
            "type": "string"
          },
          "mode": {
            "description": "replace_url redirects the old addresses and removes the old campaign, keep_both keeps it, adopt_pages copies its pages.",
            "enum": [
              "replace_url",
              "keep_both",
              "adopt_pages"
            ],
            "type": "string"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "source_id": {
            "description": "The old HC campaign id on this site.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          },
          "title": {
            "description": "A title for the new campaign. Leave it out to take the source title.",
            "type": "string"
          },
          "type": {
            "description": "Override the format. Leave it out to keep the source's.",
            "enum": [
              "live",
              "evergreen"
            ],
            "type": "string"
          }
        },
        "required": [
          "source_id",
          "mode"
        ],
        "type": "object"
      },
      "name": "wi_import_legacy_webinar"
    },
    {
      "description": "Imports registrants into a webinar from a CSV text, one row per person. Side effect: every imported person is added to the site, and each import can send a sign-up email to the imported addresses, so the people may receive mail from the host; nothing else on the campaign changes. Needs `session_id`, `webinar_id`, the `csv` text and a clear yes (`confirm` true). The text is capped at 20000 characters per call, so a long list is imported in parts. Use it when the host pasted a list or moved from another tool. For reading the current registrants use wi_list_webinar_leads_registrants.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "confirm": {
            "description": "Must be true, set only after the host said that these people may be imported and may receive a sign-up email.",
            "type": "boolean"
          },
          "csv": {
            "description": "The CSV text, one row per person, with a header row the site can read. At most 20000 characters per call.",
            "type": "string"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it. Never invent an id.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "wi_import_registrants_csv"
    },
    {
      "description": "Creates a NEW webinar from a full export payload, which is how a host moves a webinar to another site or restores one. Side effect: it always creates a new campaign and never touches an existing one; the new webinar starts with the state the payload carries. Needs `session_id` and the `payload` JSON string from wi_export_webinar or from the Export button in the dashboard; `title` gives the new campaign a name. The payload is large, so only use this when the host hands it over on purpose. Read the payload with wi_export_webinar first. For a legacy HC campaign there is wi_import_legacy_webinar.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "payload": {
            "description": "The export payload as a JSON string. At most 200000 characters.",
            "type": "string"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "title": {
            "description": "The title of the new campaign. Leave it out to take the one in the payload.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "wi_import_webinar"
    },
    {
      "description": "Lists the abilities the connected WordPress site offers, with their arguments and whether they are read-only, write or destructive. Read-only: it reads a list from the site and changes nothing. Needs `session_id`.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "wi_list_site_abilities"
    },
    {
      "description": "Lists the outgoing webhooks of this WordPress install: id, name, trigger, delivery and mirror address, method and format, whether it is active, and how many mapping or condition rules it carries. These webhooks fire for EVERY webinar on the install, not only the one open in the chat. Read-only, it changes nothing. Use it when the host asks which integrations are wired, or before changing one (that is wi_save_webhook) or testing one (that is wi_test_webhook). Data comes only from the WordPress site this chat is connected to, the site the host approved, never from another site. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "wi_list_webhooks"
    },
    {
      "description": "Reads the registrant list of one webinar: name, email, signup time, attended, watched replay, purchased, UTM source, and what each registrant spent. Read-only, it changes nothing. Data comes only from the WordPress site this chat is connected to, the site the host approved, never from another site. Personal data is returned only when the host's licence includes the registrant export (export_leads). Without that licence the site answers with the code license_required and no personal data, plus a plain explanation of which plan includes the feature. Use it when the host asks who registered, how many leads came in, whom to follow up, or what a single lead bought. Do not use it for aggregate numbers (that is wi_get_webinar_funnel_conversion_stats), for deleting data or for exporting a file. With `all_webinars: true` it reads the registrants of every webinar in one answer, in the order of the webinar list, with `took_ms` and `complete`; that is the way to ask for all of them, not one call per webinar. Without a connected site the answer carries example numbers marked sample: true, from a static demo file that contains no real person.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "all_webinars": {
            "description": "Read every webinar of the site in one answer instead of one webinar. Ignored when webinar_id is given.",
            "type": "boolean"
          },
          "limit": {
            "description": "How many registrants to return per webinar, 1-200. Default 50. The site caps at 200 per call and has no offset, so a longer list is only reachable in parts.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id. Leave it out when the session already built one.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "wi_list_webinar_leads_registrants"
    },
    {
      "description": "Lists the short tracking links of one webinar: the code, the full short address, the channel it belongs to, the UTM parameters it carries and how often it was clicked. Read-only, it changes nothing. Use it when the host asks which links exist, which one to put into an invitation, or how many clicks a channel brought. Do not use it to create a link (that is wi_create_webinar_link). Data comes only from the WordPress site this chat is connected to, the site the host approved, never from another site. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "required": [
          "webinar_id"
        ],
        "type": "object"
      },
      "name": "wi_list_webinar_links"
    },
    {
      "description": "Reads what WooCommerce on the connected site really offers: products with id, name, price and the store currency, either by a search word (name or SKU) or by product ids. It also answers whether a voucher code already exists in the shop. Read-only, it changes nothing. Use it to NAME a product id before putting an offer into the room (that is wi_change_webinar_offer), instead of asking the host to look the number up in their shop. When WooCommerce does not run on the site the answer says so, and the host sells through a link instead. Data comes only from the WordPress site this chat is connected to, the site the host approved, never from another site. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "coupon_codes": {
            "description": "Voucher codes to check: does each already exist in this shop?",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "ids": {
            "description": "Read exactly these product ids.",
            "items": {
              "maximum": 9007199254740991,
              "minimum": -9007199254740991,
              "type": "integer"
            },
            "type": "array"
          },
          "limit": {
            "description": "How many products to return for a search, 1-50. Default 10.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          },
          "search": {
            "description": "Search products by name or SKU.",
            "type": "string"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "wi_list_webinar_products"
    },
    {
      "description": "Lists the webinar campaigns of the connected WordPress site: id, title, type (live or automated, evergreen), status, the real start (date, time, timezone, duration), whether it repeats, and the page address. Read-only, it changes nothing. Data comes only from the site this chat is connected to, the site the host approved. Use it when the host asks which webinars exist, what runs next, or which campaign a number belongs to. Do not use it for registrants or money (that is wi_list_webinar_leads_registrants and wi_get_webinar_revenue_woocommerce). Data comes only from the WordPress site this chat is connected to, the site the host approved, never from another site. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "limit": {
            "description": "How many webinars to return, 1-200. Default 50, newest first.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          },
          "offset": {
            "description": "Skip this many of the newest webinars, to walk a long list in pages.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          },
          "search": {
            "description": "Narrow the list: an exact campaign id, or part of the title the host sees.",
            "type": "string"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "wi_list_webinars"
    },
    {
      "description": "Records how good the last teleprompter output was, from 1 to 10, so the prompter's own learning loop improves the next script. Side effect: it writes one rating into the learning store of the site; the script itself is not changed. Needs `session_id`, `webinar_id` and `rating`; `note` says what was good or bad in the host's words. Use it right after reading a script with wi_get_webinar_prompter, and write a new one with wi_write_webinar_prompter once the rating is in.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "note": {
            "description": "What was good or bad, in the host's own words.",
            "type": "string"
          },
          "rating": {
            "description": "How good the output was, 1 (unusable) to 10 (perfect).",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it. Never invent an id.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "required": [
          "rating"
        ],
        "type": "object"
      },
      "name": "wi_rate_webinar_prompter"
    },
    {
      "description": "Reads what a webhook's mirror or test address really received, straight from that service: for each delivery the time, the HTTP method and the exact payload that was sent. Read-only, it changes nothing. Use it after a test delivery (that is wi_test_webhook) when the host wants to see the payload itself, or when a receiving system says it got nothing. It never touches the receiving system of the host. Data comes only from the WordPress site this chat is connected to, the site the host approved, never from another site. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "webhook_id": {
            "description": "The webhook id, as wi_list_webhooks returned it.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "required": [
          "webhook_id"
        ],
        "type": "object"
      },
      "name": "wi_read_webhook_deliveries"
    },
    {
      "description": "Repairs the registration pages of a webinar: it decodes content that was saved double-encoded, and replaces the placeholder webinar id that pages copied from another campaign still carry, so the page shows THIS webinar's form and date. Side effect: it writes on the connected WordPress site. Participants see a working page again where one was broken; nothing else on the campaign changes. Needs `session_id` and `webinar_id` from wi_list_webinars. Use it when the host says a page shows a wrong date, an empty form or raw characters. This is the repair for a broken page, not the way to change a text (that is wi_change_webinar_text).",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it. Never invent an id.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "wi_repair_webinar_pages"
    },
    {
      "description": "Queues the confirmation email and the reminder emails of a webinar again for everyone who is already registered, which is what the host wants after a date or time changed. Side effect: it sends REAL email to all of those registrants from the host's site. Needs `session_id`, `webinar_id` and a clear yes (`confirm` true). Check with wi_get_renotification_status how many people would receive it and where the date really stands before you write, and say that number out loud.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "confirm": {
            "description": "Must be true, set only after the host said that all registrants may be mailed again.",
            "type": "boolean"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it. Never invent an id.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "wi_resend_webinar_mails"
    },
    {
      "description": "Resets the funnel analytics of one webinar, for example after test registrations polluted the numbers. `scope` window reopens only the current show window, lifetime wipes all daily and touch statistics. Side effect: the numbers are gone from the site and cannot be restored; registrants, emails and the campaign itself are NOT touched. Needs `session_id`, `webinar_id`, `scope` and a clear yes (`confirm` true). Say which of the two scopes it is and what is lost before you write, and read the numbers with wi_get_webinar_funnel_conversion_stats before and after.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "confirm": {
            "description": "Must be true, set only after the host said that these numbers may be reset.",
            "type": "boolean"
          },
          "scope": {
            "description": "window reopens the current show window, lifetime wipes all statistics of this webinar.",
            "enum": [
              "window",
              "lifetime"
            ],
            "type": "string"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it. Never invent an id.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "wi_reset_webinar_funnel"
    },
    {
      "description": "Rewrites the campaign's own texts around facts that already changed, and only the parts the host picked. WITHOUT `confirm` true nothing is written: the answer is the preview of which parts would be rewritten, one line each, so the host can pick. With `confirm` true the chosen parts are rewritten by the same copy writer the build uses, the untouched parts stay exactly as they were, and the answer names what really changed. Side effect: it writes on the connected WordPress site. Needs `session_id`, `webinar_id` and `targets`. Facts move FIRST: a date with wi_change_webinar_schedule, the name with wi_change_webinar_title, a single wording with wi_change_webinar_text. This tool never moves a date or a title, it only rewrites copy around facts that already stand. For ONE wording use wi_change_webinar_text, which is exact and costs nothing.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "confirm": {
            "description": "true actually rewrites the chosen parts. Leave it out to get the preview first and let the host pick.",
            "type": "boolean"
          },
          "primary_goal": {
            "description": "What should be different for the participants afterwards, if that changed.",
            "type": "string"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "target_audience": {
            "description": "Who the webinar is for, if that changed.",
            "type": "string"
          },
          "targets": {
            "description": "Which parts to rewrite: registration page copy, thank-you page, the emails, the title, the room info text, or all of them.",
            "items": {
              "enum": [
                "registration",
                "thankyou",
                "mails",
                "title",
                "room",
                "all"
              ],
              "type": "string"
            },
            "type": "array"
          },
          "topic": {
            "description": "The topic, if it changed and the new copy should know it.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it. Never invent an id.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "required": [
          "targets"
        ],
        "type": "object"
      },
      "name": "wi_rewrite_webinar_texts"
    },
    {
      "description": "Runs the full readiness check of one webinar and answers point by point what is ready and what would break in front of the participants: pages, dates (including a thank-you page that shows a different date than the campaign), emails and their timing, video source, the offer in the room, tracking and the form. Side effect: it stores the result and its history on the site, so the dashboard shows the same check; nothing else on the campaign changes. Use it when the host asks whether everything is ready, or before a launch. `force` runs it again although a recent result exists. For the numbers of a past webinar use wi_get_webinar_funnel_conversion_stats and wi_get_webinar_attendance_stats, this is about readiness. Data comes only from the WordPress site this chat is connected to, the site the host approved, never from another site. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "force": {
            "description": "true runs the check even when a recent result exists.",
            "type": "boolean"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "required": [
          "webinar_id"
        ],
        "type": "object"
      },
      "name": "wi_run_webinar_preflight"
    },
    {
      "description": "Creates a new outgoing webhook or changes one by id: what it fires on, where it delivers, how, and which field mapping and conditions it carries. Side effect: it writes on the connected WordPress site. A webhook fires for EVERY webinar on this site, not only the one in this chat, so say that in one sentence before you save. Needs `session_id`; `webhook_id` 0 or left out creates a new one, an id changes that one. `trigger` is registered, attended or purchased and is needed on create; `url` is the receiving system's own address and is never invented. `conditions` is how a lead is narrowed or a field renamed: [{field, operator, value?, field_name?, field_value?}], where operator map renames a field and equal or not_equal and the others apply a tag only for matching leads. Use only field names the site offers. `mirror_url` is a test copy that anyone with the link can read and that switches itself off after a few hours, so never offer it as the real destination. `active` true needs an active plan, exactly like the form. Read what exists with wi_list_webhooks, remove one with wi_delete_webhook, prove it with wi_test_webhook.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "active": {
            "description": "true turns it on so it really fires. Default is saved but silent.",
            "type": "boolean"
          },
          "conditions": {
            "description": "Field mapping and conditions: [{field, operator, value?, field_name?, field_value?}].",
            "items": {
              "additionalProperties": {},
              "propertyNames": {
                "type": "string"
              },
              "type": "object"
            },
            "type": "array"
          },
          "mirror_url": {
            "description": "An optional test copy address. Anyone with that link can read what is sent, and it turns itself off after a few hours. An empty string removes it.",
            "type": "string"
          },
          "name": {
            "description": "The label in the webhook list. Auto-named from the trigger when left out on create.",
            "type": "string"
          },
          "request_format": {
            "description": "The body format. Default JSON.",
            "enum": [
              "JSON",
              "FORM"
            ],
            "type": "string"
          },
          "request_method": {
            "description": "How it delivers. Default POST.",
            "enum": [
              "POST",
              "GET"
            ],
            "type": "string"
          },
          "secret": {
            "description": "An optional signing secret the receiving system gave the host. Never guessed.",
            "type": "string"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "trigger": {
            "description": "What makes it fire. Needed on create.",
            "enum": [
              "registered",
              "attended",
              "purchased"
            ],
            "type": "string"
          },
          "url": {
            "description": "The receiving system's own delivery address. Needed on create, never invented.",
            "type": "string"
          },
          "webhook_id": {
            "description": "0 or left out creates a new webhook, an id changes that one.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "wi_save_webhook"
    },
    {
      "description": "Sends the replay and offer follow-up to the registrants who watched long enough to see the offer and have not bought yet, up to 200 people. Side effect: it sends REAL email to those registrants from the host's site; nothing else changes. Needs `session_id`, `webinar_id` and a clear yes (`confirm` true). Read the numbers first with wi_get_webinar_funnel_conversion_stats and name the segment size before you write, because the people who receive it cannot be un-mailed. For one email to one address use wi_send_webinar_test_email.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "confirm": {
            "description": "Must be true, set only after the host said that this segment may be mailed.",
            "type": "boolean"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it. Never invent an id.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "wi_send_webinar_followup"
    },
    {
      "description": "Sends one of the saved emails of a webinar to an address the host names, so they see the real mail in their own inbox with the real sender, subject, images and footer. Side effect: it sends a real email from the host's site to that address and changes nothing on the campaign. Needs `session_id` and `webinar_id`; `which` picks the email (confirmation or reminder 1 to 5) and `email` the recipient, which defaults to the signed-in host. Use it before a launch and after a text change; to check whether mails arrive at all use wi_check_mail_delivery.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "email": {
            "description": "The recipient address. Leave it out and the mail goes to the signed-in host.",
            "type": "string"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it. Never invent an id.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          },
          "which": {
            "description": "Which email to send. Default confirmation.",
            "enum": [
              "confirmation",
              "reminder_1",
              "reminder_2",
              "reminder_3",
              "reminder_4",
              "reminder_5"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "wi_send_webinar_test_email"
    },
    {
      "description": "Starts a new webinar in WebinarIgnition and returns the first question with tappable options — no sign-in, no setup. Side effect: it creates a new webinar session on the connector and returns a `session_id`; nothing is written to a WordPress site, nothing is published and no email is sent. `situation` takes the host's own words, `known_facts` what is already known (topic, audience, offer, tone); with either, the conversation opens at that point instead of an empty menu. The reply carries a `session_id` for `wi_continue_webinar`.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "focus": {
            "description": "what it should be about.",
            "enum": [
              "thema",
              "texte",
              "technik",
              "fragen",
              "alles"
            ],
            "type": "string"
          },
          "has_wi": {
            "description": "true when WebinarIgnition is already installed on the host's site.",
            "type": "boolean"
          },
          "has_wordpress": {
            "description": "true when the host already has a WordPress site. Reist als Fluss-Signal mit: ohne es gilt der Standardweg (der Host hat vermutlich WordPress). Mit false wird der Verbinden-Schritt in der Strecke uebersprungen.",
            "type": "boolean"
          },
          "known_facts": {
            "additionalProperties": {},
            "description": "Everything you already know — send it every turn so nothing is lost on a restart. On the FIRST call (this call or this call) this is how a chat/assistant hands over what it already learned about the host (topic, audience, offer, style/tone) instead of making them repeat it.",
            "propertyNames": {
              "type": "string"
            },
            "type": "object"
          },
          "language": {
            "default": "de",
            "description": "The language the host writes in.",
            "type": "string"
          },
          "situation": {
            "description": "Only with this call or this call: what the host just said, in their own words. On this call this also starts a real conversation (seeded with known_facts) instead of only showing the menu — use it when the host already wrote something about their webinar.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "wi_start_webinar"
    },
    {
      "description": "Sends one real delivery of a saved webhook right now, with realistic demo lead data run through its actual field mapping and conditions, so the host sees it land at the receiving address. Side effect: a real HTTP request goes to the receiving system with demo data, so tell the host that a test entry may appear there; nothing on the campaign changes. Needs `session_id` and `webhook_id` from wi_list_webhooks. Afterwards wi_read_webhook_deliveries shows what a test or mirror address actually received.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "webhook_id": {
            "description": "The webhook id from wi_list_webhooks.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "required": [
          "webhook_id"
        ],
        "type": "object"
      },
      "name": "wi_test_webhook"
    },
    {
      "description": "Posts one synthetic lead to the connected email provider and reports the HTTP status and the time it took, so the host knows the list really answers. Side effect: one test entry appears in that provider's list, so say that before you run it; nothing on the campaign changes. Needs `session_id` and `webinar_id`. Use it right after wi_change_webinar_autoresponder and after any change to the form address.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it. Never invent an id.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "wi_test_webinar_autoresponder"
    },
    {
      "description": "Writes the finished webinar texts for a session that is ready: title, invitation email, reminders and the registration copy. Side effect: it starts a text-generation job on the connector (about a minute) and stores the result in the session; nothing is published to a WordPress site and no email is sent to anyone. Needs `session_id`. A second call with the returned `job_id` reads the job's state until the texts are there. Optional: `invite_type` for one of the eight built-in channels, `type=\"custom\"` with `custom_channel` for any other channel, `direction` for an angle or `skip_direction` for none.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "custom_channel": {
            "description": "Only with this call and type=\"custom\": the exact name of the channel or format the invitation is for when it is not one of the eight built-in platforms — e.g. Xing, WeChat, Line, KakaoTalk, Viber, Threads, Mastodon, a guest article, or the host's own format. The text is then written for exactly this channel, not for a built-in platform.",
            "type": "string"
          },
          "direction": {
            "description": "Optional with this call: the angle/framing of the invitation (natural language), e.g. 'Zeitersparnis und Skalierung ohne neue Mitarbeiter' for an agency. If missing, the invitation is written at once without a special angle.",
            "type": "string"
          },
          "invite_type": {
            "description": "Only with this call, when the invitation is for a specific platform: list = email list, personal = personal message, facebook = Facebook post, whatsapp = WhatsApp status, instagram = Instagram post, linkedin = LinkedIn post, telegram = Telegram channel, youtube = YouTube post.",
            "enum": [
              "list",
              "personal",
              "facebook",
              "whatsapp",
              "instagram",
              "linkedin",
              "telegram",
              "youtube"
            ],
            "type": "string"
          },
          "job_id": {
            "description": "the job number from an earlier call, to check whether the texts are ready. Without job_id a new job is started; only one text job runs at a time.",
            "type": "string"
          },
          "language": {
            "default": "de",
            "description": "The language the host writes in.",
            "type": "string"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "skip_direction": {
            "description": "true when the host wants NO special angle — then it generates without an angle.",
            "type": "boolean"
          },
          "type": {
            "description": "invites (default), starter, or custom. custom = the invitation is for a channel that is NOT one of the eight built-in platforms — pass the channel name in custom_channel. A channel outside the eight built-ins is written as custom, not as one of the eight.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "wi_write_webinar_invitation_emails"
    },
    {
      "description": "Writes the script the host reads out loud in the teleprompter: either the text the host dictated (`script`), or a fresh ten-minute talk written from what the conversation and the campaign already know (no `script`). Side effect: it writes on the connected WordPress site. It replaces the stored script, and the site reads it back as the confirmation. Needs `session_id` and `webinar_id`. Marker lines such as [TRIGGER:CTA \"...\"] become live beats if the host wants them. Read the current script with wi_get_webinar_prompter first when the host only wants a change. Driving the prompter while the webinar runs happens in the console, not here.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "force": {
            "description": "true writes a new script although one exists.",
            "type": "boolean"
          },
          "lang": {
            "description": "The language to write in, when no script is given. Defaults to the campaign language.",
            "type": "string"
          },
          "script": {
            "description": "The host's own text for the prompter. Leave it out to have a script written for this webinar.",
            "type": "string"
          },
          "session_id": {
            "description": "From an earlier turn (weiter · texte · stand).",
            "type": "string"
          },
          "site": {
            "description": "Which connected site is meant when this chat has more than one: the address exactly as wi_get_connector_status lists it under sites. Leave it out while only one site is connected.",
            "type": "string"
          },
          "webinar_id": {
            "description": "The webinar (campaign) id, as wi_list_webinars returned it. Never invent an id.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "wi_write_webinar_prompter"
    }
  ]
}

What the leaf hashes

{"body":"97ea27337077b3e6f896f5dfbfac1cc42b693b55bfc85efb05b35dacd904e9b7","id":563153,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793137613614852,"prev":null,"subject":"af9bf627-917f-4f90-8d9a-545b359f2ead","subject_kind":"endpoint"}

Proof

Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (273461 rows).

  1. 0xd971c4491843cd473f0ac880bcb33002a95cbb10417301900d6e8f5e500c2c2f
  2. 0xa612c57db10e42764169c5b579ba0ac298776109b3b9aeba5edca34eafaa92c4
  3. 0xbd6c3e7e5b225b6da64dc82b86d26fd507cffcdec26d580ce7f90c49bf4621ab
  4. 0xa9e75028c191cb427afcfdb54c12cdab91b3c2c3ab6ac7f1d9e7d04d5ee94284
  5. 0x8082c4b6103e4b6bbb60a9e969504e159f0b0776890a71efe6ca87292252a10f
  6. 0xd7c46458a48f5980f6953c811a25d0790de0020e9067c961a0403dd8f6c2f7f7
  7. 0xb1d301648c637be154430366c653c308e95772e9b8f271b867d9eac3b3072422
  8. 0xf82a5e0631d472d15a4dd54766af07ac41ec5ba36dd63da2600794b3c0a2d3f7
  9. 0xa71fdd2a8143e4b8fab8a564179b0beea8c73ff9fdfcb1551996392db202e22c
  10. 0xd47af22d1878eee6975af947e6e45935f573b005c0fe9efe5590def172016768
  11. 0x7f6de085812928d3d7f3b15191238d47e17ef53dc519c83f30704118bb423398
  12. 0x29ce226640d83db3bc63fef23427a7af561200d30ffde9b1b7a61b814b844a39
  13. 0x13692b463800846f580925c8ea49b43f92b7df3f9e8d32b8a18802640cca3780
  14. 0xd59f3e577867f5105dd7f75598f16da8286185e426dfcdafb84e733fde2b2492
  15. 0x24e3e2bb8ee1e8d20756de35f0e0c4ec8eb1f193bd2cf3f077ee1f92f211c34d
  16. 0x8745bd887f5ce9f7a49558fd2b04cdcd97a05ea9f8a23f62d0e80cb13d328b0f
  17. 0xdf1105afdc109de3c09a98fc8a3864159ad964e6f49b635c105a27a1e1f14310
  18. 0x2bf8151e5f157dd183b9de6fa00469551932a7a6e3f33a694895000ac9061197
  19. 0x9fc354c0ea3efc3f1b6548bb77ea902a50f2c9647647ea61592efce2bd795699
Day root
0xdd77e5e99da32c3f154180d63e3c3e6fe11e896a2c6896412ef6b5c4bcf7e795
Chained
0x23bb4dfd09f55c15ac3962f53578e02c6114d5bfd9bb451cf8794fb6e2817ef4
Published
On Arc Testnet, block 69414147: 0xb2ebd83aafeb765a0ce66e76aefb133ed06606c98038fd56191e2bcd1dcb77b4

How to check it · This row as JSON