Audit and set up Meta Pixel and the Conversions API from your AI agent.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Records approval of an unchanged conversion plan proposal plus one start request, identified by revision, digest and request_id, after the customer explicitly accepted that scope in chat. The start runs only after the matching installation has fresh verified callbacks. Requires confirmed: true and customer_confirmation with scope approve_and_start_after_checks. A repeated request_id is treated as a retry of the same request. Requires a paired server key and the approval and execution features. Sends nothing now, bypasses no checks, and does not resume a paused, revoked, changed or restaged installation.
The server marks this tool as destructive. Running it may delete or overwrite data on the server or in any account you connected with your headers.
Records approval of an unchanged conversion plan proposal plus one start request, identified by revision, digest and request_id, after the customer explicitly accepted that scope in chat. The start runs only after the matching installation has fresh verified callbacks. Requires confirmed: true and customer_confirmation with scope approve_and_start_after_checks. A repeated request_id is treated as a retry of the same request. Requires a paired server key and the approval and execution features. Sends nothing now, bypasses no checks, and does not resume a paused, revoked, changed or restaged installation.
| Argument | Type | Description |
|---|---|---|
| digest* | string | |
| revision* | integer | |
| confirmed* | boolean | |
| request_id* | string | |
| customer_confirmation* | object |
{
"type": "object",
"required": [
"revision",
"digest",
"request_id",
"confirmed",
"customer_confirmation"
],
"properties": {
"digest": {
"type": "string",
"pattern": "^[0-9a-f]{64}$"
},
"revision": {
"type": "integer",
"maximum": 2147483647,
"minimum": 1
},
"confirmed": {
"enum": [
true
],
"type": "boolean"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"customer_confirmation": {
"type": "object",
"required": [
"source",
"proposal_presented",
"business_outcomes_confirmed",
"scope"
],
"properties": {
"scope": {
"enum": [
"approve_and_start_after_checks"
],
"type": "string"
},
"source": {
"enum": [
"customer_chat"
],
"type": "string"
},
"proposal_presented": {
"enum": [
true
],
"type": "boolean"
},
"business_outcomes_confirmed": {
"enum": [
true
],
"type": "boolean"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}Records approval of an unchanged conversion plan proposal, identified by its revision and digest, after the customer explicitly accepted it in chat. Requires confirmed: true and customer_confirmation with scope approve_plan. The connected key can approve only its own project; Tyton records connected-agent provenance, not verified human identity. Stale or changed revisions are rejected. Approval only: does not activate tracking or authorize live Meta events. The customer can also approve in the signed-in report.
| Argument | Type | Description |
|---|---|---|
| digest* | string | |
| revision* | integer | |
| confirmed* | boolean | |
| customer_confirmation* | object |
{
"type": "object",
"required": [
"revision",
"digest",
"confirmed",
"customer_confirmation"
],
"properties": {
"digest": {
"type": "string",
"pattern": "^[0-9a-f]{64}$"
},
"revision": {
"type": "integer",
"maximum": 2147483647,
"minimum": 1
},
"confirmed": {
"enum": [
true
],
"type": "boolean"
},
"customer_confirmation": {
"type": "object",
"required": [
"source",
"proposal_presented",
"business_outcomes_confirmed",
"scope"
],
"properties": {
"scope": {
"enum": [
"approve_plan"
],
"type": "string"
},
"source": {
"enum": [
"customer_chat"
],
"type": "string"
},
"proposal_presented": {
"enum": [
true
],
"type": "boolean"
},
"business_outcomes_confirmed": {
"enum": [
true
],
"type": "boolean"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}Inspects one public page's HTML and saves a partial audit report, without signup. Takes the audit session fields and the page URL, plus optional sanitized HTML supplied by the agent, which is stored as unverified evidence. One session can hold several related components. Returns evidence, limitations and discovery actions, not a full tracking-health verdict.
| Argument | Type | Description |
|---|---|---|
| url* | string | the site to audit |
| html | string | Authorized, sanitized page HTML, including local previews. The entire JSON-RPC request is limited to 256 KiB after JSON escaping, so a larger page needs a focused capture. Page markup only, without private source or personal data. |
| fresh | boolean | bypass the short public-page cache when verifying a change |
| audit_id | string | audit run ID returned by Tyton; each audit run has its own ID |
| revision | integer | latest run revision; 0 for the first write of a new audit session, then the revision returned by the previous write |
| audit_key | string | private audit write capability returned by Tyton; a secret that authorizes changes to this audit only |
| request_id | string |
Starts a new free audit session for a URL. Returns a private capability (audit_id and audit_key), revision 0 and an initial request_id for the first evidence save, so a lost save response can be retried safely. Saves nothing. The capability covers only this audit record, not access to the website.
| Argument | Type | Description |
|---|---|---|
| url* | string |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
}
}Checks whether specific PageView or conversion event IDs from an activated live installation reached Tyton's dashboard storage in the last 24 hours. Takes the installation ID and up to 20 unique event and source pairs. Read-only: sends no events and grants no approval. Verification callbacks are not live events. Reports receipt of the requested events only, not business outcomes, all site traffic, target or generation attribution, or Meta delivery. Requires a connected site.
| Argument | Type | Description |
|---|---|---|
| events* | array | |
| installation_id* | string |
{
"type": "object",
"required": [
"installation_id",
"events"
],
"properties": {
"events": {
"type": "array",
"items": {
"type": "object",
"required": [
"event_id",
"source"
],
"properties": {
"source": {
"enum": [
"browser",
"server"
],
"type": "string"
},
"event_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_.:-]{1,128}$",
"description": "Opaque eventId from a fresh live SDK result or browser network request; an identifier, not personal data such as an email."
},
"conversion_id": {
"type": "string",
"pattern": "^[a-z][a-z0-9_-]{0,63}$",
"description": "Approved conversion ID; absent only for browser PageView."
}
},
"additionalProperties": false
},
"maxItems": 20,
"minItems": 1
},
"installation_id": {
"type": "string",
"format": "uuid"
}
},
"additionalProperties": false
}Connects a Tyton site to this connection using a single-use pairing code from the site's card on usetyton.com (valid for 15 minutes). Returns the site's server key and browser key, shown only once, with configuration examples for common MCP hosts.
| Argument | Type | Description |
|---|---|---|
| code* | string | the pairing code, e.g. 7K2M-QX4T (dashes optional) |
| client | string | which host is calling; used to label the new key |
{
"type": "object",
"required": [
"code"
],
"properties": {
"code": {
"type": "string",
"maxLength": 16,
"minLength": 6,
"description": "the pairing code, e.g. 7K2M-QX4T (dashes optional)"
},
"client": {
"enum": [
"cursor",
"claude_code",
"other"
],
"type": "string",
"description": "which host is calling; used to label the new key"
}
}
}Permanently deletes the Tyton project connected to this connection, including its keys, setup and stored event history. Requires confirmed: true and expected_url equal to the connected project's current URL; nothing is deleted if they differ. The account subscription and billing, the website itself and the Meta dataset and its data are unchanged. The Tyton snippet or SDK stays on the website until removed, and a browser Pixel already loaded there can keep sending to Meta until it is removed and the page reloads. A Meta request already in progress cannot be recalled. Requires a connected site.
| Argument | Type | Description |
|---|---|---|
| confirmed* | boolean | |
| expected_url* | string |
{
"type": "object",
"required": [
"confirmed",
"expected_url"
],
"properties": {
"confirmed": {
"enum": [
true
],
"type": "boolean"
},
"expected_url": {
"type": "string",
"maxLength": 2000,
"minLength": 1
}
},
"additionalProperties": false
}Returns the private Tyton server SDK download, its SHA-256 checksum and the local-file install steps for the connected project. The download authenticates with the connection's server key; no npm publisher account or access to Tyton's repository is needed. Read-only: does not install, approve, start tracking or send events. Requires a connected site.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Reads the connected site's setup state in one compact response: plan approval, installation generation, missing callback sources, intentional pauses and the single next step. Read-only: makes no approval or activation and sends no test events. Callback evidence is not business success or Meta receipt. Verification-only setup works without Meta credentials. Requires a connected site.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Checks a signup and Connect request using its request_id and private poll_token. Returns waiting, unavailable or expired, or, after the site owner approves, this connection's server URL, private server key, public browser key and project. The suggested polling interval is 5 seconds. A connection is not tracking approval or activation.
| Argument | Type | Description |
|---|---|---|
| poll_token* | string | |
| request_id* | string |
{
"type": "object",
"required": [
"request_id",
"poll_token"
],
"properties": {
"poll_token": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}Saves a conversion plan draft for the connected site. Does not approve or activate it. document.revision must equal expected_revision + 1; a repeated request_id is treated as a retry of the same change. Document: {schemaVersion:1,revision,conversions:[{id,label,enabled,eventName,targets:[{id,label,origin,path}],success:{kind,description}}]}. IDs are stable lowercase slugs; labels are distinct. Official Meta event names only. HTTPS origins only; a path has no query or fragment. Success kind: confirmed_success, checkout_started (InitiateCheckout only), or unresolved. 1 to 50 conversions, 1 to 20 targets each, 100 total, 32 KiB normalized document maximum. No tracking or verification fields. Returns the saved proposal, its open questions and the review link.
| Argument | Type | Description |
|---|---|---|
| document* | object | |
| request_id* | string | |
| expected_revision* | integer |
{
"type": "object",
"required": [
"expected_revision",
"request_id",
"document"
],
"properties": {
"document": {
"type": "object",
"required": [
"schemaVersion",
"revision",
"conversions"
],
"properties": {
"revision": {
"type": "integer",
"maximum": 2147483647,
"minimum": 1
},
"conversions": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"label",
"enabled",
"eventName",
"targets",
"success"
],
"properties": {
"id": {
"type": "string",
"maxLength": 64,
"minLength": 1
},
"label": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"enabled": {
"type": "boolean"
},
"success": {
"type": "object",
"required": [
"kind",
"description"
],
"properties": {
"kind": {
"enum": [
"confirmed_success",
"checkout_started",
"unresolved"
],
"type": "string"
},
"description": {
"type": "string",
"maxLength": 300,
"minLength": 1
}
},
"additionalProperties": false
},
"targets": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"label",
"origin",
"path"
],
"properties": {
"id": {
"type": "string",
"maxLength": 64,
"minLength": 1
},
"path": {
"type": "string",
"maxLength": 512
},
"label": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"origin": {
"type": "string",
"maxLength": 2048
}
},
"additionalProperties": false
},
"maxItems": 20,
"minItems": 1
},
"eventName": {
"enum": [
"PageView",
"ViewContent",
"Search",
"AddToCart",
"AddToWishlist",
"InitiateCheckout",
"AddPaymentInfo",
"Purchase",
"Lead",
"CompleteRegistration",
"Contact",
"Schedule",
"StartTrial",
"Subscribe",
"SubmitApplication",
"CustomizeProduct",
"FindLocation",
"Donate"
],
"type": "string"
}
},
"additionalProperties": false
},
"maxItems": 50,
"minItems": 1
},
"schemaVersion": {
"enum": [
1
],
"type": "number"
}
},
"additionalProperties": false
},
"request_id": {
"type": "string",
"format": "uuid"
},
"expected_revision": {
"type": "integer",
"maximum": 2147483646,
"minimum": 0
}
},
"additionalProperties": false
}Reads an existing audit using its private capability. Returns recorded context, scoped observations, provenance, component coverage, the current decision with open questions, and the report link. Read-only; does not verify the site's backend or grant access to it.
| Argument | Type | Description |
|---|---|---|
| audit_id* | string | |
| revision | integer | latest run revision; 0 for the first write of a new audit session, then the revision returned by the previous write |
| audit_key* | string | |
| request_id | string | UUID identifying one mutation; a repeated request_id with identical content is treated as a retry |
{
"type": "object",
"required": [
"audit_id",
"audit_key"
],
"properties": {
"audit_id": {
"type": "string",
"pattern": "^audit-[a-f0-9]{32}$"
},
"revision": {
"type": "integer",
"minimum": 0,
"description": "latest run revision; 0 for the first write of a new audit session, then the revision returned by the previous write"
},
"audit_key": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"request_id": {
"type": "string",
"format": "uuid",
"description": "UUID identifying one mutation; a repeated request_id with identical content is treated as a retry"
}
}
}Reads staged callback bindings, observed verification signals and the active or paused installation state for the connected site. Read-only. A verified callback proves receipt only, not business success or permission to send live. A matching pending approve-and-start request activates automatically after every fresh current-key check; otherwise the signed-in owner activates separately. Agents cannot activate manually. Active authorization does not prove live client deployment or Meta receipt.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Reads the connected site's current conversion plan draft, its open questions, approval state and review link. Read-only.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Returns Tyton guidance on one topic. meta_setup is the dashboard's nine-step Meta checklist (business, dataset, website, Conversions API token, testing), optionally a single step. website_management covers the website selector, per-project agent connections and deletion. Other topics: install, events, dedup, crawler_protection, create_pixel, create_business, consent, pricing, privacy, performance, gtm, platforms, faq. Read-only reference text, not saved checklist state or proof of delivery.
| Argument | Type | Description |
|---|---|---|
| step | string | Optional Meta setup step; only used with topic meta_setup. |
| topic* | string |
{
"type": "object",
"required": [
"topic"
],
"properties": {
"step": {
"enum": [
"business",
"pixel",
"domain",
"token",
"installed",
"browser_seen",
"server_seen",
"dedup",
"finished"
],
"type": "string",
"description": "Optional Meta setup step; only used with topic meta_setup."
},
"topic": {
"enum": [
"meta_setup",
"website_management",
"install",
"events",
"dedup",
"crawler_protection",
"create_pixel",
"create_business",
"consent",
"pricing",
"privacy",
"performance",
"gtm",
"platforms",
"faq"
],
"type": "string"
}
}
}Saves answers about one audited component to the audit. audit_scope records the customer's choice between continuing the investigation and a public-only audit; availability_expectation records whether unavailable controls are expected. Both must have source human_reported. Earlier topics are kept; a new answer replaces the same topic. A public-only choice allows a partial report without further access requests. Returns the updated audit decision and report link.
| Argument | Type | Description |
|---|---|---|
| url* | string | |
| answers* | object | |
| audit_id | string | audit run ID returned by Tyton; each audit run has its own ID |
| revision | integer | latest run revision; 0 for the first write of a new audit session, then the revision returned by the previous write |
| audit_key | string | private audit write capability returned by Tyton; a secret that authorizes changes to this audit only |
| request_id | string | UUID identifying one mutation; a repeated request_id with identical content is treated as a retry |
{
"type": "object",
"required": [
"url",
"answers"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"answers": {
"type": "object",
"properties": {
"app_backend": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"value": {
"type": "string",
"maxLength": 300,
"minLength": 1
},
"source": {
"enum": [
"human_reported",
"agent_observed",
"inferred"
],
"type": "string"
}
},
"description": "A concise non-sensitive answer and its actual source; inference is not confirmation"
},
"audit_scope": {
"type": "object",
"required": [
"value",
"source",
"scope_choice"
],
"properties": {
"value": {
"type": "string",
"maxLength": 300,
"minLength": 1
},
"source": {
"enum": [
"human_reported",
"agent_observed",
"inferred"
],
"type": "string"
},
"scope_choice": {
"enum": [
"continue_investigation",
"public_only"
],
"type": "string"
}
},
"description": "A concise non-sensitive answer and its actual source; inference is not confirmation"
},
"marketing_site": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"value": {
"type": "string",
"maxLength": 300,
"minLength": 1
},
"source": {
"enum": [
"human_reported",
"agent_observed",
"inferred"
],
"type": "string"
}
},
"description": "A concise non-sensitive answer and its actual source; inference is not confirmation"
},
"conversion_goal": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"value": {
"type": "string",
"maxLength": 300,
"minLength": 1
},
"source": {
"enum": [
"human_reported",
"agent_observed",
"inferred"
],
"type": "string"
}
},
"description": "A concise non-sensitive answer and its actual source; inference is not confirmation"
},
"repository_scope": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"value": {
"type": "string",
"maxLength": 300,
"minLength": 1
},
"source": {
"enum": [
"human_reported",
"agent_observed",
"inferred"
],
"type": "string"
}
},
"description": "A concise non-sensitive answer and its actual source; inference is not confirmation"
},
"access_limitations": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"value": {
"type": "string",
"maxLength": 300,
"minLength": 1
},
"source": {
"enum": [
"human_reported",
"agent_observed",
"inferred"
],
"type": "string"
}
},
"description": "A concise non-sensitive answer and its actual source; inference is not confirmation"
},
"consent_expectation": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"value": {
"type": "string",
"maxLength": 300,
"minLength": 1
},
"source": {
"enum": [
"human_reported",
"agent_observed",
"inferred"
],
"type": "string"
}
},
"description": "A concise non-sensitive answer and its actual source; inference is not confirmation"
},
"availability_expectation": {
"type": "object",
"required": [
"value",
"source",
"availability_choice"
],
"properties": {
"value": {
"type": "string",
"maxLength": 300,
"minLength": 1
},
"source": {
"enum": [
"human_reported",
"agent_observed",
"inferred"
],
"type": "string"
},
"availability_choice": {
"enum": [
"expected",
"unexpected"
],
"type": "string"
}
},
"description": "A concise non-sensitive answer and its actual source; inference is not confirmation"
}
}
},
"audit_id": {
"type": "string",
"pattern": "^audit-[a-f0-9]{32}$",
"description": "audit run ID returned by Tyton; each audit run has its own ID"
},
"revision": {
"type": "integer",
"minimum": 0,
"description": "latest run revision; 0 for the first write of a new audit session, then the revision returned by the previous write"
},
"audit_key": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "private audit write capability returned by Tyton; a secret that authorizes changes to this audit only"
},
"request_id": {
"type": "string",
"format": "uuid",
"description": "UUID identifying one mutation; a repeated request_id with identical content is treated as a retry"
}
}
}Saves bounded runtime evidence to the same audit run: sanitized observations from a real browser, authorized backend inspection or a destination UI, with the consent state and observation time. Does not run a browser or send events. A check whose evidence type does not prove it is stored as unknown. Returns the updated findings and report link.
| Argument | Type | Description |
|---|---|---|
| url* | string | |
| checks* | array | |
| audit_id | string | audit run ID returned by Tyton; each audit run has its own ID |
| revision | integer | latest run revision; 0 for the first write of a new audit session, then the revision returned by the previous write |
| audit_key | string | private audit write capability returned by Tyton; a secret that authorizes changes to this audit only |
| request_id | string | UUID identifying one mutation; a repeated request_id with identical content is treated as a retry |
| observed_at* | string | |
| consent_state |
Links an existing Tyton audit report to the connected website's Get Started checklist. Takes the report URL; only a report for this exact website is accepted. A linked report completes the checklist's audit step; it is not proof that tracking works. Requires a connected site.
| Argument | Type | Description |
|---|---|---|
| report_url* | string |
{
"type": "object",
"required": [
"report_url"
],
"properties": {
"report_url": {
"type": "string",
"pattern": "^https:\\/\\/usetyton\\.com\\/audit\\/audit-[a-f0-9]{32}$"
}
},
"additionalProperties": false
}Saves a Meta Conversions API token for the connected site's current Pixel. Takes the Pixel ID plus exactly one of capi_token (the raw token) or sealed_capi_token (a sealed token from the Tyton browser extension, starting with `tyton_sealed_v1.`). The Pixel ID must match the site's saved Pixel. Meta checks the token; an explicit invalid or expired response is rejected, otherwise the token is saved with delivery unchecked. Saves the token encrypted; it is never returned. Does not send a test conversion, approve or activate tracking, or prove delivery. Requires a connected site with an active Tyton plan.
| Argument | Type | Description |
|---|---|---|
| pixel_id* | string | |
| capi_token | string | |
| sealed_capi_token | string | A sealed token from the Tyton browser extension, exactly as given (starts with tyton_sealed_v1.). |
{
"type": "object",
"required": [
"pixel_id"
],
"properties": {
"pixel_id": {
"type": "string",
"pattern": "^\\d{5,25}$"
},
"capi_token": {
"type": "string",
"pattern": "^[A-Za-z0-9_.-]+$",
"maxLength": 4096,
"minLength": 20
},
"sealed_capi_token": {
"type": "string",
"maxLength": 5000,
"description": "A sealed token from the Tyton browser extension, exactly as given (starts with tyton_sealed_v1.)."
}
},
"additionalProperties": false
}Saves checkout and landing answers (payment provider, landing type and route, checkout domains) for the connected project and returns the reviewed server SDK success-callback contract. Does not install an integration or prove provider support; approval and activation are separate. Requires a connected site.
| Argument | Type | Description |
|---|---|---|
| backend* | string | where server code runs, as shown by the code (api, server or functions directories, or a separate service) |
| landing_type* | string | where the person ends up after paying: a thank-you page, back in the app, nowhere (overlay checkout), or the provider's own screen |
| landing_route | string | e.g. /checkout/success or /dashboard; applies only to thank_you_page and app_route |
| landing_marker | string | what marks a purchase in the landing URL, e.g. ?checkout=success; often empty |
| checkout_domains | array | hostnames checkout lives on, if not the site itself ([] clears what's stored) |
| payment_provider* | string | who processes payments, as shown in code (package.json, env vars, webhook routes) |
Reads the connected project's configuration: site URL, Pixel ID, token status and saved checkout answers. Read-only. Configuration and token status are not plan approval, callback verification, activation or Meta receipt. Requires a connected site.
No arguments.
{
"type": "object",
"properties": {}
}Discovers or configures reviewed v2 setup for a site. With only a URL it is read-only, needs no Pixel and returns setup guidance. With a real Pixel ID on a connected project, it saves the project's site URL and Pixel ID; switching an existing Pixel or site requires confirm_change. Does not approve, install or activate tracking.
| Argument | Type | Description |
|---|---|---|
| url* | string | the site being tracked: a domain or full URL |
| name | string | project name; defaults to the site name |
| pixel_id | string | Meta Pixel ID, numeric; optional while it is not yet known |
| confirm_change | boolean | true = yes, switch this project to a different Pixel ID or site URL on purpose |
| checkout_domains | array | hostnames where checkout happens, if already known |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"maxLength": 2000,
"minLength": 4,
"description": "the site being tracked: a domain or full URL"
},
"name": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "project name; defaults to the site name"
},
"pixel_id": {
"type": "string",
"pattern": "^\\d{5,25}$",
"description": "Meta Pixel ID, numeric; optional while it is not yet known"
},
"confirm_change": {
"type": "boolean",
"description": "true = yes, switch this project to a different Pixel ID or site URL on purpose"
},
"checkout_domains": {
"type": "array",
"items": {
"type": "string"
},
"description": "hostnames where checkout happens, if already known"
}
}
}Stages callback bindings (conversion, target and a browser or server source) for the approved latest plan revision and digest under an installation generation. A matching generation is resumed; staging a new generation pauses the previous installation, clears verification and can cancel a pending start. Each enabled target needs a source, and Purchase requires a server source. Each binding reports through client.conversion(conversionId, targetId, data, {installationId: generation, eventId: stableOccurrenceId, verify: true}) on trusted confirmed success, not on a click, submit attempt or URL query parameter. Browser init with mode:'verify' suppresses automatic PageView and Pixel. A closed widget without a trustworthy success callback is unsupported. Does not activate tracking.
| Argument | Type | Description |
|---|---|---|
| digest* | string | |
| bindings* | array | |
| revision* | integer | |
| generation* | string |
{
"type": "object",
"required": [
"revision",
"digest",
"generation",
"bindings"
],
"properties": {
"digest": {
"type": "string",
"pattern": "^[0-9a-f]{64}$"
},
"bindings": {
"type": "array",
"items": {
"type": "object",
"required": [
"conversionId",
"targetId",
"source"
],
"properties": {
"source": {
"enum": [
"browser",
"server"
],
"type": "string"
},
"targetId": {
"type": "string",
"maxLength": 64,
"minLength": 1
},
"conversionId": {
"type": "string",
"maxLength": 64,
"minLength": 1
}
},
"additionalProperties": false
},
"maxItems": 200
},
"revision": {
"type": "integer",
"maximum": 2147483647,
"minimum": 1
},
"generation": {
"type": "string",
"format": "uuid"
}
},
"additionalProperties": false
}Creates a Tyton signup and Connect link for one website. Takes either a saved free audit (audit_id and audit_key, which brings the report along) or site_url, the customer's live https website. customer_approved records that the customer agreed to set up Tyton. Returns authorization_url for the customer, plus a private request_id and poll_token for checking the request's status. The customer can pick the free plan or a paid one; existing accounts with a plan skip that step. The link grants no access and starts no tracking by itself.
| Argument | Type | Description |
|---|---|---|
| client | string | |
| audit_id | string | |
| site_url | string | The customer's website (https) when there is no saved audit. The customer sees and approves it before connecting. |
| audit_key | string | |
| customer_approved* | boolean |
{
"type": "object",
"required": [
"customer_approved"
],
"properties": {
"client": {
"enum": [
"codex",
"cursor",
"claude_code",
"other"
],
"type": "string"
},
"audit_id": {
"type": "string",
"pattern": "^audit-[a-f0-9]{32}$"
},
"site_url": {
"type": "string",
"maxLength": 2048,
"description": "The customer's website (https) when there is no saved audit. The customer sees and approves it before connecting."
},
"audit_key": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"customer_approved": {
"enum": [
true
],
"type": "boolean"
}
}
}Saves code review findings from the customer's repository to the audit: server-side events, dedup IDs, Pixel and container presence, payment provider, framework, backend location and existing Conversions API quality, plus the relative paths reviewed and any inapplicable checks with reasons. Unknown values stay unknown, not failed. Findings are stored as agent-reported, not verified deployed behavior. A group label is a label only; each report stays separate. Returns the updated audit decision and report link.
| Argument | Type | Description |
|---|---|---|
| url* | string | the site these findings belong to |
| group | string | legacy grouping label only; does not combine reports or verify domain ownership |
| notes | any | anything else found; a string or an array of strings |
| backend | string | where the backend code is: in this repo, a separate repo not available here, or unknown |
| audit_id | string | audit run ID returned by Tyton; each audit run has its own ID |
| revision | integer | latest run revision; 0 for the first write of a new audit session, then the revision returned by the previous write |
| audit_key | string |
Reads aggregate browser and server event observations, delivery statuses, and the known-crawler protection mode and counts for the connected site. Read-only. Counts are not unique business conversions, current installation verification or proof of Meta deduplication. Requires a connected site.
No arguments.
{
"type": "object",
"properties": {}
}Checks a page's static HTML for Tyton container and Meta Pixel references, using a public fetch or HTML supplied by the agent, and compares them with the connected project. Read-only. Does not verify runtime callbacks, activation, consent behavior or Meta receipt. Requires a connected site.
| Argument | Type | Description |
|---|---|---|
| url* | string | |
| html | string | page HTML fetched by the agent |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"html": {
"type": "string",
"maxLength": 2000000,
"description": "page HTML fetched by the agent"
}
}
}| UUID identifying one mutation; a repeated request_id with identical content is treated as a retry |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "the site to audit"
},
"html": {
"type": "string",
"maxLength": 2000000,
"description": "Authorized, sanitized page HTML, including local previews. The entire JSON-RPC request is limited to 256 KiB after JSON escaping, so a larger page needs a focused capture. Page markup only, without private source or personal data."
},
"fresh": {
"type": "boolean",
"description": "bypass the short public-page cache when verifying a change"
},
"audit_id": {
"type": "string",
"pattern": "^audit-[a-f0-9]{32}$",
"description": "audit run ID returned by Tyton; each audit run has its own ID"
},
"revision": {
"type": "integer",
"minimum": 0,
"description": "latest run revision; 0 for the first write of a new audit session, then the revision returned by the previous write"
},
"audit_key": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "private audit write capability returned by Tyton; a secret that authorizes changes to this audit only"
},
"request_id": {
"type": "string",
"format": "uuid",
"description": "UUID identifying one mutation; a repeated request_id with identical content is treated as a retry"
}
}
}| string |
{
"type": "object",
"required": [
"url",
"observed_at",
"consent_state",
"checks"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"checks": {
"type": "array",
"items": {
"type": "object",
"required": [
"check",
"state",
"evidence_type",
"evidence"
],
"properties": {
"check": {
"enum": [
"rendered_controls",
"pixel_request",
"server_delivery",
"destination_receipt",
"cross_source_dedup",
"consent_behavior"
],
"type": "string"
},
"state": {
"enum": [
"present",
"absent",
"unknown",
"not_applicable"
],
"type": "string"
},
"evidence": {
"type": "string",
"maxLength": 300,
"minLength": 1,
"description": "sanitized summary of the inspected observation, without payloads, identifiers or credentials"
},
"evidence_type": {
"enum": [
"browser_dom",
"browser_network",
"backend_log",
"destination_ui",
"human_report"
],
"type": "string"
}
}
},
"maxItems": 20,
"minItems": 1
},
"audit_id": {
"type": "string",
"pattern": "^audit-[a-f0-9]{32}$",
"description": "audit run ID returned by Tyton; each audit run has its own ID"
},
"revision": {
"type": "integer",
"minimum": 0,
"description": "latest run revision; 0 for the first write of a new audit session, then the revision returned by the previous write"
},
"audit_key": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "private audit write capability returned by Tyton; a secret that authorizes changes to this audit only"
},
"request_id": {
"type": "string",
"format": "uuid",
"description": "UUID identifying one mutation; a repeated request_id with identical content is treated as a retry"
},
"observed_at": {
"type": "string",
"format": "date-time"
},
"consent_state": {
"enum": [
"unknown",
"not_interacted",
"accepted",
"declined",
"no_banner_observed"
],
"type": "string"
}
}
}{
"type": "object",
"required": [
"payment_provider",
"landing_type",
"backend"
],
"properties": {
"backend": {
"enum": [
"in_repo",
"separate_repo",
"none_hosted_only"
],
"type": "string",
"description": "where server code runs, as shown by the code (api, server or functions directories, or a separate service)"
},
"landing_type": {
"enum": [
"thank_you_page",
"app_route",
"no_redirect",
"provider_hosted",
"unknown"
],
"type": "string",
"description": "where the person ends up after paying: a thank-you page, back in the app, nowhere (overlay checkout), or the provider's own screen"
},
"landing_route": {
"type": "string",
"maxLength": 200,
"description": "e.g. /checkout/success or /dashboard; applies only to thank_you_page and app_route"
},
"landing_marker": {
"type": "string",
"maxLength": 100,
"description": "what marks a purchase in the landing URL, e.g. ?checkout=success; often empty"
},
"checkout_domains": {
"type": "array",
"items": {
"type": "string"
},
"description": "hostnames checkout lives on, if not the site itself ([] clears what's stored)"
},
"payment_provider": {
"enum": [
"stripe",
"lemonsqueezy",
"paddle",
"gumroad",
"shopify",
"polar",
"other",
"none",
"unknown"
],
"type": "string",
"description": "who processes payments, as shown in code (package.json, env vars, webhook routes)"
}
}
}| private audit write capability returned by Tyton; a secret that authorizes changes to this audit only |
| dedup_ids | string | orderId/event_id on both browser and server events? |
| framework | string | frontend framework (from package.json deps) |
| request_id | string | UUID identifying one mutation; a repeated request_id with identical content is treated as a retry |
| existing_capi | object | grades for existing CAPI code, if any: hashes_pii (does it hash emails/phones before sending?), sends_event_id (does each server event include an event_id?), graph_version (which Graph API version, e.g. v19.0), test_event_code_in_prod (is a test code left in production?), sends_fbp_fbc (are browser cookie values forwarded?) |
| pixel_in_code | string | Meta Pixel initialized anywhere in the code? |
| not_applicable | array | Inapplicable checks, each with the actual reason, based on reviewed files and confirmed scope. Missing access counts as unknown, not N/A. |
| reviewed_files | array | relative paths actually inspected in the relevant customer repository; no source code, absolute paths or secret files |
| server_evidence | string | one line: file/function where it was found |
| checkout_domains | array | domains the checkout lives on, if separate; no customer paths or query strings |
| payment_provider | string | payment processor used (from package.json, env vars, webhook routes) |
| container_in_code | string | Tyton container script embedded? |
| server_side_events | string | code sends server-side events (CAPI/SDK/webhook)? unknown when not checked |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "the site these findings belong to"
},
"group": {
"type": "string",
"maxLength": 80,
"description": "legacy grouping label only; does not combine reports or verify domain ownership"
},
"notes": {
"anyOf": [
{
"type": "string",
"maxLength": 2000
},
{
"type": "array",
"items": {
"type": "string",
"maxLength": 160
},
"maxItems": 10
}
],
"description": "anything else found; a string or an array of strings"
},
"backend": {
"enum": [
"in_repo",
"separate_repo",
"unknown"
],
"type": "string",
"description": "where the backend code is: in this repo, a separate repo not available here, or unknown"
},
"audit_id": {
"type": "string",
"pattern": "^audit-[a-f0-9]{32}$",
"description": "audit run ID returned by Tyton; each audit run has its own ID"
},
"revision": {
"type": "integer",
"minimum": 0,
"description": "latest run revision; 0 for the first write of a new audit session, then the revision returned by the previous write"
},
"audit_key": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "private audit write capability returned by Tyton; a secret that authorizes changes to this audit only"
},
"dedup_ids": {
"enum": [
"yes",
"no",
"unknown"
],
"type": "string",
"description": "orderId/event_id on both browser and server events?"
},
"framework": {
"enum": [
"nextjs",
"nuxt",
"astro",
"remix",
"sveltekit",
"vite",
"cra",
"plain_html",
"other"
],
"type": "string",
"description": "frontend framework (from package.json deps)"
},
"request_id": {
"type": "string",
"format": "uuid",
"description": "UUID identifying one mutation; a repeated request_id with identical content is treated as a retry"
},
"existing_capi": {
"type": "object",
"properties": {
"hashes_pii": {
"enum": [
"yes",
"no",
"unknown"
],
"type": "string",
"description": "emails/phones hashed before sending?"
},
"graph_version": {
"type": "string",
"maxLength": 10,
"description": "Graph API version used, e.g. v19.0"
},
"sends_fbp_fbc": {
"enum": [
"yes",
"no",
"unknown"
],
"type": "string",
"description": "fbp/fbc cookie values forwarded in server events?"
},
"sends_event_id": {
"enum": [
"yes",
"no",
"unknown"
],
"type": "string",
"description": "event_id sent with server events?"
},
"test_event_code_in_prod": {
"enum": [
"yes",
"no",
"unknown"
],
"type": "string",
"description": "test_event_code left in production code?"
}
},
"description": "grades for existing CAPI code, if any: hashes_pii (does it hash emails/phones before sending?), sends_event_id (does each server event include an event_id?), graph_version (which Graph API version, e.g. v19.0), test_event_code_in_prod (is a test code left in production?), sends_fbp_fbc (are browser cookie values forwarded?)"
},
"pixel_in_code": {
"enum": [
"yes",
"no",
"unknown"
],
"type": "string",
"description": "Meta Pixel initialized anywhere in the code?"
},
"not_applicable": {
"type": "array",
"items": {
"type": "object",
"required": [
"check",
"reason"
],
"properties": {
"check": {
"enum": [
"C1",
"C2",
"C4",
"C5",
"C4a",
"C4b",
"C4d",
"C4e"
],
"type": "string"
},
"reason": {
"type": "string",
"maxLength": 160,
"minLength": 1
}
}
},
"maxItems": 8,
"description": "Inapplicable checks, each with the actual reason, based on reviewed files and confirmed scope. Missing access counts as unknown, not N/A."
},
"reviewed_files": {
"type": "array",
"items": {
"type": "string",
"maxLength": 160,
"minLength": 1
},
"maxItems": 30,
"description": "relative paths actually inspected in the relevant customer repository; no source code, absolute paths or secret files"
},
"server_evidence": {
"type": "string",
"maxLength": 300,
"description": "one line: file/function where it was found"
},
"checkout_domains": {
"type": "array",
"items": {
"type": "string",
"maxLength": 253
},
"maxItems": 20,
"description": "domains the checkout lives on, if separate; no customer paths or query strings"
},
"payment_provider": {
"enum": [
"stripe",
"lemonsqueezy",
"paddle",
"gumroad",
"shopify",
"polar",
"other",
"none",
"unknown"
],
"type": "string",
"description": "payment processor used (from package.json, env vars, webhook routes)"
},
"container_in_code": {
"enum": [
"yes",
"no",
"unknown"
],
"type": "string",
"description": "Tyton container script embedded?"
},
"server_side_events": {
"enum": [
"yes",
"no",
"unknown"
],
"type": "string",
"description": "code sends server-side events (CAPI/SDK/webhook)? unknown when not checked"
}
}
}