Microsoft Dynamics 365 Finance & Operations — Integration Feasibility Analysis

Date: 2026-05-13 Status: Research complete


1. Executive Summary

Microsoft Dynamics 365 Finance & Operations (still commonly "D365 F&O" or "F&O apps", formerly Dynamics AX / Axapta) is the upper-mid-market and enterprise SKU of Microsoft's ERP line — distinct from Dynamics 365 Business Central (the SMB SKU, ex-Navision). What was historically one "Finance and Operations" product is now sold as Dynamics 365 Finance + Dynamics 365 Supply Chain Management + Dynamics 365 Project Operations + Dynamics 365 Commerce, all running on the same "Finance and Operations apps" platform (also called "fin-ops apps"). For integration purposes everything in this document applies to the platform regardless of the SKU mix.

Integration verdict: best-in-class API surface compared to other tier-1 ERPs in the German mid-market. Unlike SAP S/4HANA Public Cloud (where Orcha has to wrangle CDS view–derived OData entities and licensed "API for SAP" packs) or unlike DATEV/Sage (where the surface is small and gated), D365 F&O exposes the entire data model via a public, OAuth 2.0 / Entra ID–authenticated OData REST endpoint at /data/, plus JSON custom services at /api/services/, plus a Data Management Framework REST package API for bulk loads, plus a Business Events outbound channel (Service Bus / Event Grid / Event Hubs / HTTPS webhooks / Power Automate), plus first-party Power Platform / Logic Apps / Power Automate connectors, plus a Microsoft-published Postman collection. All vendor invoice entities Orcha needs — VendorInvoiceHeader, VendorInvoiceLine, VendorInvoiceDocumentAttachment (V2), plus AP journal entities LedgerJournalHeader/LedgerJournalLine, plus all financial-dimension and master-data entities — are public and writable.

The friction is not API capability but customer-side onboarding and licensing. Service-to-service auth requires the customer's Azure / D365 admin to (a) register a confidential client app in Microsoft Entra ID with the Microsoft Dynamics ERP API permission, then (b) inside F&O navigate to System administration → Setup → Microsoft Entra applications and map the client ID to a dedicated service-account user that has the right security roles for the operations Orcha performs. This is a 30-minute job for a competent F&O admin but it requires admin involvement on both Entra and F&O, and customers often want to scope security roles narrowly which adds back-and-forth. There is also a real Invoice Capture solution shipped by Microsoft (built on Power Platform + AI Builder, GA on F&O 10.0.33+) that overlaps directly with Orcha — but it has a 100-invoice/month free tier and is priced at $300 / 1,000 invoices beyond that, capability-wise it lags Orcha (paper-first, electronic invoices "planned"), and many F&O customers explicitly evaluate third-party AP automation precisely because the Invoice Capture solution is shallow.

Strategic verdict for Orcha: high-value, well-defined integration target. D365 F&O is the German ERP most worth investing in alongside SAP S/4HANA — better-documented, lower licensing friction for the API surface itself (the OData endpoints are included with the Finance/SCM license; no separate "API pack"), and the platform supports all the operations Orcha needs (push pending invoice, attach PDF, submit to workflow, read posting & payment status, read chart of accounts & dimensions, push vendor master). Expect ~8–12 engineer-weeks for a production-quality v1 integration, with the main risk being customer-specific security role configuration rather than missing API surface.

Capability matrix

Capability OData REST JSON Custom Service DMF Package API Business Events Power Automate connector Verdict
Push parsed invoice header + lines (pending state) YES (VendorInvoiceHeaders, VendorInvoiceLines) YES (custom dev) YES (bulk) n/a YES Confirmed via multiple channels
Attach invoice PDF YES (VendorInvoiceDocumentAttachments, base64 FileContents) YES YES n/a YES Confirmed; SharePoint backend caps file size at 262 MB
Submit invoice to workflow / approval LIMITED — X++ custom service needed YES (custom code submits via WorkflowSubmitManager) n/a n/a INDIRECT (call OData action) Touchless mode auto-submits on import; programmatic submit requires extension
Read posting status YES (VendInvoiceJourEntity and related) YES n/a n/a (event-based) YES Both poll and push via Business Event "Vendor invoice posted"
Read payment / settlement status YES (CustVendSettlement entities, voucher entities) YES n/a YES (payment-related business events) YES Confirmed
Read chart of accounts + financial dimensions YES (MainAccounts, DimensionAttributeValueSets, DimensionFinancialTags, DimensionCombinations) YES YES n/a YES Confirmed; needs Financial dimension configuration for integrating applications setup
Write vendor master YES (Vendors, VendVendorV2Entity) YES YES n/a YES Confirmed
Write vendor bank accounts YES (VendorBankAccounts) YES YES n/a YES Confirmed
Webhook on invoice events YES (Business Events → HTTPS endpoint / Service Bus / Event Grid) n/a n/a YES YES (subscribe via trigger) Native push — better than most ERPs

2. API Landscape

