HardwarePlay
HardwarePlay
Shop Abonnementen Business Contact Account

API Documentatie

REST API-referentie voor het HardwarePlay-platform. Alle endpoints retourneren JSON met de structuur { ok: true, data: ... } of { ok: false, error: { code, message } }.

Base URL: https://hardwareplay.com/api
Authenticatie: Sessie-cookies (hp_session). Log in via /api/app/auth/login om een sessie te starten.
Rate limiting: 200 req/15 min (globaal), 10 req/15 min (auth endpoints).

Authenticatie

POST/api/app/auth/registerAccount registreren

Publiek

Body: { email, displayName, password }

Retourneert het aangemaakte account en start een sessie.

POST/api/app/auth/loginInloggen met e-mail/wachtwoord

Publiek

Body: { email, password }

Start een sessie en stelt de hp_session cookie in.

GET/api/app/auth/meHuidige sessie ophalen

Sessie vereist

Retourneert de ingelogde gebruiker en sessiedata.

POST/api/app/auth/logoutUitloggen

Sessie vereist

Wist de sessiescookie.

POST/api/app/auth/challengeWallet sign-challenge

Publiek

Body: { walletAddress }

POST/api/app/auth/verifyWallet-verificatie

Publiek

Body: { walletAddress, message, signature }

POST/api/app/auth/password-reset/requestWachtwoord reset aanvragen

Publiek

Body: { email }

POST/api/app/auth/password-reset/completeWachtwoord reset voltooien

Publiek

Body: { token, password }

GET/api/app/auth/verify-emailE-mail verifiëren

Publiek

Query: ?token=...

Account

GET/api/app/accountProfiel ophalen

Sessie vereist

Retourneert volledige accountdata inclusief wallets, tags, projecten en statistieken.

PUT/api/app/accountProfiel bijwerken

Sessie vereist

Body: { displayName, bio, avatarUrl, accentColor, shipping_* }

POST/api/app/auth/passwordWachtwoord instellen/wijzigen

Sessie vereist

Body: { password }

POST/api/app/wallet/linkWallet koppelen

Sessie vereist

DELETE/api/app/wallets/:walletAddressWallet ontkoppelen

Sessie vereist

Privacy / AVG

GET/api/app/my/account/exportAlle persoonsgegevens downloaden

Sessie vereist

Retourneert een JSON-bestand met alle persoonlijke gegevens (account, tags, projecten, bestellingen, abonnementen). AVG Artikel 20 — recht op dataportabiliteit.

DELETE/api/app/my/accountAccount permanent verwijderen

Sessie vereist

Body: { password }

Verwijdert alle gebruikersgegevens permanent. Vereist wachtwoordbevestiging. Annuleert actieve Stripe-abonnementen. AVG Artikel 17 — recht op vergetelheid. Onomkeerbaar.

Projecten & Teams

POST/api/app/me/tag-projectsProject aanmaken

Sessie vereist

Body: { name, description }

DELETE/api/app/me/tag-projects/:projectIdProject verwijderen

Sessie vereist

GET/api/app/projects/:projectId/membersTeamleden ophalen

Sessie vereist

POST/api/app/projects/:projectId/membersTeamlid toevoegen

Sessie vereist

Body: { userId, role }

POST/api/app/projects/:projectId/invitesUitnodigingslink genereren

Sessie vereist

POST/api/app/project-invites/acceptUitnodiging accepteren

Sessie vereist

Body: { inviteHash }

Tags & NFC

GET/api/tags/scanNFC-tag scannen (NTAG424 met CMAC)

Publiek

Query: ?picc_data=...&cmac=...

Verifieert de cryptografische handtekening van de NFC-chip en retourneert een scan-token.

GET/api/tags/scan/staticStatische NFC-tag scannen (NTAG213/215)

Publiek

Query: ?uid=...

POST/api/app/nfc/onboardTag zelf onboarden

Sessie vereist

Body: { tagUid, tagType, label }

POST/api/app/qr/createVirtuele QR-tag aanmaken

Sessie vereist

Maakt een QR-code tag aan zonder fysieke NFC-chip.

POST/api/app/me/tags/:uidHex/swapTag-carrier vervangen

Sessie vereist

Vervangt de fysieke NFC-chip maar behoudt de tagpagina en configuratie.

PATCH/api/app/me/tags/:uidHex/project-assignmentTag aan project toewijzen

Sessie vereist

Body: { projectId } (null om los te koppelen)

Tagpagina's & Content

GET/api/app/public/tag/:nfcTagUidPublieke tagpagina ophalen

