Skip to main content
The SDK and the WebView share the same plan gating and error messages. SDK keypoints without a token are free; the WebView tracking URL always needs token=. Overlay/timer colors stay WebView-only.

Free vs paid

With a key, internet is required to authenticate and meter (POST /api/sdk/configure, POST /api/sdk/track camera_start). Offline metered sessions refuse key-gated features (offline_metered); keypoints-only keeps running from cache.

What counts as one tracking call

One call = one open session, not one exercise. This is how metering already works; chaining exercises is an optional extra on top. On each switch, placement, the countdown and the counter restart for the new exercise; camera and model stay loaded. Example: squat then plank then lunge in the same open iframe (or the same SDK camera) = 1 call. Close the iframe after squat, open it again for plank = 2 calls.

Quotas and what happens above them

Soft limit, in practice: at the first extra call you receive an email and the account dashboard shows the number of extra calls this month. Within 14 days we agree together either on a higher plan (extra calls covered by the new quota) or on keeping your plan and paying the extra calls, invoiced at the end of the month at €0.01 excl. VAT per call unless another price was agreed in writing. Without an agreement in 14 days, Movelytics may switch the account to a strict limit: it then behaves like Free above the quota (quota_exceeded). See the Terms of Use. plan.remainingCalls in the handshake is informative (calls left in the current month, or in the 12-month period on Business). The SDKs never stop on that number: they only raise quota_exceeded on an HTTP 429, so a soft-limited account above its quota keeps working and reads remainingCalls: 0.

Feature flags

Set on the provider:
Not supported as features flags: blazepose, poseEngine, mediapipeModel, poseBackend, runInWorker → feature_not_supported. Select BlazePose with options.model = 'blazepose' on light / web (not via features).

Plan gating matrix

Plan type from handshake (plan.plan / client.getPlanType()).

When gating runs

  1. configure / preload — free + angles/recommendations/progression → free_plan_feature_blocked (one-shot). Keypoints-only keeps running.
  2. startExercise() — re-check; on free, features.keypoints also blocks. Throws with the same message.

Emission filtering (during exercise)

Form grades & minGrade

Authoritative counted-rep grade: nested on onCounter → formScore (classic counter.form_score). Standalone form_score is convenience only. minGrade: 'B' counts A and B only; below-bar reps emit neither counter nor form_score.

Watermark

On the free plan, and when no API key is set, the live camera shows a dofollow link. The anchor text is Powered by PoseTracker. It opens https://www.posetracker.com/ with utm_source=watermark. The medium is webview on the tracking page, react-native in the React Native SDK (Linking.openURL), and web-sdk in the web SDK. Developer and Business plans do not show the link. The same removal applies to any paid plan (developer, company, enterprise, custom). To remove it on a build that would otherwise show it, set showWatermark={false} on WebViewPoseView (React Native) or showWatermark: false in createPoseTracker (web). Omitting the prop keeps the plan rule. coldStart: 'basic' warmers never show it. A plan upgrade after configure() hides it without remounting.

WebView param → SDK map

Common error codes

For LLMs: Same gating on WebView and SDK. BlazePose is options.model, not a features flag. difficulty is SDK-only. reference= is WebView-only. Overlay/timer params are WebView-only. One billed call = one open session: chain exercises with set_exercise (iframe) or repeated startExercise (SDK, camera still open); closing the iframe/camera or changing the URL starts a new call. Quotas: Free 200/month strict (quota_exceeded); Developer 1,000/month and Business 100k/500k/1M per 12-month period are soft — calls above the quota go through, are counted as extra calls, and within 14 days the client either upgrades or pays €0.01 excl. VAT per extra call; quota_exceeded on a paid plan only happens after Movelytics switched the account to a strict limit. https://docs.posetracker.com/reference/features-plans
Last modified on November 2, 2026