Dit artikel is bedoeld als complete uitleg voor support, implementatie en klanten die InBody via LookinBody Web/LB Web aan FITsociety willen koppelen. Publiceer dit artikel pas nadat de InBody-integratie zichtbaar is gemaakt voor de juiste klantgroep.
Kort samengevat
Met de InBody-koppeling kan FITsociety lichaamsmetingen uit een InBody-apparaat ophalen en opslaan bij de juiste member. De koppeling werkt niet via OAuth. Er is dus geen "login met InBody"-knop waarbij een klant zelf toestemming geeft. Per bedrijf wordt een InBody/LB Web account gekoppeld met:
een InBody accountnaam/account ID;
een InBody API-sleutel;
een vaste FITsociety webhook-URL;
een webhook-secret;
een IP-whitelist bij InBody voor onze uitgaande API-calls.
Na de installatie kan FITsociety:
members automatisch koppelen aan InBody-gebruikers op basis van telefoonnummer, met extra controle op e-mailadres en geboortedatum wanneer InBody die teruggeeft;
nieuwe metingen automatisch verwerken zodra InBody een webhook stuurt;
alle bestaande InBody-metingen ophalen voor gekoppelde members;
waarden zoals gewicht, BMI, vetpercentage, vetmassa, spiermassa, totaal lichaamswater en BMR opslaan in de bestaande FITsociety metingen;
een PDF-resultaat opslaan bij de member als InBody een PDF-URL of base64-PDF meestuurt in de API-respons.
Belangrijk: InBody heeft in de huidige API-documentatie geen aparte PDF/report endpoint staan. PDF's kunnen alleen automatisch worden opgeslagen als InBody de PDF zelf meestuurt in de meetdatarespons.
Voor wie is deze koppeling?
De koppeling is bedoeld voor bedrijven die een eigen InBody/LB Web account hebben en metingen uit InBody willen terugzien in FITsociety bij de juiste member.
De koppeling is bedrijfsspecifiek. Elk FITsociety-bedrijf krijgt een eigen installatie, eigen API-key/accountconfiguratie en eigen webhook-URL. Daardoor blijft data netjes gescheiden per bedrijf.
Wat heb je nodig voordat je kunt koppelen?
Zorg dat deze punten klaar zijn voordat je de koppeling activeert.
Nodig | Uitleg |
InBody/LB Web account | De accountnaam/account ID van de klant in LookinBody Web. |
InBody API-sleutel | API-key die door InBody of in LB Web is aangemaakt. |
InBody API-toegang | Het account moet toegang hebben tot de Web API endpoints. |
IP-whitelist bij InBody | InBody accepteert API-calls alleen vanaf geregistreerde IP-adressen. |
Webhook-instelling in InBody | De FITsociety webhook-URL moet in LB Web/InBody ingesteld worden. |
Members met telefoonnummer | Voor automatisch koppelen gebruikt FITsociety telefoonnummers. |
Bij voorkeur e-mail en geboortedatum | Als InBody die teruggeeft, gebruikt FITsociety dit als extra controle om verkeerde matches te voorkomen. |
IP-whitelist
InBody ondersteunt volgens hun reactie geen hostname-based whitelisting. api.fitsociety.io kan dus niet als hostname gewhitelist worden voor uitgaande API-calls.
Voor InBody moet het vaste outbound IP-adres van FITsociety worden gewhitelist:
3.123.63.205/32
Waar stel je InBody in FITsociety in?
Ga in FITsociety naar:
Bedrijfsinstellingen > Plugins / Integraties > InBody
Directe route:
/company/settings/plugins/inbody
De pagina heet InBody instellen en bevat de velden en knoppen die hieronder worden uitgelegd.
Velden op de InBody-instellingenpagina
Account
Vul hier de InBody/LB Web accountnaam of account ID in.
Voorbeelden:
<inbody-accountnaam> <lbweb-account-id>
Gebruik exact de accountnaam die InBody heeft verstrekt. Als dit veld verkeerd is, kan FITsociety de InBody API niet aanroepen.
API-sleutel
Vul hier de API-key van InBody in.
De API-key wordt versleuteld opgeslagen. Na opslaan tonen we de API-key niet meer terug in de interface. Als de sleutel vervangen moet worden, vul je een nieuwe API-key in en klik je opnieuw op Setup opslaan.
API basis-URL
Normaal staat deze op:
https://eur.developers.lookinbody.com
Voor sandbox/test staat deze op:
https://eur.developers.lookinbody.com/sandbox
Gebruik voor een echte klant normaal de live URL.
Omgeving
Kies:
Live voor echte klantdata;
Test voor sandbox/testdata.
Let op: InBody sandbox mode kan bij sommige read endpoints demo-data geven, maar sommige create/update/delete acties kunnen alsnog echte LB Web data wijzigen. Gebruik testmodus dus alleen bewust.
Knoppen op de InBody-instellingenpagina
Setup opslaan
Deze knop slaat de InBody-configuratie op:
account ID;
API-key;
API basis-URL;
omgeving;
installatiegegevens;
webhook-secret als die nog niet bestaat.
Na opslaan maakt FITsociety een bedrijfsspecifieke webhook-URL en webhook-secret aan. Het webhook-secret wordt alleen direct na aanmaken of vernieuwen getoond. Kopieer dit direct naar de InBody webhook-instellingen.
Webhook-secret vernieuwen
Gebruik deze knop alleen als het bestaande webhook-secret vervangen moet worden.
Na vernieuwen werkt het oude secret niet meer. De webhook-instelling in InBody moet dan ook worden bijgewerkt met het nieuwe secret.
Members automatisch koppelen
Deze knop probeert FITsociety-members automatisch te koppelen aan InBody-gebruikers.
FITsociety gebruikt daarvoor het telefoonnummer van de member en vraagt InBody op via het officiële endpoint:
POST /User/GetUser
Het telefoonnummer wordt in meerdere vormen geprobeerd. Bijvoorbeeld:
0624366805 624366805 31624366805 +31624366805 310624366805 +310624366805 0031624366805 00310624366805
Een member wordt alleen automatisch gekoppeld als de match veilig en uniek is:
er is een telefoonnummer beschikbaar;
hetzelfde telefoonnummer hoort niet bij meerdere lokale members;
InBody geeft precies één gebruiker terug;
als InBody een e-mailadres teruggeeft, moet dat overeenkomen met het FITsociety e-mailadres;
als InBody een geboortedatum teruggeeft, moet die overeenkomen met de FITsociety geboortedatum.
Als er twijfel is, wordt de member niet automatisch gekoppeld en moet support of de coach dit controleren.
Alle metingen ophalen
Deze knop haalt alle beschikbare InBody-metingen op voor gekoppelde members.
Wat gebeurt er technisch:
Als de knop op bedrijfsniveau wordt gebruikt, probeert FITsociety eerst members automatisch te koppelen.
Daarna worden alle gekoppelde InBody-gebruikers verwerkt.
Per gekoppelde gebruiker haalt FITsociety alle beschikbare InBody timestamps op via:
POST /InBody/GetDatetimesByID
Per timestamp haalt FITsociety de volledige meetdata op via:
POST /InBody/GetFullInBodyDataByID
FITsociety zet de InBody timestamp om naar een UTC meetmoment.
FITsociety mapt de waarden naar bestaande FITsociety meettypes.
FITsociety slaat de metingen op bij de member.
Als er een PDF in de response zit, wordt die opgeslagen bij de documenten van de member.
Deze knop maakt geen dubbele metingen aan. Bestaande InBody-metingen worden ge-upsert op basis van:
bedrijf;
member;
meettype;
meetmoment;
bron
inbody.
Als een bestaande InBody-import eerder onvolledig was, kan een nieuwe all-sync de meetwaarden aanvullen of bijwerken zonder dubbele regels te maken.
Webhook instellen in InBody/LB Web
InBody moet na elke meting een webhook naar FITsociety sturen. De webhook is alleen een trigger. FITsociety vertrouwt de webhook-body niet als definitieve meetdata, maar gebruikt de webhook om daarna de officiële InBody API aan te roepen.
Webhook Name
Gebruik een duidelijke naam, bijvoorbeeld:
FITsociety - <bedrijfsnaam>
Webhook URL
Gebruik de webhook-URL die FITsociety toont op de InBody-instellingenpagina.
Zonder query-secret ziet die er zo uit:
https://api.fitsociety.io/public/v1/webhooks/inbody/<installatiesleutel>
Als InBody geen custom headers ondersteunt, gebruik dan de webhook-URL met secret in de URL:
https://api.fitsociety.io/public/v1/webhooks/inbody/<installatiesleutel>?secret=<webhook-secret>
Gebruik altijd de URL uit FITsociety zelf. Typ de installatiesleutel niet handmatig over als dat niet nodig is.
Custom Header
Als InBody custom headers ondersteunt, gebruik dan liever een header-secret in plaats van een query-secret.
Header name:
x-fitsociety-inbody-secret
Header value:
<webhook-secret>
Het webhook-secret komt uit FITsociety en wordt alleen getoond nadat je de setup opslaat of het secret vernieuwt.
Wat gebeurt er na een nieuwe InBody-meting?
De member stapt op het InBody-apparaat.
De member vult op het apparaat het telefoonnummer of de InBody user ID in, afhankelijk van hoe het InBody account is ingericht.
InBody verwerkt de meting in LB Web.
InBody stuurt een webhook naar FITsociety.
FITsociety controleert de installatiesleutel en het webhook-secret.
FITsociety geeft direct
202 Acceptedterug aan InBody.Op de achtergrond haalt FITsociety de meetdata op via de InBody API.
Als de webhook een
userIDendatetimesbevat, importeert FITsociety precies die meting.Als de webhook geen specifieke timestamp bevat, controleert FITsociety de metingen van vandaag voor gekoppelde members.
FITsociety slaat de waarden op in de voortgangsmetingen van de member.
De metingen worden zichtbaar in het memberprofiel onder voortgang/meting, mits het meettype actief zichtbaar is voor die member. Nieuwe geïmporteerde InBody meettypes worden automatisch toegevoegd aan de member-instellingen.
Welke meetwaarden halen we op?
FITsociety haalt waarden op wanneer InBody ze in de full-data response meestuurt en er een passend meettype bestaat.
InBody waarde | FITsociety meettype | Eenheid |
Weight | Gewicht | kg |
BMI / BMI(BodyMassIndex) | BMI | geen |
PBF / PBF(PercentBodyFat) | Vetpercentage | % |
BFM / BFM(BodyFatMass) | Vetmassa | kg |
VFL / VFL(VisceralFatLevel) | Visceraal vet | providerwaarde |
FFM / FFM(FatFreeMass) | Vetvrije massa / lean body mass | kg |
SMM / SMM(SkeletalMuscleMass) | Spiermassa / skeletspiermassa | kg |
TBW / TBW(TotalBodyWater) | Totaal lichaamswater | kg |
Protein | Proteinemassa | kg |
Minerals | Mineraalinhoud | kg |
BMR / BMR(BasalMetabolicRate) | Basaal metabolisme | kcal |
BodyAge / metabolicAge | Metabolische leeftijd | jaren |
Niet elk InBody-apparaat of account geeft altijd alle waarden terug. Als InBody een waarde niet meestuurt, kan FITsociety die waarde niet opslaan.
Waar komen de metingen terecht?
De waarden worden opgeslagen als gewone FITsociety metingen bij de member.
De metingen hebben als bron:
inbody
De notitie op de meting is:
Imported from InBody
De metingen verschijnen daarna in de voortgangsweergave van de member, zoals andere meetwaarden.
Hoe werkt het koppelen van members?
FITsociety bewaart per member een externe InBody-koppeling. Die koppeling bestaat uit de InBody userID.
De automatische koppeling werkt zo:
FITsociety bekijkt alle members van het bedrijf.
Per member worden telefoonnummer-varianten opgebouwd.
FITsociety vraagt InBody per telefoonnummer-variant om de gebruiker op.
Als precies één InBody-gebruiker matcht, wordt die kandidaat gecontroleerd.
Als e-mail of geboortedatum afwijkt, wordt er niet gekoppeld.
Bij een veilige match wordt de InBody
userIDopgeslagen bij de member.
De koppeling wordt niet automatisch gemaakt bij:
geen telefoonnummer;
meerdere lokale members met hetzelfde telefoonnummer;
meerdere InBody-gebruikers voor hetzelfde telefoonnummer;
afwijkend e-mailadres;
afwijkende geboortedatum;
geen InBody-gebruiker gevonden.
Wat als members al gekoppeld zijn?
Als een member al een actieve InBody-koppeling heeft, blijft die bestaan. De automatische koppeling telt deze member als al gekoppeld en overschrijft die niet zomaar.
Een handmatige of technische link kan wel opnieuw worden opgeslagen als support bewust de InBody user ID aanpast.
Wat gebeurt er als metingen al bestaan?
FITsociety maakt geen dubbele InBody-metingen aan voor hetzelfde meettype en hetzelfde meetmoment.
Bij opnieuw importeren gebruikt FITsociety een upsert. Dat betekent:
bestaat de InBody-meting nog niet, dan wordt die aangemaakt;
bestaat de InBody-meting al, dan wordt de bestaande rij bijgewerkt;
ontbrekende meettypes kunnen alsnog worden toegevoegd;
een PDF kan later alsnog worden gekoppeld als InBody die later beschikbaar maakt.
Dit is belangrijk voor historische imports en correcties.
PDF's van InBody-metingen
Helaas is dit momenteel niet mogelijk, wij hebben wel een verzoek gedaan bij inBody, indien je dit graag met je klanten digitaal zou willen delen kun je dit nu handmatig in de documenten zetten. Je kunt ook contact opnemen met inBody met de vraag of ze dit ooit zullen ondersteunen.
Wat doet de koppeling niet?
De huidige InBody-koppeling doet niet het volgende:
geen OAuth-flow waarbij klanten zelf via InBody inloggen;
geen automatische registratie van FITsociety als Connected App in LB Web;
geen automatische configuratie van de webhook in InBody;
geen garantie dat PDF's beschikbaar zijn, zolang InBody geen PDF in de API-response meestuurt;
geen betalingen of abonnementen synchroniseren;
geen data tussen verschillende FITsociety-bedrijven delen.
Veiligheid en dataseparatie
De koppeling is per bedrijf gescheiden:
elk bedrijf heeft een eigen InBody-installatie;
elke installatie heeft een eigen installatiesleutel;
elke installatie heeft een eigen webhook-secret;
API-keys worden versleuteld opgeslagen;
webhook-secrets worden als hash opgeslagen;
meetdata wordt opgeslagen met het juiste
companyIdenclientId;imports worden apart gelogd per bedrijf, installatie, InBody user en timestamp.
Bij fouten in webhook- of importverwerking wordt dit naar Sentry gerapporteerd zonder ruwe API-keys, webhook-secrets of authorization headers.
Veelvoorkomende problemen
De InBody integratie is niet zichtbaar
De InBody-koppeling kan op private/pilot staan. Controleer of het bedrijf is toegestaan voor de InBody provider en of de integratie beschikbaar is in de pluginlijst.
InBody geeft "Connection failed" bij de webhook test
Controleer:
staat de webhook-URL exact zoals FITsociety hem toont?
gebruikt de klant
https://api.fitsociety.io/...en niet de Elastic Beanstalk backend URL?is het webhook-secret correct ingevuld?
ondersteunt InBody custom headers? Zo niet, gebruik de URL met
?secret=<webhook-secret>;is de webhook-secret niet vernieuwd zonder InBody bij te werken?
blokkeert InBody of een netwerklaag de outbound test?
Let op: de IP-whitelist is nodig voor onze uitgaande calls naar InBody. De webhook-call van InBody naar FITsociety gebruikt de webhook-URL.
Er worden geen members gekoppeld
Mogelijke oorzaken:
members hebben geen telefoonnummer in FITsociety;
telefoonnummers staan verkeerd of dubbel in FITsociety;
InBody gebruikt een ander telefoonnummer/user token;
InBody geeft geen gebruiker terug via
/User/GetUser;e-mailadres of geboortedatum wijkt af.
Er worden geen metingen opgehaald
Controleer:
is de InBody setup opgeslagen?
is de API-key correct?
is het account ID correct?
is het vaste FITsociety outbound IP gewhitelist bij InBody?
zijn er members gekoppeld?
staan er metingen in InBody voor die gekoppelde users?
geeft
/InBody/GetDatetimesByIDtimestamps terug?
Alleen gewicht komt binnen
Dit kan gebeuren als InBody andere veldnamen teruggeeft dan verwacht of als de member-instellingen alleen gewicht zichtbaar hebben staan.
FITsociety mapt inmiddels ook de full-data keys zoals BMI(BodyMassIndex), PBF(PercentBodyFat), SMM(SkeletalMuscleMass) en BMR(BasalMetabolicRate). Draai daarna opnieuw Alle metingen ophalen om bestaande importmomenten aan te vullen.
Support-checklist voor een nieuwe klant
Gebruik deze checklist bij een nieuwe InBody-installatie.
Controleer of de InBody provider zichtbaar/beschikbaar is voor het bedrijf.
Vraag de klant of InBody om de LB Web accountnaam/account ID.
Vraag de klant of InBody om de API-key.
Laat InBody het FITsociety outbound IP whitelisten:
3.123.63.205/32
Open in FITsociety de InBody pluginpagina.
Vul Account in.
Vul API-sleutel in.
Laat API basis-URL op live staan, tenzij het om sandbox gaat.
Kies Live voor een echte klant.
Klik Setup opslaan.
Kopieer het webhook-secret direct.
Kopieer de webhook-URL.
Vul in InBody/LB Web in:
Webhook Name: FITsociety - <bedrijfsnaam> Webhook URL: <webhook-url-uit-fitsociety> Header name: x-fitsociety-inbody-secret Header value: <webhook-secret>
Als headers niet werken, gebruik:
Webhook URL: <webhook-url-uit-fitsociety>?secret=<webhook-secret>
Klik in FITsociety op Members automatisch koppelen.
Controleer hoeveel members gekoppeld zijn en welke members review nodig hebben.
Klik op Alle metingen ophalen.
Controleer bij een paar members of de metingen zichtbaar zijn in de voortgang.
Doe een testmeting op het InBody-apparaat.
Controleer of de webhook de nieuwe meting automatisch importeert.
Controleer of PDF's meekomen. Zo niet, vraag InBody of PDF's via de API beschikbaar zijn.