Layer Status Detail
Developer portal YES (Microsoft Learn) learn.microsoft.com/en-us/dynamics365/fin-ops-core/dev-itpro/ is the canonical, publicly readable, well-maintained doc set
OpenAPI / Swagger spec NO official static spec Metadata is served at [baseURL]/data/$metadata (CSDL XML) and [baseURL]/metadata/DataEntities (JSON) — clients generate their own typed proxies
Postman collection YES (community, indexed) Anthony Blake's published "Dynamics 365 Finance APIs" Postman workspace
C# samples YES (Microsoft) github.com/Microsoft/Dynamics-AX-Integration — OData, SOAP, JSON, FileBasedIntegration samples
Base URL YES https://<env>.cloudax.dynamics.com or https://<env>.operations.dynamics.com
OData REST endpoint YES /data/ — all IsPublic data entities exposed as updatable views, full CRUD, OData V4
JSON custom service endpoint YES /api/services/<ServiceGroup>/<Service>/<Operation> — every X++ service group is auto-exposed as both SOAP + JSON
SOAP custom service endpoint YES (legacy) /soap/services/<Service>?wsdl — unchanged from AX 2012
REST metadata service YES /Metadata — labels and data entity list
DMF package REST API YES /data/DataManagementDefinitionGroups/Microsoft.Dynamics.DataEntities.ImportFromPackage etc. — OData-action wrapper around the Data Management Framework
Recurring integrations API YES /api/connector/enqueue/<activityId> and /api/connector/dequeue/<activityId> — file-based bulk over Azure Blob, scheduled inside F&O
Business Events YES Outbound to Azure Service Bus, Event Grid, Event Hubs, HTTPS endpoint, Power Automate, Microsoft Teams, custom adapters
Authentication YES (OAuth 2.0 via Microsoft Entra ID) Authorization Code Grant flow (user) + Client Credentials flow (S2S); resource = environment URL without trailing slash
Versioning YES (in entity name) Entities use V2, V3 suffixes (e.g. CustomersV3, VendVendorV2Entity); deprecated older entities remain for compatibility
Rate limits YES Resource-based throttling enforced; per-user-per-app-per-web-server limits previously announced were rolled back (user-based limits disabled by default in 10.0.35, removed in 10.0.36); 429 responses with Retry-After
Priority-based throttling YES Admin maps integrations to High / Medium / Low priority at System administration → Setup → Throttling priority mapping; under load, Low priorities are throttled first
Service Bus / Event Grid filtering YES Business events emit Category, BusinessEventId, LegalEntity fields for subscription filtering
Deprecated APIs YES AX 2012 AXDs / document services / SOAP query service replaced by data entities + OData; AIF deprecated

Key endpoint URL patterns

OData entity collection:
  GET  https://<env>.cloudax.dynamics.com/data/VendorInvoiceHeaders
  POST https://<env>.cloudax.dynamics.com/data/VendorInvoiceHeaders
  PATCH /data/VendorInvoiceHeaders(dataAreaId='USMF',InvoiceNumber='INV-001')

JSON custom service:
  POST https://<env>.cloudax.dynamics.com/api/services/<group>/<service>/<op>

OData action (e.g. submit to workflow, DMF import):
  POST /data/<EntitySet>/Microsoft.Dynamics.DataEntities.<ActionName>

DMF package API (bulk):
  POST /data/DataManagementDefinitionGroups/Microsoft.Dynamics.DataEntities.GetAzureWriteUrl
  POST /data/DataManagementDefinitionGroups/Microsoft.Dynamics.DataEntities.ImportFromPackage
  POST /data/DataManagementDefinitionGroups/Microsoft.Dynamics.DataEntities.GetExecutionSummaryStatus

Recurring integration (file enqueue):
  POST https://<env>/api/connector/enqueue/{activityId}?entity=<entityName>

Cross-company query:
  GET  /data/Vendors?cross-company=true&$filter=dataAreaId eq 'DEMF'

Service protection / throttling specifics


3. Write Capability Verification

Each Orcha-relevant object verified against Microsoft Learn entity reference docs:

