Your partners log in and see only what’s theirs.
Buyers, suppliers, and traffic sources each get a workspace scoped to their own row — their leads, their volume, their payouts. Not your margin, not your buyers, not each other. The server enforces it, so the scope holds even when the interface doesn’t.

Three roles, three very different views
Every partner arrives at a workspace built around the one thing they came to do — and stops there.
A buyer sees what they bought
The leads they purchased, their bids, and a live view of their own caps — day, week, month, lifetime, used against limit — read from the same service the distribution engine enforces with. What they see is what is actually being enforced, so a “why did you stop sending?” email answers itself.
A supplier gets its own integration
API key and supplier id in one place, API docs generated from your real campaign fields, and a synchronous response on every post — accepted, rejected, duplicated, with the payout attached. No spreadsheet of field names emailed back and forth.
A traffic source runs its own tracking
Affiliates author their own postbacks instead of queueing behind you for a hand-crafted URL, and can point their own Meta pixel at the platform with the built-in CAPI preset — their credentials, their events, their conversions.
And none of them see your margin
Revenue and profit tokens, and the entire buyer namespace, are stripped from the autocomplete, locked in the editor, and rejected at save. Buyer names come back as “#42”. A partner can measure their own performance without ever learning what you sell their leads for.
Invite them, don’t onboard them
Send an invitation with an email and a role. They set their own password, and the account comes up already scoped to that role. Nobody is sharing a login, and nobody is waiting on you to provision anything.
Roles you define, not roles you inherit
Admin, buyer, and traffic source ship as defaults, and you can build custom roles from granular permissions when the defaults are the wrong shape. Two-factor can be required across every user in the workspace.
Hiding the menu is not access control
Plenty of partner portals scope by omission: the link isn’t rendered, so the data must be safe. It isn’t. Datahubb scopes on the server — the list is filtered to your own records before it is built, an access check runs on every read and every write, and a record you don’t own comes back 403 whether the request came from the app or from curl.
- Lists forced to the caller’s own records, whatever the request asks for
- Out-of-scope rows return 403 on read and on write alike
- On create, the owner is forced to the caller — spoofed payloads get remapped
- Admin-only tokens like revenue and profit are rejected at save, not blanked
Work your partners do without opening a ticket
Every one of these was an email to you at some point. That is the whole return on a portal.
And what never crosses the wall
Self-serve is only worth having if the boundary is real. Here is exactly where it sits.
Your margin, and every route to it
A traffic source’s postbacks are locked to payout. Revenue and profit are admin-only tokens, refused at save rather than quietly emptied — and the gate runs both ways, so they cannot strip an admin-set token either.
Who your buyers actually are
Buyer scopes are hidden from partner-facing editors and buyer company names are never looked up for them — they render as an id. The demand side of your business stays yours.
Everybody else’s rows
A partner’s list is filtered to their own records by the server, whatever the request asks for. Another partner’s record is a 403, not an empty state you have to trust.
Pricing, routing, and the guest list
Buyer prices, supplier payouts, campaign routing, filters, roles, and who gets invited in the first place stay on your side of the wall. Self-serve is a set of doors you open, one at a time.
Frequently asked questions
Give your partners a door, not a database.
Start your 14-day trial. Full platform access. Card required, no charge if you cancel during the trial.