MMeeton aiDocs
EN日本語

Platform

Technical reference

Everything the tag does in the visitor's browser and on the network, on one page: the single first-party cookie and the storage keys, how Safari and ad blockers change what is remembered, exactly what data reaches DynaMeet and where it is hosted, and the hostnames to allow in a CSP or firewall. Written so you can hand it to IT, legal or a customer as is.

In short
  • One first-party cookie, dynameetVisitorId, a random ID for one year. Nothing personal.
  • Three hostnames: app.dynameet.ai, api.dynameet.ai, api-ws.dynameet.ai. All outbound, all encrypted.
  • Hosted in the AWS Tokyo region. ISO/IEC 27001 and 27017 certified. No session replay, no keystroke capture.

Cookies & storage

Term

First-party versus third-party cookie, allow-list and CSP (Content Security Policy) are standard web-platform and security terms; your IT and legal teams will recognise them.

Meeton sets exactly one cookie, and it is first-party: it lives on your domain, is written by the script you installed, and holds only a random visitor ID. This page lists everything the tag keeps in the browser, why, and for how long.

Where the visitor ID lives

One first-party cookie on your domain. The widget frame holds no visitor cookie; the page passes the ID in.
Your domain · .example.co.jpcookie dynameetVisitorId · random ID · 1 year · set by your page · first-party · SameSite=Lax · shared by www. and go.
ID →
app.dynameet.ai · widget frameno visitor cookie · the page passes the ID into the frame

Third-party cookie blocking only affects the right-hand jar, which is empty.

The ID is a UUID generated in the browser with crypto.randomUUID(). It is written to localStorage and to a cookie on the registrable domain (.example.co.jp, not www.example.co.jp), so a visitor who moves between your subdomains stays one visitor. Both copies are refreshed on every page view, and if one is missing it is restored from the other.

Everything the tag stores in the browser

WhereNameWhat it holdsLifetime
Cookie (first-party)dynameetVisitorIdA random ID (UUID). No personal data, nothing derived from the visitor.1 year, refreshed on every visit. Set on the registrable domain with path=/ and SameSite=Lax. On Safari, see Browser behaviour.
localStoragedynameetVisitorIdA copy of the same ID, so a cleared cookie does not create a second visitor.Until the browser clears site data.
localStoragedynameetEngagedA flag that this visitor has engaged before (opened the chat, booked, downloaded), so the widget restores their conversation on the next visit instead of starting cold.Until the browser clears site data.
localStoragedynameetDismissalCount, dynameetLastDismissalTimestampHow many times the visitor closed a popup and when, so the widget backs off exponentially instead of nagging.Until the browser clears site data.
localStoragepopup & ad capsCounts only, so a visitor is never shown an ad or popup past the lifetime limit you set.Until the browser clears site data.
sessionStorageper-tab counts, widget layoutPopup and ad counts for this tab; the gutter the widget reserves at the page edge.Closes with the tab.
Widget frame (app.dynameet.ai)cwr_s, cwr_uRandom session and user IDs for the frame's own error monitoring (Amazon CloudWatch RUM), plus a language preference in storage. Nothing that identifies the visitor. Third-party cookie blocking refuses them with no effect on the widget.30 minutes / 30 days

What the cookie looks like

For a page at https://go.example.co.jp/pricing the loader writes, in effect:

Set by document.cookie
dynameetVisitorId=3f9c1a2e-7b44-4d8e-9c1f-2a6b5e8d4f10; expires=+365 days; path=/; SameSite=Lax; domain=.example.co.jp

The registrable domain is computed with the Public Suffix List, so example.co.uk and example.github.io are handled correctly. On localhost no domain attribute is set. The cookie is not HttpOnly, because it is written by JavaScript on your page rather than by a server, and no DynaMeet server ever sets a cookie on your domain.

When storage is blocked

Safari's "Block all cookies", private windows and some enterprise policies make every storage call throw. The loader wraps each read and write: the ID is then held in memory for the current page only, chat, booking and forms all still work on that page, and the tag reports to us that storage was blocked so analytics can account for it. Nothing on your page is affected.

Describing it in your cookie policy

The cookie is a pseudonymous identifier used to recognise a returning visitor. Whether it needs consent depends on your jurisdiction and your own policy; your legal team decides. Customers who list it usually describe it like this:

