Already have a website for your association, sports club or organisation? Then you don't have to send visitors away to buy tickets. MijnEvent runs as a drop-in on your own site: you paste one script line and a div, and the ticket widget appears — including checkout, without the visitor leaving your site. The most powerful part is the member connection: because the member is already logged in on your website, that website can pass a signed token with each purchase that says "this is a member". MijnEvent then applies the member price or free entry automatically, while non-members pay the regular rate. Nothing is synchronised or copied — your member administration stays the source of truth and the status is always correct at the moment of purchase. Below we show how to apply it, with a working code example for developers. The step-by-step setup guide for admins is in the knowledge base article Members free, non-members pay.
1. The widget on your site (recommended: the script embed)
In your admin under Integrations the embed code is ready. The recommended option is one script line plus one div — the widget measures its own height and resizes the iframe automatically, so you don't have to guess a fixed height:
<div data-mijnevent-event="summer-festival-2026"></div>
<script src="https://yourclub.mijnevent.nl/embed.js" async></script>
You can place multiple events on a single page by adding multiple divs. There is also a simple iframe variant, but it requires you to set the height yourself (with long ticket lists or the checkout step the content then gets cut off) — only use that if you can't place a script.
2. The look: the embed studio
Your ticket shop should match your event, not the other way around. In Branding → Embed studio you choose organisation-wide how the widget looks, with a live preview of the real widget:
- Template: Classic (the familiar list), Hero (a large photo with your logo and the event title over the image), Compact (minimal, for sidebars and narrow spots) or Steps (step-by-step checkout with a progress indicator: tickets → details → overview → payment).
- Theme: light, dark or automatic (follows the visitor's system preference). For the dark theme you can upload a separate light logo variant.
- Branding options: show your logo, corner rounding (sharp/soft/round), button style (filled or outline — the button text colour is picked automatically for safe contrast), a transparent background so the widget blends into your site, and full width.
Your brand colours and fonts from Branding carry through everywhere — including success and error messages and even the confetti. The embed code itself doesn't change: saving the settings is enough, and every existing embed renders in the new style immediately.
One choice drives your entire visitor-facing side
What you pick here isn't limited to the widget on your own site. The same template and theme also drive your public event pages on your MijnEvent subdomain and your module storefronts — rentals, shop, food, courses, memberships, donations and the rest. Pick Hero and your event page gets the same large photo header as your widget; pick Compact and everything turns tighter and narrower. So you don't choose again per surface, and a visitor clicking through from your own site to your event page doesn't suddenly see a different product.
That's why the preview switches along: you can preview the widget, a real event page or a module storefront, including colours you haven't saved yet.
The seller is stated clearly
Below the widget and below your public pages there's a short seller notice: "You're buying tickets from {your organisation} — not from MijnEvent", together with your legal seller details (email, phone, address, chamber of commerce and VAT number). MijnEvent provides the platform and handles the payment; you remain the seller, responsible for the event, cancellations and refunds. The wording adapts to the surface — renting, ordering, booking or donating instead of buying. You don't have to do anything for it; it appears automatically, including inside the embed on your own site.
3. A member price or members-only ticket type
For a ticket type you set two things in the admin:
- Access: Public or Members only (members-only ticket types are hidden from the public).
- Member price: empty (members pay normal),
0(free for members) or a lower amount (member discount).
4. The member token (for developers)
When a logged-in member buys tickets on your site, your server signs a short-lived JWT with the secret key from Integrations. It's a plain HS256 token; you don't need a library for it:
<?php
// On your own server, for a logged-in member:
function mijneventMemberToken(string $keyId, string $secret, array $claims): string {
$b64 = fn ($d) => rtrim(strtr(base64_encode($d), '+/', '-_'), '=');
$header = $b64(json_encode(['typ' => 'JWT', 'alg' => 'HS256', 'kid' => $keyId]));
$payload = $b64(json_encode($claims));
$sig = $b64(hash_hmac('sha256', "$header.$payload", $secret, true));
return "$header.$payload.$sig";
}
$token = mijneventMemberToken('mek_...', 'msk_...', [
'aud' => 'yourclub', // your organisation ID
'sub' => $member->id, // membership number
'email' => $member->email,
'scope' => 'event:summer-festival-2026', // limit to one event
'max_qty' => 2, // e.g. member + 1 guest
'iat' => time(),
'exp' => time() + 900, // valid for 15 minutes
]);
Pass the token to the widget — server-side rendered, so the secret key never reaches the browser:
<div data-mijnevent-event="summer-festival-2026" data-member-token="<?= $token ?>"></div>
<script src="https://yourclub.mijnevent.nl/embed.js" async></script>
What MijnEvent checks
Both when displaying and at checkout, MijnEvent re-verifies the token: the signature (via the kid → secret key), the aud (must be your organisation), the exp (expiry), and a single-use jti against replay. In addition, scope determines which event is unlocked and max_qty how many member tickets get the member price. If the token is invalid or expired, the visitor is simply treated as a paying non-member — nothing breaks.
Endpoints
POST /api/members/verify-token— verify a token (read-only) to show member prices and members-only ticket types before checkout.POST /api/checkout— pass the token asmember_token; the member price is applied and members-only ticket types are released.
Which approach do you choose?
- Club site with member login → the token connection (this approach). Always in sync, no member list needed.
- No member login → unique discount codes per member (simpler, more manual).
- Large membership system (Conscribo, AllUnited, Sportlink, LISA) → a custom connection; get in touch.
Get started
Set it up in an evening: create an API key, set a member price on a ticket type, and place the embed. The full admin guide is in the knowledge base article Members free, non-members pay; more explanation is in the knowledge base. Questions about the setup for your organisation? We're happy to help.