Skip to guide
AgenticOrgDocsOpen app
Documentation/OACP — agentic commerce, made safe

OACP — agentic commerce, made safe

Feature switches reference

Every OACP switch, its default and what it does, in plain tables, with the safe order for turning them on and how to turn them back off.

Platform operators and merchants10 min readReviewed 2026-10-21
On this page

Three kinds of switch

Safe by default

Safety checks start on in production. Every surface that publishes or moves money starts off. Request signatures start in log mode and move to enforce only by choice.

Three groups of switches. On in production: signature checks before keeping facts, verified buyer authority, the Grantex countersignature on allows, and a ledger row for every commerce write. Off until you turn it on: the UCP profile and checkout, the ACP feed and checkout, Grantex mandates, payment execution and refunds, and chain sealing, witness and retention. Log first and enforce only by choice: agent request signatures; ACP request signatures stay in log.On in productionSignature checks before keeping factsVerified buyer authorityGrantex countersignature on allowsLedger row for every commerce writeOff until you turn it onUCP profile and UCP checkoutACP feed and ACP checkoutGrantex mandatesPayment execution and refundsChain sealing, witness, retentionLog first, enforce by choiceAgent request signaturesACP request signatures: keep log

"Strict runtimes" are production, staging, preview and any unknown environment name. Local, dev, development, test and ci are not strict.

Safety checks (on in production)

Switch Default What it does
AGENTICORG_OACP_VERIFY_STRICT On in strict runtimes; log-only elsewhere Refuses to keep any fact whose signature, key, scope, expiry or revocation check fails.
AGENTICORG_ARBITER_REQUIRE_VERIFIED_AUTHORITY On in strict runtimes Refuses buyer authority that AgenticOrg did not verify itself (rule 4).
AGENTICORG_ARBITER_REQUIRE_GRANTEX_GRANT On in strict runtimes An allow decision can be used only with a verified Grantex countersignature.
AGENTICORG_ARBITER_GRANTEX_POST_ENABLED Follows the switch above Sends each decision to Grantex for its countersignature.
AGENTICORG_ROUTE_ENFORCEMENT_MODE enforce A commerce write that skips its ledger row is answered as an error. log only logs it.

Turning a safety check off weakens the shop's protection. Do it only as a recorded decision, for a short window.

Ledger extras (off by default)

Switch Default What it does
AGENTICORG_AUDIT_CHAIN_DEFAULT_ON Off Links the ledger rows of every commerce tenant into a hash chain (the global AGENTICORG_AUDIT_CHAIN_ENABLED does it for all tenants).
AGENTICORG_AUDIT_WITNESS_ENABLED Off Sends each sealed chain head to Grantex, which countersigns it as an outside witness.
AGENTICORG_OACP_RETENTION_APPLY_ENABLED Off Lets the daily task delete review manifests whose stored retention decision has come due.

Selling surfaces (off by default)

Switch Default What it does
AGENTICORG_UCP_PROFILE_ENABLED Off Serves your UCP profile, catalog and store locations. Off, they answer 404.
AGENTICORG_UCP_VERSIONS 2026-04-08 Which UCP releases are served. Add 2026-08-25 when platforms read it.
AGENTICORG_UCP_KEY_ROTATION_GRACE_DAYS 7 (minimum 7) How long a rotated-out signing key stays published.
AGENTICORG_CUSTOM_DOMAINS_ENABLED Off Lets you connect your own subdomain (for example agent.your-store.example) for your UCP profile under Commerce > Custom Domains. Off, those pages and routes answer 404. See Your own domain for buyer agents.
AGENTICORG_CUSTOM_DOMAIN_FIREBASE_ENABLED Off Connects new custom domains through a Firebase Hosting site: merchants publish two DNS records and AgenticOrg does the rest.
AGENTICORG_CUSTOM_DOMAIN_FIREBASE_SITE Empty The Firebase Hosting site id; merchants point their CNAME at <site>.web.app.
AGENTICORG_CUSTOM_DOMAIN_MAPPING_ACCOUNT Empty The Google account that connects domains. Merchants add it as an owner in Search Console.
AGENTICORG_CUSTOM_DOMAIN_OPERATOR_TENANT_ID Empty Your own organization's id. Only its administrators see the operator queue. Empty, nobody does.
AGENTICORG_CUSTOM_DOMAIN_OPERATOR_EMAIL Empty Where each new operator queue item is emailed, with its command.
AGENTICORG_CUSTOM_DOMAIN_CLOUD_RUN_PROJECT Empty The project the queue's commands name. Region (asia-southeast1), service (agenticorg-api) and CNAME target (ghs.googlehosted.com) have their own settings with these defaults.
AGENTICORG_CUSTOM_DOMAIN_CLOUD_RUN_AUTOMAP_ENABLED Off Lets AgenticOrg connect and disconnect domains itself. Keep it off: Google names a very broad role for it.
AGENTICORG_UCP_CHECKOUT_ENABLED Off Serves UCP checkout, cart and order routes. Off, they answer 404. The network checkout gateway needs it too, and the once-a-minute Plural payment check runs only while UCP or ACP checkout is on.
AGENTICORG_ACP_FEED_ENABLED Off Lets you export the ACP product feed.
AGENTICORG_ACP_CHECKOUT_ENABLED Off Serves ACP checkout sessions (your shop must also opt in).
AGENTICORG_ACP_SIGNATURE_MODE log Keep log. ACP publishes no signing method yet, so enforce would refuse every request.
OACP_PUBLIC_CATALOG_PLATFORM_DISABLED Unset An operator override that withdraws the public catalog pages for every merchant.

Sell everywhere network (off by default)

Switch Default What it does
AGENTICORG_NETWORK_ENABLED Off Serves the network directory, the network checkout gateway and the Turn on Sell everywhere step. Off, they answer 404 and the page says Sell everywhere is not enabled; the setup steps before it still work.
AGENTICORG_NETWORK_SERVICE_TOKEN Empty The credential the hosted MCP server presents to the network checkout gateway (at least 32 characters, from the secret manager). Empty, the gateway refuses every call.
AGENTICORG_NETWORK_AGENT_PROFILE https://agenticorg.ai/ucp/platforms/agenticorg-network/profile.json The platform profile network checkouts are opened for.
AGENTICORG_NETWORK_TERMS_VERSION 2026-10-25 The network terms version a merchant accepts when turning Sell everywhere on.
AGENTICORG_NETWORK_REGISTRATIONS Empty Where the network stands with the ChatGPT app directory, Google, Microsoft and Perplexity, as JSON (not_started, submitted or live, optionally per shop). Empty, every program shows as not registered yet.
AGENTICORG_NETWORK_TELEGRAM_ENABLED Off Serves the webhook of the public AgenticOrg shopping bot on Telegram. Off, it answers 404.
AGENTICORG_NETWORK_TELEGRAM_BOT_USERNAME Empty The bot's username, for each shop's t.me/<bot>?start=<shop> link. Empty, no Telegram link is shown.
AGENTICORG_NETWORK_TELEGRAM_BOT_TOKEN, AGENTICORG_NETWORK_TELEGRAM_WEBHOOK_SECRET Empty The bot's token and webhook secret, from the secret manager.
AGENTICORG_NETWORK_TELEGRAM_CHAT_LIMIT_PER_HOUR, AGENTICORG_NETWORK_TELEGRAM_GLOBAL_LIMIT_PER_MINUTE 20 and 60 How many messages one chat may send in an hour, and the whole bot in a minute.
AGENTICORG_PLATFORM_SUBDOMAIN_APEX agenticorg.ai Shops without an address of their own get <shop>.<apex>. Needs custom domains through Firebase and one wildcard CNAME for the apex.
AGENTICORG_PLATFORM_SUBDOMAIN_CAP 20 How many platform addresses may be given out, Firebase's limit per domain. Past it, a shop is asked to connect its own domain.
AGENTICORG_SHOPIFY_ENV_OPERATOR_TENANT_ID Empty The only tenant that may read the deployment's own SHOPIFY_* store settings. Every other shop uses the token it stored itself.

The payment hand-off has no switch of its own: each merchant chooses where buyers pay on the Sell Everywhere page. It needs UCP or ACP checkout on and, for Plural, a public address:

Setting Default What it does
AGENTICORG_PUBLIC_API_BASE_URL Empty The public https:// address of the AgenticOrg API. Plural payment links, the buyer's return page and the merchant's webhook URL are built on it, or on AGENTICORG_APP_URL when it is empty. Without either, Plural links are not offered.

Agent-executed payment and mandates (off by default)

These switches belong to the path where AgenticOrg charges through a payment provider against buyer mandates. It stays off until a payment-provider sandbox run has passed. A merchant that chose where buyers pay keeps getting payment links whatever these say.

Switch Default What it does
AGENTICORG_GRANTEX_MANDATES_ENABLED Off A checkout Complete gets Intent, Cart and Payment mandates from Grantex and verifies them.
AGENTICORG_GRANTEX_MANDATE_CAPABILITY_EVIDENCE_ENABLED Off Sends your payment-capability check result to Grantex with the authority request.
PLURAL_PINE_LIVE_EXECUTION_ENABLED Off Registers the Plural executor, so an allowed checkout or refund can actually charge or pay back.
AGENTICORG_RBI_EMANDATE_AFA_LIMIT_MINOR_UNITS 1500000 (₹15,000) Later UPI AutoPay debits above this need RBI AFA.
AGENTICORG_RBI_EMANDATE_AFA_HIGHER_LIMIT_MINOR_UNITS 10000000 (₹1,00,000) The higher limit for insurance, mutual fund and credit-card bill debits.