NameProviderTypePurposeExpiry
dynameetVisitorIdYour domain (first-party), set by Meeton aiFunctional / analyticsRecognises a returning visitor so their chat and bookings continue; holds a random ID only1 year
Tip

If your consent banner blocks scripts until the visitor accepts, load the Meeton tag the same way you load your analytics tag. The loader works whenever it runs; a late boot simply means the widget appears once consent is given.

Frequently asked

Is it a first-party or a third-party cookie?

First-party. It is written on your domain by code running on your page, exactly like your own analytics cookie. DynaMeet's own domains set no visitor cookie; the widget frame's error monitoring sets two random-ID cookies on app.dynameet.ai, which third-party cookie blocking refuses harmlessly.

Can anyone identify a person from the cookie?

No. It is a random value. A visitor becomes a named contact only when they give contact details, in chat, a booking or one of your forms, or when their company is recognised from the network they browse from.

What if cookies are blocked or cleared?

The ID also lives in localStorage, so a cleared cookie is restored. If all storage is blocked, the visitor is remembered for the current page only.

Why one cookie on the whole domain rather than per subdomain?

So a visitor who moves from www. to go. stays one visitor, and a form on one subdomain identifies the chat on another.

Browser behaviour

The widget works in every current browser on desktop and mobile. The differences are about memory, not function: Safari forgets a visitor after seven days of Safari use with no click on your site, private browsing forgets at the end of the page, and an ad blocker may hide the widget entirely. In every case your site keeps working exactly as before.

Browser matrix

Browser or settingWidgetVisitor rememberedWhat happens
Chrome, Edge, Firefox (desktop & Android)FullFullDefault behaviour: one visitor for a year across visits and subdomains.
Safari (macOS & iOS)FullLimitedSafari deletes everything a script stores, our cookie and its localStorage copy alike, after 7 days of Safari use without a click or tap on your site (24 hours after an ad click). A visitor who clicks on your site at least weekly stays known; one who comes back after longer looks new. No vendor's tag can avoid this.
Private browsing · "Block all cookies"FullOffStorage is refused, so the ID is held in memory for the current page only. Chat, booking and forms all still work on that page.
Ad blocker · strict tracking protectionLimitedOffSome lists block the script or our API. Then nothing renders and nothing is recorded: no error, no effect on your site.
Bots & crawlers (Googlebot, headless browsers…)OffOffThe tag exits immediately, so crawlers never see the widget and never count as visitors. SEO is unaffected.
Older browsers (roughly pre-2022)OffOffThe script needs modern browser APIs (crypto.randomUUID, modern fetch and WebSocket); where they are missing it does nothing, silently.

Safari and Intelligent Tracking Prevention

Apple's ITP deletes all script-written storage, cookies and localStorage alike, once the visitor has used Safari for 7 days without clicking, tapping or typing on your site. Scrolling does not count, and nothing our script writes can reset that clock; only the visitor's own interaction does. This affects every vendor equally.

Two things the loader does to make the best of it:

  • It rewrites the cookie on every page view, so the 7-day window always starts from the latest visit rather than the first.
  • It keeps the localStorage copy and the cookie in sync, so a visitor who clears one but not the other is still recognised.

What you will see in reports: a Safari visitor who returns after more than a week appears as a new visitor. Once they identify themselves again, in chat, a booking or a form, the two records are linked to the same contact.

Phones

The widget is designed and measured on iPhone and Android. It adapts to the on-screen keyboard, respects viewport-fit=cover safe areas, and the same single first-party cookie applies. Every browser on iOS is WebKit, so Chrome on an iPhone behaves as Safari does, including ITP.

Ad blockers and corporate networks

Your visitors are on their own networks, so a filtered network usually only matters for your own staff on the office network or VPN, which is where demos and acceptance testing happen. If the widget does not appear on a work machine:

  1. Open the browser's Network tab and reload. If meeton.js is blocked or the request to api.dynameet.ai fails, a list is blocking it.
  2. Allow-list app.dynameet.ai, api.dynameet.ai and api-ws.dynameet.ai in the blocker or proxy. See Domains & CSP for the full list.

Frequently asked

Does it work on phones?

