PROTOTYPEClickable mockup · simulates the finished app◃ Product overview
Federation · admin
AB
Organisation
Integrations
The federation's connections to the outside world: payment gateways, calendar, social media, streaming, maps,
anti-doping, insurance, government registers and communication. Lifecycle draft → active → paused → retired;
secrets are stored as key-vault references, never in clear text.
Category
Integration
Provider
Status
Environment
Detail
Payment gateway
Card payments & Connect
Stripe
active
Production
Multi-currency · SEK/EUR · usage tracking
Payment gateway
PayPal Checkout
PayPal
active
Production
Capture intent · Express profiles
Calendar
Competition calendar sync
Google Calendar
active
Production
Direction: push · filter: competitions + league play
Accounting providers (Fortnox/Visma/Xero/QuickBooks, SIE4, chart-of-accounts mapping) are configured under
Bookkeeping → Export (SIE).
Widgets, streaming embeds and map embedding are under Widgets & embedding.
Add an integration to connect the federation to external systems.
State — loading
ℹ️The platform's global payment parameters and cross-tenant monitoring of Connect accounts are handled by the operator in the sys console. Here the federation sees its own transactions, refunds, mandates and webhook events.
Actions per intent: confirm · capture (manual) · cancel · sync from Stripe. Metadata carries invoice id, debtor, fee category and season.
Stripe — refunds
Refund
Intent
Type
Amount
Status
Reason
re_3Nx…f2
pi_3Nx…a4
full
5 400,00 SEK
succeeded
requested_by_customer
re_3Nx…g5
pi_3Nx…b7
partial
600,00 SEK
pending
duplicate
Stripe Tax — VAT configuration per country
PayPal — orders, refunds & Express profiles
Order
Intent
Status
Payer
Amount
5O19…MK
capture
completed
lena.vik@example.se
48,00 EUR
8XA2…PQ
capture
payer_action_required
jean.morel@example.fr
25,00 EUR
3BB7…RS
authorize
created
—
110,00 EUR
Actions: capture · void · sync. Express profiles (one-click via PayPal Vault): 2 active consents, 1 revoked — managed by the player under Payment in the app.
Currency validation per method (Swish SEK only; iDEAL/Bancontact/Bizum/SEPA EUR only; Klarna 9 currencies).
Klarna runs in two steps (authorize → capture, 2–36 instalments). Payment + receipt are created automatically at final status.
SEPA mandates
Mandate
Payer
IBAN
Status
Sequence
M-2026-118
Boulealliansen Ekvik
DE89 3704 **** **** 32
active
RCUR (recurring)
M-2026-131
PK Silverkulan
FR14 2004 **** **** 06
pending
FRST (first)
Return codes R01–R99 are logged per payment; mandates can be revoked.
Webhook events (audit, idempotent)
Gateway
Event
Type
Signature
Status
Stripe
evt_1Px…92
payment_intent.succeeded
valid
processed
Stripe
evt_1Px…95
charge.refunded
valid
processed
PayPal
WH-2WR…04
PAYMENT.CAPTURE.COMPLETED
valid
processed
Swish
cb-8871…c3
PAID
— (callback id idempotency)
processed
Stripe
evt_1Px…99
account.updated
invalid
failed_verification
State — signature verification failed
⚠
Webhook evt_1Px…99 was rejected — invalid signature
Check that the webhook secret has been rotated on both sides. The event is logged but not processed.
Providers per channel
Channel
Provider
Role
Status
Configuration
Email
SendGrid
Primary (transactional)
active
from: no-reply@skanebf.se · open/click tracking on
Message log (all channels, idempotency key per mailing)
Channel
Recipients
Type
Status
Engagement / cost
Email (SendGrid)
kassor@nordviksbk.se
Invoice LF-2026-0031
delivered
opened 2× · clicks 1×
SMS (46elks)
+46 70 *** ** 22
Match reminder
delivered
1 segment · 0,45 SEK
Push (FCM)
device ios-9f…
Result published
delivered
badge 3
WhatsApp
+46 73 *** ** 04
Template: kallelse_final
queued
—
Email (SendGrid)
styrelse@granholmpk.se
Annual meeting summons
bounced (hard)
bounce_type: hard
Provider webhooks (delivery receipts, bounces, read receipts) are verified with a signature (HMAC-SHA256/SHA1) and
an idempotency check before they update the log. SMS cost per segment is posted in SEK.
Provider
Type
Status
Detail
Plausible
Web analytics (cookie-free)
active
site: skanebf.se · custom events on · GDPR-safe without consent
Umami
Self-hosted alternative
draft
instance: analys.skanebf.se · outbound links
Google Analytics 4
Opt-in per tenant
paused
requires cookie consent (analytics) · anonymize_ip on
PostHog
Product analytics + feature flags
active
funnels · flags per audience
Google Analytics 4 (opt-in)
Cookie consent (banner per tenant)
Plausible and Umami are cookie-free and require no consent. PostHog is used for product analytics, feature flags
and funnels. Individual consent decisions are logged per visitor and can be reviewed under GDPR & privacy.
WADA ADAMS — configurationsandbox
ADAMS export jobs (idempotent, hash-based change detection)
Job
Entity
Status
Statistics
Dry run
AEJ-2026-014
whereabouts
completed
38 ok · 0 errors · 2 skipped
no
AEJ-2026-015
athlete_profile
completed_with_errors
112 ok · 3 errors
no
AEJ-2026-016
test_result
pending
—
yes
Whereabouts per quarter (draft → submitted → confirmed)
Player
Quarter
Entries
Status
Vera Lindqvist (RTP)
Q3 2026
92 slots · 60-min windows set
confirmed
Hampus Ek (RTP)
Q3 2026
88 slots
submitted
Ines Duval (TP)
Q3 2026
12 slots missing
draft
Slot types: overnight · training · competition · 60-minute window. Times are validated (HH:MM).
TUE sync (push/pull with conflict detection) & test-result import
Application
Player
Direction
Status
Detail
TUE-2026-07
Vera Lindqvist
push
synced
ADAMS-id TU-88123
TUE-2026-09
Hampus Ek
pull
conflict
field: expiry_date · local 2026-12-31 / ADAMS 2026-09-30
Test results are imported with an idempotency key, validated and linked to the doping-test record (negative/positive/atypical/pending).
National agency (NADO): RF Antidoping (SE) — contact, reporting portal and notifications on anomalous findings
or whereabouts misses are configured per country; default configurations exist for SE/FR/DE. Incoming NADO webhooks
signature-verified (HMAC-SHA256) and audit-logged.
State — conflict requires a decision
⚠
TUE-2026-09 has different expiry dates locally and in ADAMS
Choose which value applies before the sync can complete.
Esc
↵ opens the first hit · Esc closes · 🔒 = locked function (still shown — with an explanation)