Object OData entity (/data/<X>) DMF target Verb support Source
Vendor master Vendors, VendVendorV2Entity YES POST / PATCH / DELETE Learn: entity-customers-v3 family; CDM VendVendorV2Entity
Vendor bank accounts VendorBankAccounts YES POST / PATCH / DELETE Learn: "Maintain vendor bank account information"; DMF entity confirmed
Vendor invoice header (pending) VendorInvoiceHeaders YES POST / PATCH (pre-posting); DELETE Learn: entity-vendor-invoice-header-vendorinvoiceheader — explicit "supports creating and updating vendor invoice headers"
Vendor invoice lines (pending) VendorInvoiceLines YES POST / PATCH (pre-posting) Learn: entity-vendor-invoice-line-vendorinvoiceline — explicit support for PO-linked and non-PO lines, financial dimensions via DimensionDISPLAYVALUE
Vendor invoice charges VendorInvoiceHeaderCharges, VendorInvoiceLineCharges YES POST / PATCH Learn: entity-vendor-invoice-charges family
Vendor invoice attachments VendorInvoiceDocumentAttachments (V2) YES (recommended threshold count 1,000 / 8 threads) POST / PATCH; FileContents is base64 string Learn: entity-vendor-invoice-document-attachment-v2
Vendor invoice journal (alternative path: AP invoice journal) LedgerJournalHeaders + LedgerJournalLines with AccountType='Vendor' YES POST / PATCH Learn: entity-general-journal-ledgerjournalheader/-line
Posted vendor invoice (read-only) VendInvoiceJourEntity, VendInvoiceTransEntity n/a GET only Learn: AP read entities
Settlement / payment status CustVendSettlement* entities n/a GET Learn: CustVend reporting entities
Purchase orders PurchaseOrderHeadersV2, PurchaseOrderLines YES POST / PATCH Learn: purchase order entity reference
Product receipts PurchaseOrderProductReceiptHeaders / lines YES GET / POST Learn: receipt entities
Main accounts MainAccounts YES POST / PATCH Learn: ledger setup entities
Financial dimensions — backing tables DimensionAttributeValueSets, DimensionAttributeValueSetItems, DimensionFinancialTags, DimensionCombinations YES GET; create via display-value pattern Learn: dimension-defaulting, dimensionable-entities
Financial dimension default-value-format Must configure General ledger → Chart of accounts → Dimensions → Financial dimension configuration for integrating applications before writing n/a n/a Learn: financial-dimension-configuration-integration
Workflow — submit pending invoice NO direct OData action out-of-box; custom service required (X++ WorkflowSubmitManager) OR enable "Automatically submit imported invoices to workflow" (touchless mode) n/a n/a Learn: submit-invoice-workflow-automatically; vnd-invoice-set-up-options
Workflow — approve/reject NO programmatic action; users approve via UI / Teams app / Outlook actionable message / Power Automate flow consuming the workflow event n/a n/a Learn: workflow business events
Cost centers as a financial dimension Yes — defined as a financial dimension whose backing is either OMOperatingUnit (entity-backed) or DimensionFinancialTag (custom values) YES POST / PATCH Learn: dimensionable-entities, "what about main accounts and financial dimensions"

Writable-confirmed pattern for pending vendor invoice + attachment + lines:

  1. POST /data/VendorInvoiceHeaders (creates row in VendInvoiceInfoTable → appears under Accounts payable → Invoices → Pending vendor invoices)
  2. POST /data/VendorInvoiceLines for each line referencing HeaderReference
  3. POST /data/VendorInvoiceDocumentAttachments with base64 FileContents
  4. Optional: invoke custom service or rely on touchless setting to submit to workflow
  5. Poll VendInvoiceJourEntity (or subscribe to "Vendor invoice posted" business event) for posting confirmation

Critical write-time gotcha: OData clients default to posting all properties (including unset ones with default values). Use the SaveChangesOptions.PostOnlySetProperties flag — otherwise default-value side effects bite hard with vendor invoices (currency, posting profile, etc.).


4. iPaaS / Middleware Findings

