Date: 2026-05-13 Status: Research complete
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 | 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 |
| 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 |
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'
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:
/data/VendorInvoiceHeaders (creates row in VendInvoiceInfoTable → appears under Accounts payable → Invoices → Pending vendor invoices)/data/VendorInvoiceLines for each line referencing HeaderReference/data/VendorInvoiceDocumentAttachments with base64 FileContentsVendInvoiceJourEntity (or subscribe to "Vendor invoice posted" business event) for posting confirmationCritical 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.).
| 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 |
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.
| 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 |
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 |
ORCHAINT user with the minimal role privileges needed (custom security role recommended).DimensionDISPLAYVALUE fields.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).
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".
| 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).
| 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 |
| 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.
Decisive customer-discovery questions:
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: