code: def authorization_code_pkce(self, client_id, code_verifier, code,
                                  redirect_uri, grant_type='authorization_code'):
          
  
          return self.post(
              'https://{}/oauth/token'.format(self.domain),
              data={
                  'client_id': client_id,
                  'code_verifier': code_verifier,
                  'code': code,
                  'grant_type': grant_type,
                  'redirect_uri': redirect_uri,
              },
              headers={'Content-Type': 'application/json'}
          )
docs: Authorization code pkce grant
  
          This is the OAuth 2.0 grant that mobile apps utilize in order to access an API.
          Use this endpoint to exchange an Authorization Code for a Token.
  
          Args:
              grant_type (str): Denotes the flow you're using. For authorization code pkce
              use authorization_code
  
              client_id (str): your application's client Id
  
              code_verifier (str): Cryptographically random key that was used to generate
              the code_challenge passed to /authorize.
  
              code (str): The Authorization Code received from the /authorize Calls
  
              redirect_uri (str, optional): This is required only if it was set at
              the GET /authorize endpoint. The values must match
  
          Returns:
              access_token, id_token