addrbookFor publishers
← The evidence ledger

Evidence row 3950952

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint af9bf627-917f-4f90-8d9a-545b359f2ead
Recorded
Previous row
#2491927
Body SHA-256
92ac426ad1a76aa2eed9bef3387ddd38b87eaaff6e8e4f5eb07a95b8ed614f06
Leaf
0x4dd937a24cd3b47c1409b781c2371358dbc0eb0f3e50f3cdfa96ed93f7bb559a

What was observed

{
  "count": 90,
  "tools": [
    {
      "description": "Answers a question about WebinarIgnition itself: what it can do, its limits, integrations, and whether it fits the host's case. The answer comes only from the connector's checked knowledge base. Take it when a host asks about the product, for example \"Does this work with my shop?\" It needs the question in the host's language, German by default. Nothing is created and no site is touched. When the base holds no matching entry, the answer says so and points to https://webinarignition.com/. Words hosts use: product question, limits, integrations, does it fit",
      "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 your answer to exactly one participant question by email and marks the question as answered in the live console. Take it when a question deserves an answer after the webinar. A host says: \"Answer the question about the course, she asked before we ended.\" It needs the session, the webinar, the question and the answer, and the question is taken from the list the site returns, never from memory. The answer goes out as the host wrote it, so read it back when they spoke it out loud. It sends a real email from your site to that participant and writes the answer into the console; nothing else changes. A subject line is optional. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: answer a question, reply by email, mark as answered, participant asked",
      "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": "Changes one group of the advanced settings of a campaign: protected access, the WordPress side, extra hosts and support addresses, which page the registration, thank-you, live, replay or closed view uses, the field names an email provider expects, or the wording of the privacy checkbox. Take it when access or a page address should change: \"Only people from my list should get in.\" It needs the session, the webinar, the group, the fields and a clear yes from you, because it writes on your site and a member entry also creates a WordPress user with access. Read the current state first and say what changes. Only the group you name changes, and an unknown key refuses that whole group. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: protect webinar, access only for my list, change page, extra host, privacy checkbox",
      "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. Take it when the face on the page is wrong or missing. A host says: \"There is no picture of me, use the one from the media library.\" It needs the session and the webinar, plus one of three things: an image from your media library, a WordPress user whose avatar should be used, or a clear instruction to remove the photo. It writes on your site and participants see the new face on their next visit. The site reads the stored photo back, so report only what the answer names. Never invent an image address. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: my photo, host picture, add a face, remove the picture",
      "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 your own wording, for example the hint above the required fields or a standard line of the thank-you text. Take it when a fixed line does not fit your audience. A host says: \"The hint above the fields sounds stiff, write it in my words.\" It needs the session, the webinar, the name of the line and the new value. An empty value deletes your wording and the campaign language shows again. Your wording is stored on the campaign and beats the translation, so it survives a language switch or a rebuild. An unknown name is refused with the list of valid ones. The labels of the form fields are a different thing and are changed with wi_change_registration_fields. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: standard line, my own words, hint above the fields, thank-you text",
      "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 registration page: self-running slides from the benefit to the host to the sign-up, either instead of the video or below it. Take it when a page has no video or should show both. A host says: \"I have no clip, show the slides instead.\" It needs the session and the webinar, and the mode, animation or both. Both needs a video on the campaign and is refused without one. It writes on your site, participants see the animation on their next visit, and your stored video stays stored, so switching back to the video restores it exactly. A campaign that renders on several pages needs the page named, or a clear yes for all of them. A page you edited by hand is left alone unless you say so. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: slides instead of video, no clip, animation on the page, both",
      "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 sign-up form, the things a participant fills in before getting in. Take it when the form asks too much or the wrong thing. A host says: \"I only need name and email, drop the phone number.\" It needs the session, the webinar and the fields as they stand on the site now, so read the form first. A field can be given a title, marked required, given choices, or removed. The kind of field is fixed by its place in the form: text, checkbox, textarea, hidden or dropdown. A full order list removes every field not named in it, so use it only on purpose. It writes on your site, participants see the new form on their next visit and existing registrants keep what they entered. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: form fields, drop a field, ask for the phone number, sign-up form",
      "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": "Sets the four brand colours of the whole website: background, text, the button fill and the button text. Take it when the pages do not match your brand. A host says: \"The buttons are still green, my brand is blue.\" It needs the session and the four values as hex codes like #516028. This is a change of the whole site, not of one webinar, and the webinar pages take their colours from there. It writes on your site, and the emails follow the site colours too. One setting changes only the email templates instead. Say in one sentence which of the two applies before you write, because the whole site is the bigger change. The site reads the values back, and only then is the colour really changed. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: brand colours, button colour, match my logo, colours of the page",
      "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_site_colors"
    },
    {
      "description": "Changes one setting that holds for the whole site: 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. Take it when every mail from your site should carry something else. A host says: \"My mails go out with the wrong sender name.\" It needs the session, the field and the value. This applies 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 writing. It writes on your site. Only this fixed list is open; anything else is refused. For the colours of the emails see wi_change_site_colors. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: sender name, sender address, mail footer, unsubscribe link",
      "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 your webinar to your own email list at Mailchimp, GetResponse or a similar provider, so every new registrant is posted there as well. Take it when sign-ups should land in your list from now on: \"Put the registrations into my Mailchimp list.\" It needs the session, the webinar and the form address your provider gave you, plus the field names that provider expects for email, first name, last name and phone when it uses its own. Only what your provider's documentation says belongs here, nothing guessed. Existing registrants are not sent again. Test the connection afterwards with wi_test_webinar_autoresponder, and for the fields the participant fills in there is a separate tool. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: connect Mailchimp, email list, autoresponder, GetResponse, sign-ups to my list",
      "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": "Changes one call to action in the live room: the offer or booking box, its tab name, its text, its button and whether it is shown. For an evergreen webinar it also sets the moment the box appears. Take it when the box should say something else. A host says: \"The button text is wrong, and it should show after twelve minutes.\" It needs the session and the webinar. Leave the slot out to add a new box at the end, or name a slot to change exactly that one and leave the others untouched. It writes on your site and participants see it in the room; nothing else on the campaign changes. Removing a slot deletes the whole box and cannot be undone, so it needs a clear yes. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: change the button, add an offer box, tab name, show the offer",
      "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 or reminder one to five, and either its subject, its heading, its inbox preview line, its body, whether it is switched on, or when it goes out. Take it when a single mail reads wrong. A host says: \"The subject of the first reminder still says the old date.\" It needs the session, the webinar, which email, which field and the new value. The value replaces the whole field, so read the current text first and copy the part you want to keep. It writes on your site and every registrant receives the new version from the next send on. No other email and no page changes. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: fix a mail, change the subject, edit the reminder, mail text",
      "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 your offer into the live room, or updates the one already there: the product, more products as tiers, the special offer with its code and how long it holds. Take it when the room should show what you sell. A host says: \"Put my course into the room with a code for the first hour.\" It needs the session and the webinar, a product from your own shop or the checkout address of a shop on another domain, and the way you sell: own shop, another WebinarIgnition site, or an outside provider like Digistore, Freemius or Stripe. It writes on your site and a voucher code is created in your own shop, so say that before you write. The answer says whether the offer really stands in the room; false means it does not. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: put the offer in, product in the room, voucher code, offer in the room",
      "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. Take it when a single box on the page is wrong and the rest should stay. A host says: \"The second box still says last year, change just that one.\" It needs the session, the webinar, the place of the block as the page lists it, and the new text or the new image. It writes on your site, participants see it on their next visit, and nothing else on the page moves. A block with its own formatting never loses it silently: when the spot is not clear, the site refuses and writes nothing. The answer carries the previous block, so the same call puts it back. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: one box on the page, edit a block, swap the image, page 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"
          },
          "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. Take it when the room should be quiet or open for questions. A host says: \"I do not want questions this time, hide the box.\" It needs the session, the webinar and the status. It writes on your site, every participant sees the change on the next load, and questions already asked stay stored. Nothing else on the campaign changes. To read and answer the questions, see wi_get_webinar_questions and wi_answer_webinar_question. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: questions on or off, hide the question box, ask questions, Q and A",
      "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 four plus one. Take it when too many or too few reminders go out. A host says: \"Two reminders are enough, one day before and one hour before.\" It needs the session and the webinar, the number of active reminders from zero to five, and the preset. It writes on your 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. For the text of one email use wi_change_webinar_email. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: too many reminders, switch reminders off, fewer emails, reminder timing",
      "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. Take it when the room should switch without publishing anything. A host says: \"Open the room, we are starting now.\" It needs the session, the webinar and the phase. A clear yes from the host is needed before it runs, because a room that jumps to live is visible to everyone. It writes on your site, every participant sees the new phase at once, and the campaign is neither published nor taken offline. A replay without a recording is refused with a plain reason. The answer tells you the phase that really stands, which can differ from the one you asked for. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: open the room, go live, start the replay, close the room",
      "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 without rebuilding it. For an evergreen webinar it changes the recurring times instead. Take it when the date moved. A host says: \"We start two hours later, please move the whole thing.\" It needs the session and the webinar. For a live webinar you pass the date as YYYY-MM-DD, a clock time like 15:30, a timezone like Europe/Berlin and the length in minutes. For an evergreen one you pass the recurring blocks with time and weekdays. A bare hour with no am or pm is refused, never guessed. It writes on your site, the participant pages show the new date at once and the reminders move with it. The answer reads back the stored start and names every place the date shows. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: move the date, change the time, new start, reschedule a webinar, timezone",
      "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. Take it when a whole field should be replaced. A host says: \"My description is out of date, here is the new one.\" It needs the session, the webinar, the field and the new value. It writes on your site, and 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. To change one wording inside a longer text this is the wrong place; that one is wi_change_webinar_text. The host name cannot be emptied, the site refuses that with a plain reason. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: change the description, new headline, sales copy, host name",
      "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 on a webinar and leaves everything else alone. Take it when a single line is wrong and you do not want a rebuild. A host says: \"The date in the second paragraph is old, just fix that line.\" It needs the session, the webinar, the exact current wording as it stands on the site, and the new wording. It also needs to know where the line stands: a block on the page, text inside the page code, a field of the campaign copy, or the page heading. It writes on your site and participants see it at once. When the same wording stands more than once, the site refuses instead of guessing. The answer carries the old wording, so the same call puts it back. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: change one line, fix a wording, edit page text, replace a sentence",
      "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 a webinar, the title you see in the dashboard and in the list. Take it when the name itself is wrong or out of date. A host says: \"Put 2026 into the title.\" It needs the session, the webinar and the new name. It writes on your site, moves the page title with it and updates the places in the copy where the title stands. The other texts are not rewritten, and the answer names those places. Before writing, read the current title with wi_get_webinar or wi_list_webinars and show the old and the new one as two blocks, line by line. When several places carry a title, show the candidates first and write after the host picked one. The answer carries the previous name, so the same call puts it back. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: rename a webinar, change the title, new name, title says old date",
      "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. Take it when the clip is old, or when the room should stream from your own account. A host says: \"The teaser on the sign-up page is the wrong one.\" It needs the session and the webinar. For the live room you name the source, either a connected streaming account or an embedded YouTube or Vimeo clip, and an MP4 for the evergreen room. The teaser on the registration page and the video on the thank-you page are set on their own. It writes on your site and participants see the new source the next time the room or page loads. No text and no date change. Switching a room away from a connected account needs an extra yes, because the site never silently drops a live connection. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: wrong video, swap the clip, new teaser, connect the stream",
      "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. Take it when the registration page should go live or should stop taking people. A host says: \"Take the page down, the date is gone.\" It needs the session, the webinar and the status, publish or draft. A clear yes from the host is needed before it runs. 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 your site; nothing else on the campaign changes and no page is rebuilt. The answer tells you the status that really stands, published or draft, not the one you asked for. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: publish the webinar, take the page down, go live with sign-ups",
      "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": "It checks whether a page from somewhere else can be shown inside the live room, in the sidebar or as an overlay: whether that page allows being shown inside another page, and what would go wrong if it does not. Take it before a booking page or a checkout page goes into the room. \"I want my booking page in the sidebar.\" A page that refuses shows the participants an empty box, and the host sees no error at all. You give the full address of the page. It changes nothing. 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. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers. Words hosts use: embed page, empty box, sidebar page, booking page",
      "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": "It measures whether email from the site really sends, whether it lands in the inbox instead of the spam folder, and how fast it goes out, with one plain verdict for each point. Take it when a host says people did not get a mail. \"Half of them say nothing arrived.\" Careful: a fresh measurement sends real email from the host's site, which is why this one is not read only. It measures only when the stored result is missing or older than 24 hours, and runs again only when it is told to. Nothing on the webinar changes. Side effect: it sends real email from your site. Words hosts use: mail not arriving, spam folder, delivery test, inbox",
      "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": "It traces what one participant goes through in a webinar, in order and without sending anything: which confirmation and reminder mails go out at which moment and which are switched off, when the room opens, when the offer appears and when the replay shows. Take it when a host asks what participants get and when. \"Do they get a reminder the day before?\" It is the cheapest way to check the timing before a launch. It needs the webinar id and only reads. 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. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers. Words hosts use: participant journey, reminder timing, room opens, offer appears",
      "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": "Looks at a WordPress address and says whether WebinarIgnition runs there and in what state: not installed, installed but too old, or ready. Take it before connecting, for example when a host says \"Can my site even do this?\" It needs the address and reads it over a secure connection, and nothing on the site is changed. It is also the quick check after a host moved their site to a new address, to see whether the plugin came along. The answer names one of the three states, nothing more. Words hosts use: check WordPress, installed, too old, ready",
      "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 your own live streaming account so the room can stream: 100ms or Daily.co. Take it when the room should run on your account instead of an embedded clip. A host says: \"I have a 100ms account, hook it up.\" It needs the session and the provider, and the keys from that account's settings: the developer key pair or a management token for 100ms, the key and domain for Daily. The keys are stored on your site and apply to every webinar on it, not only the one in this chat, so say that in one sentence before writing. With a webinar named, the campaign is switched onto that provider at the same time. Never invent a key; only take what the host gave you. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: connect 100ms, connect Daily, stream from my account, keys",
      "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. Take it when the host wants to work on their real site, for example \"Everything is set up, now connect my page.\" It needs the session id and the address, and it creates a link that the host opens and approves in their own browser. Until they approve, nothing is connected, and no password is seen or stored. The approved connection is kept on this connector, encrypted, so a restart does not end it, and a new sign-in replaces the old one. Words hosts use: connect WordPress, my site, approve, sign in",
      "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": "What the host already said about the webinar: topic, audience, offer, tone, date. Send it on the FIRST call (this call or this call) so the conversation does not ask again what is already known. Later calls keep it in the session and do not need it again.",
            "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 one webinar onto another, which is how you reuse a page design after a move. Take it when two webinars should look the same: \"Take the pages from the spring webinar for the new one.\" It needs the session, the webinar the pages come from, the webinar they go to, and a clear yes from you. The pages already on the target are replaced by the copied ones and the copy cannot be undone, while the source stays as it is. Say which two webinars are involved and that the target's pages are overwritten before anything happens. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: copy pages, reuse my design, same page again, pages from other webinar, duplicate page",
      "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": "Returns a link that carries everything collected so far into the WebinarIgnition dashboard, so the host can finish there. Take it at the end of a conversation, for example \"Send me that, I want to keep working in my account.\" It needs the session id, or the finished text when the session alone does not hold it. You can add the host's address and a rating from 1 to 10. It only makes a link: nothing is written to a site and nothing is sent to anyone. Words hosts use: handover link, dashboard, keep working, my account",
      "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 registration page that counts its clicks and carries the tracking of its channel, so a pretty address goes into an invitation instead of a long one. Take it when you share a link and want to know what it brought. A host says: \"Give me a short link for the newsletter, one per person if possible.\" It needs the session and the webinar, and the channel where the link will be shared. You can add a short topic word, create several links at once that differ by number, or let one link carry a form value for one person, for example who sent them. For several sources at once you get one link per source. It adds the link to the campaign's list and counts clicks from now on; nothing else changes. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: short link, tracking link, link for the newsletter, click count",
      "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: the campaign with title, date and room type, the registration page and the room, and it returns both links. Take it when the facts are settled, for example \"Good, now put it on my site.\" It needs the session id, and since it creates real content on the host's site, the host should say a clear yes first. It answers within seconds while the pages are still being built, so show that progress card and read the build status until it is done. Do not start it a second time for the same webinar. Words hosts use: build the webinar, registration page, put it online, my site",
      "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 every registrant of one webinar in a single step. Take it only when a list should really go, for example after a test run on a fresh campaign: \"Nobody in there is real, clear the whole list.\" It needs the session, the webinar and a clear yes from you. Read the count first and say the number out loud, because this cannot be undone: the numbers fall to zero, the people disappear from the funnel, and emails already sent are not recalled. For one person there is a separate tool, and the list can be read out as a file before deleting. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: delete all registrants, empty the list, clear sign-ups, start over, test data",
      "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 the questions of one webinar in one go, either all of them, only the open ones, or only the answered ones. Take it when a session fills up with test questions, for example after a rehearsal: \"Clear the open questions before the real run starts.\" It needs the session, the webinar, which of the three sets you mean, and a clear yes from you. Look at the questions first and hear how many would go, because they are gone from the site and cannot be brought back. No email goes out. For a single question there is a separate tool. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: delete all questions, clear questions, open questions, answered questions, clean up question list",
      "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. Take it when someone asks to be removed: \"Please delete Mrs Weber, she asked for it.\" It needs the session, the webinar, the registrant id from your list and a clear yes from you. Look at the list first and name the person by name and address, so the wrong entry does not go. The entry is gone from the site and cannot be brought back, the person no longer appears in your numbers, and emails already sent are not recalled. Clearing a whole list is on purpose not possible here. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: delete registrant, remove participant, deletion request, GDPR, one person out",
      "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 webhook for good, so it stops firing at once. Take it when a connection is no longer wanted: \"The old CRM is gone, remove that webhook.\" It needs the session, the webhook id from your list, and a clear yes from you. Look at the list first and call the webhook by its name, not only by its number. Nothing else on the site changes, and there is no way back. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: delete webhook, remove webhook, stop webhook, old CRM, webhook gone",
      "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 of this session from the connected WordPress site. Take it only when the host clearly wants it gone, for example \"That test run has to disappear.\" It needs the session id, and the campaign when the session holds more than one. It cannot be undone: the campaign and everything attached to it are gone, so the host should say a clear yes first. It only deletes on the site of this sign-in; without an open connection it says how to connect and deletes nothing. Words hosts use: delete webinar, remove, test run, start over",
      "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 the diagnostic log files of WebinarIgnition. Take it when you want a clean slate before you reproduce a problem: \"Clear the logs, then I do it once more and we look.\" It needs the session and a clear yes from you. With a webinar id only that campaign's logs go, without one the logs of every campaign on the site are cleared, so say which of the two it is. The logs cannot be restored. The campaign, its registrants and its emails are not touched. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: clear logs, delete logs, log files, clean slate, error logs",
      "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 question a participant asked, together with its thread, so it disappears from the live console for good. Take it when someone posted something you do not want to keep, for example a link to a competing offer. A host would say: \"Please remove the question with the spam link before the next session.\" It needs the session, the webinar and the question id from your question list, plus a clear yes from you before anything is removed. The question cannot be brought back, and nobody is emailed about it. To clear a whole set at once there is a separate tool. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: delete question, remove question, spam question, clean up questions, participant question",
      "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": "Ends the stored connection between this chat and the host's WordPress site and forgets that the site was ever connected, so a later chat does not offer it again. Take it only when the host clearly wants that, for example \"Take my site out of this chat.\" It needs the session id. It cannot come back after a restart: the connection has to be approved again in the host's own browser before anything can run. The site itself stays untouched, and only this app is ended. With all set to true every app of the host is disconnected, and only after the host said so. Words hosts use: disconnect, remove my site, end connection, sign out",
      "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": "It reads the list of registrants of one webinar as CSV text, the same export the dashboard downloads: one row per person with the columns the site writes. Take it when a host wants the list as a file for a spreadsheet or another tool. \"I need the list in Excel.\" The text stops at 20000 characters and says so when it was cut, and the full file is the download in the dashboard. Personal data comes only when the licence includes the registrant export. 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. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers. Words hosts use: registrant list, CSV, export, spreadsheet",
      "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": "It reads one webinar as the full export that the dashboard produces: every field of the campaign, the page content, the mails and the settings, as one JSON text. Take it when a host wants to move a webinar to another site or keep a copy of the settings. \"I am building this on my second site.\" The text is long, often tens of thousands of characters, so it stops at 20000 and says when it was cut. The complete file is the Export button in the dashboard. 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. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers. Words hosts use: export webinar, backup, move to another site, JSON",
      "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": "It searches the media library of the site for images and returns id, address, title and the alt text. Take it when a host wants a picture somewhere and names it by what it shows instead of by its address. \"Use the picture of the whiteboard.\" You can search by what the image shows or what it is called, and leave the search out to see the recent images. It only reads and changes nothing. 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. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers. Words hosts use: media library, image search, alt text, picture",
      "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": "It finds the people who have an account on the site, by a search word or as a plain list: id, display name, email and the avatar address. Take it when a host names the person whose face should stand on the page, so nobody has to look up a user number. \"Put my colleague on the page.\" The search word is part of a name or an email address, and leaving it out lists the people. It only reads and changes nothing. 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. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers. Words hosts use: WordPress user, user id, avatar, account",
      "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 real date, time and timezone of your campaign into the thank-you page, where a fixed text still shows an old one. Take it when a participant registers and then reads the wrong day: \"Someone told me the page says last month.\" It needs the session and the webinar. Only the date line on that page changes, no other wording and no campaign field. The answer keeps the previous line, so the same call can put it back. A preflight check tells you whether such a deviation exists at all. For any other line on that page there is a separate tool. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: wrong date, thank-you page, old date on page, date fix, registration page date",
      "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: a card with a bar, a percentage, the step running now, an honest remaining time, and the two links once it is done. Take it right after the build starts, for example \"Is it there yet?\" It only reads and changes nothing on the site. It needs the session id, and the campaign id when the chat built more than one webinar. Show the card while it runs, and do not start the build again: it is already running. Words hosts use: build status, progress, is it there yet, links",
      "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": "Tells you the state of the connection: the connector version, the site this chat is signed in to, and whether that connection is open right now. It needs no input and changes nothing. Take it first when something does not answer, for example when a host says \"It says I am not connected, but I just approved it.\" If one sign-in carries several sites, it lists them all and says which one is meant now. It never returns site data. Words hosts use: connector status, connected, not connected, sign-in",
      "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": "It reads the sign-up form of one webinar the way a participant sees it, from the first field to the last. Each field comes with its label, its type (text, checkbox, textarea, dropdown or a hidden field), whether it is required, and whether it really shows up on the participant page. Take it when a host wonders what the form actually asks. \"Wait, does my form ask for the phone number?\" It needs the webinar id and only reads, so nothing on the site changes. 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. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers. Change a field with wi_change_registration_fields. Words hosts use: registration form, sign up fields, form fields, asked data",
      "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": "It reads whether the people who registered were told about a new date: 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 that the page shows. Take it when a host asks whether everyone knows about the moved date. \"Did all of them get the new date?\" It needs the webinar id. It only reads and changes nothing, and it says what is still waiting before any mail goes out. 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. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers. Words hosts use: new date, moved webinar, pending invitation, banner",
      "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": "This tool reads what the webinar conversation has collected so far: topic, audience, date and how far the texts are. Nothing is created and no site is touched. Take it when you want to pick a conversation up where it stopped, for example when a host says \"Where were we? I had already told you the topic.\" It needs the session id from an earlier turn, and with more than one connected site the site address too. It changes nothing. Words hosts use: session facts, topic, audience, where were we",
      "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 a step by step plan for setting up the host's WordPress site: what has to be installed, what to click, what the room needs. It only reads and touches nothing. Take it when a host wants to know what comes next, for example \"What do I have to do on my side before the first webinar?\" It needs no session, the language is enough. You can say whether the host already has WordPress, already uses WebinarIgnition and already works with a connector, then done steps drop out of the plan. Words hosts use: setup plan, what do I have to do, installed, first webinar",
      "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": "It reads whether live streaming is connected on the site: the 100ms connection with its app credentials or manual token and whether a room can be created, the Daily.co connection with key and domain, and for one webinar its own room state and the video source its room uses. Take it when a host asks whether their live room is connected or why the room shows no video. \"The room is open and I see nothing.\" Both providers are read in one answer. It needs the webinar id for the room state, otherwise it reads the whole install. It changes nothing. 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. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers. Words hosts use: live streaming, room connected, no video, stream key",
      "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": "It creates a free test address at webhook.site, an address that needs no account, so the host can watch deliveries arrive without handing anyone access to their real customer system or mail provider. Take it when a host wants to see a webhook work before it points at something real. \"Can I try this without touching my CRM?\" It creates a new address at that third party service and nothing on the connected site changes. Every call creates a new address, and an earlier one stays valid. Side effect: it creates a new test address at webhook.site. 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. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers. Words hosts use: webhook test, test address, try webhook, no account",
      "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 by its id: title, type, status, host, start date, page address, and whether the emails are already written. Take it after the list, when the host picked one, for example \"Tell me about the Tuesday one.\" It needs the session id and the id from wi_list_webinars, and that id is never invented. It reads only from the connected site and changes nothing. Without an open connection it says how to connect and returns no data. 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. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers. Words hosts use: one webinar, details, Tuesday one, campaign",
      "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 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. Take it when a host asks how the evening went, for example \"How many actually showed up?\" It needs the session id and reads only from the connected site. It changes nothing, and it does not read money or single persons. A rate appears only when at least 20 people were in the earlier step; below that the answer says so instead of making up a percentage. Without a connected site the answer carries example numbers (sample: true) and the next step. Words hosts use: show-up rate, attendance, participants, replay, how many",
      "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": "Shows the setup checklist of one webinar, the same list the dashboard shows: every step with its state, what is already done, what is still missing, and the readiness score from the last preflight check. Take it when a host asks what is left before the webinar can run, for example \"What do I still have to do?\" It needs the session and the webinar. It only reads. Steps the host ticked off by hand stay ticked off, and a missing step names the tool that can fix it. 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. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers. Words hosts use: checklist, what is left, setup steps, ready to start, what is missing",
      "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_checklist"
    },
    {
      "description": "It reads which colours the registration page, the thank-you page and the room really use right now: background, text, button colour and button text, and where each colour comes from, the host's own confirmed brand colours or the site. With kind set to logo or favicon it looks at the host's own brand image on the server and returns the colours it finds, so nobody has to type colour codes. Take it when a host says the pages do not look like the rest of the site. \"Why is this button purple?\" It needs the webinar id, or only the kind. It changes nothing. 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. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers. Words hosts use: page colours, brand colours, button colour, logo palette",
      "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 and the five reminder and follow-up emails, each with on or off, subject, heading, preview line, body, and how long before or after the start it goes out. Take it when a host asks what the registrants get, for example \"When does the reminder leave?\" It needs the session id and the webinar id from wi_list_webinars, and reads only from the connected site. It changes nothing and sends nothing. Without an open connection it says how to connect. 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. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers. Words hosts use: webinar emails, reminder, confirmation mail, when does it go out",
      "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: visitors, registrations, live attendance, watched enough, offer shown, offer clicked, replay, purchased, with the rate from step to step. It also ranks the host's webinars and names the one step to fix first. Take it when a host asks where people drop off, for example \"Where do I lose them?\" It needs the session id and reads only from the connected site, changing nothing. Rates need at least 20 people in the earlier step, otherwise the answer says not enough data. Without a connected site the answer carries example numbers (sample: true) and the next step. Words hosts use: funnel, conversion, drop off, where do I lose them, webinar numbers",
      "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": "It reads one page of a webinar as a flat list of blocks from top to bottom: each block with its path, its type and the text or image that stands there now. Take it before a block is changed, because the change needs the path from here, and when a host asks what stands on their page. \"What is on my registration page right now?\" You pick the page, registration or thank you. It only reads and changes nothing. 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. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers. Words hosts use: page blocks, registration page, thank you page, block path",
      "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": "It reads the teleprompter of one webinar: whether the prompter is switched on for this install, the script the host reads out loud together with its trigger lines, and the language the script is written in. Take it when a host wants to know whether a script exists, wants to read it again, or wants a new one written. \"Is there already a script I can read from?\" It needs the webinar id. It only reads and changes nothing. 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. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers. Words hosts use: teleprompter, script, prompter on, trigger lines",
      "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": "It reads the questions participants asked in the live console, the open ones and the answered ones, each with its id, the text, the name of the attendee, the time and the state. Take it when a host wants to know what people are asking or which questions are still waiting. \"Are there questions I did not answer yet?\" You give the webinar id and how many questions you want back. The ids come from this answer, so the next step can answer one or delete one without guessing. It changes nothing. 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. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers. Words hosts use: live questions, open questions, attendee questions, Q and A",
      "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": "It reads one report of a webinar as one piece: single values such as registrations, attendance and conversion, plus the rows behind them. You pick the report: funnel (visitor to registration to attendance to offer), mail_waves (what the live send and the evergreen daily send delivered) or leads (the people with attendance and purchase). Take it when a host wants the numbers in one table, or when the question is about the mail waves, which no other report shows. \"Send me a report of the last run.\" It only reads and changes nothing. 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. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers. Words hosts use: webinar report, funnel, leads report, mail waves, 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 sold how often and for how much. Money comes from the host's own shop, never from an estimate. Take it when a host asks about the money, for example \"Which package did they buy?\" It needs the session id and reads only from the connected site, changing nothing. Two currencies are never added together, each line stays on its own. For what a single person spent, the registrant list is the right place. Without a connected site the answer carries example numbers (sample: true) and the next step. Words hosts use: revenue, sales, which package, orders, refunds",
      "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": "It reads what can be set on one webinar and what stands there right now: each settings group with its fields, the type of each field and its current value, plus the core facts such as type, status, date, time, timezone and room phase. Take it when a host wants to know the name of a setting, its value, or which values are allowed before something gets changed. \"What is the setting called that controls my reminder?\" You give the webinar id, or a group name when you only want the list of options for one area such as mails, ctas, schedule, replay, qa or design. It only reads and changes nothing. 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. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers. Words hosts use: webinar settings, setting names, allowed values, mail slots",
      "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 on your site into a new webinar: the content is copied, your own providers stay, and the payload is cleaned. Take it when an old campaign should live on in the new form: \"The old webinar still has all my sign-ups, bring it over.\" It needs the session, the old campaign, one of three modes and a clear yes from you. One mode redirects the old addresses and removes the old campaign afterwards, which cannot be undone, one leaves it in place, one copies its pages. A campaign that is already a WebinarIgnition campaign is refused. Say which mode you mean and what happens to the old campaign before anything runs. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: old webinar, HC campaign, take over campaign, migrate webinar, convert old 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. Take it when you bring a list from another tool or when someone pasted names into the chat: \"Here is my list from the old system, put them in.\" It needs the session, the webinar, the CSV text and a clear yes from you. No email goes out unless the host asks for one: then set `send_signup_email` true, and only after they said those people may receive mail. The text is capped at 20000 characters per call, so a long list goes in parts. Nothing else on the campaign changes. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: import CSV, upload list, move my list, add registrants, pasted list",
      "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.",
            "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"
          },
          "send_signup_email": {
            "description": "Default false: the people are imported and receive no email. Set it to true only when the host asks that the imported people get the sign-up 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. 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 webinar moves to another site or comes back after a restore. Take it when you have an export in hand: \"I moved to a new site, here is the file from the old one.\" It needs the session and the payload from the export, either from the tool or from the Export button in the dashboard, and a name for the new campaign if you want one. It always creates a new campaign and never touches an existing one, and the new webinar starts with the state the payload carries. The payload is large, so this only belongs here when you hand it over on purpose. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: import webinar, export file, move to new site, restore webinar, backup restore",
      "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": "Shows what the connected WordPress site can do: each ability with its arguments, and whether it only reads, writes or deletes. Nothing is changed, it reads a list from the site. Take it when a host asks what the connection can actually do, for example \"What can you do on my site once it is connected?\" It needs the session id, and with more than one site the site address. Without an open connection it says how to connect and lists nothing. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers. Words hosts use: site abilities, what can it do, connected site, list",
      "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": "It lists the outgoing webhooks of the whole install: id, name, trigger, delivery address, mirror address, method, format, whether it is active, and how many rules it carries. These fire for every webinar on the install, not only for the one open in the chat. Take it when a host asks which connections are wired up. \"Where does my data actually go?\" It needs nothing but the site. It only reads and changes nothing. 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. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers. Words hosts use: webhook, outgoing, trigger, integrations",
      "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 the replay, purchased, where they came from, and what each one spent. Take it when a host asks who registered or whom to follow up, for example \"Who was there, and who bought?\" It needs the session id and reads only from the connected site, the one the host approved. It changes nothing. Personal data comes only when the host's licence includes the registrant export; without it the site answers license_required and says which plan brings the feature. With all_webinars set it reads every webinar in one answer. Without a connected site the answer carries example numbers (sample: true) and the next step. Words hosts use: registrants, leads, participants, who registered, signups",
      "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": "It lists the short tracking links of one webinar: the code, the full short address, the channel it belongs to, the tracking parameters it carries and how often it was clicked. Take it when a host asks which links exist or which one belongs in an invitation. \"Which link do I send to my list?\" It needs the webinar id. The click numbers show how many people came through each channel. It only reads and changes nothing. 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. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers. Words hosts use: short links, tracking link, clicks, invite link",
      "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": "It reads what the shop on the connected site really offers: products with id, name, price and the currency of the store, found by a search word (name or SKU) or by product ids. It also answers whether a voucher code already exists in the shop. Take it before an offer goes into the room, so the host does not have to hunt for the product number. \"I want the yearly course in the room, can you find it?\" When WooCommerce does not run on the site, the answer says so and the host sells through a link instead. It only reads and changes nothing. 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. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers. Words hosts use: shop products, product id, price, voucher code",
      "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 webinars of the connected WordPress site: id, title, live or automated, status, the real start with date, time, timezone and length, whether it repeats, and the page address. Take it when a host asks what exists or what runs next, for example \"Which webinars do I have right now?\" It needs the session id and reads only from the site the host approved. It changes nothing. You can narrow it by id or part of the title, and walk a long list in pages. Without an open connection it says how to connect and returns no data. Then read one of them with wi_get_webinar. 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. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers. Words hosts use: list webinars, which webinars, what runs next, my webinars",
      "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": "It reads what the test address of a webhook really received, straight from that service: for each delivery the time, the method and the exact content that was sent. Take it after a test delivery, when a host wants to see the content itself. \"Show me what actually arrived.\" You give the webhook id from the list. It never touches the receiving system of the host. It only reads and changes nothing. 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. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers. Words hosts use: webhook payload, delivery log, what arrived, 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"
          },
          "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 fixes content that was saved twice encoded and replaces a placeholder webinar id that pages copied from another campaign still carry, so a page shows this webinar's form and date. Take it when a page behaves strangely. A host says: \"The page shows a wrong date and the form is empty.\" It needs the session and the webinar. It writes on your site, participants see a working page again, and nothing else on the campaign changes. This is the repair for a broken page, not the way to change a text; for a wording use wi_change_webinar_text. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: broken page, wrong date on the page, empty form, raw characters",
      "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": "Sends the confirmation and the reminder emails again to everyone who is already registered. That is what you want when a date or a time moved: \"The webinar is now on Tuesday, send everyone the new confirmation.\" It needs the session, the webinar and a clear yes from you. Check first how many people would receive it and where the date really stands, and say that number out loud. These are real emails from your site to all of those registrants, so the step cannot be taken back. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: resend confirmation, date changed, send reminders again, new date, mail everyone again",
      "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 numbers of one webinar, for example after test registrations have polluted them. Take it when the figures no longer tell the truth: \"I registered ten times myself, wipe that out.\" It needs the session, the webinar, which of two scopes you mean and a clear yes from you. One scope reopens only the current show window, the other wipes all daily and touch statistics of this webinar. Say which one it is and what is lost before anything happens. Registrants, emails and the campaign itself are not touched, and the numbers cannot be restored. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: reset numbers, funnel stats, wrong numbers, test registrations, clear statistics",
      "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 you picked: the copy on the registration page and the emails. Take it when a date or a name moved and several lines still carry the old facts. A host says: \"The whole page still talks about March, make it fit the new date.\" It needs the session, the webinar and the parts to rewrite. Without a clear yes nothing is written; the answer is a preview of which parts would change, one line each, so the host can pick. With the yes the picked parts are rewritten and the rest stays exactly as it was. The thank-you page, the webinar name and the room info text are not written here; a single wording is better changed with wi_change_webinar_text. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: rewrite the page, texts out of date, fix all the dates, refresh the copy",
      "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: the registration page copy, the emails, or all of them. These are the only parts this tool can write.",
            "items": {
              "enum": [
                "registration",
                "mails",
                "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": "It 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), emails and their timing, the video source, the offer in the room, tracking and the form. The same check also reads the mail side: whether the site's mail cron runs, the spam score of the sending address, the send rate and what the server can carry, so a reminder does not fail silently. Take it when a host asks whether everything is ready. \"Can I start tomorrow?\" It is the webinar part of the setup checklist in the dashboard: the checklist collects every step for the webinar, this check is its readiness part, and the score lands in that panel. The result and its history are stored on the site. Nothing else on the webinar changes. Side effect: it stores the result and its history on the site, which is what the dashboard shows. 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. Without a connected site the answer says what is missing and how to connect: no numbers and no example numbers. Words hosts use: readiness check, before launch, preflight, mail cron, spam score, what breaks",
      "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 an outgoing webhook or changes one you already have: what it fires on, where it delivers, how, and which fields it maps or filters. Take it when another system should hear about registrations, attendance or purchases: \"Send every buyer to my CRM.\" It needs the session, and on a new one a trigger and the address your other system gave you. A webhook fires for every webinar on your site, not only this one, so that belongs in one sentence before anything is saved. A test copy address is readable by anyone with the link and switches itself off after a few hours, so it is never the real destination. Turning it on needs an active plan, exactly like the form. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: webhook, send to CRM, Zapier, connect my tool, registration trigger",
      "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 follow-up mail with the replay and the offer to the people who watched long enough to see the offer and have not bought yet. Take it a day or two after a webinar: \"Send the replay to everyone who stayed till the offer and did not buy.\" It needs the session, the webinar and a clear yes from you, and it reaches up to 200 people. Read the numbers first and say how many will receive it, because those people cannot be un-mailed. Nothing else changes on the campaign. For one email to one address there is a separate tool. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: follow-up email, send replay, nobody bought, hot leads, follow up after webinar",
      "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 you name, so you see the real mail in your own inbox, with the real sender, subject, images and footer. Take it before a launch and after any text change: \"Send me the reminder once more, I want to see it on my phone.\" It needs the session and the webinar, and you choose which email goes, the confirmation or one of the five reminders. The recipient is your own address unless you name another. This sends a real email from your site, and nothing on the campaign changes. If you only want to know whether mails arrive at all, there is a separate check. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: test email, send myself the email, check confirmation mail, preview email, reminder test",
      "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": "Opens a new webinar conversation and returns the first question with tappable options. No sign-in and no setup. Take it when a host wants to begin, for example \"I want to run a webinar about my coaching, where do we start?\" It creates a session on the connector and returns a session id. Nothing is written to a WordPress site, nothing is published and no email goes out. You can pass what the host just said and what you already know about topic, audience, offer and tone, then the conversation opens there instead of at an empty menu. Words hosts use: start a webinar, begin, first webinar, no setup",
      "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": "What the host already said about the webinar: topic, audience, offer, tone, date. Send it on the FIRST call (this call or this call) so the conversation does not ask again what is already known. Later calls keep it in the session and do not need it again.",
            "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 test delivery of a saved webhook right now, with realistic sample lead data run through its actual field mapping and conditions, so you see it land at the receiving address. Take it after you save a webhook or after the other side changed something: \"Let us see whether my CRM receives it.\" It needs the session and the webhook id from your list. A real request goes out with demo data, so say that a test entry may appear over there. Nothing on the campaign changes. Afterwards you can read what a test or copy address actually received. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: test webhook, test delivery, does my CRM get it, webhook check, sample lead",
      "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 test lead to your email provider and reports whether the list answered and how long it took. Take it right after you connect the list, or after the form address changed: \"Does the list still take my sign-ups?\" It needs the session and the webinar. Say before you run it that one test entry will appear in that provider's list, so nobody wonders where it came from. Nothing on the campaign changes. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: test Mailchimp, list connection, test autoresponder, is my list connected, sign-up test",
      "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 you read out loud in the teleprompter. You can hand over your own words, or let a fresh ten minute talk be written from what the conversation and the campaign already know. Take it when the script is missing or no longer fits: \"Write me a new script for Thursday, the offer changed.\" It needs the session and the webinar, and it replaces the script stored on your site, which answers with what it now holds. If you only want one passage changed, read the current script first. Marker lines such as [TRIGGER:CTA] become live beats if you want them. Running the prompter during the webinar happens in the console, not here. Side effect: it acts on your connected WordPress site; nothing else is touched. Words hosts use: teleprompter script, write script, webinar script, presenter notes, script for webinar",
      "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":"92ac426ad1a76aa2eed9bef3387ddd38b87eaaff6e8e4f5eb07a95b8ed614f06","id":3950952,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1794056661279684,"prev":2491927,"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 (195826 rows).

  1. 0x4dd92ac96e30969d1d92b430cdbab157c79c23e1362a1b7262a12f87a81d543f
  2. 0xe4a5444e2ad832eefb3fd1dd3036625d2cb4e8e3abf2909302f58596dccce19d
  3. 0x6c6c92a55b6a47baf5623017ec73ed172c44821946b3ab794b7aaebdb89ebe77
  4. 0xa5ecb8aad2d0fdba9a4dd9e86a1a4eeceb8574c0df789638ebe69e42da7c52fd
  5. 0x8528884bb9b52f385c7c32fd8d958b0a09206055e6e892ef87fce03c5a15f15a
  6. 0xef25afee30f2ad50eb20a23d6bded785e0f0bf7d880eed4a1bc9c37cbc9b551a
  7. 0x03374851f751b69709f91620de1acdd64f5f983e09b6cc586a2b31e2fe34e767
  8. 0x394c8230f76ead5c64426595b4165bc4c24a216f4abfa6373ab45ddaa58d0112
  9. 0x447e022b7115df9c9c2469203482eacde4979e278eb577a9843350181881854e
  10. 0x361282433e7142b570af90ab73502ee081b0b1734fb3eb611147ae0f4821c887
  11. 0x504f7090accef486a23e211d7d775f7c972c655a03bdb498beb95abb65fe946f
  12. 0x747896b2eadc2b959f9bc7c541a0f340ba3f7dee5ccc6e2282938abbb193d95e
  13. 0x9da5d20b5fb1961ee21cddbb09c2bcc37e0126a8a9f9bec5a9ba8207fa6b6afb
  14. 0xd65824e287abd80d02260ba918668ef1c4c1d016243891677bfc31ebb1eb16e7
  15. 0x1440bd4864ece4f3cb1a2fc48e88ddbd78cefd359ae16ceeb69a13e36b55021a
  16. 0xf0a56561418cd0342a328707933cc222d8fa725efff7ffd081e0226ee8c46c0b
  17. 0x54292a94f447f1fd33c01b5c99da465043f11022958626a2ea562c457fef697a
  18. 0xff23fa8a9de3f957315ef0dfe7e8d8f6b1a51dae05fef7615c59794e019ff05c
Day root
0x17da9e85e1b138541355d33543ff34e3503cd3a49d37728fb53643e2a0416a2d
Chained
0xed34bd4af17282643de8cb9591c84d0aa1b39e1e9ae9864941e543f5a15718cb
Published
On Arc Testnet, block 71280839: 0xc3f6784179e0ca32236ba89472473e882a81d03fcc5ce27ca58ded2e01e112aa

How to check it · This row as JSON