Instiq
Chapter 3 · Extend the platform: plug-ins·v1.0.0·Updated 6/29/2026·~12 min

What's changed: Created PL-400 Chapter 3 (domain: Extend the platform, part 1 = plug-ins): Dataverse plug-ins (pipeline stages pre-validation/pre-operation/post-operation, sync/async, execution context IPluginExecutionContext, Pre/Post Images, Organization service CRUD, sandbox/performance, Plug-in Registration Tool) and custom APIs and business events (custom API message bound/unbound, Dataverse business events, plug-in implementation).

3.2Custom APIs and business events

Key points

Understand custom API messages (bound/unbound), Dataverse business events, registration/publishing, and invocation from plug-ins.

Bundle repeated server operations into a custom API as a custom message, reusable from multiple clients/plug-ins.

3.2.1Custom API and bound/unbound

A custom API defines a reusable custom operation (message) in Dataverse with input/output parameters, implemented by a plug-in. Choose bound (operates on a specific table’s record) or unbound (table-independent, global). It is distinct from a custom connector (which ingests an external REST API)—a custom API is an in-server custom operation.

3.2.2Dataverse business events

Dataverse business events publish business occurrences (e.g., order confirmed) as events that subscribers react to. Unlike CRUD table-operation events, you can define/publish semantically meaningful business events. Combine with custom APIs to compose extensible logic.

Exam point

Cues: "reusable in-server custom operation" = custom API. "tied to a specific table" = bound; "table-independent global" = unbound. "publish a business occurrence as an event" = Dataverse business events. Custom API (own message) vs custom connector (ingest external API) differ.

Warning

Watch the mix-ups: (1) Custom API (in-server message) vs custom connector (ingest external API). (2) Bound (table-tied) vs unbound (global). (3) Business events (business) vs CRUD table events. (4) A custom API is implemented by a plug-in.

Diagram: a custom API is a reusable in-Dataverse custom operation (message), bound (tied to a table) or unbound (table-independent), implemented by a plug-in; Dataverse business events publish business occurrences like "order confirmed" for subscribers (distinct from CRUD table events); distinguish custom API (in-server) from custom connector (ingest external API).
Own ops and events

3.2.3Section summary

  • Custom API = reusable custom message; bound (table)/unbound (global)
  • Dataverse business events publish business occurrences as events
  • A custom API is implemented by a plug-in; distinct from a custom connector

Sign in to track progress — Log in.

Quick check

(just a quick review)

Q1. You want a reusable custom operation (message) in Dataverse callable from multiple clients/plug-ins. Best?

Q2. You want a custom API that operates on a specific table’s record. Which kind?

Q3. You want a global custom API not tied to any table. Which kind?

Q4. You want to publish a business occurrence like "order confirmed" as an event for subscribers to react. Best?

Q5. Which correctly distinguishes a custom API from a custom connector?

Check your understandingPractice questions for Chapter 3: Extend the platform: plug-ins