Platform Status Actions (write into F&O) Triggers (read from F&O) Auth Notes
Power Automate (first-party Microsoft) YES — Fin & Ops Apps (Dynamics 365) connector Create record, Update record, Delete record, Execute action (call OData action / custom service), Get list of entities, Lists items in table "When a Business Event occurs" trigger (subscribes to F&O business events) — 1 trigger OAuth + ServicePrincipalOauth (note: docs flag "Service Principal authentication not supported" caveat for some scenarios — fall back to OAuth user auth) Premium-class connector; same SKU works in Logic Apps (Standard class), Power Apps, Copilot Studio
Azure Logic Apps YES — same Fin & Ops Apps connector as Power Automate Same 7 actions Same 1 trigger Same Logic Apps Standard tier; ideal for Azure-native integration architectures
Power Apps YES — same connector Same Same Same Premium licensing required
Copilot Studio YES — same connector Same Same Same Premium
Dataverse Data Integrator (Microsoft) YES — first-party scheduled sync tool between F&O and Dataverse Vendor master, customer master, products, sales orders mapped out-of-box n/a (scheduled, not event-based) S2S Exempt from F&O throttling
Celigo (integrator.io) YES — connector launched in 2022.R2 release Read/write via prebuilt API selectors; "switch to HTTP mode" for unmapped endpoints Scheduled exports + webhooks OAuth 2.0 Marketed for "automate financial processes / streamline back-office"
Workato YES — "Microsoft Dynamics Finance and Operations" connector Create record, Create records (batch), Update record, Get record, Search records, Custom action "New record", "New/updated record", "Custom trigger" OAuth 2.0 — Authorization Code + Client Credentials Solid coverage
Boomi YES — "Microsoft Dynamics 365 for Finance and Operations" connector Get, Query, Create, Update, Delete (request JSON mapped to entity profile) Polling-based Azure AD encrypted access token Caches metadata after first call
MuleSoft Anypoint YES — "Microsoft Dynamics 365 for Finance and Operations Connector" v3.x for Mule 4 Retrieve, RetrieveMultiple (DataSense Query Language), Create, Update, Delete, Create Recurring Job, Authorize/Unauthorize n/a (no native trigger; use scheduler + Retrieve) OAuth 2.0, OAuth 2 username+password Mature; on Anypoint Exchange
Jitterbit Harmony YES — "Dynamics 365 Finance and Operations" connector Query, Create, Update, Delete via OData Scheduled query OAuth 2.0
SnapLogic UNCLEAR (no native D365 F&O Snap found; HTTP/OData snap usable) n/a n/a n/a Generic OData support sufficient
Tray.io NO native connector Use generic HTTP / Connector Builder n/a n/a Same as SnapLogic
Make.com NO native D365 F&O connector documented; Business Central connector exists Generic HTTP module workaround n/a OAuth 2.0 via HTTP module F&O ↔ Business Central naming confusion is endemic
n8n NO native F&O node; CRM-only node exists HTTP Request node + OAuth credential n/a OAuth 2.0 DIY via OData
Zapier NO — Zapier community explicitly states "Microsoft Dynamics 365 Finance and Operations hasn't built an integration with Zapier yet" n/a n/a n/a F&O treated as out-of-scope for SMB iPaaS
Informatica IICS YES (via OData connector / Cloud Application Integration with Microsoft Dynamics 365) Read/write via OData Scheduled OAuth 2.0
SAP Open Connectors YES — "Microsoft Dynamics 365 Finance and Operations" connector documented in SAP help Read/write OData Scheduled OAuth 2.0 Niche but exists
Rutter (unified API) YES — Dynamics 365 integration page lists F&O alongside other accounting platforms Bills, customers, suppliers, invoices read/write via Rutter's unified API Polling Rutter handles OAuth at its layer Positioned for fintech / embedded-finance use cases, not AP automation
Codat (unified API) YES — "Microsoft Dynamics 365 Finance & Operations now supported" (Dec 2025 / late-2025 launch) Suppliers, bills, bill payments, payment methods, direct costs, accounts Polling Codat handles OAuth Newer than the others — coverage may still be evolving
Merge.dev (unified API) YES — listed as supported integration on Merge's accounting category Standardized accounting models Polling OAuth Coverage usually shallower than direct OData but viable for read-mostly
Finch NO n/a n/a n/a HR/payroll focused — not applicable

iPaaS verdict

