Channel revenue tends to arrive as an afterthought. Partners get a spreadsheet, a shared inbox, a bolted portal on a second URL, and an access model that was never designed to carry outside identities. The attribution question — which partner sourced this deal — gets answered by a free-text field somebody types during forecast prep.

Actionary treats channel revenue as first-class. A partner is a first-class record. A share is a first-class row. A partner sign-in is a separate identity, on its own cookie scope. The substrate carries the primitives; the partner surface is what they compose into.

Partners are an entity, and attribution is a column

Partners live as a registered entity, the same way accounts and contacts do — same list views, same filters, same Related To picker, same audit trail. Partner types, partner statuses, and partner tiers ship out of the box.

Attribution runs on one column on the deal: which partner introduced it. Set it from the deal form, from an inbound partner-registration form (resolved via portal session or submitter email), or through the agent. The deal owner still means the internal seller working the deal. Two columns, two questions answered — introducer and closer — with no per-tenant workarounds. Multi-party splits attach as attributes on the relationship between deal and partner.

The share is a single row — one library, one audit trail

Sharing a piece of collateral with a named partner is one row in the sharing table. The asset itself is the same content library your team already uses — file uploads served from the tenant’s private storage bucket with a freshly-minted 5-minute link, or a link asset pointing at a hosted deck or a vendor page.

There is no parallel partner document store to administer, audit, or back up. Same library, same sharing primitive, same audit-log entry per share. Revocation is a soft-revoke — timestamp set, done — and the asset disappears from the partner’s portal on the next load.

Every partner sees exactly what you granted. Scope is enforced on the server by filtering the sharing table on partner grants for the current portal session; cross-tenant or cross-partner reads are impossible by query shape.

Partner sessions live on a portal subdomain under a portal-only cookie, 30-day lifetime, opaque token in the partner session store. The admin app’s session cookie lives on the admin subdomain — a different host. A partner session physically cannot present at the admin API; the browser never sends the cookie. The reverse also holds.

Two identity planes, two cookie scopes, enforced by browser same-origin policy and a server-side filter that scopes every query by the current partner. Full posture at trust/security.

Sign-in is magic-link. The admin invites from the public-surface partners screen, the partner clicks through, the backend redeems the token, marks the partner active, and mints the session cookie. There is no partner password to breach, rotate, or reset.

Vanity domains for co-branded surfaces

A tenant CNAMEs a hostname at the portal domain and proves ownership with a DNS TXT record matching a randomly-generated 16-byte challenge. The certificate service issues a certificate only for a verified, active hostname — an unverified host gets nothing.

The portal loads branding on cold-load, applies colours, custom styling, favicon, and title from the tenant’s public-surface config. A vanity-domain visitor sees the tenant’s brand from the first paint. The co-branded portal wears your brand.

Agent parity across the partner surface

Five agent tools cover the partner asset-share flow — create a link asset, list public assets, share an asset with partners, list who has access, and revoke a share — and every one applies the same visibility gate as the human portal. The agent can share a deck with three partners from chat, revoke it a week later, and audit the whole thing through the same contract every human surface uses.

The takeaway

Partner revenue is architected in. Attribution is a column, sharing is a row, the portal is a separate identity plane, and the domain is co-branded on DNS you own. The revenue leader’s brief is at for CROs; the underlying surface model is at product/surfaces.