Azure.Connectors.Sdk
0.14.0-preview.1
Prefix Reserved
dotnet add package Azure.Connectors.Sdk --version 0.14.0-preview.1
NuGet\Install-Package Azure.Connectors.Sdk -Version 0.14.0-preview.1
<PackageReference Include="Azure.Connectors.Sdk" Version="0.14.0-preview.1" />
<PackageVersion Include="Azure.Connectors.Sdk" Version="0.14.0-preview.1" />
<PackageReference Include="Azure.Connectors.Sdk" />
paket add Azure.Connectors.Sdk --version 0.14.0-preview.1
#r "nuget: Azure.Connectors.Sdk, 0.14.0-preview.1"
#:package Azure.Connectors.Sdk@0.14.0-preview.1
#addin nuget:?package=Azure.Connectors.Sdk&version=0.14.0-preview.1&prerelease
#tool nuget:?package=Azure.Connectors.Sdk&version=0.14.0-preview.1&prerelease
Azure Connectors .NET SDK
Type-safe .NET clients for Azure connectors — call Office 365, SharePoint, Teams, Dataverse, and 1,000+ connectors directly from Azure Functions and other .NET apps.
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.
Why This SDK?
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 C# clients for any .NET application — no workflow service required.
- Type-safe operations — Generated async methods with full IntelliSense and XML documentation
- Built-in authentication — Managed identity and connection string token providers for API Hub
- Resilient HTTP — Configurable retry policies for transient failures
- 1,000+ connectors — Any Azure managed connector available via API Hub can be generated
Note: This is the .NET SDK. Python, Node.js, and Java SDKs are planned in collaboration with the Azure Functions team.
How It Works
┌─────────────────────────────────────┐
│ Your Azure Function / App │
│ │
│ using Office365Client; │
│ await client.SendEmailAsync(...); │
└──────────────┬──────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ Generated Connector Clients │
│ (Office365Extensions.cs, etc.) │
│ │
│ • Typed async methods per action │
│ • Input/output models from Swagger │
│ • XML docs from connector metadata │
└──────────────┬──────────────────────┘
│ depends on
▼
┌─────────────────────────────────────┐
│ Azure Connectors .NET SDK │
│ Azure.Connectors.Sdk │
│ │
│ • Azure.Core TokenCredential auth │
│ • ConnectorHttpClient + retry │
│ • ConnectorJsonSerializer │
└─────────────────────────────────────┘
Installation
From NuGet.org
dotnet add package Azure.Connectors.Sdk --prerelease
Quick Start
1. Generate Connector Code
Use the LogicAppsCompiler CLI to generate typed clients from connector Swagger definitions:
LogicAppsCompiler.exe ./generated unused --directClient --connectors=office365
See GENERATION.md for detailed generation instructions.
2. Add Generated Code to Your Project
Copy the generated *Extensions.cs files to your project.
3. Use the Typed Client
using System;
using Azure.Connectors.Sdk;
using Azure.Connectors.Sdk.Office365;
using Azure.Identity;
// Get connection runtime URL from Azure Portal
var connectionRuntimeUrl = "https://...";
// Create client — defaults to ManagedIdentityCredential (system-assigned)
using var client = new Office365Client(connectionRuntimeUrl);
// For local development, pass AzureCliCredential explicitly
using var localClient = new Office365Client(
new Uri(connectionRuntimeUrl),
new AzureCliCredential());
// Or configure retry and diagnostics via ConnectorClientOptions
using var clientWithOptions = new Office365Client(
new Uri(connectionRuntimeUrl),
new AzureCliCredential(),
new ConnectorClientOptions());
// Call typed operations
await client.SendEmailAsync(new SendEmailInput
{
To = "recipient@example.com",
Subject = "Hello from SDK",
Body = "<p>Email body</p>"
});
var categories = await client.GetOutlookCategoryNamesAsync();
SDK Components
Client Base
| Component | Description |
|---|---|
ConnectorClientBase |
Abstract base class for all generated clients — provides authentication, retry, OTel tracing, JSON serialization, and SSRF-protected URL resolution |
ConnectorClientOptions |
Configuration for retry count, timeout, exponential backoff, and initial retry delay |
ConnectorException |
Unified exception for connector API failures with ConnectorName, Operation, StatusCode, and ResponseBody |
Authentication
Authentication uses Azure.Core TokenCredential directly — any credential from Azure.Identity works:
| Credential | Use Case |
|---|---|
ManagedIdentityCredential |
Azure-hosted apps — system-assigned by default when no credential is specified |
AzureCliCredential |
Local development — pass explicitly (default no longer probes CLI) |
ClientSecretCredential |
Service principal authentication |
HTTP
| Component | Description |
|---|---|
ConnectorHttpClient |
HTTP client with built-in authentication |
Serialization
| Component | Description |
|---|---|
ConnectorJsonSerializer |
JSON serialization with connector conventions |
JsonConverters |
Custom converters for connector types |
Triggers
| Component | Description |
|---|---|
TriggerCallbackPayload<T> / TriggerCallbackBody<T> |
Typed envelope for connector trigger callbacks; normalizes batch and single-item shapes into Body.Value |
ConnectorTriggerPayload |
Helpers to read a raw trigger callback (string/Stream) into a typed payload (Read/ReadAsync) or decoded binary file bytes (TryReadBinaryContent/ReadBinaryContentAsync), with case-insensitive matching and a bounded read |
See docs/triggers.md for the trigger architecture, payload shapes, and end-to-end usage.
Documentation
- docs/concepts.md - Key concepts, terminology, and architecture
- docs/generated-contract.md - Language-neutral rules for generated actions, model and JSON property names, triggers, discovery helpers, and Swagger wire contracts
- GENERATION.md - How to generate connector code
- docs/connection-setup.md - Setting up connections for local testing
- docs/triggers.md - Trigger architecture, typed payloads, and the
ConnectorTriggerPayloadreader - ROADMAP.md - Connector generation progress and lessons learned
- Azure/Connectors-NET-Samples - Full working samples (Azure Functions, triggers, etc.)
AI Agent Skills
- Connection Setup Skill - AI agent workflow for creating Connector Namespace connections, OAuth consent, access policies, and configuring app settings — all from within VS Code
Validated Connectors
| Connector | Status | Validated Operations |
|---|---|---|
| Azure AD | 🔄 SDK Generated | GetUser, CreateUser, GetGroup, GetGroupMembers, CreateGroup, UpdateUser, CheckMemberGroups |
| Azure IoT Central | 🔄 SDK Generated | ApplicationsList, DeviceGroupsList, DeviceGroupsGet, DeviceGroupsSet, DevicesGetCloudProperties (pageable) |
| Azure Monitor Logs | ✅ E2E Validated | ListSubscriptions, ListResourceGroups, ListResources, QueryData, QuerySchema |
| Azure Resource Manager | ✅ E2E Validated | SubscriptionsList, ResourceGroupsList, ResourceGroupsListResources, ResourceGroupsGet, ResourceGroupsCreateOrUpdate, ResourceGroupsDelete, ResourcesGetById |
| IBM MQ | 🔄 SDK Generated | SendAsync, ReadAsync, ReadAllAsync, ReceiveAsync, ReceiveAllAsync, DeleteAsync, DeleteAllAsync |
| Office365 | ✅ Validated | SendEmail, GetOutlookCategoryNames, ExportEmail, CalendarPostItem |
| Office365 Users | ✅ Validated | MyProfile, UserProfile, Manager, DirectReports, SearchUser |
| OneDrive for Business | ✅ Validated | ListRootFolder, ListFolder, GetFileContentByPath, CreateFile, FindFilesByPath, CreateShareLink |
| SharePoint | ✅ E2E Validated | GetDataSets → GetAllTables, GetFileItems, GetFileContentByPath, CreateFile |
| MS Graph Groups & Users | ✅ Validated | ListUsers, ListGroupsByDisplayNameSearch, GetGroupProperties |
| Teams | ✅ Validated | GetAllTeams, GetChannelsForGroup, PostMessageToConversation |
| SMTP | ✅ Validated | SendEmail |
| Azure Event Grid | ✅ E2E Validated | TopicTypesList, SubscriptionsList (trigger: CreateSubscription) |
| Excel Online | ✅ E2E Validated | GetTables (connectivity confirmed via sdk-test-gateway-prod) |
| Universal Print | ✅ E2E Validated | ListRecentShares (returned 0 shares via sdk-test-gateway-prod) |
| Microsoft Defender ATP | ✅ E2E Validated | GetAlerts (reached Defender API via sdk-test-gateway-prod; 403 = tenant permissions) |
| Dataverse (commondataservice) | ✅ E2E Validated | GetDataSets, GetTables, GetItems, GetItem, PostItem, PatchItem, DeleteItem, CreateAttachment (binary note content; record cleanup verified), GetNextPage |
| Campfire | 🔄 SDK Generated | ListAccounts, ListRooms, CreateMessage (trigger: OnNewRoom) |
| ClickSend SMS | 🔄 SDK Generated | SmsSend, CreateList, GetContactLists (trigger: OnSmsInboundAutomation) |
| CloudConvert | 🔄 SDK Generated | ConvertFile, OptimizeFile, CaptureWebsite, MergeFiles; five dynamic-options discovery helpers |
| Cloudmersive Convert | 🔄 SDK Generated | ConvertDocumentAutodetectGetInfo, ConvertDocumentAutodetectToPdf |
| Etsy | 🔄 SDK Generated | Ping, PaymentLedgerEntries, PaymentGetEntryID |
| Excel Online (Business) | 🔄 SDK Generated | CreateTableAsync |
| Formstack Forms | 🔄 SDK Generated | GetAvailableForms (trigger: OnFormstackFormSubmitted) |
| FreshService | 🔄 SDK Generated | AddNote, CreateTicket, UpdateTicket (trigger: OnTicketCreated) |
| Infusionsoft (Keap) | 🔄 SDK Generated | CreateTask, UpdateTask, ListTasks (trigger: OnNewTask) |
| Insightly | 🔄 SDK Generated | ListTasks, UpdateTask, AddTask (trigger: OnTaskAssignedToMe) |
| Pipedrive | 🔄 SDK Generated | ListDeals, GetDeal, UpdateDealStatus (trigger: OnTrigNewActivity) |
| Plivo | 🔄 SDK Generated | MakeCall, ListMessages, SendSMS |
| Plumsail | 🔄 SDK Generated | AddWatermarkToPdf, RegExpMatch, ParseCsv |
| Replicon | 🔄 SDK Generated | BulkGetProjectDetails3, CreateProjectOrApplyModifications |
| Rev.ai | 🔄 SDK Generated | TranscriptionGet, TranscriptionsGet, TranscriptionDelete |
| Zoho Sign | 🔄 SDK Generated | InvokeAPI, DownloadCompletionCertificate (trigger: OnZohoSignTriggers) |
| Docuware | 🔄 SDK Generated | GetOrganization, StoreToFileCabinet |
| Elfsquad Data | 🔄 SDK Generated | GetSchemas, GetEntities |
| Impexium | 🔄 SDK Generated | GetAbandonedCheckouts, ListAllExhibitors |
| Jedox OData Hub | 🔄 SDK Generated | Databases, GetCubes |
| Meeting Room Map | 🔄 SDK Generated | GetCategories, GetCustomLocations |
| Orderful | 🔄 SDK Generated | ListTransactions |
| Outlook | 🔄 SDK Generated | GetEmailAsync, SendEmailAsync, DeleteEmailAsync, CalendarGetItemsAsync, ContactGetItemsAsync |
| PDF.co | 🔄 SDK Generated | HtmlToPdf, UrlToPdf, PdfFiller |
| Projectplace | 🔄 SDK Generated | ListBoards, CreateCard |
| Seismic Planner | 🔄 SDK Generated | GetComments, CreateComment |
| Service Bus | 🔄 SDK Generated | GetQueuesAsync, GetTopicsAsync |
| Starmind | 🔄 SDK Generated | FindExperts, FindQuestions |
| StarRez REST V1 | 🔄 SDK Generated | SelectEntry, CreateEntry, UpdateEntry |
| Tallyfy | 🔄 SDK Generated | GetUserOrganizations, EditTaskDeadline |
| TextRequest | 🔄 SDK Generated | GetMessagesByContactPhone, SendMessageByPhoneNumber |
| Ticketmaster | 🔄 SDK Generated | EventsGet, EventsGetDetails |
| Way We Do | 🔄 SDK Generated | GetAllChecklistInstances, CommentAdd |
| Word Online (Business) | 🔄 SDK Generated | GetFileSchemaAsync, CreateFileItemAsync, GetSourcesAsync |
| Azure Automation | 🔄 SDK Generated | CreateJob, GetStatusOfJob, GetJobOutput |
| Azure Cosmos DB | 🔄 SDK Generated | GetCosmosDbAccountsAsync, CreateDocumentAsync |
| Azure Data Factory | 🔄 SDK Generated | CreatePipelineRun, GetPipelineRun, CancelPipelineRun |
| Azure Digital Twins | 🔄 SDK Generated | AddTwin, GetTwinById, QueryTwins |
| Azure Event Hubs | 🔄 SDK Generated | GetEventHubsAsync, SendEventAsync, SendEventsAsync |
| Azure Queues | 🔄 SDK Generated | GetMessagesAsync, PutMessageAsync, DeleteMessageAsync, ListQueuesAsync, PutQueueAsync |
| Azure Tables | 🔄 SDK Generated | GetTableAsync, GetEntitiesAsync, CreateEntityAsync, MergeEntityAsync, DeleteEntityAsync |
| Azure VM | 🔄 SDK Generated | VirtualMachineGet, VirtualMachineStart, VirtualMachineDeallocate |
| Key Vault | 🔄 SDK Generated | GetSecret, ListSecrets, EncryptData |
| Microsoft Bookings | 🔄 SDK Generated | ListBookingsBusinessUserAsAdmin |
| Microsoft Forms | 🔄 SDK Generated | ListForms, GetFormDetailsById, GetFormResponseById, GetQuestions |
| Office 365 Groups | 🔄 SDK Generated | ListGroups, AddMemberToGroup, CreateCalendarEvent |
| Office 365 Groups Mail | 🔄 SDK Generated | ListConversations, CreateConversation, ReplyToAThread |
| OneNote | 🔄 SDK Generated | GetNotebooks, CreatePageInSection, GetPageContent |
| Planner | 🔄 SDK Generated | ListMyTasks, CreateTask, UpdateTask |
| Power BI | 🔄 SDK Generated | ExecuteDatasetQuery, AddRows, RefreshDataset |
| SigningHub | 🔄 SDK Generated | AttachmentGetAttachments, AttachmentDeleteAttachment |
| Shifts | 🔄 SDK Generated | ListShifts, ListOpenShifts, GetSchedule |
| To Do | 🔄 SDK Generated | GetAllTodoLists, CreateToDo, GetToDo |
| Box | 🔄 SDK Generated | GetFileMetadata, CreateFile, CopyFile, ExtractFolder |
| DocuSign | 🔄 SDK Generated | CreateEnvelopeFromTemplate, SendEnvelope, GetRecipientStatus, ListEnvelopes |
| Dropbox | 🔄 SDK Generated | GetFileMetadata, CreateFile, CopyFile, ExtractFolder |
| Dynamics AX | 🔄 SDK Generated | GetTable, GetItems, PostItem, ExecuteProcedure |
| Eventbrite | 🔄 SDK Generated | GetCategories, GetOrganizations, GetOrganizationEvents, CreateEvent |
| FTP | 🔄 SDK Generated | CreateFile, GetFileMetadata, UpdateFile, DeleteFile |
| GitHub | 🔄 SDK Generated | CreateIssue, GetIssues, CreatePullRequest, MergePullRequest |
| Google Calendar | 🔄 SDK Generated | ListCalendars, ListEvents, CreateEvent, UpdateEvent |
| Google Drive | 🔄 SDK Generated | GetFileMetadata, CreateFile, ListFolder, ListRootFolder |
| Google Tasks | 🔄 SDK Generated | ListTaskLists, CreateTaskList, ListTasks |
| Jira | 🔄 SDK Generated | ListIssues, CreateIssue, EditIssue, ListProjects |
| Mailchimp | 🔄 SDK Generated | GetCampaigns, GetLists, AddMembers, Sendcampaign |
| Monday.com | 🔄 SDK Generated | GetBoards, CreateItem, GetItems, CreateBoard |
| OneDrive (Personal) | 🔄 SDK Generated | GetFileMetadata, CreateFile, ListRootFolder, FindFiles, CreateShareLink |
| RSS | 🔄 SDK Generated | ListFeedItems |
| Salesforce | 🔄 SDK Generated | GetItems, PostItem, PatchItem, ExecuteSoqlQuery |
| SendGrid | 🔄 SDK Generated | SendEmail, ListRecipientLists, AddGlobalSuppression |
| Slack | 🔄 SDK Generated | PostMessage, CreateChannel, JoinChannel |
| SQL Server | 🔄 SDK Generated | GetItems, PostItem, PatchItem, ExecuteProcedure, GetDatabases |
| Trello | 🔄 SDK Generated | ListCards, CreateCard, ListBoards, ListLists |
| 🔄 SDK Generated | UserTimeline, HomeTimeline, SearchTweet, Tweet | |
| Typeform | 🔄 SDK Generated | ListForms |
| Webex | 🔄 SDK Generated | SendMessage, GetMessages, GetSpaces, CreateSpace |
| WordPress | 🔄 SDK Generated | SiteStats, Get, Create, ListSites |
| Yammer (Viva Engage) | ✅ E2E Validated | GetNetworks (returned 2 networks via sdk-test-gateway-prod) |
| Zendesk | 🔄 SDK Generated | PostItem, DeleteItem, PatchItem, SearchArticles |
Related Projects
| Project | Description |
|---|---|
| Connector SDK Samples | Sample Azure Functions demonstrating SDK usage with Office 365, SharePoint, Teams, and more |
| Connector SDK LSP | Language Server Protocol server and VS Code extension for intelligent code assistance when developing with the SDK |
| Azure Functions Connector Extension | Azure Functions host and worker extensions for managed connectors |
Regenerating Connectors
Connectors should be regenerated periodically to incorporate Swagger updates:
LogicAppsCompiler.exe ./generated unused --directClient --connectors=office365,servicebus,teams
Releasing a New Version
The version is defined in eng/build/Version.props (VersionPrefix + VersionSuffix). Three ADO pipelines in azfunc/internal handle mirroring, building/signing, and publishing to nuget.org.
See the Releasing a New Version section in the copilot instructions for the full step-by-step procedure, pipeline IDs, version suffix behavior, and common pitfalls.
License
This project is licensed under the MIT License — see the LICENSE file for details.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- Azure.Core (>= 1.53.0)
- Azure.Identity (>= 1.21.0)
- Microsoft.Extensions.Configuration.Abstractions (>= 10.0.7)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.7)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.7)
- System.Text.Json (>= 10.0.7)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.14.0-preview.1 | 502 | 8/13/2026 |
| 0.13.0-preview.1 | 2,373 | 7/10/2026 |
| 0.12.0-preview.1 | 383 | 6/2/2026 |
| 0.11.0-preview.1 | 418 | 5/17/2026 |
| 0.10.0-preview.1 | 236 | 5/12/2026 |
| 0.9.0-preview.1 | 150 | 5/8/2026 |
See https://github.com/Azure/Connectors-NET-SDK/releases/tag/v0.14.0-preview.1
## What's Changed
### 0.14.0-preview.1 (2026-08-12)
#### Breaking Changes
- **Seven clients preserve wire properties that previously collided after C# name generation** — regenerated Etsy, GitHub, Office 365 Outlook, Plumsail Documents, SigningHub, Twitter, and WordPress from the merged collision resolver in AzureUX-BPM PR 16763267. GitHub `PullRequest.DiffUrl` now represents `diff_url`, while `PullRequest.PullRequestDiffUrl` represents the previously dropped `comments_url`. Office 365 `MailTipsClientReceive.ExternalMemberCount` now represents `externalMemberCount`, and `IsModerated` is corrected from `int?` to `bool?` for `isModerated`. Plumsail `AddPowerAutomateWebhookData.ProcessId` now represents `processId`, while `ProcessName` represents the previously dropped `hookUrl`. Etsy adds `BuyerTotalAdjustmentAmount`; SigningHub adds `DocumentId2` for `document_id`; Twitter adds `CreatedAtIso` to both tweet models; and WordPress adds `Id2` for `guid` to both post models. Callers using the three previously misbound GitHub, Office 365, or Plumsail properties must move values to the corrected properties.
- **DocuSign embedded-signing discovery now binds the current route to the unsuffixed method name** — `StaticResponseForEmbeddedSigningSchemaAsync` now requires `isThisAnPersonSigner` and calls `/embeddedSigning_schema_v2`. The older `/embeddedSigning_schema` operation is no longer retained, and callers of `StaticResponseForEmbeddedSigningSchemaV2Async` must use `StaticResponseForEmbeddedSigningSchemaAsync`. This follows the generator rule that the current retained revision owns the unsuffixed name. (AzureUX-BPM PR 16671915)
- **Unreferenced discovery helpers and their models are no longer retained** — discovery reachability now starts from the selected public and trigger surface and continues transitively through retained helpers. This removes methods that survived only because the generator scanned every Swagger definition: `ExcelOnlineBusiness.GetRawAndFormattedTableAsync`; `GoogleDrive.GetTableAsync` and `GetTablesAsync`; `PowerBI.GetPowerBiButtonClickedOutputsAsync`; and Teams' `GetAdaptiveCardInputMetadataAsync`, `GetFlowContinuationSubscriptionOutputMetadataAsync`, `GetNotificationInputMetadataAsync`, `GetCardResponseTriggerOutputsMetadataAsync`, `GetComposeMessageTriggerOutputsMetadataAsync`, `GetSelectedMessageTriggerOutputsMetadataAsync`, and `GetSubscriptionScopeSchemaAsync`.
The removed public models are `GoogleDrive.Models.TableMetadata`, `TableCapabilitiesMetadata`, `TableSortRestrictionsMetadata`, `TableFilterRestrictionsMetadata`, `TableSelectRestrictionsMetadata`, `ObjectEntity`, `TablesList`, and `Table`; `PowerBI.Models.PowerBiButtonClickedOutputs`; and `Teams.Models.SelectedMessageTriggerMetadata`, `ComposeMessageTriggerMetadata`, and `CardResponseTriggerMetadata`. Their model-factory methods are also removed. (AzureUX-BPM PR 16671915)
- **All connector clients regenerated; version-affixed models are no longer collapsed onto one name** — the generator stripped a version affix from a definition name without knowing which definitions a connector retains, so `FooV1` and `FooV2` both claimed `Foo` and only one type was emitted. The dropped one produced a model that compiled and looked complete while omitting fields the service returns. Names are now decided against the retained definition set: a single claimant still strips the affix, several claimants describing the same wire shape still collapse to one type, and claimants with differing shapes keep their affixes so no shape is lost.
`AzureIoTCentral` is the clearest case and shipped separately in #225: `Device` became `DeviceV1` and `DeviceV2`, making the `organizations` property reachable. In this regeneration the same fix reaches `AzureAD`, `Office365`, `Pipedrive` and `Planner`. Callers referencing a previously collapsed model name on those clients must move to the affixed name.
The remaining 71 regenerated clients carry accumulated output from generator fixes that merged after their last regeneration, rather than new behaviour introduced here. (AzureUX-BPM PR 16618864)
- **`purviewAcccountName` parameter corrected to `purviewAccountName` on SQL Server and Azure Blob Storage** — the shared Purview query parameter declares its `name` correctly but carries a triple-c typo in its `x-ms-summary`, and the generator derives the C# identifier from the summary. The misspelling therefore reached the public API surface while the wire query key was always correct, so this changes the identifier only, not request behaviour. Callers passing the parameter positionally are unaffected; callers using a named argument must rename it. Affects 12 occurrences in `SqlExtensions` and 20 in `AzureBlobExtensions`. (AzureUX-BPM PR 16639935)
- **SQL Server procedure metadata methods now expose distinct default and scoped routes** — the unversioned procedure operations own the plain method names, matching the Python SDK. Existing callers to the scoped procedure routes must rename:
| Before | After |
| --- | --- |
| `GetProceduresAsync(serverName, databaseName)` | `GetProceduresV2Async(serverName, databaseName)` |
| `GetProcedureAsync(serverName, databaseName, procedureName)` | `GetProcedureV2Async(serverName, databaseName, procedureName)` |
`GetTableAsync` and `GetPassThroughNativeQueryMetadataAsync` continue to bind to the server- and database-scoped V2 routes because the default-dataset siblings are not reachable from the selected public surface. Compatibility overloads are deliberately not provided: generated code is never hand-edited, and unreachable internal Swagger routes are not retained. ([#222](https://github.com/Azure/Connectors-NET-SDK/issues/222), AzureUX-BPM PRs 16576205 and 16671915)
- **Cloudmersive Convert multipart operations removed** — 75 current managed-connector operations use Swagger 2.0 `formData`/multipart payloads that the SDK transport cannot compose, so the regenerated client no longer exposes those methods or their models. This includes `ConvertDocumentAutodetectGetInfoAsync`, `ConvertDocumentAutodetectToPdfAsync`, `ConvertDocumentDocxToPdfAsync`, `ConvertDocumentPdfToDocxAsync`, `ConvertImageGetImageInfoAsync`, `MergeDocumentPdfAsync`, and `SplitDocumentPdfByPageAsync`. The 53 non-multipart operations remain generated. (#210)
- **DocuSign deprecated and removed operations are no longer generated** — removed `CreateEnvelopeFromTemplateAsync`, `ListEnvelopesAsync`, `SalesCopilotListEnvelopesAsync`, `ScpGetEmailSummaryAsync`, `ScpGetKeySalesAsync`, `ScpGetRelatedActivitiesAsync`, and `ScpGetRelatedRecordsAsync`. `CreateEnvelopeFromTemplateNoRecipientsAsync` remains available. (#210)
- **Zoho Sign `CreateDocumentAsync` removed** — the operation remains in current managed-connector Swagger but requires a multipart/form-data `file` parameter, which the SDK transport cannot compose. (#210)
- **SigningHub upload methods now require file bytes** — `AttachmentUploadAttachmentAsync` and `DocumentsUploadStreamAsync` now require a `byte[] input` argument. Binary Swagger bodies use the SDK's raw request path, which sends the bytes unchanged with `Content-Type: application/octet-stream` instead of JSON/base64 serialization. Existing callers must provide the attachment or document bytes. (#210)
- **Generated method parameter names now follow current Swagger metadata** — named-argument callers may need updates; for example, DocuSign `GetDocgenFormFieldsAsync` now uses `accountId` and `envelopeId`. Positional calls are unaffected. (#210)
- **Docuware multipart-only file operations removed** — `StoreToFileCabinetAsync`, `ImportToDocumentTrayAsync`, `AppendFileAsync`, `DeleteFileAsync`, and `ReplaceFileAsync`, together with their response models/factories, are no longer generated because the SDK transport cannot compose the required Swagger 2.0 `formData` payloads. Other Docuware search, metadata, download, field, and stamp operations remain available. (#210)
- **Teams transcript and recording webhook trigger contracts removed** — current connector Swagger no longer exposes `DynamicTranscriptTriggerRequest`, `DynamicRecordingTriggerRequest`, `TeamsTriggerOperations.OnTranscriptTrigger`, or `TeamsTriggerOperations.OnRecordingTrigger`. (#210)
- **Azure Queues message response now matches the connector wire shape** — `Messages.QueueMessagesList` changed from `List<QueueMessage>` to a `QueueMessagesList` wrapper whose `QueueMessage` property contains the list. `QueueMessage.TimeNextVisible` was renamed to `NextVisibleTime` from the owner Swagger summary. `DequeueCount` remains available because Azure Storage returns it and the connector policy passes it through, although AAPT Swagger omits it. Access messages through `response.QueueMessagesList.QueueMessage`. (#210)
- **DocumentDB query response no longer exposes a synthetic envelope property** — `QueryDocumentsResponse.AdditionalProperties` and the corresponding model-factory parameter were removed. Dynamic document fields are captured by `ObjectWithoutType.AdditionalProperties` on each item in `QueryDocumentsResponse.Documents`, matching the V5 response contract. (#210)
- **Event Hubs owner-required parameters are now required** — `SendEventsAsync` requires `partitionKey`, and `GenerateEventSchemaAsync` requires `contentType`. Callers must pass non-null values declared as required by the connector owner Swagger. (#210)
- **Microsoft Forms schema helper no longer returns a fabricated response** — internal discovery method `GetQuestionsAsync` now returns `Task` instead of `Task<List<JsonElement?>>` because owner Swagger declares no success response schema. (#210)
- **Word Online Business drive discovery hides its internal source parameter** — internal discovery method `GetDrivesAsync` no longer exposes `source`; it sends the owner-declared default `source=me`. (#210)
#### Added
- **CloudConvert typed client** — adds the four public file-conversion operations and five internal discovery helpers referenced exclusively through `x-ms-dynamic-properties`. The client is generated from [AzureUX-BPM PR 16753182](https://msazure.visualstudio.com/One/_git/AzureUX-BPM/pullrequest/16753182).
- **MailChimp A/B split options preserve both wait fields** — `ABSplitOpts` now exposes distinct `WaitUnits` and `WaitTime` properties for the `wait_units` and `wait_time` wire fields instead of silently dropping one generated-name collision. ([#231](https://github.com/Azure/Connectors-NET-SDK/issues/231), AzureUX-BPM PR 16763267)
- **Discovery helpers retained from nested trigger and response schemas** — regenerated Azure Automation, Azure Monitor Logs, Elfsquad Data, Formstack Forms, Monday, Typeform, and Microsoft Defender ATP clients now include helpers pinned by nested trigger and response schemas in connector Swagger. Added `GetRunbookAsync`, `GetTimeRangeSelectionControlAsync`, `GetTriggerSchemaAsync`, `GetFormSchemaAsync`, three Monday column-schema helpers, Typeform's current `GetSchemaAsync`, and `AdvancedHuntingSchemaAsync`, plus five response/request models and four model-factory methods. Elfsquad Data's `GetTriggerSchemaAsync` and Formstack Forms' `GetFormSchemaAsync` return `Task` because owner Swagger declares no success response schema. Azure Automation's single-runbook route is likewise typed as `RunbookListResults` because that is the response definition declared by owner Swagger for both runbook routes. (AzureUX-BPM PR 16671915)
- **Zendesk regains four operations lost to internal versioned siblings** — `GetTablesAsync`, `GetItemsAsync`, `GetItemAsync` and the `GetTableAsync` discovery method are generated again, and the public `GetOnNewItems` trigger is registered alongside `GetOnUpdatedItemsV2` with its own typed callback payload. Version-collision resolution previously ran across the whole operation set, so each `x-ms-visibility: internal` `V2` sibling displaced its public counterpart and was then dropped as unreferenced. Surviving methods also carried a `[DynamicValues("GetTables")]` reference to an operation no longer present in the client. ([#220](https://github.com/Azure/Connectors-NET-SDK/issues/220), AzureUX-BPM PR 16576205)
- **SQL Server regains two default-dataset procedure discovery routes** — `GetProceduresAsync` and `GetProcedureAsync` now address `/datasets/default/...` and are joined by `GetProceduresV2Async` and `GetProcedureV2Async` for the server- and database-scoped routes. Each pair is a distinct reachable contract that previously collapsed onto the V2 route alone. `GetTableAsync`, `GetPassThroughNativeQueryMetadataAsync`, and `GetTablesAsync` deliberately continue to target versioned routes because their unversioned siblings are not reachable or are deprecated. ([#222](https://github.com/Azure/Connectors-NET-SDK/issues/222), AzureUX-BPM PRs 16576205 and 16671915)
- **New operations from current managed connector Swagger** — DocuSign adds `GetDocGenTemplateTabsAsync` and `GetOrganizationsAsync`; Teams adds `RemoveMemberFromChatAsync` and `UpdateChannelPropertiesAsync`; SharePoint adds `GetDayOfWeekOptionsAsync`. (#210)
#### Changed
- **Discovery methods are now emitted after the public surface** — generated clients list customer-facing operations first, then the internal discovery methods retained for dynamic values and dynamic schema. Pipedrive and Plumsail change by this ordering alone; their operation and model sets are unchanged. (AzureUX-BPM PR 16576205)
- **Generated types are documented from their own definition instead of from whatever reached them** — a type's summary was derived from the property or operation that happened to reach it first, which produced meaningless text and made the documentation depend on declaration order. A type reached through a bare envelope property such as `value` was summarized as `Item in value`, naming the wrapper rather than the element, and raw Swagger keys such as `x-ms-capabilities` and `sortRestrictions` were emitted as public API documentation. Zendesk `Table` and `Item` now carry their own names, three Zendesk metadata types gain real descriptions, and seventeen SQL Server summaries improve, for example `Item in List of datasets` becomes `Represents a database.` and `Response for GetTablesForDeleteItem` becomes `Represents a list of tables.` Documentation only; no operation, model, or wire change. (AzureUX-BPM PR 16600581)
- **Regenerated all 97 existing connector clients** using AzureUX-BPM PR 16421737. Generation now uses Azure Identity instead of the legacy ARMClient executable, preserves valid ARM JSON before applying malformed-response fallbacks, filters operations marked `deprecated`, and correctly handles connectors that advertise both JSON and multipart content types. Office 365, Docuware, and SigningHub now regenerate successfully from current ARM exports. (#210)
- **Corrected generated Swagger documentation text** — fixed `seperated`/`Comma-seperated` and `lists’s` in generated XML documentation. (#210)
- **Connector-specific corrections now preserve owner contracts** — Azure Queues receives named types for its nested message response without flattening the wire shape. Current AAPT connector Swagger remains authoritative for Event Hubs required parameters, Microsoft Forms and Word Online Business internal discovery methods, and DocumentDB per-document dynamic fields. (#210)
#### Fixed
- **Connector path and query values now use invariant-culture wire formatting** — regenerated all 98 shipped clients from AzureUX-BPM PR 16770557 so numeric and other formattable parameters no longer depend on `CurrentCulture` before URI escaping. For example, a `double` value of `3.14` now remains `3.14` under `de-DE` instead of becoming `3%2C14`. The hand-written ISO DateTime converter now parses and formats with `InvariantCulture`, and CA1305 is build-enforced to prevent regressions. ([#200](https://github.com/Azure/Connectors-NET-SDK/issues/200))
### 0.13.0-preview.1 (2026-07-09)
#### Added
- **`ConnectorTriggerPayload` helper to read trigger callbacks** — turns a raw Connector Namespace trigger callback (`string` or `Stream`) into a typed payload or decoded file bytes without per-function boilerplate. `Read<TPayload>` / `ReadAsync<TPayload>` deserialize metadata triggers (e.g. OneDrive `OnNewFilesV2`) with case-insensitive property matching, so camelCase wire fields bind correctly instead of silently yielding all-`null` items. `TryReadBinaryContent` / `ReadBinaryContentAsync` decode binary-content triggers (e.g. OneDrive `OnNewFileV2`), whose body is a base64 string. The `Stream` overloads read the caller-owned stream without closing it and enforce a generous, overridable body-size limit (`DefaultMaxBodySizeBytes`, 100 MB); `TryReadBinaryContent` returns `false` (rather than throwing) on malformed JSON. ([#190](https://github.com/Azure/Connectors-NET-SDK/issues/190))
- **Microsoft Dataverse client (`commondataservice`)** — generated typed `CommondataserviceClient` exposing the legacy Common Data Model (CDM) REST surface, which is the surface reachable through the Connector Namespace runtime. Covers environment/table discovery (`GetDataSetsAsync`, `GetTablesAsync`, `GetTableAsync`), row operations (`GetItemsAsync`, `GetItemAsync`, `PostItemAsync`, `PatchItemAsync`, `DeleteItemAsync`), attachments (`CreateAttachmentAsync`, `GetItemAttachmentsAsync`, `GetAttachmentContentAsync`, `DeleteAttachmentAsync`), relationships (`AssociateRecordsPatchItemAsync`, `DisassociateRecordsPostItemAsync`, `DisassociateSingleValueRecordDeleteItemAsync`, `GetCollectionRelationshipsAsync`), choice/metadata discovery, and pagination (`GetNextPageAsync`). Dataset values are full environment URLs (e.g., `https://contoso.crm.dynamics.com/`) and are double URL-encoded per the connector's `x-ms-url-encoding: "double"` contract. The modern Dataverse Web API routes (`/api/data`, `/getorgs`, ...) return HTTP 404 through Connector Namespace and are excluded by the generator's deterministic per-connector route-selection policy, along with the redundant OData-style key-syntax routes.
#### Changed
- **`TriggerCallbackBodyConverter<T>` now throws an actionable error for binary-content bodies** — when a binary-content trigger callback (a JSON string body, e.g. OneDrive `OnNewFileV2`) is deserialized into a metadata payload type, the error now explains the cause and points to `ConnectorTriggerPayload.TryReadBinaryContent` / `ReadBinaryContentAsync` instead of failing with a generic token-mismatch message. ([#190](https://github.com/Azure/Connectors-NET-SDK/issues/190))
### 0.12.0-preview.1 (2026-06-02)
- Breaking: All 1,460 `ConnectorNames.*` constants renamed to PascalCase derived from ARM display names (e.g. `Googledrive` → `GoogleDrive`, `Microsoftteams` → `MicrosoftTeams`, `Office365` → `Office365Outlook`). Update any references by name. (#170)
- Breaking: Optional value-type parameters across all generated clients are now nullable (`int?`, `bool?`, `double?`) so `null` means "unspecified"; overriding subclasses must update signatures. (#180)
- Breaking: Dynamic model properties changed from `object` to `JsonElement?`; pre-serialize arbitrary values to `JsonElement`. (#157)
- Breaking: Output-only model properties changed to `{ get; init; }`; use object initializers or the generated `*ModelFactory` classes. (#161)
- Breaking: `IConnectorClient` marker interface removed — `ConnectorClientBase` now implements `IDisposable` directly. (#183)
- Breaking: `Teams.OnGroupMemberChangeResponseItem` removed; membership trigger payloads are now `TriggerCallbackPayload<object>`. (#170)
- Added Teams trigger payload types — `TeamsOnNewChannelMessageTriggerPayload`, `TeamsOnNewChannelMessageMentioningMeTriggerPayload`, `TeamsOnTeamMemberRemovedTriggerPayload`, `TeamsOnTeamMemberAddedTriggerPayload`, plus the `TeamsTriggers.Operations` registry. (#170)
- Added OpenTelemetry distributed tracing — each generated client has a per-connector `ConnectorActivitySource` (e.g., `Azure.Connectors.Sdk.teams`); subscribe to `Azure.Connectors.Sdk.*` to capture all connector operations. (#183)
- Added `ConnectorException` error-code parsing to populate `RequestFailedException.ErrorCode`. (#180)
- Added `[EditorBrowsable(EditorBrowsableState.Never)]` on inherited `Object` methods. (#160)
- Regenerated all 96 connector clients with copyright headers (#158), base-chained mock constructors (#159), and null-guard hardening (#175).
### 0.11.0-preview.1 (2026-05-15)
- Fixed: `TriggerCallbackBody<T>` now handles both batch and single-item callback shapes, preventing silent zero-item processing when splitOn is enabled. (#149)
- Breaking: `TriggerCallbackPayload<T>.Body` is now init-only and `TriggerCallbackBody<T>.Value` is `IReadOnlyList<T>?` with an internal setter; use `ConnectorModelFactory` to construct in tests.
- Breaking: Removed CamelCase JSON naming policy; properties without `[JsonPropertyName]` now serialize as PascalCase. (#84, #85)
- Breaking: Renamed `AzuremonitorlogsClient` → `AzureMonitorLogsClient` and `Office365usersClient` → `Office365UsersClient` (namespaces, DI methods, model factories, and `ConnectorNames` updated). (#126)
- Breaking: `IPageable<T>` is now internal; `ConnectorClientBase.CreatePageable` is private protected; JSON converter types are internal. (#124, #127)
- Added constructor overload `(Uri, TokenCredential)` without `ClientOptions`, and `ConnectorHttpClient` mocking support. (#123, #125)
- 36 new connector clients across batches 5–6 (Azure AD, Azure IoT Central, Outlook, Service Bus, Box, DocuSign, GitHub, Google Drive, Jira, Salesforce, SQL, Trello, and more).
### 0.10.0-preview.1 (2026-05-11)
- Breaking: Removed CamelCase JSON naming policy from ConnectorClientBase.JsonOptions; properties without `[JsonPropertyName]` now serialize as PascalCase.
- Breaking: Renamed AzuremonitorlogsClient to AzureMonitorLogsClient; Office365usersClient to Office365UsersClient (namespaces, DI methods, and model factories updated accordingly).
- Breaking: `IPageable<T>` is now internal; `ConnectorClientBase.CreatePageable` is private protected; JSON converter types are internal.
- Added constructor overload (Uri, TokenCredential) without ClientOptions on ConnectorClientBase and all generated clients.
- ConnectorHttpClient now supports mocking (protected parameterless constructor, virtual SendAsync).
- 48 new connector clients across 4 batches, including ExcelOnline, AzureEventGrid, Yammer, WdatpClient, AzureAutomation, AzureDataFactory, KeyVault, PowerBI, and many more.
- Regenerated all 12 previously shipped connector clients with PascalCase name overrides.
### 0.9.0-preview.1 (2026-05-08)
- Breaking: Constructor overhaul — Uri is now the primary parameter type; default credential changed from DefaultAzureCredential to ManagedIdentityCredential(SystemAssigned); credential parameter is no longer optional.
- Breaking: Output-only model properties now have internal set; use per-connector model factory classes for testing.
- Breaking: `ExceptionExtensions`, `HttpExtensions`, `RetryPolicy`, `ConnectorResponse<T>` removed as public API.
- Breaking: All namespaces renamed from `Microsoft.Azure.Connectors.*` to `Azure.Connectors.Sdk.*`.
- Breaking: ConnectorClientOptions now inherits from Azure.Core.ClientOptions; Polly dependency removed; HttpClient parameter removed from constructors.
- Added extensible enum types for Swagger enum properties, DI integration extension methods, per-connector model factory classes.
- Added Azure Monitor Logs typed client; removed deprecated Azure Log Analytics connector.
### 0.8.0-preview.1 (2026-04-30)
- Added Office 365 Users, Azure Log Analytics, SMTP, Azure Blob Storage, and IBM MQ typed clients.
- Added OpenTelemetry ActivitySource instrumentation for distributed tracing.
### 0.7.0-preview.1 (2026-04-30)
- Added `IAsyncEnumerable<T>` auto-pagination support for paginated connector operations.
- Paginated methods now return `ConnectorPageable<TPage, TItem>` instead of `Task<TPage>` (breaking).
- ManagedIdentityCredential updated to ManagedIdentityId API.
### 0.6.0-preview.1
- Initial Preview NuGet.org release of the Azure Connectors .NET SDK.
### 0.5.0-preview.1 (2026-04-15)
- Added MS Graph Groups and Users typed client with 7 action operations.
- Added Teams unit tests (constructor, dispose, mocked API, error handling, serialization).
### 0.4.0-preview.1 (2026-04-09)
- Added OneDrive for Business typed client with 22 action and 4 trigger operations.
### 0.3.0-preview.1 (2026-04-09)
- Breaking: Simplified all generated operation names by stripping version suffixes (V2/V3/V4).
- Breaking: Simplified trigger names to use On prefix with natural English.
- Breaking: Simplified type names with per-connector aliases.
- Added trigger operation constants and definition type pruning in the generator.
### 0.2.0-preview.1 (2026-04-07)
- Added Azure Data Explorer (Kusto) typed client.
- Added PR template, governance doc, CI code coverage, standard Microsoft OSS community files.
- Dependency bumps for Microsoft.Extensions.Http, test SDK, coverlet, and GitHub Actions.
### 0.1.0-preview.1 (2025-12-19)
- Initial SDK release with core abstractions (ConnectorClientBase, IConnectorClient, ConnectorClientOptions).
- Token providers: ManagedIdentityTokenProvider, ConnectionStringTokenProvider.
- HTTP pipeline with configurable retry policies.
- Office 365 connector client (generated).