Benson measures how coupon and cashback browser extensions (Honey, Capital One Shopping, Rakuten and others) affect your store. This plugin connects WooCommerce to your Benson account:
bn_ext), which the plugin also keeps in the shopper’s WooCommerce session. When a coupon is applied in such a session, the plugin asks Benson whether the code is on your extension allowlist. If it isn’t, WooCommerce rejects the coupon with the message you wrote in Benson. Shoppers without an extension are never affected, and coupons you add to an order in wp-admin are never checked.bn_aff, only with consent). When a locked code is applied, the plugin asks Benson whether it applies in this session: it does for the shoppers that partner sent, and not when another partner sent the session or a coupon extension is active in it. Other coupons are never checked: the plugin reads which codes are locked (as hashes) from your site’s public config, at most every five minutes.Background jobs run on Action Scheduler (WooCommerce Status Scheduled Actions, group benson). The settings page shows the connection, the last heartbeat, coupon sync and order push, and the last error.
What it can’t do: the extension cookie only exists once the Benson script has seen an extension in that browser, so a code entered before detection (or with cookies disabled or not consented to) is judged by WooCommerce alone. Orders placed without consent arrive unlinked.
This plugin connects the store to Benson (https://trybenson.com), the service it is built for, at the API URL you set (by default https://api.trybenson.com). It sends:
/api/woocommerce/connect/start with the store’s address, name, currency and time zone, the address of the page to come back to, and a hash of a one-time secret the plugin keeps. Once you connect the store in Benson, your server sends the one-time code Benson returned, with that secret, to /api/woocommerce/connect/exchange and receives the site key, a policy key, the store’s name in Benson and its dashboard address.benson.js from the API URL, which then reads your site’s public config from /v1/c/<site key>. The script runs in the shopper’s browser and follows the consent mode you set in Benson./v1/c/<site key> and sends your site key to /v1/policy/heartbeat, so Benson can show the plugin is installed. On sites with partner code locks, the server also reads /v1/c/<site key> at most every five minutes when a coupon is applied, for the hashed list of locked codes.bn_ext note, the server sends your site key, the note (a session id, extension ids, an expiry and a signature) and the coupon code to /v1/policy/check. When a locked partner code is applied, it also sends the session’s partner from bn_aff (a network and partner id, or - for none), the Benson session id and the extension ids detected in the session./api/sites/<site key>/discount-codes/import, authenticated with your policy key./api/sites/<site key>/discount-codes/usage-summary, authenticated with your policy key./v1/f, without waiting for an answer. Requests from people are never sent. The benson_ai_fetch_enabled filter turns it off.utm_source from WooCommerce’s order attribution (never the referrer URL) and whether it’s a test order to /api/sites/<site key>/orders/import, authenticated with your policy key. No customer details are sent.Benson’s terms of service: https://trybenson.com/legal/terms
Benson’s privacy policy: https://trybenson.com/legal/privacy
benson_coupon_denied (action, $code, $result, $tag): a coupon was refused by the policy, just before WooCommerce shows the message.benson_policy_check_result (filter, $result, $code, $tag): Benson’s answer before WooCommerce acts on it. null means Benson didn’t answer (allowed). Return array( 'allow' => true ) or array( 'allow' => false, 'message' => '…' ).benson_loader_attributes (filter, $attrs): attributes on the benson.js tag, e.g. data-consent => required. true prints a bare attribute, false removes one.benson_coupon_sync_limit (filter, $limit): coupons per sync, newest first (1 to 5,000; default 5,000).benson_order_payload (filter, $payload, $order): the order Benson receives. Return false to skip the order. Only the documented fields are sent.benson_ai_fetch_enabled (filter, $enabled, $ua): whether to report this AI crawler request to Benson (default true).