Skip to main content

dynamics365crm-python

Dynamics365CRM API wrapper for Dynamics 365 written in Python. This library works for API version: v9.0

Installing

pip install dynamics365crm-python

Usage

This library provides a client that is initialized with the following arguments

  • domain: the dynamics 365 tenant domain (yours or someone else's)
  • access_token: the retrieved token after authentication

Arguments for OAuth2 flow

  • client_id: your Azure AD application client id
  • client_secret: your Azure AD application client secret
from dynamics365crm.client import Client

## Normal use to make calls to the api
client = Client("https://tenant_name.crmX.dynamics.com", access_token="access_token")

## OAuth2 configuration required arguments
client = Client(
    "https://tenant_name.crmX.dynamics.com",
    client_id=CLIENT_ID,
    client_secret=CLIENT_SECRET,
)

OAuth2 Protocol

Get authorization url

This will return a MSAL valid authorization url, the following are required:

  • tenant_id: someone else's Azure AD tenant_id
    • Ask the dynamics tenant owner to go to the Azure Portal and retrieve the Tenant ID from the Azure Active Directory/Overview
    • If your app is configured as multi-tenant (for any enterprise or personal account to use) you could pass "common" instead od the Tenant ID
      • However microsoft azure app configuration is a mess so the Tenant ID is preferable
  • redirect_uri: your service callback url
  • state: your unique generated state to identify the requester
    • you could also initiate an oauth flow with msal manually with initiate_auth_code_flow method, check the official example
authorization_url = client.build_authorization_url("tenant_id", "redirect_uri", "state")

>>> "https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=XXXX&response_type=code&redirect_uri=https%3A%2F%your_domain/%2Fcallback%2F&scope=https%3A%2F%2tenant_name.crmX.dynamics.com%2Fuser_impersonation+offline_access+openid+profile&state=XXXX&prompt=consent"

Exchange the callback code for an access token

To finish the oauth protocol microsoft will redirect to your callback endpoint with a temporal code in the url query params to be exchanged for the full-fledged token (a json with the access_token, refresh_token, expires_in, etc.)

Again the (tenant_id or "common") and redirect_uri are required, the third argument is the code sent by microsoft

token = client.exchange_code("tenant_id", "redirect_uri", "code")

Refresh token

If the access token expires you could get a new access_token exchanging the long-lived refresh_token

Again the tenant_id or "common" is required

token = client.refresh_access_token("tenant_id", "refresh_token")

Set access token

You could pass the access_token in the constructor or set it with

client.set_access_token("access_token")

Dynamics Web API

Contacts

Get Contacts

can receive orderby, filter, select, top, expand

list_contacts = client.get_contacts()

Create Contact

create_contact = client.create_contact(firstname="FIRSTNAME", lastname="LASTNAME", middlename="MIDDLENAME", emailaddress1="EMAILADDRESS")

Delete Contact

delete_contact = client.delete_contact('ID')

Update Contact

update_contact = client.update_contact('ID', firstname="FIRSTNAME", lastname="LASTNAME", middlename="MIDDLENAME", emailaddress1="EMAILADDRESS")

Accounts

Get Accounts

can receive orderby, filter, select, top, expand

get_accounts = client.get_accounts()

Create Account

create_account = client.create_account(name="NAME", websiteurl="WWW.WEBSITE.COM")

Delete Account

create_account = client.delete_account('ID')

Update Account

update_account = client.update_account(id="ID", name="NAME")

Opportunities

Get Opportunities

can receive orderby, filter, select, top, expand

list_opportunities = client.get_opportunities()

Create Opportunities

create_opportunities = client.create_opportunity(name="OPPORTUNITY NAME")

Delete Opportunities

delete_opportunities = client.delete_opportunity(id="OPPORTUNITY ID")

Update Opportunities

update_opportunities = client.update_opportunity(id="OPPORTUNITY ID", name="OPPORTUNITY NAME", description="SOME DESCRIPTION")

Leads

Get Leads

can receive orderby, filter, select, top, expand

list_leads = client.get_leads()

Create Lead

create_leads = client.create_lead(fullname="LEAD NAME", subject="LEAD SUBJECT", mobilephone="123456", websiteurl="WWW.WEBSITE.COM", middlename="MIDDLE LEAD NAME")

Delete Lead

delete_leads = client.delete_lead("ID")

Update Lead

update_leads = client.update_lead(fullname="LEAD NAME", subject="LEAD SUBJECT", mobilephone="123456", websiteurl="WWW.WEBSITE.COM", middlename="MIDDLE LEAD NAME")

Campaigns

Get Campaigns

can receive orderby, filter, select, top, expand

list_campaigns = client.get_campaigns()

Create Campaign

create_campaign = client.create_campaign(name="CAMPAIGN NAME", description="SOME DESCRIPTION")

Delete Campaign

delete_campaign = client.delete_campaign(id="ID")

Update Campaign

update_campaign = client.update_campaign(id="ID", name="CAMPAIGN NAME", description="SOME DESCRIPTION")

Requirements

  • requests
  • msal

Contributing

We are always grateful for any kind of contribution including but not limited to bug reports, code enhancements, bug fixes, and even functionality suggestions.

You can report any bug you find or suggest new functionality with a new issue.

If you want to add yourself some functionality to the wrapper:

  1. Fork it ( https://github.com/GearPlug/dynamics365crm-python )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Adds my new feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

Metadata

Release files for dynamics365crm-python 1.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dynamics365crm-python 1.0.2
File Size Uploaded
dynamics365crm_python-1.0.2.tar.gz 6.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for dynamics365crm-python 1.0.2
File Interpreter ABI Platform
dynamics365crm_python-1.0.2-py3-none-any.whl Python 3 none any Details

Total release size: 14.8 kB

Release files / dynamics365crm_python-1.0.2.tar.gz

Download URL dynamics365crm_python-1.0.2.tar.gz
Size 6.9 kB
Tags Source
SHA-256 checksum
How to use checksums
ea8a7bc8b0dbf4a4bbe03c7021fd20e9f845807b898c6a10860aaca82ffa159f
BLAKE2b-256 checksum
How to use checksums
7bdc73a4442a7c4c4eb4a9dc4fe7c394db618443d876765c968d1590ebb41de1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.10.9

Release files / dynamics365crm_python-1.0.2-py3-none-any.whl

Download URL dynamics365crm_python-1.0.2-py3-none-any.whl
Size 7.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
694c08d308a6f28ee8a9155a40dc7c7bfcb0e41b8f9fda2e87768d96585f503f
BLAKE2b-256 checksum
How to use checksums
dba85c9e5f9ec0702e46150e3b198fb80902861cc91c3db13973150226fde1ba
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.10.9

Release history Release notifications | RSS feed

This release

1.0.2 This release

2 release files

1.0.1

2 release files

1.0.0

1 release file

0.2.0

1 release file

0.1.2

1 release file

0.1.1

1 release file

0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page