Publiek

Retourneert de volledige paginaconfiguratie inclusief blokken en modules.

GET/api/app/tags/:uidHex/pageTagpagina ophalen (eigenaar)

Sessie vereist

PUT/api/app/tags/:uidHex/pageTagpagina bijwerken

Sessie vereist

Body: Volledige paginaconfiguratie met blokken-array.

POST/api/app/media/uploadMedia uploaden

Sessie vereist

Multipart form data. Ondersteunt afbeeldingen, audio en PDF. Max 35 MB.

Interactieve modules

POST/api/app/public/tag/:uid/multiplechoice/:blockId/votePoll stemmen

Publiek

Body: { question, answer }

POST/api/app/public/tag/:uid/counter/:blockId/incrementTeller verhogen

Publiek

POST/api/app/public/tag/:uid/form/:blockId/submitFormulier indienen

Publiek

Body: { fields: [...] }

POST/api/app/public/tag/:uid/stopwatch/:blockId/scanStopwatch split registreren

Publiek

POST/api/app/public/tag/:uid/timeclock/:blockId/toggleInklokken / uitklokken

Publiek

POST/api/app/public/tag/:uid/logbook/:blockId/entryLogboekvermelding toevoegen

Publiek

POST/api/app/public/tag/:uid/chat/:blockId/messageChatbericht versturen

Publiek

Body: { text, nickname }

POST/api/app/public/tag/:uid/musicquiz/:blockId/startMuziekquiz starten

Publiek

POST/api/app/public/tag/:uid/ranking/:blockId/joinRanking-wedstrijd joinen

Publiek

POST/api/app/public/tag/:uid/uploads/:blockIdFoto uploaden naar fotowand

Publiek

POST/api/app/public/tag/:uid/scan-gps/:blockId/recordGPS-locatie registreren

Publiek

Body: { lat, lng }

Commerce & Betalingen

GET/api/app/shop/catalogProductcatalogus ophalen

Publiek

POST/api/app/me/tag-ordersTagbestelling plaatsen

Sessie vereist

Body: { items: [{ sku, quantity }], shipping }

GET/api/app/me/tag-ordersMijn bestellingen ophalen

Sessie vereist

POST/api/app/public/tag/:uid/tip/:blockId/checkoutFooi/donatie checkout

Publiek

Body: { amountEurMinor }

Maakt een Stripe Checkout-sessie aan. Betaling gaat naar de tag-eigenaar via Stripe Connect.

POST/api/app/public/tag/:uid/paywall/:blockId/checkoutPaywall checkout

Publiek

POST/api/app/account/stripe-connect/startStripe Connect onboarding starten

Sessie vereist

Retourneert een Stripe onboarding-URL.

GET/api/app/account/stripe-connect/statusStripe Connect status

Sessie vereist

Abonnementen

GET/api/app/tiersAbonnementsniveaus ophalen

Publiek

Retourneert alle beschikbare tiers met prijzen en feature-limieten.

GET/api/app/my/subscriptionMijn abonnement ophalen

Sessie vereist

GET/api/app/my/featuresAlle feature-toegangen ophalen

Sessie vereist

Retourneert per feature of deze beschikbaar is en de limiet.

GET/api/app/my/feature/:featureKeySpecifieke feature controleren

Sessie vereist

POST/api/app/my/subscription/cancelAbonnement opzeggen

Sessie vereist

Annuleert het Stripe-abonnement. Toegang blijft tot einde betaalperiode.

HPS Tokens

GET/api/app/me/hps/balanceHPS saldo ophalen

Sessie vereist

GET/api/app/me/hps/transactionsHPS transactiegeschiedenis

Sessie vereist

POST/api/app/me/hps/purchaseHPS kopen

Sessie vereist

Body: { amountEurMinor }

Admin

Admin-endpoints vereisen een account met admin-rechten.

GET/api/app/admin/shop/catalogProductcatalogus beheren

Admin vereist

GET/api/app/admin/tag-onboarding/ordersAlle bestellingen bekijken

Admin vereist

POST/api/app/admin/tag-onboarding/orders/:orderId/fulfillBestelling fulfilllen

Admin vereist

GET/api/app/admin/tiersTiers beheren

Admin vereist

POST/api/app/admin/tiersTier aanmaken/bijwerken

Admin vereist

GET/api/app/admin/treasuryTreasury dashboard

Admin vereist

POST/api/app/admin/hps/mintHPS tokens minten

Admin vereist

POST/api/app/admin/investors/allocateInvesteerder-tokens toewijzen

Admin vereist