File DA-049 View as Markdown
Site profiles
Pick the profile that matches your site. It changes how strict the recommendation in each verdict is for each action, such as signup or checkout. It never blocks anything by itself: your code reads the recommendation and decides.
Set the profile
Set it in Sites › your site › Settings › General › Profile, or on the script tag:
<script>window.doubleagent=window.doubleagent||{q:[],push(){this.q.push(arguments)}};</script>
<script async src="https://cdn.doubleagent.so/v1/doubleagent.js" data-profile="ecommerce"></script>
The portal setting wins on the server. With auto (the default), the script picks a profile from the page:
| The page has | Profile |
|---|---|
| Shopify, a product schema, WooCommerce, an add-to-cart form | ecommerce |
| An article, or ad scripts (Google Publisher Tag, Prebid) | content |
| A HubSpot or Marketo form, or an ad click id in the URL | leadgen |
| Comment boxes or other user posts | social |
| A card form or payment script, and nothing above | payments |
A login or signup page on an app. host or a dashboard | saas |
| None of these | generic |
fintech, ticketing and gov are never picked by auto. Set them yourself.
How the recommendation is picked
A human always gets allow. For a bot or agent, Double Agent compares the chance it is not human with two thresholds for the action:
- at or above the challenge threshold:
challenge; - at or above the deny threshold:
deny(orstep_upwhere the table says so); - below both:
tag.
The server makes two exceptions: a session in quarantine gets challenge, and so does a human verdict that rests on no evidence at all (confidence 0).
These are the thresholds every profile starts from (generic uses them as they are):
| Action | Challenge at | Deny at |
|---|---|---|
pageview | Tag only | Tag only |
search | 0.85 | – |
login | 0.6 | 0.9, as step_up |
signup | 0.5 | 0.85 |
password_reset | 0.6 | 0.9 |
add_to_cart | 0.9 | – |
checkout | 0.8 | – |
payment | 0.8 | – |
gift_card | 0.5 | 0.85 |
promo | 0.6 | 0.9 |
post, message | 0.7 | 0.95 |
lead_form | 0.7 | – |
api_key | 0.6 | 0.9 |
| Your own action | 0.8 | – |
Each profile changes only a few rows:
| Profile | Changes |
|---|---|
generic | None |
saas | login: challenge at 0.7, step_up at 0.95 |
ecommerce | checkout: challenge at 0.85, so fewer shoppers get a challenge |
content | search is tag only |
social | signup: challenge at 0.45, deny at 0.85 |
payments | payment: challenge at 0.75 |
fintech | login: challenge at 0.5, step_up at 0.85 |
ticketing | add_to_cart and checkout: challenge at 0.6, deny at 0.9 |
leadgen | lead_form: challenge at 0.75 |
gov | Every built-in action is tag only. Public services should never turn people away |
rate_limit is a valid recommendation, but no profile returns it today.
If you set an agent behaviour policy to Enforce, its decision overrides the profile: a rogue or denied agent gets deny, a friendly one gets allow.
Next: Verdict for the rest of the fields, or Verify tokens on your server to act on the recommendation.