changedOutput schema / (root)
Previous value: -nullNew value: +{
+ "additionalProperties": false,
+ "properties": {
+ "blocking_rules": {
+ "description": "Refresh protection to save: `when_it_fires`, `rule` (ready for save_blocking_rule).",
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "rule": {
+ "additionalProperties": false,
+ "properties": {
+ "groups": {
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "conditions": {
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "interval_in_seconds": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "interval_in_seconds"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "conditions"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "mode": {
+ "enum": [
+ "block"
+ ],
+ "type": "string"
+ },
+ "target": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "target",
+ "mode",
+ "groups"
+ ],
+ "type": "object"
+ },
+ "when_it_fires": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "when_it_fires",
+ "rule"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "coverage": {
+ "description": "One row per event recommended for the goal, plus any other event that already has a source.",
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "event": {
+ "description": "Event, such as Lead.",
+ "type": "string"
+ },
+ "last_event": {
+ "additionalProperties": false,
+ "description": "Latest event received: `at` (date-time) and `is_sent` (boolean). null when none was received recently.",
+ "properties": {
+ "at": {
+ "format": "date-time",
+ "type": "string"
+ },
+ "is_sent": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "at",
+ "is_sent"
+ ],
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "source": {
+ "description": "What sends it today, such as a submit trigger, stripe, or the platform. null when nothing does.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "status": {
+ "description": "covered: something sends it today. proposed: a proposal below would send it. gap: recommended for the goal, but nothing can be proposed.",
+ "enum": [
+ "covered",
+ "proposed",
+ "gap"
+ ],
+ "type": "string"
+ },
+ "when_it_fires": {
+ "description": "When that source sends it.",
+ "type": [
+ "string",
+ "null"
+ ]
+ }
+ },
+ "required": [
+ "event",
+ "status",
+ "source",
+ "when_it_fires",
+ "last_event"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "goal": {
+ "description": "Goal the proposals are for: the one passed, or the one PixelFlow could tell from the site. null when unknown.",
+ "enum": [
+ "buy",
+ "book",
+ "lead",
+ "signup",
+ "donate",
+ null
+ ],
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "proposals": {
+ "description": "What to set up, best first.",
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "action": {
+ "description": "The action the agent performs for an approved proposal. create_trigger: create the trigger. get_connect_link: call it with the arguments in the connect field and show the link with the instructions. add_code: no trigger can track it; make the code change yourself or ask the user, as the message field says.",
+ "enum": [
+ "create_trigger",
+ "get_connect_link",
+ "add_code"
+ ],
+ "type": "string"
+ },
+ "arguments": {
+ "additionalProperties": false,
+ "description": "url type only: arguments for create_trigger (`type`, `event`, `url`, and `url_params_mapping` when the page URL carries customer data); add site_id and an idempotency_key. null for every other line.",
+ "properties": {
+ "event": {
+ "type": "string"
+ },
+ "type": {
+ "enum": [
+ "url"
+ ],
+ "type": "string"
+ },
+ "url": {
+ "type": "string"
+ },
+ "url_params_mapping": {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ }
+ },
+ "required": [
+ "type",
+ "event",
+ "url"
+ ],
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "conflict": {
+ "additionalProperties": false,
+ "description": "The event already has a source: `existing_source`, `when_it_fires`.",
+ "properties": {
+ "existing_source": {
+ "type": "string"
+ },
+ "when_it_fires": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "existing_source",
+ "when_it_fires"
+ ],
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "connect": {
+ "additionalProperties": false,
+ "description": "Arguments for get_connect_link. Set when action is get_connect_link, null otherwise.",
+ "properties": {
+ "integration": {
+ "description": "With target integration: the integration to connect, such as stripe.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "page_path": {
+ "description": "With target visual_tagger: the page where the user picks the element. null when no page is known; ask the user for it.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "target": {
+ "description": "integration: connect a third-party service. visual_tagger: the user picks the element on the website, because no code names it.",
+ "enum": [
+ "integration",
+ "visual_tagger"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "target",
+ "integration",
+ "page_path"
+ ],
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "docs": {
+ "description": "Help articles: `title` (string) and `url` (string, uri).",
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "title": {
+ "type": "string"
+ },
+ "url": {
+ "format": "uri",
+ "type": "string"
+ }
+ },
+ "required": [
+ "title",
+ "url"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "event": {
+ "description": "Event the trigger would send, such as Lead.",
+ "type": "string"
+ },
+ "evidence": {
+ "additionalProperties": false,
+ "description": "Why the event was proposed.",
+ "properties": {
+ "note": {
+ "description": "The evidence in one sentence, such as \"Form with an email field at /contact\".",
+ "type": "string"
+ },
+ "source": {
+ "description": "With type observation: that observation's source. null otherwise.",
+ "enum": [
+ "code",
+ "page",
+ "user",
+ null
+ ],
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "type": {
+ "description": "site_facts: what PixelFlow knows about the site, such as its platform or a connected integration. observation: an observation passed in this call. observed_path: a page visitors reached recently, such as /thank-you.",
+ "enum": [
+ "site_facts",
+ "observation",
+ "observed_path"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "note",
+ "source"
+ ],
+ "type": "object"
+ },
+ "fallback": {
+ "additionalProperties": false,
+ "description": "Next-best way to track the same event, a url trigger on a page the site is known to have: `type`, `when_it_fires`, `prefix_warning`, and `arguments` (same shape as above).",
+ "properties": {
+ "arguments": {
+ "additionalProperties": false,
+ "properties": {
+ "event": {
+ "type": "string"
+ },
+ "type": {
+ "enum": [
+ "url"
+ ],
+ "type": "string"
+ },
+ "url": {
+ "type": "string"
+ },
+ "url_params_mapping": {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ }
+ },
+ "required": [
+ "type",
+ "event",
+ "url"
+ ],
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "prefix_warning": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "type": {
+ "type": "string"
+ },
+ "when_it_fires": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "when_it_fires",
+ "prefix_warning",
+ "arguments"
+ ],
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "message": {
+ "description": "With action add_code: why no trigger can track the event and how to send it from the site's code instead, such as trackEvent from the Programmatic Tracking API for a form inside an iframe.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "prefix_warning": {
+ "description": "url type only: other pages of this site the url would also match, because a url trigger matches the path as a prefix, such as /thank-you also matching /thank-you-newsletter. Tell the user before creating it. null when no page shares the prefix.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "type": {
+ "description": "Type of the trigger to set up: url, click, submit, or an integration name, as in list_triggers. null on an add_code line, which has no trigger.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "when_it_fires": {
+ "description": "When the event is sent, in one sentence.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "event",
+ "type",
+ "action",
+ "when_it_fires",
+ "arguments",
+ "connect",
+ "message",
+ "evidence",
+ "prefix_warning",
+ "fallback",
+ "conflict",
+ "docs"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "question": {
+ "description": "When goal is null: a question to ask the user, then call again with goal.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "rules_to_follow": {
+ "description": "How to present and create the lines below; follow them. Empty when nothing applies.",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "rules_to_follow",
+ "goal",
+ "question",
+ "coverage",
+ "proposals",
+ "blocking_rules"
+ ],
+ "type": "object"
+}