Yes. The widget is designed and measured on phones, adapts to the keyboard, and the same single first-party cookie applies.

Our IT uses a strict ad blocker. Will the demo work?

Possibly not on that machine: a list that blocks our hostnames hides the widget. Allow-listing app.dynameet.ai, api.dynameet.ai and api-ws.dynameet.ai fixes it.

Does a blocked visitor break anything on our page?

No. Every failure path ends with the tag doing nothing. Your page, your forms and your other scripts behave as if the snippet were not there.

Data & security

From the visitor's browser we receive the pages they view, where they came from, their browser and language, and, only if they engage, their chat messages, bookings, downloads and the contact details they type into your forms. Everything travels over encrypted connections to DynaMeet, and nowhere else, and is stored encrypted in Japan.

How data flows

Your page + tagpages, referrer, language, forms
Widget framechat, booking, downloads · app.dynameet.ai · nothing stored here
→
DynaMeetHTTPS api.dynameet.ai · WSS api-ws.dynameet.ai · encrypted in transit and at rest · hosted in Japan
→
Your dashboard · your CRMHubSpot / Salesforce, if connected

Two outbound connections from the visitor's browser, both encrypted. Nothing connects to your servers.

What we receive

WhenDataUsed for
Every visitorPage URLs and in-page navigation, the referring page, browser language, browser user-agent, scroll depth and dwell timeVisitor timeline, journeys, analytics
Every visitorIP address (seen on our side, recorded with the visit)Country, and the visitor's company via a business IP lookup
When they engageChat messages, meeting bookings, document views and downloads, ad and popup views and clicksThe conversation, the booking, the Library and Ads reports
When they fill in your formsRecognised contact fields only: email, first and last name, company, phone, job title, department, website, plus fields you map explicitlyIdentifying the visitor, filling the CRM; stops once the visitor is known
From our emailsA contact reference carried in the link (dmContactId)Tying a click from an outreach email to the visit that follows

What we do not collect

  • No screen recording or session replay of visitors.
  • No keystrokes outside the recognised contact fields above; passwords and payment fields are never read.
  • No data from other websites. The cookie is first-party and the ID is meaningless elsewhere.
  • No third-party scripts, unless you configure LinkedIn conversion tracking, in which case LinkedIn's own tag is loaded.

Hosting and AI processing

The service and all stored customer data live in the Amazon Web Services Tokyo region (ap-northeast-1). One exception to name: AI responses are generated by Google Gemini, and those requests may be processed by Google outside Japan. The DPA, the sub-processor list and the security whitepaper are published at dynameet.ai/en/security.

Each team has a Data & Privacy setting. When it is on, anonymised, statistically processed data may be used to improve the product, which may include AI models, as the Terms of Service describe. Turning it off applies going forward and changes nothing about how the product works for that team.

How the form watcher behaves

The tag watches the forms already on your pages for recognised contact fields, so a visitor who fills in your contact form becomes a known contact without a second form.

  • A value is sent when the visitor leaves the field, not on submit, and held as a staged record.
  • It becomes a contact only once the submission is confirmed: your CRM receiving it, a HubSpot success message or redirect, or a thank-you page. An unconfirmed record expires.
  • Fields it does not recognise are ignored. It stops reading once the visitor is identified.

Security policies

AreaPolicy
Where the tag runsOnly on the domains listed in your settings, as exact names or wildcards. Unlisted sites are refused, so a copied snippet collects nothing. Inline embeds declare the page they sit in and are checked the same way.
Tenant isolationEvery record is keyed to your team. Visitors, conversations and contacts are never visible to another customer.
Dashboard sign-inEmail and password, or Google single sign-on limited to your allowed company domains. MFA can be required for the team. Access can be restricted to an IP allow-list. Roles (Owner, Admin, Editor, Viewer) limit what each member can change.
Abuse protectionPublic widget endpoints are rate-limited per source IP, and AI conversations per visitor, so a flood cannot run up your usage or ours.
Service gateA team that is cancelled, paused or over its plan limit stops being served within a minute; the tag on their site does nothing from then on.
Change historyEvery settings change is logged with who changed what, before and after, in the team's activity log.
EncryptionTLS for every connection from the browser and from your CRM, and encryption at rest for stored data.
Certifications & auditsISO/IEC 27001:2022 (information security) and ISO/IEC 27017:2015 (cloud security), certified June 2026 by SGS Japan under ISMS-AC accreditation. Regular vulnerability assessments.
Support accessDynaMeet staff can open your team for support only: access is time-limited, every action is logged, and you can disable it in your settings.
People & processAn information security policy in operation, security training for every employee, access rights management and NDAs, all audited under the ISO certifications.

