One REST API over every object in the account, server-side SDKs for Node, PHP and Python, native mobile SDKs, a client-side JavaScript API, and an MCP server for assistants. Then automation rules and scheduled reports that keep running when nobody has the panel open.
No webview and no HTML. The app gets JSON and draws it in its own components, so it still looks like your app.
Your assistantConnected over MCPread + write, scoped
Which campaigns lost traffic last week, and what should I test next?
get_traffic_analyticsThree lost ground, and pricing lost the most. It is also the page your Enterprise audience lands on most often. It can draft that test and push it to staging without anybody opening the panel.
Pricing page−18%
Checkout−12%
Category−6%
The same objects the REST API exposes — this time as tools, with the permissions you granted.
SDKs and endpoints
Three ports of one endpoint.
Server-side, in the app, or in the page. Pick the one that fits where the decision has to land.
Server-side
Node, PHP and Python
One JSON endpoint with three ports. The caller supplies the user id and carries an opaque session id, so it works for a kiosk, a set-top box, or a page your framework renders before a browser ever sees it.
decide()identify()track()
Mobile
iOS, Android, React Native
Native SDKs with their own tracker, condition and action APIs — the same audiences and the same goals as the website, returned as JSON your components draw.
trackerconditionsactions
In the page
Client-side JavaScript API
Read the profile, fire a goal, ask for a decision or re-run a placement from your own script — useful when the page is a single-page app and nothing reloads.
profilegoalsplacements
1,500+
Brands running Personyze in production
4.6/5
G2CapterraCrozdesk
Average rating on G2, Capterra & Crozdesk
No exports
No nightly sync, and no second copy of the profile drifting out of date
One key
Everything the panel edits, over one endpoint.
Not a read-only feed of what happened. The same objects, created and changed from your own code.
CAMPAIGNS · ACTIONSreadcreatechange
Everything the campaign screen edits, from your own code.
Create a campaign, add actions to it, change their content and switch them on. These are the same records the panel writes, with the same versioning underneath, so an edit made by a script is recoverable exactly like one made by a person.
What you can do4
Create a draft and leave it off until somebody has looked at it.
Replace content on one action without touching the campaign around it.
Switch traffic between variations, or hand the split to the engine.
Duplicate a campaign into another account you own.
Worth knowing2
Versioning is per action — a content change creates a version, and the live one is the one visitors get.
Raw database writes never replicate — go through the API or the panel, or visitors keep seeing the old content.
GET POST PUT /rest/campaigns
AUDIENCES · MEMBERSreadcreatechange
Segments you build, or segments you feed.
An audience can be a set of conditions the engine evaluates, or a static list your own system keeps in step by adding and removing members as people qualify. Both kinds target anything on the platform.
What you can do3
Define conditions over behaviour, CRM fields, geography, device or cart value.
Push members one at a time or in bulk, and remove them when they no longer qualify.
Group pages so a rule means "the pricing pages" rather than a list of URLs.
Worth knowing2
A static audience is yours to maintain — nothing expires members for you.
Conditions are the panel’s conditions — the same operators, so a segment reads the same in both places.
POST /rest/audience_members
VISITORS · FIELDSreadcreatechange
One profile, whoever asks for it.
Read a profile, write your own fields onto it, or hand the engine an identity from your CRM so the website, the app, the email and a webhook are all talking about the same person rather than four anonymous sessions.
What you can do3
Identify a visitor with your own user id or an email hash.
Write custom fields onto the profile — plan, seats, renewal date, anything your system knows and the browser does not.
Read the profile back to decide something in your own code.
Worth knowing2
The identity is the join key — pass the same one everywhere and there is one profile; pass different ones and there are several.
A server-side session runs 90 minutes from the last call, keyed by that identity.
POST /rest/identify
PRODUCTS · ARTICLESreadcreatechange
Your catalogue, ranked for one person.
Push products or articles, keep prices and stock current, and let the recommendation engine rank against what you actually sell today rather than a nightly export of what you sold yesterday.
What you can do3
Upsert items with your own attributes, not just a title and a price.
Update stock and price on their own, without resending the catalogue.
Point at a feed and let it refresh on a schedule instead.
Worth knowing2
Out of stock is a filter, not a delete — the item keeps its history, so it ranks again the moment it is back.
Articles rank with the same engine as products, so content and commerce sit in one widget when you want them to.
PUT /rest/products
GOALS · CONVERSIONSreadcreatechange
What counts, reported from where it happens.
Define what a conversion is, then report one from your server when it happens somewhere the browser could never have seen it — a phone order, a signed contract, a refund that should take one back off the board.
What you can do3
Report a conversion with a value and a currency, from any caller.
Attribute it to the visitor identity you already pass everywhere else.
Read goals back so your own dashboard and ours are counting the same thing.
Worth knowing2
A goal reported twice counts twice — send your own idempotency key if the caller might retry.
Revenue is optional but it is what turns an A/B result into a number somebody outside marketing will act on.
POST /rest/goal_reached
REPORTS · ANALYTICSreadcreatechange
The same numbers the screens show.
Campaign performance, traffic, product statistics and A/B results, with the metric definitions the panel uses. Pull them on demand, or have them sent on a schedule to people who will never log in.
What you can do3
Pull a report by id, for any range the screen offers.
Schedule one daily, weekly or per campaign, to a list of addresses.
Read A/B results including confidence, so your own tooling can decide.
Worth knowing2
Read-only, on purpose — numbers are derived, so there is nothing here to write.
Definitions match the panel — a figure you pull is the figure somebody else sees on the screen, which is the whole point.
GET /rest/reports/:id
It keeps running
Rules, tests and reports that do not need you.
The parts that should happen without anybody deciding to make them happen — and the winner going live on its own once it is a winner.
Automation rules
When this, then that
Watch a segment, a goal or a feed and act on it — switch a campaign on, move somebody into a list, fire an event to your analytics. The rule runs on the schedule you set rather than when somebody remembers.
triggersconditionsactions
Scheduled reports
It arrives before the meeting
The report you would have exported, sent on a schedule to the people who ask for it — with the same breakdowns and the same metric definitions as the screen it came from.
dailyweeklyper campaign
Experiments
Two versions, one winner
Split traffic across variations, watch the numbers where you already watch them, and let the engine serve the winner once it is sure. Every caller starts serving it at the same moment — nothing to redeploy, nothing to remember.
splitsignificanceauto-serve
Assistants
Or let an assistant do the asking.
The MCP server puts the account behind an open protocol, so Claude, ChatGPT or any MCP client can read it and change it in conversation — with the permissions you granted, and revocable on its own.
MCP
Ask it about the account
“Which campaigns lost ground this month?” — and it reads the same performance numbers the panel shows, rather than a screenshot of them.
MCP
Have it build the draft
A campaign draft, an audience from a description, a page group, a goal. It comes back as a draft you open and check, not something already live.
MCP
Let it act on what it found
Move somebody into an audience, switch a campaign on, change a piece of content, open a support ticket — each one a tool it had to be granted.
What authenticates a server is not what authenticates an assistant, on purpose.
For your own codeA server-side API key
LivesOn your server, never in a page
ReachesEvery object in the account
RolledWithout touching your code paths
For an assistantAn OAuth 2.1 grant
LivesWith the MCP client, never with you
ReachesOnly the tools you allowed
RevokedOn its own, without rolling the key
Either way, a server-side decision runs in a 90-minute session window keyed by the identity you pass — so a phone, a page and a webhook can all be the same visit.
Questions
The things people ask before they wire it in.
Answered the way they would be on a call.
Do I have to use the JavaScript tag at all?
No. The REST API and the server-side SDKs make a decision from your own server and hand you the content to render — nothing has to run in the browser. Most accounts use both: the tag for the behavioural signal, the API for the decisions they want to own.
How does the same person stay the same person?
You pass an identity — your user id, an email hash, whatever your system already calls them. Every caller that passes the same identity reads and writes one profile, which is what stops the website and the app from making two different offers.
Can I create campaigns through the API, or only read them?
Both. Campaigns, actions, audiences, goals, catalogs and page groups can be created and changed, not just listed. Content changes go through the same versioning the panel uses, so a bad edit is recoverable.
What happens if your service is slow or unreachable?
A server-side call is yours to time out. Set a budget you are comfortable with, fall back to your default content when it is exceeded, and the page still renders. Nothing about the decision is load-bearing for your own rendering.
Is MCP a different product from the API?
No — it is the same account behind an open protocol. The tools an assistant sees map onto the same objects the REST API exposes, with permissions you grant and can revoke separately from your API key.
Do automation rules and scheduled reports need somebody logged in?
That is the point of them. Rules evaluate on their schedule and reports send on theirs, whether or not anybody has the panel open.
Get started
Wire it in once. Call it from everywhere.
Start with the REST API and add the pieces you need — server-side SDKs, the mobile SDKs, the MCP server, rules and reports. Nothing here is a different product; it is the same engine, answering a different caller.