Skip to content

The Network

The OpenPartner Network is a federation hub. It sits between creators and brands and makes the marketplace work without forcing either side to give up their data.

What the Network is

A separate service (deployed at network.openpartner.dev) that holds:

  • Creator identities — one row per creator, one email, one profile, one set of public stats
  • Vendor registrations — each connected brand registers with their instanceUrl so the Network can call back into them
  • Offering rows — what each vendor publishes for creators to discover
  • PartnershipRequest rows — applications creators submit to vendors
  • Partnership rows — approved partnerships, holding a reference to the vendor’s internal Partner row

What the Network doesn’t hold:

  • Click data (lives on each vendor instance)
  • Commission data (lives on each vendor instance)
  • Payout data (lives on each vendor instance)

The Network is identity + matchmaking. Money + attribution stays on the vendor.

Why split it like this?

Brand data sovereignty. A brand running OpenPartner — hosted or self-host — owns their attribution and commission records end-to-end. The Network never sees specific click logs or payout amounts. If a brand wants out of the Network, their attribution data is theirs to keep.

This is also why self-host migration works: the Network is optional. A self-hosted brand can run OpenPartner with no Network connection, just direct-invited partners, and never share anything with us.

The federation flow

When a creator applies to a brand’s offering and the brand approves:

Creator Network Brand instance
│ │ │
├─ apply ──────────────►│ │
│ │ │
│ │ pending Request created │
│ │ brand admin notified │
│ │ │
│ │ admin clicks approve │
│ │◄─────────────────────────────┤
│ │ │
│ ├─ create Partner ────────────►│
│ ├─ create Link ───────────────►│
│ │ │
│ │◄────────── Partner+Link ─────┤
│ │ │
│ │ Partnership row written │
│ │ share URL computed │
│ │ │
│◄──── share URL email ─┤ │

Network calls into the brand using a vendor scoped key the brand minted at signup. That key has only the scopes federation needs (partners:write, links:write, clicks:write, commissions:read). It can’t access anything else on the brand’s instance.

The other direction — brand calls into Network — uses a vendor token the Network issued at signup. Same principle: scoped to vendor-level operations only.

Identity dedup

Every Creator on the Network is keyed by email. When a brand pushes a new partner via auto-enroll, the Network looks up by email:

  • Found — the partner is linked to the existing Creator. They show up in the brand’s UI with a “this creator is already on the Network from another vendor” hint, useful for vetting.
  • Not found — a new Creator is created.

So one human = one Network Creator, even if they partner with 50 different brands. Their profile + stats aggregate across every brand. Brands searching the directory see the same creator from any angle.

What’s metered

The Network is the only piece OpenPartner charges for usage on:

  • Hosted tier: bundled with your subscription (no extra)
  • Self-host tier: $29/month base + 3% of GMV from Network-sourced partners

A self-hoster with no Network connection pays $0 — the Network adds no value if you don’t use it.

A self-hoster with the Network connected pays the base + 3% only on the GMV that came from Network-sourced creators. Direct-invited partners are free regardless of tier.

Click recording on creator domains

When a creator uses a custom share domain (share.creator.com/r/brand), the click hits the Network’s share router (via Caddy with on-demand TLS). The Network:

  1. Records a NetworkClick row on its own DB (creator-side analytics)
  2. Federates the click to the brand instance via POST /clicks for brand-side attribution
  3. Redirects the user to the brand’s destination URL with ?cref=<clickId>

Same clickId both places. Attribution works identically whether the click went via app.openpartner.dev/r/... (brand router) or share.creator.com/r/... (Network router). The cref cookie set on the brand’s site is what stitches it together.

Cross-brand creator stats

Because the Network sees every Partnership a creator has, we can compute aggregate stats across all of them — 90-day clicks, conversions, revenue, commissions earned. This is unique to OpenPartner; competitors that aren’t in the attribution loop only have follower counts.

These stats are nightly-aggregated (federation pull from each vendor’s /partners/:id/dashboard endpoint, summed, cached on the Creator row). Brands searching the directory filter on these — find creators who actually convert, not just creators who have followers.

Where the Network lives

Hosted: network.openpartner.dev. Open-source repo: github.com/getcoherence/openpartner-network.

A self-host vendor can technically point at any Network deployment. In practice almost everyone uses the hosted Network — running your own Network is only useful if you’re building a private vendor consortium.