Control what your app can access on the JTL Platform
Scope enforcement on the Cloud Platform has not shipped yet. This is a temporary state. Current behavior: the platform validates declared scopes at registration and rejects unknown values. Future behavior (in progress): scopes are shown to the merchant at install time and the API layer rejects calls that exceed the declared set. Until enforcement ships, declared scopes do not restrict what your app can call. Declare what your app actually needs so behavior stays consistent once enforcement ships.
Every JTL integration must declare which platform resources it needs access to. The JTL Platform uses scopes: permission strings that describe the read, write, or print access an app is requesting against specific API resources.How you declare scopes depends on the environment:
Environment
Where scopes are declared
Format
Cloud
Manifest, in capabilities.erp.api.scopes
resource.permission
OnPremise
App registration POST request
resource.permission
In both cases, the principle of least privilege applies, meaning you should request only the scopes your app actually needs.
Permissions do not include each other. write does not imply read, and print does not imply either. If your app needs to read items, modify them, and generate printed documents, declare all three: items.read, items.write, items.print.
The table below is generated from the latest cloud OpenAPI spec. Any value outside this list is rejected at registration in both Cloud (manifest validation) and OnPremise (registration POST).
For Cloud, you declare API scopes in your manifest.json under capabilities.erp.api.scopes. These scopes determine which JTL-Wawi API endpoints your app can call.
Beyond API scopes, Cloud Apps can enforce granular permissions on individual capabilities like panes. This lets you scope specific UI surfaces to a smaller subset of resources than the app as a whole.
For OnPremise integrations, scopes are declared during app registration via the REST API. You include them in the mandatoryApiScopes and optionalApiScopes arrays of the registration request.
After registering, the API returns a registrationId. Poll the registration status endpoint with this ID to retrieve your API key and confirm which scopes were granted:
The API key is shown only once in this response. Store it securely, as it cannot be retrieved again. All future API requests use this key in the Authorization: Wawi <API-Key> header.
The grantedScopes array tells you exactly which permissions your app received. If any of your optionalApiScopes were not granted, they will be absent from this array. Your app should check grantedScopes and adapt its functionality accordingly.
Cloud Apps support updating scopes by modifying your manifest.json. Update the capabilities.erp.api.scopes array, then re-submit the updated manifest through the Partner Portal.
OnPremise apps cannot modify scopes on an existing registration. If your app needs additional scopes, you must re-register the app with the updated scope list. This generates a new API key and the old key is invalidated.Plan your scopes carefully before initial registration. Use optionalApiScopes for features you may need later to avoid forcing a re-registration.
Request minimal scopes. Only declare scopes your app actually uses.Separate read, write, and print. If your app only displays data, request read only. Add write when your app modifies resources. Add print only when you need to print.Avoid system.all. Use granular scopes wherever possible.Use optional scopes for progressive features (OnPremise). If your app has optional features that need extra permissions, put those in optionalApiScopes so the core app still works without them.Document your scopes for merchants. In your App Store listing and support docs, explain why your app needs each scope. Transparency builds trust.Check scopes at runtime. Before making API calls that require specific permissions, verify your app has the necessary scope. Handle 403 Forbidden responses by showing clear messages.