Agent request signatures

Switch Default What it does
AGENTICORG_HTTPSIG_VERIFY_MODE log log checks and logs signatures and refuses nothing. enforce answers 401 to unsigned calls on the commerce API.
AGENTICORG_HTTPSIG_AUTHORITIES Empty The public host names a signature must cover. Set before enforce.
AGENTICORG_HTTPSIG_TAP_KEY_STORE_URLS Empty Where Visa TAP keys are looked up. Empty means no TAP key is found.
AGENTICORG_HTTPSIG_SIGNATURE_AGENT_ORIGINS Empty Which Web Bot Auth signature agents are trusted.
AGENTICORG_HTTPSIG_REGISTRY_LOOKUP_ENABLED Off Records a verified agent's DID and scheme ids from the Grantex registry.
AGENTICORG_HTTPSIG_SIGN_OUTBOUND Off Makes AgenticOrg's own buyer agent sign its requests.
AGENTICORG_A2A_SCHEME_AGENT_IDS Empty AgenticOrg's own scheme agent ids, shown in its A2A agent card.

MCP server and merchant settings

Setting Default What it does
MCP server AGENTICORG_UCP_PROFILE_URL and AGENTICORG_UCP_AGENT_PROFILE Unset Point an MCP install at your UCP profile. Unset, no checkout tools appear.
MCP server MCP_NETWORK_DIRECTORY_URL and AGENTICORG_NETWORK_SERVICE_TOKEN Unset Network mode: one hosted server serves every listed shop, with list, search, checkout and payment-link tools and no tool that pays.
MCP server MCP_OPENAI_APPS_CHALLENGE Unset The ChatGPT app directory's domain-verification token, served at /.well-known/openai-apps-challenge. Unset, that path answers 404.
Merchant provider_policy.payments None Where buyers pay: shopify_cart or plural_hosted, set in the Payments step of Sell Everywhere. None means no payment link.
Merchant provider_policy.arbiter None Your order limits: per order, per day, items per order and currency, set in the Order limits step.
Merchant provider_policy.ucp.fulfillment.flat_rates None Your flat shipping fee, for a shop without Shopify, set in the policies step.
Merchant provider_policy.ucp.executor None Names the payment executor for agent-executed payment. None means no charge. It is not used while provider_policy.payments is set.
Merchant provider_policy.ucp.grantex_mandates None Names your Grantex commerce tenant and merchant for mandates.
Merchant provider_policy.acp.checkout_enabled False Your opt-in to ACP checkout.
Merchant provider_policy.arbiter.escalate_to_human False Copies refusals into your review queue. It never changes or delays a decision.

The order to turn things on

First run the release in staging with route enforcement and signatures in log, and UCP checkout and payments off. Then change one switch at a time, each followed by its smoke test.

  1. Staging runOwner: Platform operator

    Route enforcement log, signatures log, UCP checkout off, payments off. Check the ledger has no missing rows.

    Blocked / exception

    Fix every missing ledger row before production.

  2. Route enforcementOwner: Platform operator

    Keep enforce in production, the default.

    Blocked / exception

    Use log only for a short, recorded window.

  3. Request signaturesOwner: Platform operator

    Start in log. Move to enforce only when the expected callers show as verified and the owner records the decision.

    Blocked / exception

    Set log again; requests are answered again.

  4. UCP profile and checkoutOwner: Platform operator

    Turn on for a published merchant and run the UCP smoke test. Merchants that chose where buyers pay now get payment links.

    Blocked / exception

    Set false; routes answer 404 and stored sessions are kept.

  5. Sell everywhere networkOwner: Platform operator

    Set the service token on the API and the hosted MCP server, turn on the network, then the Telegram bot.

    Blocked / exception

    Set false; the directory and gateway answer 404 and listings are kept.

  6. Grantex mandatesOwner: Platform operator

    Turn on before agent-executed payments, merchant by merchant.

    Blocked / exception

    Set false; production refuses agent-executed decisions again.

  7. Agent-executed paymentsOwner: Platform operator

    Only after the sandbox run passes, one merchant at a time.

    Blocked / exception

    Unset and restart; checkout answers executor_unavailable.

The ACP feed and checkout, mandate-capability evidence, witnessing, retention and audit-chain sealing follow the same pattern, one at a time.

Turning something back off

Set the switch back and restart the service. For worker tasks (witness, retention, sealing), change the worker and scheduler too.

  • Data already written is kept: decisions, ledger rows, sessions, orders and payment records.
  • To stop one merchant only, use its merchant setting instead, for example set its payment method to Off or remove its executor.

The full table, with the exact turn-on condition and rollback for each switch, is in the launch and rollback runbook.

Implementation references

This guide is checked against repository sources. Enabled features and deployed versions may differ by environment.