Type-safe Python clients for Azure connectors β call Office 365, SharePoint, Teams, Dataverse, and 1,000+ connectors directly from Azure Functions and other Python apps.
Caution
Early Preview β Not for Production Use
This SDK is currently in early preview and is under active development. It is intended for evaluation, experimentation, and feedback purposes only.
- Do not use this SDK in production environments.
- Breaking changes should be expected across APIs, data models, and behavior in future releases.
- Features may be added, modified, or removed without prior notice.
We welcome feedback and contributions β please open an issue with questions, suggestions, or bug reports.
Azure provides a rich ecosystem of managed connectors that bridge your code to SaaS services, PaaS resources, and on-premises systems. Originally powering Azure Logic Apps and Power Automate, these connectors are now available as standalone, strongly-typed Python clients for any Python application β no workflow service required.
- Async/await native β Built on
aiohttpwith full async support for modern Python applications - Type-safe operations β Generated async methods with type hints and comprehensive docstrings
- Built-in authentication β Managed identity, Azure Identity, and API key token providers
- Resilient HTTP β Configurable retries with exponential backoff for safe HTTP methods; unsafe methods make one attempt by default
- 1,000+ connectors β Any Azure managed connector available via API Hub can be generated
Note: This is the Python SDK. .NET and Node.js SDKs are also available. A Java SDK is planned in collaboration with the Azure Functions team.
βββββββββββββββββββββββββββββββββββββββ
β Your Azure Function / Python App β
β β
β async with Office365Client(...): β
β await client.send_email(...) β
ββββββββββββββββ¬βββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββ
β Generated Connector Clients β
β (office365.py, teams.py, etc.) β
β β
β β’ Typed async methods per action β
β β’ Dataclass models from Swagger β
β β’ Docstrings from connector meta β
ββββββββββββββββ¬βββββββββββββββββββββββ
β depends on
βΌ
βββββββββββββββββββββββββββββββββββββββ
β Azure Connectors Python SDK β
β azure.connectors.sdk β
β β
β β’ Azure Core credentials β
β β’ ConnectorHttpClient + retry β
β β’ ConnectorClientBase β
βββββββββββββββββββββββββββββββββββββββ
Install from PyPI:
pip install azure-connectorsOr install with development dependencies:
pip install azure-connectors[dev]import asyncio
from azure.identity.aio import DefaultAzureCredential
from azure.connectors.office365 import Office365Client, SendEmailInput
async def send_email_example():
connection_url = "https://example.azure.com/connections/office365"
async with DefaultAzureCredential() as credential:
async with Office365Client(connection_url, credential) as client:
await client.send_email_async(
input=SendEmailInput(
to="recipient@example.com",
subject="Hello from Python SDK",
body="<p>Sent with the Azure Connectors Python SDK.</p>",
)
)
asyncio.run(send_email_example())from azure.identity.aio import DefaultAzureCredential
from azure.connectors.sharepointonline import SharepointonlineClient
async def list_sharepoint_items():
connection_url = "https://example.azure.com/connections/sharepointonline"
async with DefaultAzureCredential() as credential:
async with SharepointonlineClient(connection_url, credential) as client:
items = [
item
async for item in client.get_items_async(
dataset="https://contoso.sharepoint.com/sites/MySite",
table="MyList",
)
]
for item in items:
print(f"Item: {item.get('Title')}")from azure.identity.aio import DefaultAzureCredential
from azure.connectors.teams import DynamicPostMessageRequest, TeamsClient
async def post_teams_message():
connection_url = "https://example.azure.com/connections/teams"
async with DefaultAzureCredential() as credential:
async with TeamsClient(connection_url, credential) as client:
await client.post_message_to_conversation_async(
input=DynamicPostMessageRequest(
additional_properties={
"body": {
"content": "Hello from Python!",
"contentType": "text",
}
}
),
poster="User",
location="19:channel-id",
)By default, GET, HEAD, OPTIONS, and TRACE use the configured retry settings. POST, PUT, PATCH, DELETE, and other methods make one attempt after a transient response or transport error because the connector may already have completed the side effect.
Only opt in when the connector operation can tolerate replay, preferably with a service-supported idempotency key or deduplication:
from azure.identity.aio import DefaultAzureCredential
from azure.connectors.teams import TeamsClient
async def use_teams_client(connection_url: str):
async with DefaultAzureCredential() as credential:
async with TeamsClient(
connection_url,
credential,
max_retry_attempts=3,
retry_unsafe_http_methods=True,
) as client:
print(client.connector_name)max_retry_attempts, timeout, and backoff settings govern eligible retries. This is the same cross-language retry-safety contract as the .NET and Node.js SDKs.
The following connectors have been generated and validated with comprehensive test coverage:
| Connector | Package | Status | Coverage |
|---|---|---|---|
| ARM (Azure Resource Manager) | azure.connectors.arm |
β Complete | π SDK Generated |
| Azure AD | azure.connectors.azuread |
β Complete | π SDK Generated |
| Azure Automation | azure.connectors.azureautomation |
β Complete | π SDK Generated |
| Azure Blob Storage | azure.connectors.azureblob |
β Complete | β E2E Validated |
| Azure Cosmos DB | azure.connectors.documentdb |
β Complete | π SDK Generated |
| Azure Data Explorer | azure.connectors.kusto |
β Complete | β E2E Validated |
| Azure Data Factory | azure.connectors.azuredatafactory |
β Complete | π SDK Generated |
| Azure Digital Twins | azure.connectors.azuredigitaltwins |
β Complete | π SDK Generated |
| Azure Event Grid | azure.connectors.azureeventgrid |
β Complete | π SDK Generated |
| Azure Event Hubs | azure.connectors.eventhubs |
β Complete | π SDK Generated |
| Azure IoT Central | azure.connectors.azureiotcentral |
β Complete | π SDK Generated |
| Azure Key Vault | azure.connectors.keyvault |
β Complete | π SDK Generated |
| Azure Monitor Logs | azure.connectors.azuremonitorlogs |
β Complete | π SDK Generated |
| Azure Queues | azure.connectors.azurequeues |
β Complete | π SDK Generated |
| Azure Tables | azure.connectors.azuretables |
β Complete | π SDK Generated |
| Azure VM | azure.connectors.azurevm |
β Complete | π SDK Generated |
| Box | azure.connectors.box |
β Complete | π SDK Generated |
| Campfire | azure.connectors.campfire |
β Complete | π SDK Generated |
| ClickSend SMS | azure.connectors.clicksendsms |
β Complete | π SDK Generated |
| CloudConvert | azure.connectors.cloudconvert |
β Complete | π SDK Generated |
| Cloudmersive Document Conversion | azure.connectors.cloudmersiveconvert |
β Complete | π SDK Generated |
| DocuSign | azure.connectors.docusign |
β Complete | π SDK Generated |
| DocuWare | azure.connectors.docuware |
β Complete | π SDK Generated |
| Dropbox | azure.connectors.dropbox |
β Complete | π SDK Generated |
| Elfsquad Data | azure.connectors.elfsquaddata |
β Complete | π SDK Generated |
| Etsy | azure.connectors.etsy |
β Complete | π SDK Generated |
| Eventbrite | azure.connectors.eventbrite |
β Complete | π SDK Generated |
| Excel Online | azure.connectors.excelonline |
β Complete | π SDK Generated |
| Excel Online (Business) | azure.connectors.excelonlinebusiness |
β Complete | π SDK Generated |
| Fin & Ops Apps (Dynamics 365) | azure.connectors.dynamicsax |
β Complete | π SDK Generated |
| Formstack Forms | azure.connectors.formstackforms |
β Complete | π SDK Generated |
| Freshservice | azure.connectors.freshservice |
β Complete | π SDK Generated |
| FTP | azure.connectors.ftp |
β Complete | π SDK Generated |
| GitHub | azure.connectors.github |
β Complete | π SDK Generated |
| Google Calendar | azure.connectors.googlecalendar |
β Complete | π SDK Generated |
| Google Drive | azure.connectors.googledrive |
β Complete | π SDK Generated |
| Google Tasks | azure.connectors.googletasks |
β Complete | π SDK Generated |
| IBM MQ | azure.connectors.mq |
β Complete | β E2E Validated |
| Impexium | azure.connectors.impexium |
β Complete | π SDK Generated |
| Infusionsoft (Keap) | azure.connectors.infusionsoft |
β Complete | π SDK Generated |
| Insightly | azure.connectors.insightly |
β Complete | π SDK Generated |
| Jedox OData Hub | azure.connectors.jedoxodatahub |
β Complete | π SDK Generated |
| Jira | azure.connectors.jira |
β Complete | π SDK Generated |
| Mailchimp | azure.connectors.mailchimp |
β Complete | π SDK Generated |
| Meeting Room Map | azure.connectors.meetingroommap |
β Complete | π SDK Generated |
| Microsoft Bookings | azure.connectors.microsoftbookings |
β Complete | π SDK Generated |
| Microsoft Dataverse | azure.connectors.commondataservice |
β Complete | π SDK Generated |
| Microsoft Defender ATP | azure.connectors.wdatp |
β Complete | π SDK Generated |
| Microsoft Forms | azure.connectors.microsoftforms |
β Complete | π SDK Generated |
| Microsoft Graph | azure.connectors.msgraphgroupsanduser |
β Complete | β E2E Validated |
| Microsoft Teams | azure.connectors.teams |
β Complete | β E2E Validated |
| Microsoft To Do | azure.connectors.todo |
β Complete | π SDK Generated |
| Monday.com | azure.connectors.monday |
β Complete | π SDK Generated |
| Office 365 Groups | azure.connectors.office365groups |
β Complete | π SDK Generated |
| Office 365 Groups Mail | azure.connectors.office365groupsmail |
β Complete | π SDK Generated |
| Office 365 Outlook | azure.connectors.office365 |
β Complete | β E2E Validated |
| Office 365 Users | azure.connectors.office365users |
β Complete | β E2E Validated |
| OneDrive (Personal) | azure.connectors.onedrive |
β Complete | π SDK Generated |
| OneDrive for Business | azure.connectors.onedriveforbusiness |
β Complete | π SDK Generated |
| OneNote | azure.connectors.onenote |
β Complete | π SDK Generated |
| Orderful | azure.connectors.orderful |
β Complete | π SDK Generated |
| Outlook.com | azure.connectors.outlook |
β Complete | π SDK Generated |
| PDF.co | azure.connectors.pdfco |
β Complete | π SDK Generated |
| Pipedrive | azure.connectors.pipedrive |
β Complete | π SDK Generated |
| Planner | azure.connectors.planner |
β Complete | π SDK Generated |
| Plivo | azure.connectors.plivo |
β Complete | π SDK Generated |
| Plumsail Documents | azure.connectors.plumsail |
β Complete | π SDK Generated |
| Power BI | azure.connectors.powerbi |
β Complete | π SDK Generated |
| Projectplace | azure.connectors.projectplace |
β Complete | π SDK Generated |
| Replicon | azure.connectors.replicon |
β Complete | π SDK Generated |
| Rev.ai | azure.connectors.revai |
β Complete | π SDK Generated |
| RSS | azure.connectors.rss |
β Complete | π SDK Generated |
| Salesforce | azure.connectors.salesforce |
β Complete | π SDK Generated |
| Seismic Planner | azure.connectors.seismicplanner |
β Complete | π SDK Generated |
| SendGrid | azure.connectors.sendgrid |
β Complete | π SDK Generated |
| Service Bus | azure.connectors.servicebus |
β Complete | π SDK Generated |
| SharePoint Online | azure.connectors.sharepointonline |
β Complete | β E2E Validated |
| Shifts | azure.connectors.shifts |
β Complete | π SDK Generated |
| SigningHub | azure.connectors.signinghub |
β Complete | π SDK Generated |
| Slack | azure.connectors.slack |
β Complete | π SDK Generated |
| SMTP | azure.connectors.smtp |
β Complete | π SDK Generated |
| SQL Server | azure.connectors.sql |
β Complete | π SDK Generated |
| Starmind | azure.connectors.starmind |
β Complete | π SDK Generated |
| StarRez REST V1 | azure.connectors.starrezrestv1 |
β Complete | π SDK Generated |
| Tallyfy | azure.connectors.tallyfy |
β Complete | π SDK Generated |
| TextRequest | azure.connectors.textrequest |
β Complete | π SDK Generated |
| Ticketmaster | azure.connectors.ticketmaster |
β Complete | π SDK Generated |
| Trello | azure.connectors.trello |
β Complete | π SDK Generated |
azure.connectors.twitter |
β Complete | π SDK Generated | |
| Typeform | azure.connectors.typeform |
β Complete | π SDK Generated |
| Universal Print | azure.connectors.universalprint |
β Complete | π SDK Generated |
| Way We Do | azure.connectors.waywedo |
β Complete | π SDK Generated |
| Webex | azure.connectors.webex |
β Complete | π SDK Generated |
| Word Online (Business) | azure.connectors.wordonlinebusiness |
β Complete | π SDK Generated |
| WordPress | azure.connectors.wordpress |
β Complete | π SDK Generated |
| Yammer | azure.connectors.yammer |
β Complete | π SDK Generated |
| Zendesk | azure.connectors.zendesk |
β Complete | π SDK Generated |
| Zoho Sign | azure.connectors.zohosign |
β Complete | π SDK Generated |
| Zoho ZeptoMail | azure.connectors.zeptomail |
β Complete | π SDK Generated |
Total: 99 connectors supported
See ROADMAP.md for planned connector additions and tests/README.md for detailed test coverage.
Generated clients require a caller-owned Azure Core credential.
from azure.identity.aio import ManagedIdentityCredential
from azure.connectors.office365 import Office365Client
async def use_managed_identity(connection_url: str):
async with ManagedIdentityCredential() as credential:
async with Office365Client(connection_url, credential) as client:
print(client.connector_name)Pass client_id="your-client-id" to ManagedIdentityCredential for a user-assigned identity.
Any asynchronous Azure Identity credential can be passed directly:
from azure.identity.aio import DefaultAzureCredential
from azure.connectors.office365 import Office365Client
credential = DefaultAzureCredential()
client = Office365Client(connection_url, credential)The caller owns the credential and must close it. Prefer an async with credential context as shown above.
from azure.core.credentials import AzureKeyCredential
from azure.connectors.office365 import Office365Client
credential = AzureKeyCredential("your-api-key")
client = Office365Client(connection_url, credential)Pass retry, timeout, transport, and Azure Core policy settings directly to the generated client:
client = Office365Client(
connection_url,
credential,
timeout_seconds=60.0,
max_retry_attempts=5,
use_exponential_backoff=True,
initial_retry_delay_seconds=1.0,
)timeout_seconds is one total network budget for each request, including
retries, response loading, and body reads. Each generated operation also accepts
keyword-only timeout, headers, client_request_id, and response_hook
request controls; timeout overrides that total budget for one operation. Set
either timeout to zero or a negative value to disable SDK and transport
deadlines for the selected requests.
Generated clients accept any Azure Core AsyncHttpTransport. The client closes
an injected transport through its asynchronous lifecycle; the caller retains
ownership of the credential. The SDK enforces the total request budget across
transports and applies transport-specific timeout options only when supported.
per_call_policies and per_retry_policies are composed with the default or an
explicit policies chain. An explicit chain using per_retry_policies must
contain an AsyncRetryPolicy. Explicit chains without a retry policy remain
supported; the SDK enforces positive total request deadlines without forwarding
retry-only options to the transport.
azure-connectors/
βββ src/azure/connectors/
β βββ sdk/ # Azure Core runtime infrastructure
β β βββ client_base.py # Base connector client
β β βββ http_client.py # Async pipeline and retry policies
β β βββ response.py # Immutable response hook contracts
β β βββ exceptions.py # Exception types
β βββ office365.py # Office 365 generated client
β βββ sharepointonline.py # SharePoint generated client
β βββ teams.py # Teams generated client
βββ tests/ # Comprehensive test suite
βββ samples/ # Usage examples
βββ docs/ # Additional documentation
The SDK supports SDK-type bindings for Python Function apps, allowing functions to bind to and return rich, strongly-typed objects instead of raw JSON payloads. This enables cleaner code and better IDE support with type hints.
Use the Azure Functions connector extension's SDK type annotation. The extension converter normalizes the trigger payload and returns generated Azure Connectors SDK models:
import azure.functions as func
import azurefunctions.extensions.connectors.office365 as office365
app = func.FunctionApp()
@app.connector_trigger(arg_name="messages")
def process_emails(
messages: list[office365.ClientReceiveMessage],
) -> None:
for message in messages:
print(message.from_)
print(message.subject)Generated connector models intentionally do not provide from_json() methods.
See SDK-Type Bindings for Azure Functions for the
ownership model and extension implementation guidance.
- Azure Functions Connector Extension β An Azure Functions trigger extension for receiving webhook callbacks from Connector Namespace managed connectors
- Connectors .NET SDK β .NET implementation of this SDK
- Connectors Node.js SDK β Node.js implementation of this SDK
This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com.
When you submit a pull request, a CLA bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions provided by the bot.
See CONTRIBUTING.md for detailed guidelines.
For issues and questions:
- π Bug reports: File an issue
- π Documentation: Browse the source guides and the API reference.
See SUPPORT.md for more information.
This project is licensed under the MIT License - see the LICENSE file for details.
This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments.