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-only clients β Import clients from
azure.connectors.<connector>; there is no synchronous mirror - Type-safe operations β Unsuffixed async operations expose type hints and comprehensive docstrings
- Built-in authentication β Async Azure Identity credentials, managed identity, and Azure Core API keys
- 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 β
β (async clients in root modules) β
β β
β β’ Matching unsuffixed operations β
β β’ Shared 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]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(
input=SendEmailInput(
to="recipient@example.com",
subject="Hello from Python SDK",
body="<p>Sent with the Azure Connectors Python SDK.</p>",
)
)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.list_items(
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 TeamsClient
from azure.connectors.teams import DynamicPostMessageRequest
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(
input=DynamicPostMessageRequest(
additional_properties={
"body": {
"content": "Hello from Python!",
"contentType": "text",
}
}
),
poster="User",
location="19:channel-id",
)Long-running operations use an Azure SDK-style begin_* method. Keep the
client open until the poller reaches its terminal response:
from azure.identity.aio import DefaultAzureCredential
from azure.connectors.kusto import KustoClient, QueryAndListSchema
async def run_kusto_query():
connection_url = "https://example.azure.com/connections/kusto"
async with DefaultAzureCredential() as credential:
async with KustoClient(connection_url, credential) as client:
poller = await client.begin_list_kusto_results(
input=QueryAndListSchema(
cluster="https://contoso.kusto.windows.net",
db="Samples",
csl="StormEvents | take 5",
)
)
return await poller.result()Await the begin_* method to create an AsyncLROPoller, then
await poller.result() waits for completion. See the
long-running operations guide.
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 DevOps (VSTS) | azure.connectors.visualstudioteamservices |
β 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 |
| Dataflows (Power Query) | azure.connectors.dataflows |
β 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: 101 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.
Clients accept caller-owned AsyncTokenCredential implementations:
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 async with for both
the credential and client, as shown in the quick start.
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=60.0,
max_retry_attempts=5,
use_exponential_backoff=True,
initial_retry_delay_seconds=1.0,
)The client-level timeout sets a 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; the operation-level 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.
Clients accept Azure Core AsyncHttpTransport implementations and close injected
transports asynchronously; callers retain ownership of credentials. The SDK
applies transport-specific timeout options only when supported. Blocking callbacks
must bound their own execution; the SDK cannot interrupt them. per_call_policies
and per_retry_policies compose with the default or an explicit policies chain.
Per-retry extensions require AsyncRetryPolicy.
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 # Async client and models
β βββ sharepointonline.py # SharePoint generated client
β βββ teams.py # Teams generated client
βββ tests/ # Comprehensive test suite
βββ samples/ # Usage examples
βββ docs/ # Additional documentation
See Migrate to unsuffixed async operations for the
breaking changes from the earlier preview. Async-only is an intentional
divergence from the Azure SDK synchronous-client guideline, aligned with the
.NET connector SDK. This does not restore the old API: keyword-only options,
Azure Core errors, AsyncItemPaged, and AsyncLROPoller remain.
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.