{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-products/class/resources/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["admonition"]},"type":"markdown"},"seo":{"title":"Environments"},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"environments","__idx":0},"children":["Environments"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Class provides two environments: ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["PIE"]}," (Partner Integration Environment) for building and testing, and ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Production"]}," for live customer data."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Each environment has its own credentials and its own endpoints. An integration configured for one will not work against the other."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"endpoints","__idx":1},"children":["Endpoints"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Class uses two hosts per environment — ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["app.*"]}," for authentication, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["api.*"]}," for the resource APIs. Your OAuth client talks to the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["app.*"]}," host to obtain a token; every data call afterwards goes to the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["api.*"]}," host."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"production","__idx":2},"children":["Production"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"align":"left","data-label":"Purpose"},"children":["Purpose"]},{"$$mdtype":"Tag","name":"th","attributes":{"align":"left","data-label":"Endpoint"},"children":["Endpoint"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Authorisation"]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://app.class.com.au/connect/authorize"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Token"]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://app.class.com.au/connect/token"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Resource APIs"]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://api.class.com.au/api/1.0/{scope}/{area}/{action}"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"pie","__idx":3},"children":["PIE"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"align":"left","data-label":"Purpose"},"children":["Purpose"]},{"$$mdtype":"Tag","name":"th","attributes":{"align":"left","data-label":"Endpoint"},"children":["Endpoint"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Authorisation"]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://app.class-pie.com.au/connect/authorize"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Token"]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://app.class-pie.com.au/connect/token"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Resource APIs"]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://api.class-pie.com.au/api/1.0/{scope}/{area}/{action}"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/class/resources/class-api-structure"},"children":["Class API structure"]}," for how the resource API path is constructed."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"credentials","__idx":4},"children":["Credentials"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Credentials are issued per environment and do not carry across."]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["PIE credentials"]}," are issued when your access is approved, so you can begin building."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Production credentials"]}," are issued separately, after your integration passes review."]}]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"warning"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Keep your PIE and production credentials clearly separated in your configuration. Pointing a production deployment at PIE credentials — or the reverse — is one of the most common integration failures, and the error it produces (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["invalid_client"]},") does not make the cause obvious."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"what-pie-contains","__idx":5},"children":["What PIE contains"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["PIE holds sample data, not a copy of production. When your access is set up you are given one or more business codes with sample funds beneath them, so you can exercise the APIs against realistic structures without touching live data."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Business codes differ between PIE and production. Any business code hard-coded during development will need to change before you go live — including the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["target:b/{BusinessCode}"]}," value in your authorisation scope."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"the-id-token-issuer","__idx":6},"children":["The ID token issuer"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If your integration validates ID tokens, the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["iss"]}," claim is the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["app.*"]}," host for the environment you are in:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"align":"left","data-label":"Environment"},"children":["Environment"]},{"$$mdtype":"Tag","name":"th","attributes":{"align":"left","data-label":"Issuer"},"children":["Issuer"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Production"]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://app.class.com.au/"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["PIE"]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://app.class-pie.com.au/"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Validate ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["iss"]}," against the environment your integration is configured for. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/class/resources/sso-using-class-api"},"children":["Single Sign-On using Class API"]}," for the full set of ID token claims."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"moving-to-production","__idx":7},"children":["Moving to production"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Promotion to production requires review and approval. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/getting-started/production-readiness"},"children":["Production readiness"]}," for what is assessed."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When you switch, you need to change:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Both hosts, from ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["*-pie"]}," to production."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Your client ID and client secret."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Your registered redirect URL, if it differs between environments."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Any business codes referenced in scopes or API paths."]}]}]},"headings":[{"value":"Environments","id":"environments","depth":1},{"value":"Endpoints","id":"endpoints","depth":2},{"value":"Production","id":"production","depth":3},{"value":"PIE","id":"pie","depth":3},{"value":"Credentials","id":"credentials","depth":2},{"value":"What PIE contains","id":"what-pie-contains","depth":2},{"value":"The ID token issuer","id":"the-id-token-issuer","depth":2},{"value":"Moving to production","id":"moving-to-production","depth":2}],"frontmatter":{"title":"Environments","description":"Endpoints and credentials for the PIE sandbox and production environments.","seo":{"title":"Environments"}},"lastModified":"2026-09-03T01:31:38.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/products/class/resources/environments","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}