Traqlyte is the transparent, API‑first engine for cohort assignment and outcome tracking across web, email, and ads. Shine a light on what actually converts, then turn it up to 11.
Message × placement × color × incentive × timing: real campaigns are multivariate. Traqlyte was designed for that reality from day one, not bolted on after an A/B tool ran out of road.
Define factors and variants, auto‑generate cohorts, and keep users sticky to assigned arms across channels. Full and fractional factorial designs, not just A vs. B.
The same campaign_id + user_key + campaign_version always resolves to the same assignment. No surprises, no drift, replayable for audits.
Run full/fractional factorials with manual weights, or switch to ε‑greedy / UCB contextual bandits to adapt in real time as signal emerges, with exploration floors and cooldowns.
Web, email, ads, in‑app: any surface calls /assign and posts to /outcome. The variant a user sees in email stays coordinated with what they see on‑site.
No black boxes. Signed decision logs and schema‑first, warehouse‑ready exports show exactly which factor→variant combinations drove results.
First‑party user_key identifiers only. No IP‑based identity stitching, no third‑party enrichment, security logs kept separate from experimentation data.
campaign_version.POST /assign; the decision engine (full/fractional factorial, manual weights, or bandit) returns a cohort with a stable assignment_id.variants.POST /outcome (clicks, submits, purchases), tied back by assignment_id, accepted out of order and deduped.Traqlyte is the decision layer, not the renderer: your CMS, ESP, or ad platform still owns the page, the send, and the buy. Traqlyte just decides who sees what, and keeps score.
Assignment → render → outcome
{
"POST /assign": {
"campaign_id": "blog_signup_2025",
"user_key": "usr_8f3c9a1b",
"context": {"utm_source": "email", "device": "mobile"}
},
"response": {
"assignment_id": "asg_01H...",
"campaign_version": 1,
"cohort_id": "coh_v1_arm12",
"variants": {
"placement": "popup",
"cta_color": "blue",
"bonus": "ebook",
"message": "Join the insider list"
}
},
"POST /outcome": {
"assignment_id": "asg_01H...",
"event_type": "form_submit",
"dedupe_key": "evt_9bbf1"
}
}
Platforms like Optimizely bundle content authoring, experimentation, and personalization into one closed suite. That's a real option if you want to replace your CMS. Traqlyte is a different bet: keep the CMS, ESP, and ad tools you already run, and add a neutral, auditable decision layer that any of them can call.
| Traqlyte | All‑in‑one DXP suite (e.g. Optimizely) | |
|---|---|---|
| Scope | API‑first assignment & outcome service: one neutral layer any surface can call | Full suite: CMS/DXP, experimentation, feature flags, personalization under one vendor |
| Lock‑in | Open API, exportable data, swap frontends without rebuilding experiments | Decisions and content live inside the vendor's closed platform |
| Design model | Multivariate by design: factor‑based cohorts, full/fractional factorials, combinatorial control | Typically A/B‑centric, with multivariate as an advanced add‑on |
| Transparency | Deterministic assignments, signed decision logs, schema‑first warehouse exports | Decisioning logic largely opaque, reporting inside the vendor's UI |
| Integration surface | Two endpoints (/assign, /outcome), small, easy to audit and secure |
Large surface: visual editor, SDKs across 10+ languages, full content pipeline |
| Best fit | Teams that already own their CMS/ESP/ad stack and want precise, portable experimentation underneath it | Teams that want content authoring, experimentation, and personalization from a single vendor |
Both are legitimate approaches. Traqlyte just doesn't compete on being the suite; see the full breakdown in our FAQ.
We stay deliberately scoped to the experimentation and outcomes hub, so it's easy to reason about what Traqlyte will and won't do to your stack.
event_time/assign and posts to /outcomeuser_key onlyTwo endpoints, frozen behaviors. Bearer auth, TLS everywhere, idempotent by design.
Returns the existing assignment for (campaign_id, user_key, campaign_version) if one exists, or creates one and persists it.
curl -X POST https://api.traqlyte.com/assign \
-H "Authorization: Bearer $TRAQLYTE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"campaign_id": "blog_signup_2025",
"user_key": "usr_8f3c9a1b",
"session_id": "sess_42a91",
"context": {"utm_source": "email", "device": "mobile"},
"force_new": false,
"request_id": "req_f2e9f1"
}'
{
"assignment_id": "asg_01H...",
"campaign_id": "blog_signup_2025",
"campaign_version": 1,
"cohort_id": "coh_v1_arm12",
"variants": {
"placement": "popup",
"cta_color": "blue",
"bonus": "ebook",
"message": "Join the insider list"
},
"feature_snapshot": {
"utm_source": "email",
"device": "mobile",
"time_bucket": "evening"
},
"assigned_at": "2025-10-05T14:12:03Z"
}
Errors: 400 invalid campaign/context, 409 reassignment not allowed without force_new, 429 rate limited.
Attribution uses event_time, not receipt time. Duplicate (assignment_id, dedupe_key) pairs are ignored.
curl -X POST https://api.traqlyte.com/outcome \
-H "Authorization: Bearer $TRAQLYTE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"assignment_id": "asg_01H...",
"event_type": "form_submit",
"event_time": "2025-10-05T14:17:55Z",
"event_metadata": {"form_id": "signup_v1"},
"dedupe_key": "evt_9bbf1"
}'
{ "status": "ok", "outside_window": false }
Errors: 400 malformed payload or missing dedupe_key, 404 unknown assignment_id (optionally staged for later reconciliation).
/assign latency
p95 < 100ms warm cache
/outcome latency
p95 < 80ms
Warehouse consistency
< 5 min p95
GET /campaigns/{id} for read‑only config, POST /campaigns/{id}/publish to version. SDKs coming soon.Billed on monthly assignments and outcomes. One /assign call returns a variant combo; one /outcome call records a result. Idempotency keys mean retries never cost you twice.
Prove the model before you scale it.
500k assignments + outcomes / mo
Overage $0.50 / 10k
p95 assign < 150ms · 99.5% uptime
Get startedFor teams running bandits across channels.
5M assignments + outcomes / mo
Overage $0.40 / 10k
p95 assign < 100ms · 99.9% uptime
Get startedCustom scale, custom policies, dedicated support.
Custom volume & overage at contract
p95 assign < 75ms (or custom) · 99.99% uptime
Talk to usAdd‑ons available on any plan: extra environments, higher retention windows, dedicated throughput pools, custom dashboards, and experiment‑design services. Hard caps with warnings at 80% and 95% of plan limits; idempotency required on retries.
We minimize by default: Traqlyte operates on campaign, assignment, and outcome IDs with optional feature snapshots, no PII required to run experiments. Security logs and abuse mitigation are isolated from marketing data, with no IP‑based identity stitching. Data retention windows, encryption at rest and in transit, scoped API keys, and audit logs are built in. Bring your own consent flags and identity provider; we honor them at assignment and outcome time.
Use fractional factorials to learn main effects without exploding sample size, plus exploration floors, stop rules, and minimum‑detectable‑effect calculators to avoid false wins. Start with a few high‑leverage factors, add variants as signal appears, and graduate to bandits once volume justifies it, with confidence bounds and lift‑vs‑baseline reporting so you know a result is real before you scale it.
No. Traqlyte decides which variant a user sees and tracks which one wins; it doesn't render pages, send emails, or buy media. Your blog/CMS calls /assign on page render and posts /outcome on conversion; your ESP calls /assign at send time and reports opens/clicks the same way.
No: that's intentionally out of scope. AI can help generate and prune variant candidates, but deciding what content exists to test (e.g. spun copy, cross‑link candidates) is a job for a separate service that registers those options as variants. Traqlyte's job is choosing who sees which registered variant, and proving which one wins.