Dynamics 365 Finance & Operations
Discover more about the Dynamics 365 Finance & Operations connector and how to use it on the Digibee Integration Platform.
The Dynamics 365 Finance & Operations connector enables integrations with Microsoft Dynamics 365 Finance & Operations (F&O), also known as Finance and Supply Chain Management.
It reads and writes the app's public OData data entities, such as CustomersV3, VendorsV2, SalesOrderHeadersV2, and ReleasedProductsV2. Supported operations include CRUD, query options, bound and unbound actions and functions, cross-company access, and $batch.
It's a specialization of the generic OData integration, using the /data service root, composite dataAreaId keys, and Azure AD (Azure Key) authentication. Entities are discovered automatically from the environment's $metadata, and cross-company access is supported.
Which Dynamics connector should I use?
Use Dynamics 365 Finance & Operations for Finance and Supply Chain (*.operations.dynamics.com, /data entities). Use Dynamics 365 for Customer Engagement, Dataverse, and CRM (*.crm.dynamics.com, /api/data/v9.x). Use the generic OData connector for any other OData service.
Set up authentication (Azure AD)
The connector authenticates as an Azure AD service principal (OAuth 2.0 client credentials). You set this up once. Below are the steps relevant to Digibee. For the exact portal clicks, follow the linked Microsoft docs, since their UI changes over time.
Register an app in Microsoft Entra ID. In the Entra admin center, go to App registrations, then New registration. Copy the Application (client) ID and the Directory (tenant) ID. See Register an application for the full procedure.
Create a client secret. Go to Certificates & secrets, then Client secrets, then New client secret. Copy the secret value right away, it's shown only once. See Add and manage app credentials for the full procedure.
Grant the app access inside Finance & Operations. In the F&O app, go to System administration, then Setup, then Microsoft Entra ID applications. Add a row with the app's Client ID, a name, and a User ID mapped to a user whose security role grants access to the entities you'll use.
Step 3 is required. Skip it, and requests will still authenticate (a valid token is issued), but they'll get rejected with 401/403, because the service principal isn't authorized in F&O.
Create the Digibee Azure Key account using the values from steps 1 and 2:
Client ID
Application (client) ID (step 1)
Client Secret
The secret value (step 2)
Tenant ID
Directory (tenant) ID (step 1)
The connector requests the token for scope https://{your-env}.operations.dynamics.com/.default. Only override it with OAuth Scope if your resource differs. See Accounts.
You'll also need the environment URL, for example https://myenv.operations.dynamics.com.
Concepts
The terms below appear throughout the connector's parameters, so it helps to understand them before configuring a request. Each concept maps to a specific field you'll fill in later.
Data entity
The OData collection you're working with, for example CustomersV3. Path: /data/CustomersV3.
Composite key
F&O keys are usually composite and include dataAreaId (the legal entity, or company), for example dataAreaId='usmf',CustomerAccount='US-001'.
Cross-company
By default, a query returns only the user's default company. Enable Cross-company to span all legal entities (cross-company=true).
$metadata
F&O exposes entity and field metadata at /data/$metadata. The connector uses it to power the guided Entity Set picker and field editor.
Parameters
The table below lists all configuration parameters for the connector. Parameters that support Double Braces expressions are marked with ✅ in the Supports DB column.
Alias
A name for this connector's output, so you can reference it later in the flow with Double Braces.
String
✅
dynamics-finops-01
Fail On Client Error (4xx)
Interrupt the pipeline on a 4xx response.
Boolean
❌
false
Fail On Server Error (5xx)
Interrupt the pipeline on a 5xx response.
Boolean
❌
false
Environment URL
Finance & Operations environment root URL.
String
✅
https://myenv.operations.dynamics.com
—
Use Dynamic Account
If enabled, the connector resolves the account at runtime. If disabled, it uses the account configured statically below.
Boolean
❌
false
Use Dynamic Account is enabled
Scoped
If enabled, isolates the stored account from other sub-processes. Not available for accounts referenced in headers or in the request body. To learn more, read the Dynamic Accounts documentation.
Boolean
❌
false
Use Dynamic Account is enabled
Account Name
Name of the account defined in the Store Account connector.
String
✅
N/A
Use Dynamic Account is disabled
Account
Account containing the Azure AD credentials (client ID, secret, and tenant). Supported type: Azure Key. Learn more about Accounts.
Account
—
N/A
Operation parameter
Operation
The action to perform. It shapes the request. See the supported operations below.
Select
❌
Query
Supported operations
The Operation parameter maps to an OData request under the /data service root:
Batch
POST
/data/$batch
multipart/JSON
Batches multiple operations in one request.
Create
POST
/data/{EntitySet}
JSON
Creates a record.
Custom Query
GET
/data/{EntitySet}?{$query}
—
Same as Query. Use it when combining raw and structured query parameters.
Delete
DELETE
/data/{EntitySet}({key})
—
Deletes a record.
Get by ID
GET
/data/{EntitySet}({key})
—
Reads a single record by key.
Invoke Action
POST
/data/{EntitySet}({key})/{Action} or /data/{Action}
JSON
Invokes a bound action (with key and entity set) or an unbound action.
Invoke Function
GET
/data/{EntitySet}({key})/{Function} or /data/{Function}
—
Invokes a bound or unbound function.
Query
GET
/data/{EntitySet}?{$query}
—
Reads the collection with query options.
Update
PATCH/PUT
/data/{EntitySet}({key})
JSON
Updates a record, partially (PATCH) or fully (PUT).
Common parameters
These parameters appear regardless of the operation selected.
Cross-company
Returns rows across all legal entities, instead of only the default company (cross-company=true).
Boolean
❌
false
Output Format
Controls the shape of the response returned to the pipeline. Values Only unwraps and returns only the value array. Full Response returns the entire response, including @odata.* fields. Single Entity returns the first or only entity.
Select
❌
Values Only
Headers
Additional request headers, as key/value pairs.
Key/Value
✅
N/A
Operation-specific parameters
The remaining parameters only appear for certain operations, grouped below by purpose.
Entity Key — used by Delete, Get by ID, Invoke Action, Invoke Function, and Update.
Entity Key
Single or composite key. F&O keys are usually composite, for example dataAreaId='usmf',CustomerAccount='US-001'.
String
✅
N/A
Action / Function Name — used by Invoke Action and Invoke Function.
Action / Function Name
OData action or function name. Bound when an Entity Set is set, unbound otherwise.
String
✅
N/A
Body — used by Batch, Create, Invoke Action, and Update.
Body
JSON payload for Create and Update, action parameters for Invoke Action, or the $batch payload.
JSON
✅
{}
Interactive Mode — used by Create and Update.
Interactive Mode
If enabled, the connector displays the payload fields for you to edit. Otherwise, provide a raw JSON body.
Boolean
❌
false
Query parameters — used by Custom Query and Query.
Filter ($filter)
OData filter expression, for example CustomerGroupId eq '10'.
String
✅
N/A
Select ($select)
Comma-separated list of fields to include in the response.
String
✅
N/A
Order By ($orderby)
Sorts the results by one or more properties, in ascending or descending order, for example CustomerAccount asc.
String
✅
N/A
Expand ($expand)
Related entities to include inline.
String
✅
N/A
Top ($top)
Maximum number of records to return.
Number
✅
N/A
Skip ($skip)
Records to skip, for pagination.
Number
✅
N/A
Include Count ($count)
Include the total count in the response.
Boolean
❌
false
Request Timeout (seconds)
Maximum time for the HTTP request.
Integer
❌
30
—
Custom Query String
Raw extra query parameters appended verbatim.
String
✅
N/A
—
Update Method
PATCH for a partial update, or PUT for a full replacement.
Select
❌
PATCH
Operation is Update
Documentation
Optional field to describe the connector configuration and any relevant business rules.
String
❌
N/A
Examples
Query customers in one company
Resulting request:
Output (when the Output Format is set to Values Only) :
Get one record by composite key
Resulting request:
Query across all companies
Resulting request:
Known limitations
OData v4 only. Finance & Operations doesn't expose v2.
No FetchXML. That's Dataverse and CRM-only. Use the Dynamics 365 connector for that.
No automatic pagination. Follow
@odata.nextLinkyourself, or control paging manually with$topand$skip.Guided entity and field discovery requires a reachable environment and a valid Azure Key account. If discovery can't reach the environment, you can still provide the Entity Set through a Double Braces expression.
Composite keys,
@odata.bindlookups for navigation properties, and enum and option values are the most error-prone areas. Validate against the entity's$metadata.
Common errors
400
Malformed composite key syntax or $filter expression.
401 / 403
The app isn't registered as an F&O Application User, is missing the required security role, or the token scope is wrong.
404
Wrong entity set name.
Enable Fail On Client Error (4xx) or Fail On Server Error (5xx) to have the connector stop the pipeline when these errors occur.
Last updated
Was this helpful?