D365 F&O has the widest iPaaS coverage of any ERP Orcha has researched in this thread. Power Automate / Logic Apps is the first-party answer and is free-form enough to model anything (it's a thin wrapper over OData + Business Events). The unified-API vendors (Rutter, Codat, Merge) all picked it up — meaning Orcha could, in principle, ride one of those instead of building direct. The direct-OData path is well-trodden by Celigo / Workato / Boomi / MuleSoft / Jitterbit users, so customer integration teams familiar with any of those have a playbook.

For Orcha's specific use case (invoice push + workflow + status read), direct OData/Business Events is preferable to going via Power Automate or unified APIs, because (a) Orcha needs to control auth/security per-customer (S2S per tenant) and (b) the entities Orcha needs are F&O-native, not generic accounting concepts.


5. Alternative Channels

Channel Status What it enables Cost / licensing
OData REST (synchronous) YES (primary) All CRUD on IsPublic entities, $filter/$expand/$select, batch via changesets, OData actions, cross-company queries Included in Finance/SCM license
JSON custom services (synchronous) YES (primary) Wraps X++ classes as JSON endpoints; needed for operations that aren't entity-CRUD (e.g. complex workflow submit, on-hand inventory lookup, custom business actions) Included
DMF package REST API (asynchronous bulk) YES High-volume import/export via data-package ZIPs uploaded to Azure Blob via SAS URL; recommended >100k records Included; exempt from throttling
Recurring data jobs (file-based, scheduled inside F&O) YES External system pushes files to /api/connector/enqueue/{activityId}; F&O picks them up on schedule; supports XML/CSV/Excel + data packages Included; exempt from throttling
Business Events YES Outbound push to Azure Service Bus, Event Grid, Event Hubs, HTTPS webhook, Power Automate, Teams. Customer brings own Azure subscription. Idempotency via control number. Filters on Category/BusinessEventId/LegalEntity Included; customer needs Azure subscription for messaging services if not using HTTPS webhook
Power Platform virtual entities (Dataverse) YES (since 10.0.12) All F&O OData entities surface as virtual tables in Dataverse with full CRUD via Dataverse API; <30 ms overhead when co-located in same Azure region Requires Power Platform integration enabled; Dataverse license; ideal when caller is Dataverse-native (Power Apps, Dynamics 365 Sales, Copilot Studio)
Dual-write to Dataverse YES Near-real-time bidirectional sync between F&O and Dataverse for shared entities (vendors, customers, products, etc.). 2025 Wave 2 introduced asynchronous dual-write for resilience Customer needs Dataverse environment; integrated environments only
Electronic invoicing module YES (per-country) Generates EN 16931 XML, submits via "last-mile" partners (Edicom etc.) or directly to govt portals. For Germany: XRechnung out / in, ZUGFeRD import community-supported, Peppol BIS generic format. France B2B via Edicom (preview), Poland KSeF, Italy SDI, etc. Free quota: 100 e-invoice transactions/tenant/month included with Finance license. Additional $300 / 1,000 transactions / tenant / month via "Electronic Invoicing" SKU
Invoice Capture solution YES — GA on F&O 10.0.33+ Microsoft's first-party AP-automation alternative: AI Builder OCR → side-by-side review → derives pending invoice in F&O; "touchless" mode possible; supports paper, electronic invoices "planned"; continuous learning from clerk corrections Free quota: 100 invoice capture transactions/tenant/month included with Finance license. Additional $300 / 1,000 invoices / tenant / month. Plus Power Apps license per Invoice Capture user (if not full F&O user) + Azure Data Lake Storage if >20 GB
Excel add-in YES UI-based bulk edit of entities; not programmatic Included; user-facing not integration-grade
Power Apps Portal YES External-facing web pages backed by virtual entities Power Apps Portal license
PEPPOL inbound YES via Edicom / partners F&O imports vendor electronic invoices in PEPPOL format (emea-peppol-import); customer connects PEPPOL access point Included via Electronic Invoicing module quota
Document Routing Agent (DRA) YES Specifically for print routing, not invoice integration Included; exempt from throttling
AIF / Document services (AXDs) DEPRECATED Replaced by data entities + OData; no new development n/a
SOAP-based query service DEPRECATED Replaced by OData n/a
On-premises deployments LIMITED Only Data management package REST API is supported on-prem (Platform Update 12+); no recurring integrations, no business events to external endpoints Requires AD FS instead of Entra ID

6. Licensing & Access Requirements

TL;DR: The OData REST + custom service + DMF endpoints are included with the standard Finance/SCM license — no separate API pack. The friction is admin onboarding for service-to-service auth, not licensing.

Item Detail Source
Base license Dynamics 365 Finance ($210/user/mo list) or Dynamics 365 Supply Chain Management ($210/user/mo list). Multi-user min varies by tier. Finance Premium tier adds Copilot credits and some features Microsoft Dynamics 365 Licensing Guide
Tier 2+ sandbox Included — base license entitles customer to 1 production + 1 Tier 2 (Standard Acceptance Test) sandbox. Additional Tier 2+ sandboxes are add-on SKUs Learn: environment planning
Tier 1 dev environment Separate provisioning via LCS (Lifecycle Services); typically partner-deployed Learn: dev tools
API access (OData / custom services / DMF / business events) Included with Finance / SCM license; no surcharge for the API surface itself Verified: no separate SKU exists
Service-to-service auth — customer admin steps (1) In Microsoft Entra ID admin center → App registrations → New registration → confidential client; create client secret or upload certificate. (2) Under API permissions, add Microsoft Dynamics ERP (Microsoft.ERP) API; choose Access Dynamics AX Custom Service, Access Dynamics AX data, Access Dynamics AX online as organization users (or app-only equivalent). Grant admin consent. (3) In F&O: System administration → Setup → Microsoft Entra applications → New → enter Client ID, friendly name, and map to a dedicated service-account user (do not use Admin; create a "OrchaIntegration" user with a custom security role granting only the entity privileges Orcha needs). Learn: services-home-page#register-your-external-application
Power Platform / Dataverse license (for dual-write or virtual entities) Required only if Orcha goes through Dataverse rather than direct F&O OData. Customers running F&O typically already have Dataverse integration enabled Learn: Power Platform integration
Electronic Invoicing SKU Optional add-on for customer if they need >100 e-invoices/month or use country-specific governmental submission requiring last-mile partner. $300 / 1,000 invoices / tenant / month Learn: e-invoicing coverage
Invoice Capture SKU Same SKU as Electronic Invoicing (shared quota: 100 invoices/month free) — optional add-on Learn: invoice-capture-overview
AI Builder credits Finance license includes 20,000 AI Builder credits/tenant/month as baseline — relevant if Orcha intends to coexist with Invoice Capture's AI extraction Microsoft Licensing Guide
DMF / Recurring data jobs No extra license; uses Azure Blob (managed by Microsoft inside the F&O environment) Learn: recurring integrations
Public sandbox / trial Microsoft offers F&O trial via Cloud Solution Provider; no truly self-serve developer sandbox like Salesforce or D365 Business Central (which has a CRONUS sample tenant). Development partners use LCS Tier 1 (their own infra) LCS docs
Implementation partner involvement Common but not required for integration enablement. Customer's own IT admin (Entra ID + F&O System administrator) can do the AAD app registration + Entra applications mapping in 30–60 min without partner involvement n/a
Throttling priority slot Customer admin can categorize Orcha's integration as High/Medium/Low at Setup → Throttling priority mapping. Orcha should request High for AP postings Learn: priority-based-throttling
Public ratings/installs Gartner MQ Leader for Cloud ERP (F&O competes with SAP, Oracle, Workday, Infor at the top). Microsoft does not publish customer counts for F&O specifically Gartner
API stability / deprecation policy Microsoft publishes deprecation notices via Release Plans (semi-annual: Release Wave 1 + Wave 2). Entity deprecations announced 1–2 waves in advance; OData breaking-change discipline is high Learn: release plans

Customer onboarding flow (concrete)

  1. Orcha provides a multi-tenant Microsoft Entra ID app registration that the customer admin can consent to (one-time tenant consent).
  2. After admin consent, the customer admin opens F&O and adds Orcha's client ID to System administration → Setup → Microsoft Entra applications, mapping it to a dedicated ORCHAINT user with the minimal role privileges needed (custom security role recommended).
  3. Customer admin sets the Throttling priority mapping for Orcha's app to High (or Medium).
  4. Customer admin runs Data management → Framework parameters → Entity settings → Refresh entity list to ensure all entities Orcha needs are available.
  5. Customer admin configures Default dimension format at General ledger → Chart of accounts → Dimensions → Financial dimension configuration for integrating applications so that Orcha can post invoices with financial dimensions encoded as a delimiter-separated string in DimensionDISPLAYVALUE fields.
  6. Optional: Customer admin enables the touchless mode at Accounts payable → Setup → Accounts payable parameters → Invoice by setting "Automatically submit imported invoices to workflow" = Yes.

This is simpler than SAP S/4HANA (no API package activation, no SCP / BTP subscription needed, no rate-card-tier concerns for typical invoice volumes), simpler than Onventis (no per-customer license-gating of the API surface), and about as complex as Business Central (which also uses Entra ID OAuth but is SMB-targeted).


7. Orcha-Specific Deep Dive

Each Orcha need mapped to a concrete OData entity / endpoint, with confidence.

Orcha need Endpoint / entity Verbs Confidence Notes
1. Read chart of accounts GET /data/MainAccounts GET HIGH Full main account master; paginate with $top/$skip, max page 10,000
1. Read financial dimension values GET /data/DimensionAttributeValueSets, GET /data/DimensionFinancialTags (custom values), GET /data/DimensionCombinations GET HIGH For "cost center" specifically — depends on customer config (entity-backed OMOperatingUnit vs. tag-backed DimensionFinancialTag). Customer admin tells Orcha which dimension represents cost center.
1. Write reference data (financial dimensions) POST to DimensionFinancialTags for tag-backed dimensions POST / PATCH MEDIUM-HIGH For entity-backed dimensions (e.g. operating units, departments) write to the backing entity (OMOperatingUnits etc.). Setup Financial dimension configuration for integrating applications must be done first.
2. Push invoice header (pending state) POST /data/VendorInvoiceHeaders POST / PATCH HIGH Creates row in VendInvoiceInfoTable; lands under AP → Invoices → Pending vendor invoices. Required fields: InvoiceNumber, VendorAccount (or InvoiceAccount), Currency, InvoiceDate, SalesTaxGroup. Use SaveChangesOptions.PostOnlySetProperties.
2. Push invoice lines POST /data/VendorInvoiceLines POST / PATCH HIGH HeaderReference + InvoiceLineNumber form composite key. PO-linked lines require PurchaseOrder + PurchLineNumber. Non-PO lines require ItemNumber (stocked) or ProcurementCategoryName (non-stocked). Financial dimensions via DimensionDISPLAYVALUE (delimiter-separated per default-dim-format setup).
2. Push invoice charges (header + line) POST /data/VendorInvoiceHeaderCharges, POST /data/VendorInvoiceLineCharges POST / PATCH HIGH For freight, fees, etc. Non-PO charges only at header level.
2. Alternative — push as AP voucher journal POST /data/LedgerJournalHeaders (set journal name), POST /data/LedgerJournalLines (AccountType='Vendor') POST / PATCH HIGH Use when invoice is not PO-linked and customer prefers journal-based postings (common with G/L-centric processes). Doesn't go through the Pending Vendor Invoice workflow. Bypasses 3-way match.
3. Push invoice PDF attachment POST /data/VendorInvoiceDocumentAttachments POST / PATCH HIGH HeaderReference foreign key to invoice header, FileContents is base64-encoded bytes, TypeId references a document type (customer-configured), ActualCompanyId is the legal entity code. Max file size: 262 MB if SharePoint backend; configurable at Org admin → Document mgmt → Parameters → General. Recommended bulk import params: Import threshold record count = 1000, Import task count = 8 (parallel).
4a. Submit invoice to workflow (programmatic) NO out-of-box OData action. Options: (a) enable "Automatically submit imported invoices to workflow" in AP parameters (touchless); (b) Orcha asks customer's partner to deploy a small X++ extension exposing a custom service that calls WorkflowSubmitManager for the pending invoice POST custom service MEDIUM Touchless is simpler; custom service is more reliable. Industry standard: customers use touchless.
4b. Approve / reject invoices NOT programmatically — approvals are user actions via UI, Outlook actionable messages, Teams app, or Power Automate flow that subscribes to the workflow business event and invokes WorkflowApprovals n/a LOW for Orcha — Orcha is the data source, not the approver
5. Read invoice posting status GET /data/VendInvoiceJourEntity filtered by InvoiceNumber, VendorAccount, InvoiceDate GET HIGH Posted invoices appear in VendInvoiceJour only after workflow completes. Pre-posting status is read from VendorInvoiceHeaders.WorkflowState field.
5. Subscribe to posting events (push) Business Event "Vendor invoice posted" → HTTPS webhook or Service Bus n/a HIGH Customer admin must activate the event at System administration → Setup → Business events and configure an endpoint. Idempotency via control number in payload.
5. Read payment / settlement status GET /data/CustVendSettlement* entities; payment journal entities GET HIGH Settlement records link invoice to payment; voucher entities show full G/L impact.
6. Read cost centers / dimension values for posting Depends on customer's dimension setup (see row above) GET HIGH Cache + refresh nightly; small data set
6. Pagination OData server-driven paging with max page 10,000; $skip + $top for client paging; @odata.nextLink for cursor n/a HIGH Standard OData V4
6. Vendor master + bank read GET /data/Vendors (or VendVendorV2Entity), GET /data/VendorBankAccounts GET HIGH Use cross-company=true&$filter=dataAreaId eq '<LEGALENT>' to scope to a specific company
6. Write vendor master POST /data/Vendors POST / PATCH HIGH Same entity bidirectional

Pattern: Direct OData + Business Events, S2S OAuth.

┌────────────────────────────┐
│ Orcha backend (Clojure)    │
│  ── Get OAuth token via    │
│     client_credentials     │──┐
│     against Entra ID       │  │  HTTPS / OAuth Bearer
│  ── REST client            │  │
│                            │  ▼
│                            │ ┌──────────────────────────┐
│                            │ │ Customer's F&O env       │
│                            │ │ <env>.cloudax.dynamics.. │
│                            │ │  /data/  (OData)         │
│                            │ │  /api/services/ (JSON)   │
│                            │ │  /data/DataMgmt.../      │
│                            │ │      ImportFromPackage   │
│                            │ │                          │
│                            ◄─┤  Business Event          │
│                              │  (HTTPS webhook /        │
│  Webhook listener            │   Service Bus queue)     │
│                              └──────────────────────────┘
└────────────────────────────┘

Why direct OData over Power Automate or unified API:

When to use DMF package API instead of OData: Backfill / cutover scenarios where customer migrates 50k+ historical invoices in one go. Daily/intraday volume is well within OData capacity.

When to use Business Events instead of polling: Posting-status notifications, payment notifications, vendor master changes from customer side, workflow completion. Polling is fine for status reads of in-flight invoices; events are better for "tell me when X happens".

Phased integration plan

Phase Scope Engineer-weeks Customer dependencies
0. Spike Validate auth against a partner-provided Tier 2 sandbox; verify can POST VendorInvoiceHeader + attach PDF + read posting status 1 Sandbox + admin contact
1. Auth + entity client Multi-tenant Entra ID app, S2S token cache + refresh, typed OData client (generate from $metadata), retry-with-backoff on 429 2 None (Orcha-side)
2. Master data read Pull chart of accounts, vendors, vendor bank accounts, financial dimensions; cache and reconcile 1.5 Customer admin completes 30-min onboarding
3. Invoice push (PO + non-PO) Map Orcha invoice schema → VendorInvoiceHeader/Line + attachment; handle DimensionDISPLAYVALUE formatting per customer's active default-dim-format 3 Customer admin sets default-dim-format
4. Workflow / touchless integration Either enable touchless or partner-deploy custom workflow-submit service; instrument workflow status read 2 Decision: touchless vs. custom service
5. Status read-back via events Subscribe to "Vendor invoice posted" + payment business events; reconcile against Orcha records 1.5 Customer admin activates events + configures endpoint
6. Error handling, observability, multi-LE support Cross-company queries, idempotency on retries, monitoring, error-correction UI for AP coders 1.5 None
Total v1 ~12 engineer-weeks

Add ~2 weeks contingency for customer-specific edge cases (sales tax handling per legal entity, multi-currency, project-linked invoices via Project Operations entities).


8. Risks & Open Questions

Risk Detail Mitigation
Customer overlap with Microsoft Invoice Capture If customer has already deployed Invoice Capture, Orcha is positioned as a "rip-and-replace" or a co-existence rather than greenfield AP automation Sales question early: "Do you use Invoice Capture or AI Builder for AP today?" Most F&O customers either (a) haven't deployed it or (b) found it too shallow — both are Orcha-friendly outcomes
Financial dimension formatting fragility DimensionDISPLAYVALUE is a single delimiter-separated string whose schema is defined per customer at the Financial dimension configuration for integrating applications page. Order-sensitive. At onboarding, query DimensionAttributeFormat config and store per customer. Validate before each post.
Workflow submission gap No native OData action to submit pending invoice to workflow Use touchless mode by default; ship a small X++ extension as backup for customers who need conditional submission
Throttling under bulk load Resource-based throttling can fire under heavy concurrency Use DMF package API for >100 invoices/batch; implement Retry-After honoring; request High throttling priority
Multi-legal-entity complexity One F&O tenant often has 10+ legal entities; Orcha must scope every write to the right dataAreaId Multi-LE mapping at customer onboarding; per-LE invoice routing in Orcha
On-premises customers Some German F&O customers are still on-prem (especially regulated industries). Only DMF package API is supported on-prem; no business events to external endpoints. Detect deployment type at onboarding; fall back to polling for on-prem
Custom security role configuration Customer's standard "AP Clerk" role may not include all the entity-level privileges needed; admin often has to compose a custom role Provide a published role definition (XML export) that customer admin can import
Service principal limitation in Power Automate connector Microsoft Learn flags: "Although Service Principal authentication is listed as an available option in the connection configuration, it is currently not supported for the Microsoft Dynamics AX connector" — only affects Power Automate path Use direct OData with S2S, not Power Automate, to avoid this
Sandbox availability for testing F&O Tier 2 sandboxes are customer-owned; Orcha can't self-serve. Per-customer onboarding requires customer to provide Tier 2 access. Negotiate Tier 2 access during sales process; consider Microsoft Cloud Solution Provider partnership to get demo environments
Entity schema drift across versions F&O entity schema evolves with semi-annual releases (Wave 1 + Wave 2); V2/V3 entity versions appear Generate client proxies from $metadata at runtime or per-deploy; pin entity versions; subscribe to release plans

9. Comparison to other ERPs in Orcha's pipeline

Dimension D365 F&O SAP S/4HANA Cloud Public DATEV Business Central Onventis
API surface breadth Widest — every entity exposed Wide — but split across CDS-derived OData services with licensing tiers Narrow — DATEVconnect for accounting, DATEV Unternehmen Online for upload Wide — same family, smaller scope Narrow — REST API exists but license-gated
Auth pattern Entra ID OAuth 2.0 (S2S) SAP BTP destination services + OAuth DATEV-SmartLogin + OAuth Entra ID OAuth 2.0 Token, license-gated
iPaaS coverage Excellent (10+ named connectors) Excellent Limited Excellent Poor
First-party low-code Power Automate / Logic Apps native SAP Build / SAP Integration Suite None Power Automate None
Webhooks / events Business Events (native, broad) Event Mesh, S/4 Events None standard Business Central events None
Bulk import API DMF package + Recurring OData batch + IDoc File-based to DATEV-Cloud Configuration packages EDIFACT / openTRANS
Approval workflow programmatically LIMITED (need extension) LIMITED n/a LIMITED UNCLEAR
Free quota for invoice capture 100/month included n/a n/a n/a n/a
Customer-side onboarding cost LOW (30–60 min admin) MEDIUM-HIGH (BTP, destinations) MEDIUM (DATEV partner registration) LOW HIGH (request access from Onventis)
Engineer-weeks for v1 ~12 ~15 ~6 ~10 ~6.5 (once access granted)
Strategic verdict for Orcha Build direct — high ROI Build direct — high ROI Build direct — table stakes for DACH Build direct Build only for procurement-only customers

Recommendation: Build a direct OData + Business Events integration as Orcha's second priority ERP integration after SAP S/4HANA.

  1. Phase 1 (immediate): Partner with a Microsoft CSP or D365 implementation partner to get a Tier 2 sandbox for Orcha's eng team. Run the spike from Phase 0 of section 7.
  2. Phase 2 (8–10 weeks): Build the core direct integration following the phased plan in section 7. Architect for multi-tenant from day one (multi-tenant Entra ID app, per-customer credential storage, per-customer dimension configuration).
  3. Phase 3 (ongoing): Publish the multi-tenant Entra ID app on Microsoft AppSource to surface to F&O customers in the Microsoft channel. AppSource certification is non-trivial (security review + SOC 2 / similar) but unlocks Microsoft's marketing flywheel.
  4. Phase 4 (optional, later): Build a thin Power Automate connector wrapper or contribute to the Microsoft Power Platform Marketplace for low-code customers who prefer the Power Platform UX.

Sales-side filter

Decisive customer-discovery questions:

  1. "What F&O version are you on?" — sub-10.0.33 means no Invoice Capture available; sub-10.0.12 means no virtual entities (rare but possible).
  2. "Cloud or on-prem?" — on-prem customers get a reduced integration (no business events outbound, polling only).
  3. "Do you use Microsoft Invoice Capture or AI Builder for AP today?" — if yes, dig into whether it's working (most aren't satisfied with paper-first OCR and no e-invoice support yet).
  4. "How many legal entities do you run in F&O?" — multi-LE customers need the cross-company query mode; pricing/scoping conversation.
  5. "Is your environment co-located with Dataverse?" — affects virtual entity latency if Orcha ever routes through Dataverse.

11. Sources

Microsoft Learn — core platform docs:

Microsoft Learn — AP / vendor invoice entities:

Microsoft Learn — Invoice Capture & Electronic Invoicing:

iPaaS & connector vendors:

Code samples & community:

Licensing & commercial: