> ## Documentation Index
> Fetch the complete documentation index at: https://plainrouter.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# October 2026

> Review workspace conversion choices, journey and channel-cost reporting, signal quality, SaaS setup verification and current SDK fixes.

Customer-facing changes available in October. Read linked guides for prerequisites and verification.

**October 21, 2026**

## Choose what counts as a workspace conversion

**Added** · Select purchases, subscriptions, trial starts and leads in Workspace settings. Dashboard counts use the saved choices, while existing Tests and proposal evidence keep their captured definition. [Configure conversions](https://plainrouter.com/docs/signals/conversions.md).

## Read journey credit and channel costs

**Added** · Read observed conversion journeys and cost per earned conversion through MCP. Choose a credit model and lookback, compare Meta claims separately, and retain coverage and currency limits. [Read journeys and costs](https://plainrouter.com/docs/signals/conversion-journeys.md).

## Diagnose signal quality from stored evidence

**Added** · Inspect scoped delivery outcomes, gaps, test sends, retained identity and journey coverage with `get_signal_quality`. Missing or unavailable evidence stays explicit. [Interpret signal quality](https://plainrouter.com/docs/signals/health-and-performance.md#how-do-i-read-signal-quality-through-mcp).

## Separate SaaS setup readiness from live delivery

**Improved** · Installation guidance reports `setup_ready` separately from `live_verified`. Check existing evidence and owner handoffs without creating a paid conversion; live verification still needs retained real Meta acceptance. [Verify SaaS setup](https://plainrouter.com/docs/signals/track-events.md#how-do-i-verify-saas-setup-without-creating-a-paid-conversion).

## Update SDK error and import handling

**Fixed** · TypeScript, Python and CLI `0.10.1`, Ruby `0.6.1`, PHP `0.4.1`, and Go `v0.7.1` correct workspace/inventory error handling and Launcher import routing. Ruby also fixes standalone multipart loading, and PHP improves async error decoding. [Check package upgrade notes](https://plainrouter.com/docs/sdk/overview.md#what-changed-in-the-current-releases).

**October 17, 2026**

## Upgrade SDKs with current request and response handling

**Changed** · TypeScript, Python and CLI `0.10.0`, Ruby `0.6.0`, PHP `0.4.0`, and Go `v0.7.0` are published. Review model renames, required fields, pagination and redirect handling before upgrading. [Check the migration guidance](https://plainrouter.com/docs/sdk/overview.md#what-should-i-check-before-upgrading).

## Handle unavailable workspaces consistently

**Changed** · Workspace-scoped API requests return `404` with `api_route_not_found` for missing, inaccessible or non-canonical workspace selectors. Check the authorized workspace ID and error body before retrying. [Troubleshoot workspace errors](https://plainrouter.com/docs/api/authentication.md#why-does-a-workspace-request-return-404).

## Use a stable app-user ID with Stripe

**Added** · Use the same internal user ID in a Signals server event and Stripe Checkout or Customer metadata so eligible signed webhooks can record a workspace-scoped customer association. Keep order IDs separate and verify settlement independently. [Configure the association](https://plainrouter.com/docs/signals/track-events.md#how-do-i-associate-stripe-customers-with-app-users).

## Read one complete arrival count

**Changed** · Dashboard, MCP summaries and CSV exports publish one complete arrival total for the same workspace and window. Clients should read the total directly rather than expecting jurisdiction components or a partial marker. [Interpret arrival reporting](https://plainrouter.com/docs/signals/health-and-performance.md#events-received).

**October 15, 2026**

## Match Actions requests to their parameter schema

**Changed** · Proposals and previews reject unknown action parameters and caller-supplied creative enhancement choices. Integer inputs reject booleans. Remove extra fields, preserve returned cursor types and inspect field errors before retrying. [Check accepted inputs](https://plainrouter.com/docs/api/actions.md#which-request-values-are-accepted).

## Distinguish subscription activation, churn and upgrades

**Improved** · Signed Stripe subscription snapshots can record churn and verified recurring-price increases. Recovery from a past-due state is not counted as a new subscription, and scheduling cancellation alone is not churn. Paid revenue remains separate. [Verify lifecycle events](https://plainrouter.com/docs/signals/track-events.md#how-are-subscriptions-and-trial-conversions-recorded).

## Honor CMP denial while a grant is waiting

**Fixed** · The v4 browser snippet cancels a pending external CMP grant when a supported listener reports denial. External CMP denial after transmission also triggers withdrawal in strict workspaces. [Verify the consent sequence](https://plainrouter.com/docs/signals/track-events.md#verify-grant-partial-consent-and-withdrawal).

## Keep saved approvals when execution cannot start yet

**Improved** · A failed execution handoff no longer makes a saved approval look like a failed decision. Inbox identifies the saved approval and automatic retry; a saved proposal still needing approval has separate guidance. [Follow the existing batch](https://plainrouter.com/docs/actions/review-proposals.md#what-if-an-approved-batch-stalls).

**October 14, 2026**

## Follow Stripe subscriptions through the first paid conversion

**Improved** · Signed subscription events keep trial and active state separate from paid revenue. Eligible global-policy trial checkouts can retain an acquisition match for the first paid invoice. Add the subscription events to your existing webhook endpoint and verify the payment separately. [Check subscriptions and trials](https://plainrouter.com/docs/signals/track-events.md#how-are-subscriptions-and-trial-conversions-recorded).

## Read older Inbox history

**Improved** · Use **Load older** to continue through earlier actions. Group counts include matching actions beyond the loaded page, while actions needing attention remain available. [Find older actions](https://plainrouter.com/docs/actions/review-proposals.md#how-do-i-find-older-actions).

## Preserve creative choices through approval

**Improved** · Creative-copy proposals freeze Meta enhancement opt-outs for execution. An older proposal missing those choices requires a fresh proposal for review. Copies still start paused and require provider verification. [Review the creative proposal](https://plainrouter.com/docs/actions/creative-workflow.md#3-read-the-proposal-before-requesting-approval-in-ask).

**October 13, 2026**

## Continue large result lists

**Updated** · MCP and Actions API reads now return bounded pages with continuation fields. Follow cursors for workspace lists, retained metrics, Actions batches, rule history and creative-library results before treating a response as complete. Inventory defaults to 25 objects. [Read every result](https://plainrouter.com/docs/mcp/tools.md#how-do-i-read-every-result).

## Retry a proposal that could not be recorded

**Improved** · A failed required proposal or policy-result save returns a retryable error without committing the proposal. Keep the original payload and retry key; HTTP clients receive `503` with `proposal_not_recorded` and a retry delay. [Handle proposal failures](https://plainrouter.com/docs/api/actions.md#troubleshoot-a-request).

## Sign in from a localhost OAuth client

**Fixed** · Native OAuth clients can use a new port on their registered HTTP localhost callback. The consent screen identifies the callback host; other redirect components still have to match. [Connect Claude with OAuth](https://plainrouter.com/docs/mcp/setup.md#connect-claude-with-oauth).

## Cancel held identity calls after withdrawal

**Fixed** · If consent is denied while browser configuration is pending, a held identity call stays cancelled even if another grant follows. Held tracking calls follow the same boundary. [Verify consent transitions](https://plainrouter.com/docs/signals/track-events.md#verify-grant-partial-consent-and-withdrawal).

**October 12, 2026**

## Inspect Actions with a Read key

**Improved** · Newly issued Read keys can inspect action records, policy and decision receipts. Existing proposal grants remain compatible for reads; older Read keys need fresh authorization for the new operation. Previews and proposals still require Write. [Check key permissions](https://plainrouter.com/docs/mcp/workspace-tokens.md#access-tiers).

## Keep protected changes under person approval

**Improved** · Budget increases and campaign/ad-set resumes require a person approval even in Full. One protected action protects the containing batch. Retired-mode proposals cannot be promoted by changing today's policy. [Review protected changes](https://plainrouter.com/docs/actions/policies-and-safety.md#which-changes-still-need-a-person-in-full).

## Review frozen target evidence

**New** · Supported target proposals preserve a seven-completed-day comparison of Meta figures, counted arrivals and eligible purchases for Inbox, API/MCP reads and decision receipts. Missing values remain unknown; the snapshot does not authorize spend. [Interpret the comparison](https://plainrouter.com/docs/actions/review-proposals.md#what-is-the-frozen-counted-evidence).

## Reconcile purchases with shared order keys

**Improved** · Browser, backend and verified Stripe observations can reconcile against the same explicit workspace order key. Keep event IDs stable for retries and align Session metadata when sources describe one order. [Set up order keys](https://plainrouter.com/docs/api/conversions.md#how-do-shared-order-ids-reconcile-purchases).

## Verify renewals and refund status

**Improved** · Eligible global-policy subscription renewals can retain prior acquisition context. Stripe setup lists renewal and refund-status events, with an unverified-status notice when only charge summaries were observed. [Update Stripe webhook subscriptions](https://plainrouter.com/docs/signals/track-events.md#configure-the-webhook).

## Keep Analytics and Marketing choices separate

**Improved** · The current v4 card records Analytics independently from the three advertising permissions controlled by Marketing. Saved older choices retain their original meaning; recorded choices can be inspected in the consent report. [Verify consent choices](https://plainrouter.com/docs/signals/track-events.md#how-does-the-snippet-choose-a-consent-source).

## Upgrade generated clients

**Updated** · TypeScript, Python and CLI `0.9.0`, Ruby `0.5.0`, and PHP `0.3.0` refresh the signed-contract models. Go remains `v0.6.0`; package upgrades do not expand credential access. [Choose a client](https://plainrouter.com/docs/sdk/overview.md#what-changed-in-the-current-releases).

**October 10, 2026**

## Use one key across selected workspaces

**New** · Choose a fixed workspace set when creating a key. MCP clients can list their authorized workspaces and select one per call; each workspace keeps its own role-capped grant. [Create and verify a workspace key](https://plainrouter.com/docs/mcp/workspace-tokens.md).

## Inspect cookies before consent

**New** · Review pre-consent cookies, storage and tracker requests, follow available fix guidance, and rescan after changes. Embed a metadata-only declaration from the latest completed scan. Both are available on every plan. [Run a cookie scan](https://plainrouter.com/docs/signals/cookie-scan.md).

## Compare paid-account performance in Dashboard

**New** · Inspect Meta spend, clicks, purchases and ROAS beside tagged-ad arrivals and eligible observed purchases. Coverage notes distinguish tagged ads from total account spend. Signals keeps setup, health and destination controls. [Interpret the account view](https://plainrouter.com/docs/signals/health-and-performance.md#how-do-i-read-paid-account-performance).

## Follow proposals in the updated Inbox

**Improved** · Review reasoning, policy and activity in the detail pane, with technical fields under All details. Groups distinguish In progress, Done, Approved, not sent, and Stopped or failed. Approval alone still does not confirm a Meta change. [Review proposals](https://plainrouter.com/docs/actions/review-proposals.md).

**October 6, 2026**

## Inspect rule runs and resume after review

**Improved** · Account rules show recent windows, account totals and target decisions in Action policy, with links to available proposals. After inspecting two lost outcomes, the team owner can explicitly resume a suspended rule. Only actions judged after resumption count toward a new suspension. [Review runs and resume safely](https://plainrouter.com/docs/actions/account-rules.md).

## Follow inverse proposals for rule-made budget changes

**Improved** · An eligible lost daily-budget change made by an account rule can propose a separate inverse to its recorded prior budget. Current-state checks and Ask/Full still govern that proposal; inverse proposals do not produce another inverse chain. [Inspect eligibility and verification](https://plainrouter.com/docs/actions/review-proposals.md#does-a-lost-outcome-create-an-inverse-proposal).

## Recover missing outcome follow-ups

**Fixed** · Completed management actions can recover overdue outcome checks without repeating the original Meta write. Expired checks finish as unavailable rather than implying a performance verdict, while verified execution remains recorded. [Follow a delayed outcome](https://plainrouter.com/docs/actions/review-proposals.md#what-if-a-completed-action-has-no-later-outcome).

**October 5, 2026**

## Define account performance rules

**New** · Create disabled rules in Action policy or through MCP, then explicitly enable counted-arrival cost conditions for governed pauses and daily-budget changes. Inspect revisions and evaluation results. Rule-generated budget increases always need human approval, including in Full. [Set up account rules](https://plainrouter.com/docs/actions/account-rules.md).

## Follow inverse proposals after a lost outcome

**New** · An eligible lost Resume or budget-change outcome can create a separate inverse proposal using the recorded prior state. Current-state checks protect intervening changes; Ask/Full and provider verification still apply. Inverse proposals do not create another inverse chain. [Inspect the proposed response](https://plainrouter.com/docs/actions/review-proposals.md#does-a-lost-outcome-create-an-inverse-proposal).

## Wait for completed-day metrics before judging an outcome

**Improved** · Outcome checks require retained metrics fetched after the compared day completed. Missing or stale recent metrics can request a bounded refresh; unavailable data stays unknown rather than becoming zero. [Read the freshness requirements](https://plainrouter.com/docs/actions/review-proposals.md#how-are-later-performance-outcomes-checked).

**October 4, 2026**

## Compare Meta metrics with counted arrivals

**New** · API and MCP inventory reads include daily counted arrivals beside stored Meta metrics for campaigns, ad sets and ads. Ad rows can also show receipt-backed creative provenance when available. Unknown values stay distinct from zero. [Read the comparison](https://plainrouter.com/docs/actions/account-inventory.md#how-do-counted-arrivals-compare-with-meta-metrics).

## Review later outcomes in Inbox

**Improved** · Verified resumes and budget changes show a comparison of counted arrivals and spend over completed account-local days, with the loss threshold and an eligible held/lost verdict. Unavailable data gets bounded retries. A verdict does not automatically undo the action. [Interpret the result](https://plainrouter.com/docs/actions/review-proposals.md#how-are-later-performance-outcomes-checked).

## Restore Meta access to the existing destination

**Fixed** · Reconnecting the same Meta ad account after revocation or disconnection reuses its existing destination binding. Confirm the restored grant and check any failed delivery separately. [Reconnect Meta](https://plainrouter.com/docs/signals/connect-meta.md#reconnect-after-access-is-revoked-or-disconnected).

**October 2, 2026**

## Review daily budgets and resumes in Campaigns

**Improved** · Available daily-budget controls show the retained amount, proposed change and sync time before submission. Resume also asks you to confirm the current budget. Inputs and displays use the account currency's Meta units. [Use Campaigns controls](https://plainrouter.com/docs/actions/account-inventory.md).

## Recover interrupted Actions without duplicate writes

**Fixed** · Approved batches can recover from a lost execution job, and stalled execution closes against its recorded receipts. Partial or uncertain Meta results remain visible for review. [Follow recovery](https://plainrouter.com/docs/actions/review-proposals.md#what-if-an-approved-batch-stalls).

## Use the Signals fallback consent card

**New** · The v4 snippet can use supported external consent signals or a configured Plainrouter card with Accept all, Reject all and Customize. Partial choices keep advertising events silent until all three required permissions are granted. [Choose and test consent](https://plainrouter.com/docs/signals/track-events.md#how-does-the-snippet-choose-a-consent-source).

## Understand traffic context on arrivals

**Improved** · Current v4 arrivals retain bounded page, campaign, referrer-host and coarse environment dimensions without visitor identifiers. They remain separate from consented conversion events and Meta delivery. [Review retained fields](https://plainrouter.com/docs/signals/install-pixel.md#which-arrival-fields-are-retained).

## Integrate from PHP with the published SDK

**New** · Composer package `plainrouter/sdk` `0.1.0` provides event, operations and sandbox clients for PHP 8.2 and newer. [Install and verify the PHP SDK](https://plainrouter.com/docs/sdk/php.md).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.