Documentation Index
Fetch the complete documentation index at: https://docs.cryptique.io/llms.txt
Use this file to discover all available pages before exploring further.
Overview
Stay up to date with Cryptique releases, new features, and improvements.Subscribe to our changelog to get notified of new releases. Email hello@cryptique.io to join the mailing list.
March 2026
Week of Mar 24–30
Developer documentation
- New Groups SDK reference:
set_group,add_group,remove_group,get_group, event enrichment, andidentify()hydration. - Auto-Events rewritten to match the current SDK: enable/disable defaults, full event name catalog, JavaScript API, SPA path handling, and notes on
page_summary, errors, and performance events. - Cross-links and corrections across Installation, Quickstart, Glossary, Data Model, Events & Properties, Default Properties, User Profiles, Identify, People, Implementation Guide, Privacy, and GTM (including real auto-event names such as
element_clickandcopy_action).
Week of Mar 16–22
Auto Events — Major SDK Overhaul
- 15 auto-captured events (expanded from 8), organized into categories: navigation, interaction, visibility, form, media, error, and performance.
- New interaction events:
rage_click(3+ clicks on same element in 1s),dead_click(click on non-interactive element with no navigation),text_selection(≥3 chars selected),element_view(element ≥50% visible for ≥1s via IntersectionObserver). - New form events:
form_validation_error(HTML5invalidevent on a field),form_abandoned(page unload with form touched but not submitted; sent viasendBeacon). - New media events:
media_playandmedia_pausefor<video>and<audio>elements (2s per-element throttle). - New error events:
js_error(runtime errors and unhandled promise rejections),network_error(XHR status ≥400 or network failure). - New performance event:
page_performancefires ~1500ms afterwindow loadwith LCP, CLS, INP, FCP, and TTFB. - Renamed events:
click→element_click,scroll→page_scrollwith richer payloads. - Removed events:
input_changeandcopyreplaced by richer, lower-noise alternatives. - Standard Element Data Object: shared
element_datasub-object across all interaction events with tag, id, class, type, text, category, and viewport position; extended with media/image fields for relevant click types. - Per-event throttle/debounce:
page_scroll250ms debounce,text_selection300ms debounce + 1s cooldown,media_play/media_pause2s per-element throttle,element_viewfires once per element per load. - JS Runtime API:
Cryptique.disableAutoEvent(),Cryptique.enableAutoEvent(),Cryptique.setAutoEventsDisabledEvents(),Cryptique.getAutoEventsConfig(). - Storage: event payloads written to
auto_event_dataJSONB column; element fields extracted to dedicated indexed columns;event_categoryderived server-side. - Transport: normal events use
fetchwithkeepalive: true; unload events usenavigator.sendBeacon.
February 2026
Week of Feb 1–7
Configurable transaction columns
- Column set: Smart contract (chain), Function name, Transaction time, Tx hash, Block, From, To, Value.
- Required columns (contract, function, time) always on; rest toggleable and reorderable.
- Column config modal: checkboxes and drag-and-drop; selection persisted with table preferences.
- Categories (e.g. core, blockchain, addresses) for easier grouping in the modal.
Week of Feb 8–14
Transaction row & detail
- Dedicated transaction row component: consistent formatting, truncation for long hashes/addresses, copy-to-clipboard.
- Transaction detail view: full hash, block, from/to, value, input data snippet, status, gas (when available).
- Properties tab: all known fields (contract, function, args, chain, timestamp) in a structured layout.
- Link to block explorer (chain-specific) when chain and hash are known.
Week of Feb 15–21
Transactions filter module
- Filter bar for transactions: by contract (multi-select), time range, optional wallet or hash search.
- Filter state synced with URL or local state so “filtered view” is shareable or restorable.
- Combined with events and sessions filters so “events in range → sessions → transactions” flows feel consistent.
- Clear filters and “no results” state with suggestion to widen criteria.
Week of Feb 22–28
Cohorts in Analytics
- Filter by cohorts in Analytics using global filters; events are limited to users in the selected cohorts (multiple cohorts use “or” — user in any of them).
- Break down charts by Cohort, same as by Country or Device; choosing “Cohort” segments data by all your cohorts without picking them one by one.
- Cohort filters appear as a single chip with the cohort name and can be edited or removed from the filter bar.
User & cohort filters
- List-type user properties (e.g. roles, tags) support “Any in list” and “All in list” with the right operators and value pickers.
- Object-type properties (e.g. profile) let you pick a nested field (e.g. role, plan) in the same screen, with data type shown and no extra popup.
- Custom user property filters can use suggested values from your data where available.
- List and object handling in Cohorts and Users filters now matches Activity → Events.
Sessions page & tables
- Sessions page: list of sessions with duration, page views, first/last event, device, country.
- Session row: expand or click-through to session detail (timeline of pages and events).
- Alignment with events and transactions: same table styling, loading states, and empty states.
- Optional session-level filters (e.g. min duration, has event key) for funnel analysis.
On-chain table integration
- On-chain transactions table uses the same column config and filter module as the main Activity view.
- Transaction detail modal available from both Activity and any embedded transaction list.
- Team and contract scoping: only transactions for the team’s registered contracts appear; no cross-team leakage.
Polish & performance
- Shared data table styles: borders, density, hover, and focus for accessibility.
- Skeleton loaders and incremental load for large event/session/transaction lists.
- Error boundaries and inline error messages so one failed section doesn’t break the whole page.
- Backend: transaction list API supports filter params and returns contract name and chain; response shape stable for the new UI.
January 2026
Week of Jan 1–7
User journey filter semantics
- Filters (date, device, country, Web3 status, wallet net worth, etc.) apply only to the user list and to aggregate metrics.
- User detail, timeline, dapps, and tokens APIs ignore filters and return full history for the selected user.
- Documented contract: “filter to find users; then inspect anyone in full.”
- Metrics (unique users, geography, devices, activity charts) respect current filter set.
Week of Jan 8–14
Soneium wallet net worth
- Dedicated pipeline: Blockscout API for Soneium balance and token list; DexScreener for USD prices.
- Native SONE + ERC-20 token balances; aggregated USD per wallet and stored in wallet_networth.soneium.
- Rate limiting and retries (exponential backoff + jitter); timeouts to avoid hanging.
- On failure: return 0 or last-known value; never fail the whole aggregation.
Chain config expansion
- Central chain config: chain ID, name, API provider (Etherscan-compatible, Blockscout, etc.), transaction caps, block chunk size, and API offset limits.
- Dozens of networks supported (Ethereum, Base, Arbitrum, Polygon, Optimism, BNB, Avalanche, Soneium, Berachain, etc.).
- Per-chain transaction fetcher tuning so we stay within provider limits and avoid bans.
Week of Jan 15–21
Conversion events experience
- Dedicated Events view: list of events with key, count, last seen; filters by key, time, property.
- Sessions view: session list with duration, page views, device, location; link to event list for that session.
- Activity view: on-chain transactions for the team’s contracts; table with hash, block, from/to, value, time, function.
- Shared filter bar and filter modules (dropdowns, date range, multi-select) across events/sessions/activity.
- Event detail: payload, related sessions/users; session detail: pages, events, and linked identity.
Week of Jan 22–31
Preferences & persistence
- User preferences API and client state for table column visibility and order.
- Preferences keyed by team and optional user; defaults for new users.
- Conversion events tables (events, sessions, transactions) respect saved column sets.
- Last-used time range and filters considered for “restore previous session” (where implemented).
Transaction table behavior
- Transaction list: sort by time, filter by contract, time range, wallet (future).
- Display of contract name + chain; function name from decoded input where ABI is present.
- Value formatting (wei → human-readable; optional USD if price pipeline exists).
- Pagination and “load more” with stable ordering (transaction_time, id).
December 2025
Week of Dec 1–7
Identify & distinct ID
- Identify API: attach email, name, phone, and custom traits to user_id; stored on user_identities.
- distinct_id: optional stable cross-device ID; added to user_identities, sessions, events, and UTM event logs.
- Merge logic: same user_id with different distinct_id can be linked for analytics.
- Downstream: event ingestion can accept distinct_id; resolution to user_id where configured.
Week of Dec 8–14
Multi-website identity
- website_ids array on user_identities for users touching multiple properties.
- Queries can scope by single website or “any of these websites”.
- Cross-website user view (optional) for teams that need cross-property journey.
Custom properties
- Custom key-value on user_identities with validation (key format, value type).
- Property discovery: indexes and metadata for “which custom properties exist” per team/website.
- Filters in user list and dashboards can use custom properties (e.g. plan_type, signup_source).
Week of Dec 15–21
UTM event log schema
- Datetime columns converted to arrays where one UTM row represents multiple hits over time.
- Queries updated for array semantics; no loss of granularity.
- Migration script with validation and rollback path.
Table preferences
- Team-level table preferences: which columns to show, order, default sort for main tables.
- Stored per team and optional per user; UI reads preference and applies on load.
- Applied to user list, events list, sessions list (where applicable).
Week of Dec 22–31
Subscription enforcement
- Subscription-protected routes check team plan and status before serving.
- Grace period for expired subscriptions (e.g. 7 days) with warning in UI.
- Stripe Customer Portal link for self-service plan change and billing history.
- Client-side subscription context so UI can show upgrade prompts or feature gates.
Stability & observability
- Structured logging with request ID and team_id for tracing.
- Error classification (4xx vs 5xx) and safe error messages (no internal paths).
- Health endpoint extended with DB and optional cache checks.
October 2025
Week of Oct 1–7
Smart contract registry
- Contract entity: address, optional ABI, chain ID, and display name per team.
- Only contracts registered for a team are used for transaction matching.
- Support for multiple chains per team; contract list API with pagination and filters.
Transaction ingestion
- Transaction fetcher worker: block-range polling with configurable chunk size (e.g. 100k blocks).
- Per-chain API limits and backoff (e.g. Etherscan 10k results per request); rate limiting and jitter.
- Stored fields: tx hash, block number, from/to, value, timestamp, contract_id, team_id.
- Incremental append; duplicate hashes ignored for idempotency.
Week of Oct 8–14
User identity model
- Unified identity: one row per (user_id, team_id, website_id) with composite unique constraint.
- First/last visit, total page views, total time spent; first/last country and city.
- Device type, browser, OS from user-agent parsing (mobile/tablet/desktop).
- Optional Web3 fields: primary_wallet_address, other_wallets, wallet_type, chain.
Session–identity sync
- Every session create/update triggers identity upsert: new identity or merge into existing.
- Session IDs array on identity for “all sessions for this user”; no duplicate sessions.
- Migration of legacy session data into user_identities with preserved timestamps.
Week of Oct 15–21
Transaction–identity linkage
- Rule: link transaction to identity only if wallet matches identity’s primary or other_wallets (canonical lowercase).
- Contract must belong to the same team; team_id enforced on both transactions and identities.
- contract_transaction_ids array on identity; aligned to_value and from_value arrays (same length).
- Direction: to_address match → append to to_value; from_address match → append to from_value.
- Internal transfers (same user to self): two entries appended (in and out) for correct totals.
Value aggregation
- to_value/from_value as JSONB arrays; GIN indexes for “has transaction in range” queries.
- Full recompute: by team contracts → identities with wallets → transactions → match and overwrite arrays.
- Incremental: on transaction batch insert, fetch new txs, resolve contract and identities, append only.
- Array length invariant: len(contract_transaction_ids) == len(to_value) == len(from_value) enforced on write.
Week of Oct 22–31
Wallet net worth format
- wallet_networth schema: per-chain or per-asset breakdown; migration from legacy single-value format.
- Backward-compatible reads during migration; old clients still receive a valid structure.
Custom dashboards
- Dashboard entity: name, layout (grid), saved query references, and visibility (private/team).
- Row-level security so users only see dashboards they own or are shared with.
- Query execution with parameter binding and timeout; results cached for repeat views.
Device extraction
- User-agent → device_type (mobile/tablet/desktop) with fallback to “unknown”.
- Stored on session and rolled up to user identity for segment filters.
November 2025
Week of Nov 1–7
Public dashboards
- Shareable read-only link with optional expiry; no login required.
- Dedicated read-only DB role for public dashboard queries; no write or schema access.
- Token or slug in URL; rate limiting per link to prevent abuse.
Billing & Stripe
- Billing record per team for active Stripe subscription; plan ID, status, current period.
- Webhook handler for subscription created/updated/canceled/deleted; idempotent and verified with signing secret.
- No billing rows for free teams; Stripe as source of truth for paid state.
- Usage tracked separately (events, API calls) for future metering.
Week of Nov 8–14
Events table & primary keys
- New events schema with integer primary keys; raw_event_logs stores integer session_ids and user_ids.
- Ingestion: client sends external UUIDs; backend resolves to internal PKs and stores PKs only.
- Resolution strict: missing session or user → 4xx and event not stored.
- Event definition details API: joins back to sessions/user_identities to return external UUIDs in responses so client contract unchanged.
Week of Nov 15–21
User journey & events
- User timeline API: events filtered by external user_id via join on user_identities (internal PK in raw_event_logs).
- Stats/aggregates: distinct user counts use INTEGER casting on JSONB array elements and null-safe logic.
- Composite index on (team_id, website_id, event_key, time) for event drill-downs.
- Deprecation of old custom-events tables; one events pipeline and one schema.
Credits & ledger
- Team usage ledger: debits for events, API calls, etc.; credits for plan allowances or top-ups.
- Credit operations table for audit trail (grant, consume, expire).
- Billing logic migrated to ledger + operations; subscription downgrade applies to future periods only.
Week of Nov 22–30
Data architecture
- PostgreSQL 16 + TimescaleDB: hypertables for time-series (sessions, events); standard tables for relational data.
- JSONB for flexible event payloads and wallet_networth; GIN where needed.
- Documented scalability path: single DB → read replicas → optional event streaming.
- Backup and retention policy documented; point-in-time recovery options.
API operations & limits
- API operations table for per-team, per-endpoint call counts.
- Preparation for rate limits and plan-based caps (not yet enforced in product).
September 2025
Week of Sep 2–8
Authentication & tenants
- Email/password signup and login with secure token refresh.
- JWT-based sessions with configurable expiry; refresh flow without re-login.
- Team-scoped multi-tenancy: all data isolated by team; team members and roles supported.
- Website entity: multiple trackable properties per team with separate config and keys.
Session pipeline
- First-party session creation and updates via tracking API.
- Persisted fields: first/last visit, page view count, referrer, and geo (country/city).
- Server-side idempotency for duplicate requests; session continuity across tabs.
Week of Sep 9–15
Campaign & UTM model
- Campaign definitions with UTM parameter sets (source, medium, campaign, term, content).
- UTM event log: one row per UTM combination with aggregated counts and timestamps.
- Cascade rules: campaign changes propagate to UTM aggregates; no orphaned UTM rows.
- Indexes on (team_id, website_id, utm_) for fast campaign drill-downs.
Custom events (v1)
- Event ingestion accepting event key, optional payload, and session/user references.
- Event keys validated and normalized; invalid keys rejected with clear errors.
- Batch endpoint for up to 500 events per request; non-blocking processing.
Week of Sep 16–22
Event storage & keys
- Raw event log with JSONB payload; schema-on-read for arbitrary properties.
- Event key uniqueness and case handling; migration to fix legacy missing keys.
- Permissions aligned with team/website; RLS-style checks for event read/write.
UTM restructure
- UTM event log restructured to one row per UTM identity for accurate attribution.
- No more double-counting when the same UTM appears in multiple sessions.
- Backfill script for existing data; zero-downtime migration window.
Week of Sep 23–30
Campaign triggers
- Campaign definition updates trigger UTM log invalidation/rebuild where needed.
- UTM removal from a campaign correctly prunes or marks affected UTM rows.
- Documentation of campaign → UTM dependency graph for support and ops.
Stability
- Connection pooling and query timeouts to avoid long-running requests.
- Retry policy for transient DB errors on event and session writes.
- Health check endpoint for load balancers and monitoring.
Feedback
Have feature requests or found a bug? Let us know:- Email: hello@cryptique.io
- Support: Live Chat
Get Started
Start using Cryptique
SDK Reference
View all methods