Azure API Management in front of Dataverse
How API Management acts as a façade for Dynamics 365 APIs — rate limiting, authentication, transformation, observability, and developer portal — and why it matters at scale.
When Dynamics 365 APIs are consumed by many external systems — partners, mobile apps, internal applications, third-party integrations — exposing them directly creates governance, security, and operational problems. Azure API Management (APIM) is the standard pattern for a managed API gateway sitting in front of Dynamics 365, adding rate limiting, authentication, transformation, observability, and a developer portal.
What APIM provides.
- Single endpoint — partners hit
api.contoso.com/dynamics/...instead ofcontoso.crm.dynamics.com/api/data/v9.2/.... Decoupling. - Authentication — APIM verifies API keys, subscription tokens, or OAuth tokens. Dataverse never sees unauthenticated traffic.
- Rate limiting — quotas per consumer; protects Dataverse from runaway clients.
- Transformation — request / response shape can be transformed; consumers don't need to handle Dataverse-specific quirks.
- Caching — read-heavy responses cached at the gateway; reduces Dataverse load.
- Versioning — multiple API versions exposed; deprecation managed.
- Observability — every request logged with metadata; analytics across all consumers.
- Developer portal — auto-generated documentation, API key issuance, self-service for partner developers.
Architecture.
External consumers → APIM → Dataverse (Web API)
APIM authenticates the consumer (subscription key, OAuth), applies policies (rate limit, transformation), and forwards to Dataverse with a service-principal access token. Dataverse only sees authenticated, vetted traffic from APIM.
Policy-driven configuration. APIM's behaviour is defined by policies — XML configuration that runs at request time. Common policies:
set-backend-service— direct the request to Dataverse.set-header— add Authorization headers with service-principal tokens.rate-limit-by-key— N requests per minute per consumer.quota-by-key— N total requests per consumer per month.cache-store/cache-lookup— cache responses.set-body— transform the request or response.json-to-xml/xml-to-json— format conversion if needed.validate-jwt— verify OAuth JWT tokens.return-response— short-circuit with a custom response (e.g. mock data).
Policies are applied per API operation or globally per product.
Products and subscriptions.
- Products — bundles of APIs offered as a unit. "Partner API" might include Customer / Order / Invoice operations.
- Subscriptions — issued to consumers; ties a consumer to a product. Each subscription has a unique key.
- Consumers — partners, internal apps, third-party developers. Each has subscriptions to one or more products.
This structure lets you:
- Issue different API products to different partners.
- Apply different rate limits / pricing per product.
- Track usage per consumer.
Authentication patterns.
- API key per consumer — simplest; key in a header (
Ocp-Apim-Subscription-Key). - OAuth 2.0 — for human-end-user scenarios; APIM validates the JWT.
- Mutual TLS — for high-security partner scenarios.
APIM provides identity-provider integration through OpenID Connect and OAuth flows; configurable per product.
Rate limiting strategy.
- Per-consumer limits — different partners get different quotas based on contract.
- Per-operation limits — write-heavy operations might be more limited than read operations.
- Burst vs sustained — allow bursts (e.g. 100 calls in 10 seconds) within longer-term sustained limits (e.g. 10,000 per day).
Rate limiting protects Dataverse from being overwhelmed and produces predictable performance for all consumers.
Caching.
For read-heavy APIs, caching dramatically reduces Dataverse load. APIM caches responses based on URL and query parameters:
- Read operations — cache for 5 minutes / 1 hour / as appropriate.
- Cache invalidation — based on TTL; can be triggered explicitly for mutations.
- User-specific caching — cache per user via the cache key.
Cached responses serve at gateway speed; Dataverse never sees the request.
Developer portal. APIM auto-generates a developer portal with:
- API documentation derived from OpenAPI specs.
- Interactive "try it" pages for testing operations.
- API key self-service issuance.
- Quotas and usage dashboards per consumer.
Partners and internal developers use the portal as their starting point.
Observability.
- Per-request logging — every call logged with timing, status, consumer.
- Application Insights integration — APIM streams telemetry to App Insights.
- Diagnostic logs — Azure Monitor logs for compliance and debugging.
The data answers: who's using which APIs, how fast, with what error rates.
Cost. APIM is billed by tier (Developer, Basic, Standard, Premium) — fixed monthly cost based on capacity. Sized for expected traffic.
Limits.
- APIM is a managed service with capacity limits per tier — exceed tier capacity, requests slow or fail. Scale up tier or use multiple APIM instances.
- Policy complexity — overly complex policies slow request processing.
- Maintenance — APIM versions update periodically; configurations need adaptation.
When to use APIM.
- Multi-tenant API exposure — many consumers with different access levels.
- Partner API programmes — public-ish APIs with developer onboarding.
- High-volume integrations — protection and observability matter.
- Compliance-driven scenarios — audit, rate-limit, authentication centrally enforced.
When not. For single-consumer integrations or internal-only APIs with simple authentication, APIM may be overkill. Direct Dataverse calls suffice.
Operational reality. APIM is enterprise-grade infrastructure. Plan for it deliberately; staff with someone who knows the platform; treat it as production. Done well, it's the API governance layer that makes large-scale Dynamics 365 integration sustainable.
Related guides
- Batch operations in the Dataverse Web APIHow to make multiple Dataverse Web API calls in one HTTP round-trip — $batch requests, change sets, and the performance gains at scale.
- FetchXML vs OData in DataverseTwo query languages for Dataverse — what each does, performance and capability differences, and when to choose which.
- Microsoft Graph and DataverseHow Microsoft Graph connects Microsoft 365 data to Dynamics 365 — Graph connectors, indexing Dataverse content, and the Copilot enablement story.
- B2C authentication with Dynamics 365 — Entra External ID and beyondHow to authenticate external customers and partners against Dynamics 365 — Entra External ID (formerly Azure AD B2C), Power Pages authentication, and the patterns for B2C identity in CRM and ERP.
- Entra External ID for customer accessHow Microsoft Entra External ID provides customer-grade identity for Power Pages portals and external Dynamics 365 access — sign-up flows, branding, social identity, and the migration from Azure AD B2C.