> ## Documentation Index
> Fetch the complete documentation index at: https://www.composer.id/llms.txt
> Use this file to discover all available pages before exploring further.

# Microsoft Dynamics 365

> Microsoft Dynamics 365 (ERP): the API posture, publish target and field mapping composerID publishes a decision reference through.

This page records how composerID publishes into Microsoft Dynamics 365: the vendor's API posture, the publish target and field mapping, and the documentation each claim rests on. It is for anyone evaluating the connection or building against it.

Dynamics 365 Finance & Supply Chain is a financial-commitment system of record for the outsourced work-order channel. composerID publishes Purchase Order entities through the OData endpoint, carries the Intent ID via an extended field on the entity, and back-syncs create/update/delete activity through Business Events and Data Events.

<Info>
  Category: ERP. Coverage status: Specification mapped. Vendor documentation: public developer portal.
</Info>

## Integration path

How composerID connects to this destination, at a glance.

| Step                 | Detail                                                                                                                                                               |
| -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Authentication       | Microsoft Entra ID (Azure AD) OAuth 2.0 client credentials - register the app, then map the App ID to a user in the environment (Microsoft Entra applications form). |
| composerID publishes | Purchase Order: POST /data/PurchaseOrderHeadersV2 (+ Lines)                                                                                                          |
| Intent ID lands on   | `purchase_order` `extensionFields.intentId`, written into the destination record                                                                                     |
| Back-sync            | Webhooks: the destination pushes events; composerID verifies each delivery and lands it on the intent's timeline.                                                    |

## Vendor documentation

<Columns cols={2}>
  <Card title="OData endpoint (finance & operations)" icon="external-link" href="https://learn.microsoft.com/en-us/dynamics365/fin-ops-core/dev-itpro/data-entities/odata" horizontal />

  <Card title="Data entities overview" icon="external-link" href="https://learn.microsoft.com/en-us/dynamics365/fin-ops-core/dev-itpro/data-entities/data-entities" horizontal />

  <Card title="Data events (CUD notifications)" icon="external-link" href="https://learn.microsoft.com/en-us/dynamics365/fin-ops-core/dev-itpro/business-events/data-events" horizontal />
</Columns>

## API posture

| Aspect         | Detail                                                                                                                                                                                                                                     |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Authentication | Microsoft Entra ID (Azure AD) OAuth 2.0 client credentials - register the app, then map the App ID to a user in the environment (Microsoft Entra applications form). Tokens \~1h; the resource is the environment URL (no trailing slash). |
| Style          | OData v4 REST over data entities (entities marked IsPublic); $filter/$select/\$batch; page size max 1,000; cross-company=true for non-default legal entities                                                                               |
| Base URL       | https\://\{environment}.operations.dynamics.com/data                                                                                                                                                                                       |
| Webhooks       | Business Events + Data Events (per-entity create/update/delete) delivered to Azure Event Grid, Service Bus, HTTPS or Power Automate; Data Events require the Power Platform integration to be enabled.                                     |
| Events posture | Webhooks                                                                                                                                                                                                                                   |
| Rate limits    | Service-protection throttling; \~600 requests/min is the practical guidance; 429 with Retry-After - back off exponentially. Use the Data Management Framework for bulk.                                                                    |
| Objects        | PurchaseOrderHeadersV2 / PurchaseOrderLinesV2, purchase requisitions, VendorsV2, and any IsPublic data entity (incl. custom entities for extended fields)                                                                                  |

## Publish target and field mapping

Each object below pairs the canonical intent fields with the destination's own fields and operations. The mapping is indicative until it is confirmed against a tenant at onboarding.

<AccordionGroup>
  <Accordion title="Purchase Order" icon="arrow-right-left" description="Commit the spend">
    | Mapping                  | Detail                                                                                                 |
    | ------------------------ | ------------------------------------------------------------------------------------------------------ |
    | Canonical to destination | supplier (OrderVendorAccountNumber), amounts, dates, legal entity (dataAreaId)                         |
    | Target                   | POST /data/PurchaseOrderHeadersV2 (+ Lines)                                                            |
    | Requirement              | Required                                                                                               |
    | Notes                    | All entity-key fields must be supplied; cross-company=true when publishing outside the default company |
  </Accordion>

  <Accordion title="Requisition (where used)" icon="arrow-right-left" description="Raise demand upstream of the PO">
    | Mapping                  | Detail                                                          |
    | ------------------------ | --------------------------------------------------------------- |
    | Canonical to destination | description, cost\_center, budget                               |
    | Target                   | Purchase requisition data entities                              |
    | Requirement              | Tenant                                                          |
    | Notes                    | Many programs publish straight to PO for outsourced work orders |
  </Accordion>

  <Accordion title="Intent ID + back-sync" icon="arrow-right-left" description="Correlate and reconcile">
    | Mapping                  | Detail                                                                  |
    | ------------------------ | ----------------------------------------------------------------------- |
    | Canonical to destination | intent\_id (extended field); CUD events on the PO entity                |
    | Target                   | Entity extension field + Data/Business Events to Event Grid/Service Bus |
    | Requirement              | Required                                                                |
    | Notes                    | Data events emit the full entity record on change                       |
  </Accordion>
</AccordionGroup>

<Note>
  Nothing works until the Entra app is mapped to an environment user with the right security roles. Custom fields ride on entity extensions (or custom data entities) - agree the Intent ID field per tenant. Data Events require Power Platform integration on the environment; environments without it fall back to Business Events or polling. OData is for transactional volume - bulk loads belong in the Data Management Framework.
</Note>

## Next steps

<Columns cols={3}>
  <Card title="How composerID connects" icon="plug-zap" href="/guides/connect">
    The five ways composerID reaches a destination, and the minimum a destination must offer.
  </Card>

  <Card title="Publishing" icon="send" href="/concepts/publishing">
    Plan, preflight and publish: how a decision becomes a valid record in a destination.
  </Card>

  <Card title="All destinations" icon="plug" href="/destinations">
    Every destination composerID documents, with its category and coverage status.
  </Card>
</Columns>
