Access Business Central API in Python using MSAL (S2S)

This is a minimalist way to access the Business Central API in Python using the Service 2 Service authentication (Client_Credentials). It is based on the Microsoft Authentication Library for Python:

In the first step, we create a function to obtain a fresh token:

import requests, msal

def getToken(tenant, client_id, client_secret):
    authority = "" + tenant
    scope = [""]

    app = msal.ConfidentialClientApplication(client_id, authority=authority, client_credential = client_secret)
      accessToken = app.acquire_token_for_client(scopes=scope)
      if accessToken['access_token']:
        print('New access token retreived....')
        print('Error aquiring authorization token.')
    except Exception as err:
    return accessToken

Now you could, for example, get all companies with a couple of lines:

import requests

# Setup variables
tenant_id = ''
environment = 'Sandbox'
client_id = ''
client_secret = ''

# Fetch the token as json object
reqToken = getToken(tenant_id, client_id, client_secret)

# Build the request URL
url_companies = f"{tenant_id}/{environment}/api/v2.0/companies"

# Build the request Headers
reqHeaders =  {"Accept-Language": "en-us", "Authorization": f"Bearer {reqToken['access_token']}"}
# Fetch the data
response = requests.get(url_companies, headers=reqHeaders)

... is a technical consultant and developer at Comsol Unternehmenslösungen AG in Kronberg/Taunus. Major tasks are the architecture and implementation of complex, usually cross-system applications in and around Microsoft Dynamics 365 Business Central.

Leave a Reply

Your email address will not be published. Required fields are marked *