{"closure":{"playwright.api.config.ts":"dac5cbca4e3f8a0e99f0aedf6c175dcf3d4db9974fe2e0282c3644e521759ca0","src/lib/analytics-query.ts":"db91d1687058280bceeb565567dc77aa6c6284653732fdc47289a6cd23177655","tests/api/account.spec.ts":"7688509fe362ac3734697a5175efa8b2be196a79ac979baf0188719d3d53e894","tests/api/admin.spec.ts":"b0fdea8cfe0d03b59fcb0f9e8ef94d85a0f791c017584c0cfb12ebc6ad5f1cc2","tests/api/analytics.spec.ts":"4479369db9bfd8ae03ffe6a2cb724fa7c824a7ffe598399e514f8416807e664d","tests/api/annotations.spec.ts":"c9d61978f6d60f94039de66fb7bcff67ea3b1b5a5d7a5bcfee348de25e1c2eee","tests/api/auth.spec.ts":"6121e9229b00949e315df42d65e580e10bbcfb68fbf4e82b171e28518c6e2a3f","tests/api/boards.spec.ts":"caca79aed01444f8115403163e6c81e5478e86866958ef80a909a9a322458e31","tests/api/client.ts":"a3ad0bf45702c4b37a33c63999f9e93c9f40b56a97aade9c8ed69e2b8bf3befc","tests/api/collection.spec.ts":"2f03d7ffdf258b24437a1a5bc892c866eed4f5e2fa8f04023e73e50c4e373a84","tests/api/coverage/allowlist.ts":"71a436c3ddb8ef805b476569648435c79ba888aaa97b94147863c767a59105ad","tests/api/coverage/matcher.test.ts":"9897d46666e8bc89cd584b41d1820ec7b34bf48207ce6e6a8e94a0d28ffec8ed","tests/api/coverage/matcher.ts":"858a0ce9478bfd64fde2c65bf7c90705f7835d24b1b04fb4f1a0a89bb07040c0","tests/api/coverage/oracle.ts":"4692660860a33e466096b694d997bde6cb0a9d63cb5d219fbcbce0f8aee75aee","tests/api/coverage/recorder.ts":"5422bb6baba6163cf2ac3099c0051e758e3673948cbd8ff0e8bfc7fa6d9afb41","tests/api/coverage/report.ts":"d06d91e152c8076216af96bb01beb7e9d6578d701f8d600ef38235ed0b8d26a3","tests/api/coverage/reporter.ts":"12e2dc29d80de73d5b2e390e9469c82e6af44ee18f824f08c38faf35b80f751c","tests/api/docker/clickhouse-init/00-create-db.sql":"0ec0ce3bf7093ffae5ec6b97d9326c8c2b5f891263357fae7a3a05f1dc1bf7b3","tests/api/event-data.spec.ts":"b0375d3b137e7a5e600b07c1fb5fb354a337fe563f7394117cde92112bab160e","tests/api/fixtures.ts":"a6e99b9682c97b3c015c408918a9ea495a59dae9375a50b30b5cadaaa797b509","tests/api/global-setup.ts":"8a17b355252cc69322236f625e3b162304377b264a5fc6178d0e58f2cff35c8f","tests/api/helpers/auth.ts":"e2edb84e546b6a55e3c0b67fb70ad8295658785f0e3fd91087a643bbd894452c","tests/api/helpers/constants.ts":"10a5eab96e6bc390c5e17f9ca291dd9dc1e56f8a5a913d1148228b103a1e3e8d","tests/api/helpers/dates.ts":"cf7425d109702c543a0b6b9ab13c1aaec890f21a6f93266d6ce691b1b9ee8cec","tests/api/helpers/entities.ts":"f118ae235e974f2e3b5c0da89263c4407d1e8b94b19a7876a50b4bb7de2ad47f","tests/api/helpers/totp.ts":"9a0d4d4d89c17e48482412be13bc56231406c678e1258d46482386f7cbd4fb3e","tests/api/links.spec.ts":"d7773c020469e309c0cb24ddfc9eb5ea680e174d19a88926e5b334717e05cf7a","tests/api/mcp.spec.ts":"d719f1981ecb034ac8f95d4c18bbafc56d3a686df21c3b02b82b05e1ba11b3d5","tests/api/paths.ts":"37fec7c0b2b39f8871ef81fdb957169582de9177859c181a760d23ff8e0ed061","tests/api/pixels.spec.ts":"ca4ca6e0f2b84d1e3cbc9cf66ba798228f1cc09c1b8660c8017f946af0b17357","tests/api/replays.spec.ts":"7aca0a889821d1c272363d5532d4d5ade778a6f5cc2145f77bab2b28a463f785","tests/api/report-migration.spec.ts":"408aaa2269ee760f5a327af95709daa8ffa6aba9032db55caf97965a2e50dfc4","tests/api/reports.spec.ts":"6084ef8f7d0e4b6cd62b38f58cb314653a23caf3c72247275f75b61778f51c08","tests/api/revenue.spec.ts":"40b77bb5ae23997dbdd69bcf08f70b89aeec052909c645aa4da3155ffb38a639","tests/api/seed/dataset.ts":"1580d072b8d72b5c2e14620e0da90afa2d30125febd1d98cce1585f6e84e9a25","tests/api/seed/ids.ts":"ff3bf44ca74fd6bd32a3d07e3eff6ec5b0587758556390c3d392ded691d6d4f6","tests/api/seed/ingest.ts":"2cc74272453d209a5c5d9e85b151a096606560c1793e1ceeadf28e181f2869b0","tests/api/seed/setup.ts":"0c284310d8b2acd6e167f1820adda6207959c97772aa297b7603ae51d781f35c","tests/api/seed/state.ts":"628866c42e6f3de4a5b0581bdcfce386a89a398511677f93c9f5a330824a869c","tests/api/segments.spec.ts":"ffdd4122ec24e9a254bfaaf896047bb6d3e5b455d7628a9ff44c140123d8158c","tests/api/session-data.spec.ts":"68436f242740c895e8fa8c2ddaf5fe4caedabf06ff2b443bb575dd3f62407356","tests/api/sessions.spec.ts":"9ae05a3ff440e873e3c87cc06a2ba5fb662a71a99b2d8b1f355038a716a74c9e","tests/api/shares.spec.ts":"c77a4a50907310c61e76be4fcec69f6d630b5838890dd3faeacafb452a1d8738","tests/api/system.spec.ts":"9e9a54c22070404ec45bd2c4ecb40dd6fbae02d3303e66b612a2f04cdfaee64f","tests/api/teams.spec.ts":"0d502f7c2c6b45db5a20e1a749c62d266beee53e215aeb92a38c4caa8ded8692","tests/api/tsconfig.json":"2524fa32c02f11e975566c1cef26de1d642c0c7b67acc9da2d417b9b0630db11","tests/api/two-factor.spec.ts":"a04c15d5fd7f96daaccf2a8b6a32a373300258fdc5255e1bcaba0dd727535fc4","tests/api/users.spec.ts":"16badc29f6d17095a42db5632b88bd56cdfb5d277da2e22ebb9d4b2d1f2f574d","tests/api/websites.spec.ts":"5d5204e4d6de07daa5d0b2044fffe30c1f2b1142c84c064c300157ca0aaaa0f1"},"environment":{"absent":["API_SKIP_SEED","CI","NODE_OPTIONS","UMAMI_TEST_DB","UMAMI_TEST_PORT"],"after_identity_check":{"API_ALLOW_DESTRUCTIVE":"1"},"list_args":["test","--list","--config=rbw-api.config.ts","--workers=1","--retries=0","--max-failures=0"],"node_version":"v24.21.0","playwright_cli":"node_modules/@playwright/test/cli.js","playwright_version":"1.63.0","run_args":["test","--config=rbw-api.config.ts","--workers=1","--retries=0","--max-failures=0"],"variables":{"API_COVERAGE":"report","FORCE_COLOR":"0","HOME":"{suite_dir}","PATH":"/usr/local/bin:/usr/bin:/bin","PLAYWRIGHT_BASE_URL":"http://127.0.0.1:3000","PLAYWRIGHT_JSON_OUTPUT_FILE":"{report_file}","TZ":"UTC"}},"harness":{"package.json":"619310ccc2b2111a9e9c5a0bc744eead8f96bb8e461f7e69298988904decc076","rbw-api.config.ts":"5255cac95d8cb6c7e08b3f7d927847a56911cde0a2f6967300bd13bbaedf19c3"},"schema_version":1,"spec_files":["tests/api/account.spec.ts","tests/api/admin.spec.ts","tests/api/analytics.spec.ts","tests/api/annotations.spec.ts","tests/api/auth.spec.ts","tests/api/boards.spec.ts","tests/api/collection.spec.ts","tests/api/event-data.spec.ts","tests/api/links.spec.ts","tests/api/mcp.spec.ts","tests/api/pixels.spec.ts","tests/api/replays.spec.ts","tests/api/report-migration.spec.ts","tests/api/reports.spec.ts","tests/api/revenue.spec.ts","tests/api/segments.spec.ts","tests/api/session-data.spec.ts","tests/api/sessions.spec.ts","tests/api/shares.spec.ts","tests/api/system.spec.ts","tests/api/teams.spec.ts","tests/api/two-factor.spec.ts","tests/api/users.spec.ts","tests/api/websites.spec.ts"],"test_count":271,"tests":[{"file":"tests/api/segments.spec.ts","id":"07dd7f1831370773ea95-0051ef365ae33ba4d552","title_path":["Segments","DELETE /api/websites/{websiteId}/segments/{segmentId} deletes a segment"]},{"file":"tests/api/segments.spec.ts","id":"07dd7f1831370773ea95-712554267f33b887a3b3","title_path":["Segments","GET /api/websites/{websiteId}/segments/{segmentId} returns a segment"]},{"file":"tests/api/segments.spec.ts","id":"07dd7f1831370773ea95-84fba42eefa607391c18","title_path":["Segments","GET /api/websites/{websiteId}/stats accepts a segment filter"]},{"file":"tests/api/segments.spec.ts","id":"07dd7f1831370773ea95-87c7090a03728ee5edbf","title_path":["Segments","GET /api/websites/{websiteId}/segments lists segments by type"]},{"file":"tests/api/segments.spec.ts","id":"07dd7f1831370773ea95-aab9833bc42f29852994","title_path":["Segments","POST /api/websites/{websiteId}/segments validates and requires permission"]},{"file":"tests/api/segments.spec.ts","id":"07dd7f1831370773ea95-df51c00fac9bef1f6cbd","title_path":["Segments","POST /api/websites/{websiteId}/segments creates a segment"]},{"file":"tests/api/segments.spec.ts","id":"07dd7f1831370773ea95-e7f134f5befa9d949e63","title_path":["Segments","POST /api/websites/{websiteId}/segments/{segmentId} updates a segment"]},{"file":"tests/api/segments.spec.ts","id":"07dd7f1831370773ea95-fe21d02b284a40bdf1a8","title_path":["Segments","POST /api/websites/{websiteId}/segments creates a cohort"]},{"file":"tests/api/teams.spec.ts","id":"108557b632e2e5e30b60-1bcb75cc92419c8d6b50","title_path":["Teams","DELETE /api/teams/{teamId}/users/{userId} removes a member"]},{"file":"tests/api/teams.spec.ts","id":"108557b632e2e5e30b60-20d6f86e32cbcbc1c5f1","title_path":["Teams","POST /api/teams/{teamId} updates the team"]},{"file":"tests/api/teams.spec.ts","id":"108557b632e2e5e30b60-2445298f76ee4cf037f2","title_path":["Teams","POST /api/teams/{teamId}/users adds a member"]},{"file":"tests/api/teams.spec.ts","id":"108557b632e2e5e30b60-291a067399256a5c46bb","title_path":["Teams","POST /api/teams/join adds the caller to a team"]},{"file":"tests/api/teams.spec.ts","id":"108557b632e2e5e30b60-39b4c93cfab62070d5a0","title_path":["Teams","GET /api/teams/{teamId}/websites|boards|links|pixels list team resources"]},{"file":"tests/api/teams.spec.ts","id":"108557b632e2e5e30b60-4b4454d913e282fe9cb1","title_path":["Teams","POST /api/teams validates the body and requires authentication"]},{"file":"tests/api/teams.spec.ts","id":"108557b632e2e5e30b60-521fe8ab1a0980eac717","title_path":["Teams","GET /api/teams/{teamId}/users lists the members"]},{"file":"tests/api/teams.spec.ts","id":"108557b632e2e5e30b60-723a2ce7f0aa67ff5578","title_path":["Teams","GET /api/teams lists the caller teams"]},{"file":"tests/api/teams.spec.ts","id":"108557b632e2e5e30b60-7783765a9cefb78e214a","title_path":["Teams","DELETE /api/teams/{teamId} deletes the team"]},{"file":"tests/api/teams.spec.ts","id":"108557b632e2e5e30b60-8960370c18767c782f5a","title_path":["Teams","POST /api/teams/{teamId}/users/{userId} updates a member role"]},{"file":"tests/api/teams.spec.ts","id":"108557b632e2e5e30b60-dcebd37cb4c6875e670d","title_path":["Teams","GET /api/teams/{teamId} returns the team"]},{"file":"tests/api/teams.spec.ts","id":"108557b632e2e5e30b60-ece7a6a1b1f042c4f4d9","title_path":["Teams","GET /api/teams/{teamId}/users/{userId} returns a member"]},{"file":"tests/api/teams.spec.ts","id":"108557b632e2e5e30b60-ee6c002d3d8f54c24e74","title_path":["Teams","POST /api/teams creates a team owned by the caller"]},{"file":"tests/api/boards.spec.ts","id":"10c42be442093f2b66b0-08ad50c89c78897ddb73","title_path":["Boards","POST /api/boards requires a user that can create boards"]},{"file":"tests/api/boards.spec.ts","id":"10c42be442093f2b66b0-13fae155fa90f8376012","title_path":["Boards","POST /api/boards creates a board for the current user"]},{"file":"tests/api/boards.spec.ts","id":"10c42be442093f2b66b0-16e3e84faa49817603a2","title_path":["Boards","POST /api/boards/{boardId}/shares creates a share"]},{"file":"tests/api/boards.spec.ts","id":"10c42be442093f2b66b0-37db7f221c49f645377c","title_path":["Boards","GET /api/boards/{boardId} returns a board"]},{"file":"tests/api/boards.spec.ts","id":"10c42be442093f2b66b0-408410983f7bd1d6808e","title_path":["Boards","GET /api/boards/{boardId}/shares lists the board shares"]},{"file":"tests/api/boards.spec.ts","id":"10c42be442093f2b66b0-451098b4c8965b0169d8","title_path":["Dashboard","GET /api/dashboard returns the caller dashboard"]},{"file":"tests/api/boards.spec.ts","id":"10c42be442093f2b66b0-805ee742d6aecf2223c0","title_path":["Boards","GET /api/boards lists the caller own boards"]},{"file":"tests/api/boards.spec.ts","id":"10c42be442093f2b66b0-943fe2daf391ea6b0eaf","title_path":["Boards","POST /api/boards creates a board for a team"]},{"file":"tests/api/boards.spec.ts","id":"10c42be442093f2b66b0-b9c237b7abc6ae53a3fd","title_path":["Boards","POST /api/boards/{boardId}/clone copies a board"]},{"file":"tests/api/boards.spec.ts","id":"10c42be442093f2b66b0-c69012e903e532a8700e","title_path":["Boards","POST /api/boards/{boardId} updates a board"]},{"file":"tests/api/boards.spec.ts","id":"10c42be442093f2b66b0-d034e2b2f97fa7610e21","title_path":["Boards","POST /api/boards validates the body"]},{"file":"tests/api/boards.spec.ts","id":"10c42be442093f2b66b0-d6e4dd1033cc0f29fee2","title_path":["Dashboard","POST /api/dashboard creates or updates the caller dashboard"]},{"file":"tests/api/boards.spec.ts","id":"10c42be442093f2b66b0-eca9c975ba7ed9cf1881","title_path":["Boards","DELETE /api/boards/{boardId} deletes a board"]},{"file":"tests/api/system.spec.ts","id":"19fec53437319cd87246-ab7f97b2eb2b2856f5aa","title_path":["System","GET /api/config reports the runtime feature flags"]},{"file":"tests/api/system.spec.ts","id":"19fec53437319cd87246-cb0f7510ed2a34520d7b","title_path":["System","GET /api/scripts/telemetry serves a javascript response"]},{"file":"tests/api/system.spec.ts","id":"19fec53437319cd87246-dc6bf5fc7ae73020cf1c","title_path":["System","GET /api/heartbeat responds without authentication"]},{"file":"tests/api/mcp.spec.ts","id":"1a1b0bef50b628ad74e7-221909cf0d2d2373bdc9","title_path":["MCP API-key authentication","rejects anonymous, invalid-key and browser-session callers without OAuth discovery"]},{"file":"tests/api/mcp.spec.ts","id":"1a1b0bef50b628ad74e7-6dcad88ded875f74270b","title_path":["MCP API-key authentication","initializes, lists read-only tools and queries seeded analytics with an API key"]},{"file":"tests/api/mcp.spec.ts","id":"1a1b0bef50b628ad74e7-a24f99ddc8e999544c59","title_path":["MCP API-key authentication","enforces key-owner permissions and rejects a revoked key"]},{"file":"tests/api/two-factor.spec.ts","id":"2b187669858d7e459ce1-04eb58183faf4df43548","title_path":["Two-factor authentication","POST /api/2fa/verify rejects missing, invalid and non-partial tokens"]},{"file":"tests/api/two-factor.spec.ts","id":"2b187669858d7e459ce1-26453c546cedbe69548d","title_path":["Two-factor authentication","POST /api/2fa/disable turns 2FA off"]},{"file":"tests/api/two-factor.spec.ts","id":"2b187669858d7e459ce1-2686b9f08d1d517e3f90","title_path":["Two-factor authentication","POST /api/2fa/setup/initiate returns a secret and QR code"]},{"file":"tests/api/two-factor.spec.ts","id":"2b187669858d7e459ce1-2ace3b61148f34807599","title_path":["Two-factor authentication","POST /api/auth/login returns a partial token when 2FA is enabled"]},{"file":"tests/api/two-factor.spec.ts","id":"2b187669858d7e459ce1-2baaf979ed2b85f12729","title_path":["Two-factor authentication","POST /api/2fa/disable validates the body and password"]},{"file":"tests/api/two-factor.spec.ts","id":"2b187669858d7e459ce1-692d89c2930a9cd797d7","title_path":["Two-factor authentication","POST /api/2fa/verify completes the login with a TOTP code"]},{"file":"tests/api/two-factor.spec.ts","id":"2b187669858d7e459ce1-6e56f5bf15990dce70d3","title_path":["Two-factor authentication","GET /api/2fa/status reports the initial state"]},{"file":"tests/api/two-factor.spec.ts","id":"2b187669858d7e459ce1-83ba7d146fab23890ae1","title_path":["Two-factor authentication","POST /api/2fa/setup/initiate rejects users with 2FA enabled"]},{"file":"tests/api/two-factor.spec.ts","id":"2b187669858d7e459ce1-88a92d0c1fbac35e50cd","title_path":["Two-factor authentication","POST /api/2fa/verify rejects a code that was already used"]},{"file":"tests/api/two-factor.spec.ts","id":"2b187669858d7e459ce1-8bf054064322450210aa","title_path":["Two-factor authentication","POST /api/2fa/setup/cancel discards the pending setup"]},{"file":"tests/api/two-factor.spec.ts","id":"2b187669858d7e459ce1-9e7e1fd352df1d085fe0","title_path":["Two-factor authentication","POST /api/2fa/setup/initiate can be repeated and rejects wrong codes"]},{"file":"tests/api/two-factor.spec.ts","id":"2b187669858d7e459ce1-c840b1b1a18678171a9a","title_path":["Two-factor authentication","POST /api/2fa/setup/confirm rejects invalid bodies and missing setups"]},{"file":"tests/api/two-factor.spec.ts","id":"2b187669858d7e459ce1-e14929ec510bdc453f38","title_path":["Two-factor authentication","POST /api/2fa/verify accepts a backup code once"]},{"file":"tests/api/two-factor.spec.ts","id":"2b187669858d7e459ce1-f0cc6ce238a80c6c433d","title_path":["Two-factor authentication","POST /api/2fa/setup/confirm enables 2FA and returns backup codes"]},{"file":"tests/api/two-factor.spec.ts","id":"2b187669858d7e459ce1-f1cc00fbb0e162b618e3","title_path":["Two-factor authentication","POST /api/2fa/verify validates the body"]},{"file":"tests/api/two-factor.spec.ts","id":"2b187669858d7e459ce1-f9ed67d3978c2c0f37f8","title_path":["Two-factor authentication","POST /api/2fa/disable is forbidden while 2FA is required"]},{"file":"tests/api/sessions.spec.ts","id":"316fd374235e8aec2ba4-08017b38249689ec0fc4","title_path":["Sessions","GET /api/websites/{websiteId}/sessions/stats returns session totals"]},{"file":"tests/api/sessions.spec.ts","id":"316fd374235e8aec2ba4-106db21e902f53559954","title_path":["Sessions","GET /api/websites/{websiteId}/sessions/weekly returns a 7x24 grid"]},{"file":"tests/api/sessions.spec.ts","id":"316fd374235e8aec2ba4-41c33a3bf26c7e1bc92b","title_path":["Sessions","GET /api/websites/{websiteId}/sessions/{sessionId} returns a session"]},{"file":"tests/api/sessions.spec.ts","id":"316fd374235e8aec2ba4-8fe0af836241cb311525","title_path":["Sessions","GET /api/websites/{websiteId}/sessions lists sessions with paging"]},{"file":"tests/api/sessions.spec.ts","id":"316fd374235e8aec2ba4-aa8012f327f0ec02de62","title_path":["Sessions","GET /api/websites/{websiteId}/sessions/{sessionId}/properties returns session data"]},{"file":"tests/api/sessions.spec.ts","id":"316fd374235e8aec2ba4-bd9c86dfb0dbc3b04cdc","title_path":["Sessions","GET /api/websites/{websiteId}/sessions filters by distinctId and search"]},{"file":"tests/api/sessions.spec.ts","id":"316fd374235e8aec2ba4-f0c97198034715bfad3b","title_path":["Sessions","GET /api/websites/{websiteId}/sessions/{sessionId}/activity returns the event log"]},{"file":"tests/api/sessions.spec.ts","id":"316fd374235e8aec2ba4-f8e3b91376d37246f82a","title_path":["Sessions","DELETE /api/websites/{websiteId}/sessions/{sessionId}","DELETE /api/websites/{websiteId}/sessions/{sessionId} deletes a session"]},{"file":"tests/api/sessions.spec.ts","id":"316fd374235e8aec2ba4-ff3c1ebefe9ac8350cdf","title_path":["Sessions","GET /api/websites/{websiteId}/sessions validates params and permissions"]},{"file":"tests/api/analytics.spec.ts","id":"634c82c6846b68aa8d60-04221eabb2c4607b07a7","title_path":["Analytics","GET /api/websites/{websiteId}/metrics returns session, pageview and event metrics"]},{"file":"tests/api/analytics.spec.ts","id":"634c82c6846b68aa8d60-08de0e044c79ae6e175b","title_path":["Analytics","GET /api/websites/{websiteId}/active returns the active visitor count"]},{"file":"tests/api/analytics.spec.ts","id":"634c82c6846b68aa8d60-1641a55ddc3eedd83b19","title_path":["Analytics","GET /api/websites/{websiteId}/events/stats returns event totals"]},{"file":"tests/api/analytics.spec.ts","id":"634c82c6846b68aa8d60-17c280fd1cbe58f1c0e5","title_path":["Analytics","GET /api/websites/{websiteId}/stats applies filters"]},{"file":"tests/api/analytics.spec.ts","id":"634c82c6846b68aa8d60-3adb286849a9dd7f6508","title_path":["Analytics","GET /api/websites/{websiteId}/events lists events with paging"]},{"file":"tests/api/analytics.spec.ts","id":"634c82c6846b68aa8d60-4c884ec19081a94e532f","title_path":["Analytics","GET /api/websites/{websiteId}/stats returns totals for the range"]},{"file":"tests/api/analytics.spec.ts","id":"634c82c6846b68aa8d60-4daea3fe2dc1d228696b","title_path":["Analytics","GET /api/websites/{websiteId}/metrics validates type and permissions"]},{"file":"tests/api/analytics.spec.ts","id":"634c82c6846b68aa8d60-4feba0497518c7f6677e","title_path":["Analytics","GET /api/websites/{websiteId}/events/series returns per-event time series"]},{"file":"tests/api/analytics.spec.ts","id":"634c82c6846b68aa8d60-763e904a667aa972ef14","title_path":["Analytics","GET /api/websites/{websiteId}/pageviews returns pageview and session series"]},{"file":"tests/api/analytics.spec.ts","id":"634c82c6846b68aa8d60-7851262765c46281c034","title_path":["Analytics","GET /api/websites/{websiteId}/stats validates params and permissions"]},{"file":"tests/api/analytics.spec.ts","id":"634c82c6846b68aa8d60-9f3766732d777ae1a61f","title_path":["Analytics","GET /api/websites/{websiteId}/metrics supports search, limit and offset"]},{"file":"tests/api/analytics.spec.ts","id":"634c82c6846b68aa8d60-a6cbd36f4d942cec649a","title_path":["Analytics","GET /api/websites/{websiteId}/pageviews supports compare and validates unit"]},{"file":"tests/api/analytics.spec.ts","id":"634c82c6846b68aa8d60-ab7ea408a1f25cd9b672","title_path":["Analytics","GET /api/websites/{websiteId}/metrics/expanded returns rows with breakdown totals"]},{"file":"tests/api/analytics.spec.ts","id":"634c82c6846b68aa8d60-b7bdf3c405f90ddd3700","title_path":["Analytics","GET /api/websites/{websiteId}/values returns distinct values for a field"]},{"file":"tests/api/analytics.spec.ts","id":"634c82c6846b68aa8d60-ca196284341f1d1c0742","title_path":["Analytics","GET /api/websites/{websiteId}/values rejects unsupported types"]},{"file":"tests/api/analytics.spec.ts","id":"634c82c6846b68aa8d60-d5cfa78e1c5e95bf9b2e","title_path":["Analytics","GET /api/realtime/{websiteId} returns realtime activity"]},{"file":"tests/api/analytics.spec.ts","id":"634c82c6846b68aa8d60-fc394f76b1f0c5c43d17","title_path":["Analytics","GET /api/websites/{websiteId}/events filters custom events and validates"]},{"file":"tests/api/users.spec.ts","id":"7d08affc2ce055c80dfd-16c68970303d0a50a76d","title_path":["Users","POST /api/users/{userId} rejects unknown users and other users"]},{"file":"tests/api/users.spec.ts","id":"7d08affc2ce055c80dfd-270d433432ff404c9d70","title_path":["Users","POST /api/users requires an admin session"]},{"file":"tests/api/users.spec.ts","id":"7d08affc2ce055c80dfd-4f5ff70e4f6d5c2a33f8","title_path":["Users","POST /api/users rejects duplicates and invalid bodies"]},{"file":"tests/api/users.spec.ts","id":"7d08affc2ce055c80dfd-7341ba87d862abb09d9f","title_path":["Users","GET /api/users/{userId}/websites lists a user websites"]},{"file":"tests/api/users.spec.ts","id":"7d08affc2ce055c80dfd-7c13293ac9b3b61242d3","title_path":["Users","POST /api/users creates a user"]},{"file":"tests/api/users.spec.ts","id":"7d08affc2ce055c80dfd-8efff52597d70536bbfe","title_path":["Users","DELETE /api/users/{userId} deletes a user"]},{"file":"tests/api/users.spec.ts","id":"7d08affc2ce055c80dfd-98459cef92477d946940","title_path":["Users","GET /api/users/{userId} returns a user"]},{"file":"tests/api/users.spec.ts","id":"7d08affc2ce055c80dfd-9ff4abd2eddb5c1fdfa7","title_path":["Users","GET /api/users/{userId}/teams lists a user teams"]},{"file":"tests/api/users.spec.ts","id":"7d08affc2ce055c80dfd-aab4d6e9e797696e3908","title_path":["Users","POST /api/users/{userId} lets admins update role, username and password"]},{"file":"tests/api/users.spec.ts","id":"7d08affc2ce055c80dfd-fad55f69e5bdf14555c6","title_path":["Users","POST /api/users/{userId} ignores role changes from non-admins"]},{"file":"tests/api/revenue.spec.ts","id":"95762dd6328b1fb34b00-5f9866598bc27ef2dfe7","title_path":["Revenue","GET /api/websites/{websiteId}/revenue/metrics breaks revenue down by a dimension"]},{"file":"tests/api/revenue.spec.ts","id":"95762dd6328b1fb34b00-726e68f13794020f72fa","title_path":["Revenue","GET /api/websites/{websiteId}/revenue/stats returns revenue totals"]},{"file":"tests/api/revenue.spec.ts","id":"95762dd6328b1fb34b00-ad75835a64a2b5ad8755","title_path":["Revenue","GET /api/websites/{websiteId}/revenue/chart returns revenue per event over time"]},{"file":"tests/api/revenue.spec.ts","id":"95762dd6328b1fb34b00-c2edefea8787ed4fc7a2","title_path":["Revenue","GET /api/websites/{websiteId}/revenue/sessions lists sessions with revenue"]},{"file":"tests/api/report-migration.spec.ts","id":"9e05df4c4ad35fb9c2bb-56a67034014eb0b2bc44","title_path":["funnel definitions preserve IDs and scope saved stats to the website"]},{"file":"tests/api/report-migration.spec.ts","id":"9e05df4c4ad35fb9c2bb-57199bbab6e09e1f1a9e","title_path":["goal definitions preserve IDs and scope saved stats to the website"]},{"file":"tests/api/report-migration.spec.ts","id":"9e05df4c4ad35fb9c2bb-607295e027eab193de70","title_path":["GET retention matches legacy retention results and access"]},{"file":"tests/api/report-migration.spec.ts","id":"9e05df4c4ad35fb9c2bb-6ae049a77af174b37e5e","title_path":["GET funnels/stats matches legacy funnel results and access"]},{"file":"tests/api/report-migration.spec.ts","id":"9e05df4c4ad35fb9c2bb-71b6d522a43cf34ca337","title_path":["GET heatmaps matches legacy heatmap results and access"]},{"file":"tests/api/report-migration.spec.ts","id":"9e05df4c4ad35fb9c2bb-7c1fe317ab36bbab32c2","title_path":["GET goals/stats matches legacy goal results and access"]},{"file":"tests/api/report-migration.spec.ts","id":"9e05df4c4ad35fb9c2bb-c224c3df59581865b6af","title_path":["GET attribution matches legacy attribution results and access"]},{"file":"tests/api/report-migration.spec.ts","id":"9e05df4c4ad35fb9c2bb-c2a24816664bb98650e8","title_path":["GET journeys matches legacy journey results and access"]},{"file":"tests/api/report-migration.spec.ts","id":"9e05df4c4ad35fb9c2bb-e42b5af669757931329a","title_path":["GET breakdown matches legacy breakdown results and access"]},{"file":"tests/api/report-migration.spec.ts","id":"9e05df4c4ad35fb9c2bb-f0a67ecaea32de6088f0","title_path":["performance and UTM datasets reproduce legacy aggregates"]},{"file":"tests/api/collection.spec.ts","id":"a433e3f19c9ef30ef149-095689020008c9266c28","title_path":["Collection","POST /api/record rejects invalid and oversized payloads"]},{"file":"tests/api/collection.spec.ts","id":"a433e3f19c9ef30ef149-235f0a1f202d2d6ab82c","title_path":["Collection","POST /api/record requires a session token"]},{"file":"tests/api/collection.spec.ts","id":"a433e3f19c9ef30ef149-35134c47b00f13231b45","title_path":["Collection","POST /api/batch validates the body"]},{"file":"tests/api/collection.spec.ts","id":"a433e3f19c9ef30ef149-47ea8f79f988ce8ada8f","title_path":["Collection","POST /api/send requires exactly one of website, link or pixel"]},{"file":"tests/api/collection.spec.ts","id":"a433e3f19c9ef30ef149-4bfc29e5ff21924c9c5e","title_path":["Collection","POST /api/send accepts link and pixel sources"]},{"file":"tests/api/collection.spec.ts","id":"a433e3f19c9ef30ef149-53d750110037fdaee681","title_path":["Collection","POST /api/record stores replay and heatmap events for a recorded visit"]},{"file":"tests/api/collection.spec.ts","id":"a433e3f19c9ef30ef149-736d245073958b120779","title_path":["Collection","POST /api/send records custom, identify and performance payloads"]},{"file":"tests/api/collection.spec.ts","id":"a433e3f19c9ef30ef149-967e2aa3893294cf4d8f","title_path":["Collection","POST /api/send rejects invalid payloads"]},{"file":"tests/api/collection.spec.ts","id":"a433e3f19c9ef30ef149-a5653d6a1b52d6c632b1","title_path":["Collection","POST /api/record reports when the recorder is disabled"]},{"file":"tests/api/collection.spec.ts","id":"a433e3f19c9ef30ef149-c6173d424cf14939a45f","title_path":["Collection","POST /api/send rejects an unknown website"]},{"file":"tests/api/collection.spec.ts","id":"a433e3f19c9ef30ef149-e2fdfbecb3953728ffa4","title_path":["Collection","POST /api/batch processes each payload and reports per-item errors"]},{"file":"tests/api/collection.spec.ts","id":"a433e3f19c9ef30ef149-e57e693eee964235e414","title_path":["Collection","POST /api/send continues the visit when the cache token is sent"]},{"file":"tests/api/collection.spec.ts","id":"a433e3f19c9ef30ef149-ec94350f63cf0a472c54","title_path":["Collection","POST /api/send records a pageview and returns a cache token"]},{"file":"tests/api/websites.spec.ts","id":"a8a46cf2c841510f7755-1183d23fe138a52d7349","title_path":["Websites","GET /api/websites/charts returns chart data for accessible websites"]},{"file":"tests/api/websites.spec.ts","id":"a8a46cf2c841510f7755-308f841b24b2ce2bd430","title_path":["Websites","POST /api/websites validates the body"]},{"file":"tests/api/websites.spec.ts","id":"a8a46cf2c841510f7755-374f70e359fe1cc7cccf","title_path":["Websites","DELETE /api/websites/{websiteId} deletes a website"]},{"file":"tests/api/websites.spec.ts","id":"a8a46cf2c841510f7755-435a15bb4065a154cda7","title_path":["Websites","POST /api/websites/{websiteId} updates name and domain"]},{"file":"tests/api/websites.spec.ts","id":"a8a46cf2c841510f7755-4b84ab064fedbdfb4142","title_path":["Websites","POST /api/websites creates a website for the current user"]},{"file":"tests/api/websites.spec.ts","id":"a8a46cf2c841510f7755-4df65c3f968e12010ccf","title_path":["Websites","POST /api/websites/{websiteId} updates the recorder config"]},{"file":"tests/api/websites.spec.ts","id":"a8a46cf2c841510f7755-5939f1a952890a31b530","title_path":["Websites","POST /api/websites/{websiteId} manages the legacy share id"]},{"file":"tests/api/websites.spec.ts","id":"a8a46cf2c841510f7755-7c05211d7886b33f9b3f","title_path":["Websites","POST /api/websites/{websiteId}/reset clears the website data"]},{"file":"tests/api/websites.spec.ts","id":"a8a46cf2c841510f7755-7d02f818775da37802a7","title_path":["Websites","GET /api/websites/{websiteId}/export returns a zip archive"]},{"file":"tests/api/websites.spec.ts","id":"a8a46cf2c841510f7755-7ecb9c649534e35d99f7","title_path":["Websites","GET /api/websites?includeTeams includes team websites"]},{"file":"tests/api/websites.spec.ts","id":"a8a46cf2c841510f7755-89584ec8f193c8d84edb","title_path":["Websites","POST /api/websites/{websiteId}/transfer moves a website between owners"]},{"file":"tests/api/websites.spec.ts","id":"a8a46cf2c841510f7755-9d271e239351f7572f5c","title_path":["Websites","GET /api/websites/{websiteId}/recorder is public and CORS enabled"]},{"file":"tests/api/websites.spec.ts","id":"a8a46cf2c841510f7755-9f94be0e0ddf4dfc3980","title_path":["Websites","POST /api/websites requires a user that can create websites"]},{"file":"tests/api/websites.spec.ts","id":"a8a46cf2c841510f7755-a4bf2eb78f0b6a99a6e9","title_path":["Websites","GET /api/websites/{websiteId}/daterange returns the data window"]},{"file":"tests/api/websites.spec.ts","id":"a8a46cf2c841510f7755-ac063772b9773b3b7fb6","title_path":["Websites","POST /api/websites accepts a fixed id"]},{"file":"tests/api/websites.spec.ts","id":"a8a46cf2c841510f7755-acfe8f3e32bc850541af","title_path":["Websites","GET /api/websites lists the current user websites"]},{"file":"tests/api/websites.spec.ts","id":"a8a46cf2c841510f7755-c4e125cbc5faf357b3f7","title_path":["Websites","GET /api/websites/{websiteId} returns a website"]},{"file":"tests/api/websites.spec.ts","id":"a8a46cf2c841510f7755-f5208a28c46504377f46","title_path":["Websites","POST /api/websites creates a website for a team"]},{"file":"tests/api/shares.spec.ts","id":"a8d0046c1771c49b315b-2dcc786684bde90712f0","title_path":["Shares","share parameters gate which sections a share token may access"]},{"file":"tests/api/shares.spec.ts","id":"a8d0046c1771c49b315b-53d351a7dfc2a29fd174","title_path":["Shares","GET /api/websites/{websiteId}/shares lists website shares"]},{"file":"tests/api/shares.spec.ts","id":"a8d0046c1771c49b315b-58123eea64f5d19a4d5f","title_path":["Shares","GET /api/share/{slug} publicly resolves a share to a token"]},{"file":"tests/api/shares.spec.ts","id":"a8d0046c1771c49b315b-5b7d8d83e07d339a8968","title_path":["Shares","POST /api/share generates a slug when omitted"]},{"file":"tests/api/shares.spec.ts","id":"a8d0046c1771c49b315b-64eee49acc242b6fd870","title_path":["Shares","POST /api/share validates the body and checks entity access"]},{"file":"tests/api/shares.spec.ts","id":"a8d0046c1771c49b315b-795befea36547c34c74c","title_path":["Shares","POST /api/share/id/{shareId} updates a share"]},{"file":"tests/api/shares.spec.ts","id":"a8d0046c1771c49b315b-cae7720c9e3270e546c3","title_path":["Shares","POST /api/share creates a share for an entity"]},{"file":"tests/api/shares.spec.ts","id":"a8d0046c1771c49b315b-da84ace75a77822ac302","title_path":["Shares","DELETE /api/share/id/{shareId} deletes a share"]},{"file":"tests/api/shares.spec.ts","id":"a8d0046c1771c49b315b-e462b1a12a95443d9104","title_path":["Shares","GET /api/share/id/{shareId} returns a share"]},{"file":"tests/api/shares.spec.ts","id":"a8d0046c1771c49b315b-e5341da038a0e493ae9c","title_path":["Shares","POST /api/websites/{websiteId}/shares creates a website share"]},{"file":"tests/api/account.spec.ts","id":"ad4620ead4e6d9cc2627-075be49a618d6e9c28a3","title_path":["Account","Password","POST /api/me/password validates the body"]},{"file":"tests/api/account.spec.ts","id":"ad4620ead4e6d9cc2627-0be6cd9d7551dd7b6686","title_path":["Account","Password","POST /api/me/password rejects a wrong current password"]},{"file":"tests/api/account.spec.ts","id":"ad4620ead4e6d9cc2627-1a51c1bf882d7c9f0b6e","title_path":["Account","GET /api/me identifies API key callers"]},{"file":"tests/api/account.spec.ts","id":"ad4620ead4e6d9cc2627-25ecb73dfd3e0a306549","title_path":["Account","API keys","DELETE /api/me/api-keys/{keyId} rejects unknown and foreign keys"]},{"file":"tests/api/account.spec.ts","id":"ad4620ead4e6d9cc2627-352e7476092d86c99ea1","title_path":["Account","GET /api/me/websites supports includeTeams, paging and sorting"]},{"file":"tests/api/account.spec.ts","id":"ad4620ead4e6d9cc2627-3d75e61aa0d205e7a155","title_path":["Account","Password","POST /api/me/password rejects anonymous and API key callers"]},{"file":"tests/api/account.spec.ts","id":"ad4620ead4e6d9cc2627-42c3294901cc75ce2e7f","title_path":["Account","GET /api/me/teams lists the caller teams"]},{"file":"tests/api/account.spec.ts","id":"ad4620ead4e6d9cc2627-43e53811ece28eb89e38","title_path":["Account","GET /api/me/websites lists the caller websites"]},{"file":"tests/api/account.spec.ts","id":"ad4620ead4e6d9cc2627-44c33f64dd24dd68f175","title_path":["Account","API keys","GET /api/me authenticates with the new key"]},{"file":"tests/api/account.spec.ts","id":"ad4620ead4e6d9cc2627-7260e5aea70a62c968e9","title_path":["Account","GET /api/me/websites accepts session and API key callers only"]},{"file":"tests/api/account.spec.ts","id":"ad4620ead4e6d9cc2627-8065d500116e8aa5d921","title_path":["Account","API keys","POST /api/me/api-keys rejects anonymous and API key callers"]},{"file":"tests/api/account.spec.ts","id":"ad4620ead4e6d9cc2627-b26872ebdd85300316e8","title_path":["Account","GET /api/me/teams accepts session and API key callers only"]},{"file":"tests/api/account.spec.ts","id":"ad4620ead4e6d9cc2627-bf103454372656fa6439","title_path":["Account","API keys","POST /api/me/api-keys creates a key"]},{"file":"tests/api/account.spec.ts","id":"ad4620ead4e6d9cc2627-c3d7fae33073a6b675d2","title_path":["Account","GET /api/me returns the session user"]},{"file":"tests/api/account.spec.ts","id":"ad4620ead4e6d9cc2627-cae6146639b544d867e7","title_path":["Account","API keys","POST /api/me/api-keys validates the body"]},{"file":"tests/api/account.spec.ts","id":"ad4620ead4e6d9cc2627-cf117100e1121908b81b","title_path":["Account","API keys","DELETE /api/me/api-keys/{keyId} revokes the key"]},{"file":"tests/api/account.spec.ts","id":"ad4620ead4e6d9cc2627-e325586c793b09d14cb7","title_path":["Account","Password","POST /api/me/password changes the password and invalidates the session"]},{"file":"tests/api/account.spec.ts","id":"ad4620ead4e6d9cc2627-e8a211c3dd4eed563d49","title_path":["Account","API keys","GET /api/me/api-keys lists the caller keys without secrets"]},{"file":"tests/api/account.spec.ts","id":"ad4620ead4e6d9cc2627-e998a2be5843e272943e","title_path":["Account","GET /api/me requires authentication"]},{"file":"tests/api/account.spec.ts","id":"ad4620ead4e6d9cc2627-f35e8eb4b1c9396b4694","title_path":["Account","GET /api/me/teams supports paging and sorting"]},{"file":"tests/api/account.spec.ts","id":"ad4620ead4e6d9cc2627-f697bac1d2d35bd07707","title_path":["Account","API keys","GET /api/me/api-keys rejects anonymous and API key callers"]},{"file":"tests/api/annotations.spec.ts","id":"b24767b8199df0caea11-394195b082a8fe5b9db8","title_path":["Annotations","POST /api/websites/{websiteId}/annotations/{annotationId} updates an annotation"]},{"file":"tests/api/annotations.spec.ts","id":"b24767b8199df0caea11-3a3a6528117d6a12c470","title_path":["Annotations","GET /api/websites/{websiteId}/annotations/{annotationId} returns an annotation"]},{"file":"tests/api/annotations.spec.ts","id":"b24767b8199df0caea11-429147e990c43e58a65a","title_path":["Annotations","POST /api/websites/{websiteId}/annotations validates and requires permission"]},{"file":"tests/api/annotations.spec.ts","id":"b24767b8199df0caea11-817c9dfb81c6c7b613d6","title_path":["Annotations","GET /api/websites/{websiteId}/annotations lists annotations"]},{"file":"tests/api/annotations.spec.ts","id":"b24767b8199df0caea11-ec2924c2eaa661dda7e0","title_path":["Annotations","DELETE /api/websites/{websiteId}/annotations/{annotationId} deletes an annotation"]},{"file":"tests/api/annotations.spec.ts","id":"b24767b8199df0caea11-ff0deb0b55da637c564a","title_path":["Annotations","POST /api/websites/{websiteId}/annotations creates an annotation"]},{"file":"tests/api/event-data.spec.ts","id":"c1be57ddb9609574345c-226999c09bfef38199b0","title_path":["Event data","GET /api/websites/{websiteId}/event-data/values returns value counts for a property"]},{"file":"tests/api/event-data.spec.ts","id":"c1be57ddb9609574345c-3eb3f9a4dfbab932c271","title_path":["Event data","GET /api/websites/{websiteId}/event-data-pivot/property-series counts property values over time"]},{"file":"tests/api/event-data.spec.ts","id":"c1be57ddb9609574345c-48c3b95bfde16f6c87e6","title_path":["Event data","GET /api/websites/{websiteId}/event-data-pivot/array-series expands array properties over time"]},{"file":"tests/api/event-data.spec.ts","id":"c1be57ddb9609574345c-6411c832234ffdfb780f","title_path":["Event data","GET /api/websites/{websiteId}/event-data/events breaks properties down per value"]},{"file":"tests/api/event-data.spec.ts","id":"c1be57ddb9609574345c-685eb311a90540a10e6e","title_path":["Event data","GET /api/websites/{websiteId}/event-data/{eventId} returns the raw rows of one event"]},{"file":"tests/api/event-data.spec.ts","id":"c1be57ddb9609574345c-7370c66e810775af73c0","title_path":["Event data","GET /api/websites/{websiteId}/event-data lists events with their properties"]},{"file":"tests/api/event-data.spec.ts","id":"c1be57ddb9609574345c-752e78828edd0daa86b9","title_path":["Event data","GET /api/websites/{websiteId}/event-data/properties lists properties per event"]},{"file":"tests/api/event-data.spec.ts","id":"c1be57ddb9609574345c-9443ad1233b9e2e96fa5","title_path":["Event data","GET /api/websites/{websiteId}/event-data/stats returns totals"]},{"file":"tests/api/event-data.spec.ts","id":"c1be57ddb9609574345c-a6bdae01a3c1287bb8e0","title_path":["Event data","GET /api/websites/{websiteId}/event-data-pivot/date-series counts date properties"]},{"file":"tests/api/event-data.spec.ts","id":"c1be57ddb9609574345c-ac73d1a7ad5722210e31","title_path":["Event data","GET /api/websites/{websiteId}/event-data-pivot pivots event properties into columns"]},{"file":"tests/api/event-data.spec.ts","id":"c1be57ddb9609574345c-eb7106e5fa74161cc569","title_path":["Event data","GET /api/websites/{websiteId}/event-data-pivot/numeric-stats summarises a numeric property"]},{"file":"tests/api/event-data.spec.ts","id":"c1be57ddb9609574345c-ebacc1b9b90ebeb9f42e","title_path":["Event data","GET /api/websites/{websiteId}/event-data/fields lists the properties of an event"]},{"file":"tests/api/event-data.spec.ts","id":"c1be57ddb9609574345c-ef2896d9b88576014ee5","title_path":["Event data","GET /api/websites/{websiteId}/event-data-pivot/numeric-series aggregates numeric properties"]},{"file":"tests/api/pixels.spec.ts","id":"c920db8353fe166d58b7-02ed4ddcf85437f9c4ef","title_path":["Pixels","GET /api/pixels/{pixelId}/shares lists pixel shares"]},{"file":"tests/api/pixels.spec.ts","id":"c920db8353fe166d58b7-0be5ed3f99d296e55414","title_path":["Pixels","DELETE /api/pixels/{pixelId} deletes a pixel"]},{"file":"tests/api/pixels.spec.ts","id":"c920db8353fe166d58b7-28a1373b803440600da3","title_path":["Pixels","POST /api/pixels/{pixelId} updates a pixel"]},{"file":"tests/api/pixels.spec.ts","id":"c920db8353fe166d58b7-34ff7d343176d00d778e","title_path":["Pixels","POST /api/pixels validates the body and requires permission"]},{"file":"tests/api/pixels.spec.ts","id":"c920db8353fe166d58b7-606bd7458b78b596f03d","title_path":["Pixels","POST /api/pixels creates a pixel for the current user"]},{"file":"tests/api/pixels.spec.ts","id":"c920db8353fe166d58b7-77d4cc1b6468e1149a61","title_path":["Pixels","GET /api/pixels/charts returns chart data for accessible pixels"]},{"file":"tests/api/pixels.spec.ts","id":"c920db8353fe166d58b7-c875716e2aa3bf5a8527","title_path":["Pixels","GET /api/pixels/{pixelId} returns a pixel"]},{"file":"tests/api/pixels.spec.ts","id":"c920db8353fe166d58b7-dfc60835b008b54ff633","title_path":["Pixels","POST /api/pixels accepts a fixed id and a team"]},{"file":"tests/api/pixels.spec.ts","id":"c920db8353fe166d58b7-eab3dab26ef321076452","title_path":["Pixels","GET /api/pixels lists the current user pixels"]},{"file":"tests/api/pixels.spec.ts","id":"c920db8353fe166d58b7-f7d1db25a91a06a68bc7","title_path":["Pixels","POST /api/pixels/{pixelId}/shares creates a pixel share"]},{"file":"tests/api/reports.spec.ts","id":"d2ea609703bae19dcdce-158b1e8a342d0cfb0c05","title_path":["Report runs","POST /api/reports/goal returns goal completion"]},{"file":"tests/api/reports.spec.ts","id":"d2ea609703bae19dcdce-15c77e1db8bfeec1b6fd","title_path":["Saved reports","GET /api/reports/{reportId} returns a report"]},{"file":"tests/api/reports.spec.ts","id":"d2ea609703bae19dcdce-23825631982408dada90","title_path":["Saved reports","DELETE /api/reports/{reportId} deletes a report"]},{"file":"tests/api/reports.spec.ts","id":"d2ea609703bae19dcdce-3cd4a9938ec08eb501c3","title_path":["Report runs","POST /api/reports/breakdown returns rows grouped by field"]},{"file":"tests/api/reports.spec.ts","id":"d2ea609703bae19dcdce-401b54c9ba1b0e5693d0","title_path":["Report runs","POST /api/reports/utm returns views per utm parameter"]},{"file":"tests/api/reports.spec.ts","id":"d2ea609703bae19dcdce-564907f2e065f8508ab0","title_path":["Report runs","POST /api/reports/retention returns cohorts by day"]},{"file":"tests/api/reports.spec.ts","id":"d2ea609703bae19dcdce-82a629919db920584900","title_path":["Report runs","POST /api/reports/performance returns web vitals"]},{"file":"tests/api/reports.spec.ts","id":"d2ea609703bae19dcdce-99329411ba1abbc753d4","title_path":["Saved reports","POST /api/reports creates a report"]},{"file":"tests/api/reports.spec.ts","id":"d2ea609703bae19dcdce-a1588aa72b60a4bc204b","title_path":["Report runs","POST /api/reports/attribution returns attribution by channel"]},{"file":"tests/api/reports.spec.ts","id":"d2ea609703bae19dcdce-a81a7dca4e24dbfdd456","title_path":["Report runs","POST /api/reports/revenue returns revenue totals"]},{"file":"tests/api/reports.spec.ts","id":"d2ea609703bae19dcdce-ad3750f217845e48a1ed","title_path":["Report runs","POST /api/reports/journey returns paths between steps"]},{"file":"tests/api/reports.spec.ts","id":"d2ea609703bae19dcdce-b5b420baa0f4981fafd3","title_path":["Report runs","POST /api/reports/funnel returns conversion per step"]},{"file":"tests/api/reports.spec.ts","id":"d2ea609703bae19dcdce-b6370661dfc091fedf97","title_path":["Saved reports","POST /api/reports validates the body"]},{"file":"tests/api/reports.spec.ts","id":"d2ea609703bae19dcdce-b9ee8862bf90868cb621","title_path":["Saved reports","GET /api/reports lists reports for a website"]},{"file":"tests/api/reports.spec.ts","id":"d2ea609703bae19dcdce-c282dd3bfbae1d76ad34","title_path":["Saved reports","POST /api/reports/{reportId} updates a report"]},{"file":"tests/api/reports.spec.ts","id":"d2ea609703bae19dcdce-dfd2d8a141526f5391bd","title_path":["Saved reports","GET /api/websites/{websiteId}/reports lists the website reports"]},{"file":"tests/api/reports.spec.ts","id":"d2ea609703bae19dcdce-e821e7ee8777d684de08","title_path":["Report runs","POST /api/reports/heatmap returns click and scroll data"]},{"file":"tests/api/reports.spec.ts","id":"d2ea609703bae19dcdce-efbd0659b8eb45401406","title_path":["Report runs","POST /api/reports/{type} validates the discriminator and envelope"]},{"file":"tests/api/reports.spec.ts","id":"d2ea609703bae19dcdce-f51fa22ea8704ee1e12f","title_path":["Saved reports","POST /api/reports requires update access to the website"]},{"file":"tests/api/reports.spec.ts","id":"d2ea609703bae19dcdce-fbebd92e147b539c1568","title_path":["Saved reports","GET /api/reports validates websiteId and checks access"]},{"file":"tests/api/admin.spec.ts","id":"d4043a9dd1ab94463227-1e6da3f6ef6d175d5597","title_path":["Admin","Listings","GET /api/admin/teams requires an admin session"]},{"file":"tests/api/admin.spec.ts","id":"d4043a9dd1ab94463227-2031458699aa55405cfd","title_path":["Admin","User 2FA enforcement","POST /api/admin/users/{userId}/2fa toggles the user requirement"]},{"file":"tests/api/admin.spec.ts","id":"d4043a9dd1ab94463227-3b644358dbcd7bf8b5f0","title_path":["Admin","User 2FA enforcement","DELETE /api/admin/users/{userId}/2fa resets the user 2FA state"]},{"file":"tests/api/admin.spec.ts","id":"d4043a9dd1ab94463227-3d9dc21104405299224b","title_path":["Admin","User 2FA enforcement","POST /api/admin/users/{userId}/2fa validates the body"]},{"file":"tests/api/admin.spec.ts","id":"d4043a9dd1ab94463227-5491b04de0397ba17cee","title_path":["Admin","User 2FA enforcement","GET /api/admin/users/{userId}/2fa reports whether 2FA is enabled"]},{"file":"tests/api/admin.spec.ts","id":"d4043a9dd1ab94463227-6d4b4e1a06dd5cbf3913","title_path":["Admin","Team 2FA enforcement","POST /api/admin/teams/{teamId}/2fa validates the body"]},{"file":"tests/api/admin.spec.ts","id":"d4043a9dd1ab94463227-713f7312ff44c6ca736b","title_path":["Admin","Global 2FA enforcement","POST /api/admin/2fa/global toggles the global requirement"]},{"file":"tests/api/admin.spec.ts","id":"d4043a9dd1ab94463227-84e2af488766c5c26e2f","title_path":["Admin","Listings","GET /api/admin/websites supports search, sorting and paging"]},{"file":"tests/api/admin.spec.ts","id":"d4043a9dd1ab94463227-854fc96aece83b6e3560","title_path":["Admin","Global 2FA enforcement","POST /api/admin/2fa/global validates the body"]},{"file":"tests/api/admin.spec.ts","id":"d4043a9dd1ab94463227-8a613e981ba04ca835b8","title_path":["Admin","Listings","GET /api/admin/websites requires an admin session"]},{"file":"tests/api/admin.spec.ts","id":"d4043a9dd1ab94463227-8b70efbf2a4f762a1ecd","title_path":["Admin","User 2FA enforcement","POST /api/admin/users/{userId}/2fa requires an admin session"]},{"file":"tests/api/admin.spec.ts","id":"d4043a9dd1ab94463227-9962befee3f1c4a6f5c0","title_path":["Admin","Listings","GET /api/admin/websites lists every website with its owner"]},{"file":"tests/api/admin.spec.ts","id":"d4043a9dd1ab94463227-a08dbd5dfd8398e8b43e","title_path":["Admin","Team 2FA enforcement","POST /api/admin/teams/{teamId}/2fa toggles the team requirement"]},{"file":"tests/api/admin.spec.ts","id":"d4043a9dd1ab94463227-b23bb79014ec8cec6014","title_path":["Admin","Listings","GET /api/admin/users lists every user"]},{"file":"tests/api/admin.spec.ts","id":"d4043a9dd1ab94463227-b8719ae0894109ea8cf3","title_path":["Admin","User 2FA enforcement","GET /api/admin/users/{userId}/2fa requires an admin session"]},{"file":"tests/api/admin.spec.ts","id":"d4043a9dd1ab94463227-cbb58743f9119e456321","title_path":["Admin","Listings","GET /api/admin/teams supports search, sorting and paging"]},{"file":"tests/api/admin.spec.ts","id":"d4043a9dd1ab94463227-d556a214b2a855ee90c9","title_path":["Admin","Team 2FA enforcement","POST /api/admin/teams/{teamId}/2fa requires an admin session"]},{"file":"tests/api/admin.spec.ts","id":"d4043a9dd1ab94463227-d59a9aec58212ec5bb7b","title_path":["Admin","Listings","GET /api/admin/users requires an admin session"]},{"file":"tests/api/admin.spec.ts","id":"d4043a9dd1ab94463227-e0b3a13f5c0fc9dab90b","title_path":["Admin","Listings","GET /api/admin/teams lists every team with members"]},{"file":"tests/api/admin.spec.ts","id":"d4043a9dd1ab94463227-e13bc833032af06c74ea","title_path":["Admin","Global 2FA enforcement","POST /api/admin/2fa/global requires an admin session"]},{"file":"tests/api/admin.spec.ts","id":"d4043a9dd1ab94463227-f66a6886c481def325f6","title_path":["Admin","Listings","GET /api/admin/users supports search, sorting and paging"]},{"file":"tests/api/auth.spec.ts","id":"d748ac400d08b85935ef-071a64bab71e396d49e8","title_path":["Auth","POST /api/auth/login returns a token and the user"]},{"file":"tests/api/auth.spec.ts","id":"d748ac400d08b85935ef-47259542c63262799718","title_path":["Auth","POST /api/auth/verify rejects anonymous, invalid and API key callers"]},{"file":"tests/api/auth.spec.ts","id":"d748ac400d08b85935ef-50dbf606de002d3c782f","title_path":["Auth","POST /api/auth/logout requires a session"]},{"file":"tests/api/auth.spec.ts","id":"d748ac400d08b85935ef-628dbb272a5a933830d0","title_path":["Auth","POST /api/auth/verify returns the current session"]},{"file":"tests/api/auth.spec.ts","id":"d748ac400d08b85935ef-7ac76a16131dbd49976e","title_path":["Auth","POST /api/auth/login rejects bad credentials"]},{"file":"tests/api/auth.spec.ts","id":"d748ac400d08b85935ef-b0dce7efe97a2c857def","title_path":["Auth","POST /api/auth/logout acknowledges the logout"]},{"file":"tests/api/auth.spec.ts","id":"d748ac400d08b85935ef-bbd0e7cfdfae390df569","title_path":["Auth","POST /api/auth/login matches usernames case-insensitively"]},{"file":"tests/api/auth.spec.ts","id":"d748ac400d08b85935ef-e6ebb25c80b34d1c56c5","title_path":["Auth","POST /api/auth/login validates the body"]},{"file":"tests/api/replays.spec.ts","id":"f2eceda621385dd8a886-00c6affedcc8603df58c","title_path":["Replays","POST /api/websites/{websiteId}/replays/saved/{replayId} unsaves a replay"]},{"file":"tests/api/replays.spec.ts","id":"f2eceda621385dd8a886-2314e517c33b7c04fc28","title_path":["Replays","GET /api/websites/{websiteId}/sessions/{sessionId}/replays lists the replays of a session"]},{"file":"tests/api/replays.spec.ts","id":"f2eceda621385dd8a886-554b52bd840f7dd43ec8","title_path":["Replays","GET /api/websites/{websiteId}/replays lists recorded replays"]},{"file":"tests/api/replays.spec.ts","id":"f2eceda621385dd8a886-564cd765757d56d73f57","title_path":["Replays","GET /api/websites/{websiteId}/replays/{replayId} truncates the events with until, chunkIndex and eventIndex"]},{"file":"tests/api/replays.spec.ts","id":"f2eceda621385dd8a886-60a8b67a9136bf74652f","title_path":["Replays","POST /api/websites/{websiteId}/replays/saved/{replayId} saves a replay"]},{"file":"tests/api/replays.spec.ts","id":"f2eceda621385dd8a886-db0cd72d9f15cc0f0f71","title_path":["Replays","GET /api/websites/{websiteId}/replays/{replayId} returns the recorded events"]},{"file":"tests/api/links.spec.ts","id":"f3986e67d50a5ed8c69e-3558a29d91f109860213","title_path":["Links","GET /api/links/charts returns chart data for accessible links"]},{"file":"tests/api/links.spec.ts","id":"f3986e67d50a5ed8c69e-3dcd8e869b221bd66678","title_path":["Links","POST /api/links accepts a fixed id and a team"]},{"file":"tests/api/links.spec.ts","id":"f3986e67d50a5ed8c69e-7a8ce9aeac5d2de57ff5","title_path":["Links","POST /api/links/{linkId}/shares creates a link share"]},{"file":"tests/api/links.spec.ts","id":"f3986e67d50a5ed8c69e-982e75340b2c0b8aea4c","title_path":["Links","POST /api/links/{linkId} updates a link"]},{"file":"tests/api/links.spec.ts","id":"f3986e67d50a5ed8c69e-992e751b7a4fbc8ca48e","title_path":["Links","GET /api/links lists the current user links"]},{"file":"tests/api/links.spec.ts","id":"f3986e67d50a5ed8c69e-a0ac9c149b598f37445d","title_path":["Links","POST /api/links creates a link for the current user"]},{"file":"tests/api/links.spec.ts","id":"f3986e67d50a5ed8c69e-abd1194c44dee0306f7a","title_path":["Links","POST /api/links validates the body and requires permission"]},{"file":"tests/api/links.spec.ts","id":"f3986e67d50a5ed8c69e-d55dd6fe7d31970d361d","title_path":["Links","GET /api/links/{linkId}/shares lists link shares"]},{"file":"tests/api/links.spec.ts","id":"f3986e67d50a5ed8c69e-eb39b9b7e7191d359c96","title_path":["Links","DELETE /api/links/{linkId} deletes a link"]},{"file":"tests/api/links.spec.ts","id":"f3986e67d50a5ed8c69e-f3d50dac4a2c2c2f4ee7","title_path":["Links","GET /api/links/{linkId} returns a link"]},{"file":"tests/api/session-data.spec.ts","id":"f70b76a45487d86640db-1419c19414ad44f89a38","title_path":["Session data","GET /api/websites/{websiteId}/session-data/properties lists session properties"]},{"file":"tests/api/session-data.spec.ts","id":"f70b76a45487d86640db-1b781e4f753b69a24f59","title_path":["Session data","GET /api/websites/{websiteId}/session-data/stats aggregates activity per property value"]},{"file":"tests/api/session-data.spec.ts","id":"f70b76a45487d86640db-540bb6b815927099847e","title_path":["Session data","GET /api/websites/{websiteId}/session-data/date-series counts date properties"]},{"file":"tests/api/session-data.spec.ts","id":"f70b76a45487d86640db-70a30f81ae02e1a74f92","title_path":["Session data","GET /api/websites/{websiteId}/session-data-pivot pivots session properties into columns"]},{"file":"tests/api/session-data.spec.ts","id":"f70b76a45487d86640db-7b44f4200c486570e375","title_path":["Session data","GET /api/websites/{websiteId}/session-data/array-series expands array properties over time"]},{"file":"tests/api/session-data.spec.ts","id":"f70b76a45487d86640db-b5d96c92a619a9c5a394","title_path":["Session data","GET /api/websites/{websiteId}/session-data/numeric-stats summarises a numeric property"]},{"file":"tests/api/session-data.spec.ts","id":"f70b76a45487d86640db-e3712635cd90b7dedb9e","title_path":["Session data","GET /api/websites/{websiteId}/session-data/property-series counts property values over time"]},{"file":"tests/api/session-data.spec.ts","id":"f70b76a45487d86640db-e5856526cfee46e60707","title_path":["Session data","GET /api/websites/{websiteId}/session-data/numeric-series aggregates numeric properties"]},{"file":"tests/api/session-data.spec.ts","id":"f70b76a45487d86640db-f2a842c8d7d5c71b550d","title_path":["Session data","GET /api/websites/{websiteId}/session-data/values returns value counts for a property"]}],"umami_commit":"ec0ff50388c264ed8ce46f00967e92f7e71476ae","verifier_lock_sha256":"02bbc5b10532547afd19c513a436e1f9c751b831b2c48efa01350283186e9812"}