Products  /  Lattice  /  Integration operations

integration operations

Drive Finance & Operations transactions from any system, safely.

155 REST operations across 27 services put one consistent, idempotent surface in front of the documents your business posts: sales and purchase orders, journals, inventory, production, projects and workflow.


155 REST operations, ready to call
27 X++ services, built and maintained for you
1 request shape across all of them
Exactly once posting, even when a call is retried

The problem

Every system that needs to make something happen in Finance & Operations (create an order, post a journal, report production, approve a requisition) usually gets its own custom X++ service. Each one is designed, secured, tested and maintained on its own by the same scarce F&O developers, each behaves a little differently, and almost none of them is safe to retry. So when a network call times out, the integration either gives up or posts the document twice, and someone finds out at month end.

How Lattice answers it

Lattice ships those services already built. Sales orders can be created, confirmed, packed, invoiced and returned; purchase orders confirmed, received, invoiced and returned; general, intercompany, payment, inventory and project journals posted and reversed; production orders taken from estimate to end; workflow items submitted, approved, rejected, delegated and recalled. Fixed assets, currency revaluation, budget register entries and vendor payment proposals are covered too.

Every operation shares one predictable request shape, so an integrator who has called one can call the rest. Each runs the same validation as the Finance & Operations pages and either succeeds or fails with a typed error, leaving nothing half-posted. Nearly every posting operation has a batch twin that takes many documents in one call and reports the outcome of each one, and long-running work can be submitted asynchronously and polled for status.

Every operation is idempotent. The caller sends a request id, Lattice records the claim in the same transaction as the document, and a repeat of the same request returns the first result instead of posting again. General ledger journals and sales order confirmations, packing slips and invoices can also run as a dry-run preview that validates the request without posting or using a number.

Callers can send the keys their own systems use, such as a shop's order number or a CRM's account id, and Lattice resolves them to the Dynamics record before the operation runs. Partners who send files instead of calls are covered by file ingestion: Lattice pulls files from SFTP, Azure Blob storage or Azure Files, decrypts them when they are PGP-encrypted, skips any file it has already processed, keeps the original as a document attachment, reads CSV, JSON, XML or fixed-width records, reshapes them with a Liquid template, and posts each record through the same services.

When the surface is ready to share, the APIM configurator turns it into an Azure API Management bundle (Bicep, APIOps or ARM templates) with JWT validation, rate limits and the other policies you choose.


What you get

Built so integrations go live and stay up.

Exactly once

Retries never double-post

A repeated request returns the original result. Networks drop and brokers redeliver; your ledger does not notice.

Dry run

Preview before you post

Validate a journal or a sales order posting without committing it or consuming a number, then send it for real.

Your keys

Call it in your systems' own ids

Send the shop order number or the CRM account id. Lattice resolves it to the Dynamics record, so nobody keeps a mapping table.

Files too

Partner files become posted documents

Pull, parse, transform and post files from SFTP or Azure storage, with every failed record recoverable instead of re-keyed.

Guardrails

Inbound orders checked before they flow

Hold lines priced outside tolerance, auto-confirm the clean ones, and lock confirmed orders against edits for a set time.

Gateway ready

Publish to Azure API Management

Generate a deployable API Management bundle from the live service metadata, policies included, instead of writing it by hand.


What is in the box

Every operation, by business area.

Nearly every posting operation also comes as a batch operation that takes many documents in one call. Numbers are operation counts per area.

Sales and receivables 8

  • Create sales orders
  • Confirm, post the packing slip and invoice sales orders
  • Cancel a sales packing slip
  • Create, receive and credit sales returns
  • Post and cancel free text invoices
  • Set sales prices on trade agreements
  • Resolve the sales price for a customer and item
  • Read a sales order's status

Purchasing and payables 8

  • Confirm, receive and invoice purchase orders
  • Cancel a product receipt
  • Post purchase prepayment invoices
  • Submit purchase requisitions and convert them to orders
  • Create, ship and credit purchase returns
  • Post vendor invoice register and approval journals
  • Post pending vendor invoices
  • Generate vendor payment proposals

General ledger and cash 6

  • Post and reverse general journals
  • Post intercompany journals
  • Post, settle and reverse customer and vendor payments
  • Run customer, vendor and ledger currency revaluation
  • Post budget register entries and transfers
  • Read a journal's status

Inventory 5

  • Post movement, adjustment, counting and tag counting journals
  • Post transfer, BOM and ownership change journals
  • Ship and receive transfer orders
  • Activate pending prices (new standard costs)
  • Calculate item costs

Production 5

  • Estimate, schedule, release and start production orders
  • Post picking lists and route cards
  • Report as finished
  • End production orders
  • Read a production order's status

Projects 2

  • Post hour, expense, item and fee journals
  • Create project invoice proposals

Workflow 4

  • Submit documents to workflow
  • Approve, reject and delegate work items
  • Recall a workflow
  • Read a workflow's status

Fixed assets 3

  • Post acquisitions
  • Run depreciation proposals
  • Post disposals

Platform 3

  • Submit any operation asynchronously and poll its status
  • Capture and apply data management configuration
  • Request and revoke temporary database access

Questions

What buyers ask.

Do we need X++ developers to use it?

No. The services are already built, secured and maintained. Your integrators call standard Finance & Operations service endpoints, authenticated with Microsoft Entra ID like any other call, from whatever tools they already use.

What happens when a call is retried?

Nothing new. Each request carries a request id, and a repeat of the same id returns the result of the first call instead of posting again. If a crash interrupts a call between creating and posting a document, a scheduled sweep finds it and resolves it.

Can we test without posting anything?

Yes. General ledger journals and sales order postings support a dry-run preview, and the service test console runs any operation interactively, with saved requests, in preview where the operation supports it.

How do we control who can call what?

Each operation has its own privilege, and Lattice ships administrator, operator and read-only roles. The operator role can post but leaves out the high-risk operations, such as reversals, cancellations and fixed asset disposals, so those stay with the people who should hold them. Access is granted with standard Finance & Operations security.

Is it priced per call or per user?

Neither. Lattice is one flat price per production instance per year, with every capability included and no call limits, and it is free in any non-production environment.


Try it

See it in your own sandbox.

Lattice is one package: every capability on these pages comes with it. Run it free in any non-production environment for as long as you like, and subscribe only when it goes to production.

An unhandled error has occurred. Reload 🗙

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.