4 min readRishi

Recurring Integrations and the REST API in D365 Finance & Operations

When a third-party system needs to push thousands of records into Dynamics 365 Finance & Operations on a schedule, OData is the wrong tool — it is row-by-row and throttled. The right tool is recurring integrations: a file-based REST endpoint built on the Data Management Framework that handles batches, runs asynchronously, and gives you a status you can poll. Here is how it works end to end.

The moving parts

Recurring integrations wrap a DMF import or export project in an exposed endpoint. You configure the project once, enable it for recurring integration, and F&O hands you two things: an Activity ID and an authentication scope. Your external system then calls the REST API to enqueue (for import) or dequeue (for export) files.

DirectionYou callF&O does
Importenqueue with the file payloadQueues it, runs the import project in batch
Exportdequeue to pull the next fileRuns the export, returns the package
BothgetMessageStatusReports Queued / Processing / Processed / Failed
ExportacknowledgeConfirms receipt so the file is not re-sent

Authenticating

Every call needs an Azure AD bearer token for an app registration that is also registered in F&O under System administration > Setup > Microsoft Entra ID applications. The token audience is your F&O environment URL.

POST https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token
grant_type=client_credentials
&client_id={appId}
&client_secret={secret}
&scope=https://{your-environment}.dynamics.com/.default

Enqueuing a file for import

The enqueue endpoint takes the raw file in the body. The Activity ID and a legal entity come from the query string. The "entity" name must match the public entity name in your data project.

POST https://{env}.dynamics.com/api/connector/enqueue/{activityId}
     ?entity=Vendors V2&company=USMF
Authorization: Bearer {token}
Content-Type: application/octet-stream

<file bytes — CSV, or a zipped data package>

A successful enqueue returns a message ID. That ID is your tracking handle — do not discard it.

Polling status — the part people skip

Enqueue returns immediately; the import has not run yet. Poll status with the message ID until it is terminal, and never assume success from the enqueue response alone.

GET https://{env}.dynamics.com/api/connector/jobstatus/{activityId}
    ?jobId={messageId}

Build your client as a small state machine: Queued and Processing mean keep polling with backoff; Processed means done; PartiallyFailed and Failed mean fetch the execution log and the error file from DMF. A robust integration treats PartiallyFailed as a real outcome, not an edge case — DMF will import the good rows and reject the bad ones.

Package vs single-entity

Two payload shapes exist:

  • Single CSV maps to a one-entity data project. Simple, fine for one feed.
  • Data package (a zip containing the manifest and one CSV per entity) maps to a multi-entity project and preserves sequencing. Use packages when entities depend on each other — customers before sales orders — so DMF imports them in the right order.

Reliability patterns that matter

  • Idempotency. Networks retry. If your client re-enqueues after a timeout, you can double-import. Stamp each file with a unique reference and let the target entity's natural key upsert, so a replay is harmless.
  • Throttle on your side. Recurring integrations are batch-backed but the environment still has finite batch capacity. Pace enqueues; do not fire a thousand files in a minute and expect them all to run at once.
  • Watch the batch group. The import runs under a batch group. If that group is saturated by other jobs, your files sit in Queued. Give integrations their own batch group so a slow report does not stall data loads.
  • Archive processed files. Configure the data project to keep source files for a window. When finance asks "did the 14th's invoices load?", you want the file and the log, not a shrug.

When to use what

Reach for recurring integrations for scheduled, high-volume, file-shaped data — master data syncs, transaction loads, exports to a data lake. Reach for OData for low-volume, interactive, record-at-a-time scenarios where you need an immediate response. Use Business Events when you need F&O to push a signal the moment something happens. They are complementary; the mistake is forcing one tool to do another's job — and the classic symptom of that mistake is an OData integration timing out under a load recurring integrations would have shrugged off.

Keep reading

Newsletter

New posts, straight to your inbox

One email per post. No spam, no tracking pixels, unsubscribe anytime.

Comments

  • No comments yet. Be the first.