Frequently asked

Someone copies our teamId from the page source. Can they run our widget on their site?

No. Every request carries the page's origin, and anything not on your allow-list is refused before it reaches your team's data.

Can DynaMeet staff see our data?

Only for support, and only on your terms: staff access to a team is time-limited, every action is logged, and you can switch it off in your settings.

Can we force SSO and MFA for everyone on our team?

Yes. SSO is enabled per team with the company domains that may sign in; MFA is required per team; both are visible to admins as a per-member status.

Can we lock the dashboard to our office network?

Yes. Network access restriction limits sign-in to the IP addresses you list; other teams a person belongs to are unaffected.

Is our data used to train AI?

Only if your team's Data & Privacy setting is on, and then only as anonymised, statistically processed data, as the Terms of Service describe.

Domains & CSP

Everything is outbound from the visitor's browser; nothing connects inbound to your network and nothing is installed on your servers. If your site uses a Content Security Policy, allow three DynaMeet hostnames. A corporate firewall or proxy your own staff browse through needs those three plus one more.

Our hostnames

HostnamePurposeProtocolCSP directive
app.dynameet.aiThe script (meeton.js) and the widget, calendar and form framesHTTPSscript-src, frame-src
api.dynameet.aiConfiguration, chat, forms, bookingsHTTPSconnect-src
api-ws.dynameet.aiThe live connection: messages arriving in real time, page changesSecure WebSocket (wss)connect-src
snap.licdn.com (optional)Only if you configure LinkedIn conversion trackingHTTPSscript-src, connect-src
dynameet-client-uploads.s3.ap-northeast-1.amazonaws.comLibrary documents and images, fetched by the widget frame itself. Firewall / proxy only, not your CSPHTTPS—

Ready to paste into a CSP

Add these sources to the directives you already have. If your policy has no frame-src, browsers fall back to child-src and then default-src, so make sure one of them allows the frame.

Content-Security-Policy
script-src  https://app.dynameet.ai;
frame-src   https://app.dynameet.ai;
connect-src https://api.dynameet.ai wss://api-ws.dynameet.ai;

The inline config line (window.DynaMeetConfig = …) is an inline script. If your CSP forbids inline scripts, either give it a nonce like your other inline snippets, or move the assignment into a file you already serve.

With a nonce
<script nonce="{{nonce}}">window.DynaMeetConfig = { teamId: "YOUR_TEAM_ID" };</script>
<script async defer src="https://app.dynameet.ai/meeton.js"></script>

Firewalls and proxies

Usually your firewall does not matter: your visitors are on their own networks. It matters only for people browsing through a filtered network, typically your own staff on the office network or VPN, which is where your demo and acceptance testing happen. Allow the three hostnames above plus the S3 host for Library files.

  • WebSockets blocked. The widget still loads and chat still works over HTTPS; only the live push of new messages falls back to the next page view. Allowing wss://api-ws.dynameet.ai restores it.
  • Inbound. Nothing. The tag's connections are all outbound from the visitor's browser to DynaMeet; nothing reaches your servers.
  • The one thing that reads your site is the AI knowledge-base crawl, if you enable it under Chat → Knowledge. It fetches your public pages over ordinary HTTPS like a visitor would, so a bot block or geo block on your site can refuse it.

Frequently asked

Our site is public. Why would our firewall matter?

Usually it does not: your visitors are on their own networks. It matters only for people browsing through a filtered network, typically your own staff on the office network or VPN.

Do we need to open anything inbound on our firewall?

No. The tag's connections are all outbound from the visitor's browser to DynaMeet; nothing reaches your servers.

Do the inline embeds need extra rules?

No. The chat, calendar and form embeds are all frames from app.dynameet.ai, covered by the same frame-src entry.

© DynaMeet, Inc.Trust & securityContact