For AI agents: the documentation index is at /docs/mdmbox/llms.txt. A Markdown version of this page is available at /docs/mdmbox/api-reference.md or by requesting it with the Accept: text/markdown header.
MDMbox Docs

API reference

The /api/* paths below are available directly on MDMbox or through App/mdmbox on Aidbox. When MDMBOX_API_AIDBOX_APP_ONLY=true, use the Aidbox host and grant access with Aidbox AccessPolicies. Use API authentication for protected endpoints. For FHIR resource management, use the Aidbox REST API on the Aidbox host at /fhir.

Open /api/docs for Swagger UI or /api/openapi.json for the full specification and request schemas. The specification reports the running image version.

The mdm helpers supplied to server-side scripts are documented separately in the JavaScript algorithm API.

Infrastructure

MethodPathDescription
GET/healthzLiveness check
GET/readyzReadiness check
GET/api/docsSwagger UI
GET/api/openapi.jsonOpenAPI specification

Call /healthz and /readyz directly on the MDMbox host; App/mdmbox does not expose these probes through Aidbox. /readyz returns HTTP 200 when ready, otherwise 503. Its JSON body contains status and the individual checks.db and checks.fhir results.

Both probes remain available before license activation and while a running instance is restricted by its license. A successful probe does not indicate that the license is active. See License configuration.

Matching models

MethodPathDescription
GET/api/modelsList all models (optional ?resource=Patient)
POST/api/modelsCreate a model
GET/api/models/:idGet model by ID
PUT/api/models/:idUpdate model
DELETE/api/models/:idDelete model

These endpoints manage MatchingModel resources. Manage BulkMatchingModel through the Admin UI or the Aidbox FHIR API.

FHIR operations

$match

MethodPathDescription
POST/api/fhir/:resource/$matchMatch a resource (FHIR Parameters body)
POST/api/fhir/:resource/:id/$matchMatch existing resource by ID
POST/api/fhir/r4/:resource/$matchMatch a resource using FHIR R4
POST/api/fhir/r4/:resource/:id/$matchMatch an existing resource using FHIR R4
POST/api/fhir/r6/:resource/$matchMatch a resource using FHIR R6
POST/api/fhir/r6/:resource/:id/$matchMatch an existing resource using FHIR R6

The unversioned routes use the release selected by MDMBOX_DEFAULT_FHIR_RELEASE.

See Find duplicates: $match.

Merge lifecycle

MethodPathDescription
POST/api/fhir/$merge/v2Server-managed merge
POST/api/fhir/$unmerge/v2Server-managed unmerge
POST/api/fhir/$mergeClient-plan merge
POST/api/fhir/$unmergeClient-plan unmerge

See Merge operation and Unmerge operation.

MethodPathDescription
POST/api/fhir/$linkExecute or preview a link plan
POST/api/fhir/$unlinkReverse a previous link from its link Task

See Link operation and Unlink operation.

$mark-not-a-match

MethodPathDescription
POST/api/fhir/$mark-not-a-matchRecord that two resources are not the same real-world entity

See Mark not a match for the request, response, and effect on matching and merging.

$referencing

MethodPathDescription
POST/api/fhir/:resource/:id/$referencingFind resources referencing a given resource

See Referencing operation.

Matching

Bulk matching

All bulk match endpoints are scoped to a BulkMatchingModel by ID.

MethodPathDescription
GET/api/bulk-match/:model-id/statusGet preparation state and active or latest non-archived job progress
GET/api/bulk-match/:model-id/status/:job-idGet a specific job's progress, including archived jobs
POST/api/bulk-match/:model-id/startPrepare data if needed and start a job (body: {batchSize, workersCount, refreshSourceData})
POST/api/bulk-match/:model-id/stopStop job (?force=true for immediate cancellation)
POST/api/bulk-match/:model-id/continueResume a stopped job
POST/api/bulk-match/:model-id/archiveArchive a completed or stopped job
GET/api/bulk-match/:model-id/resultExport the latest completed or stopped job
GET/api/bulk-match/:model-id/result/:job-idExport a specific job of this model

Commands and status return FHIR Parameters; errors use OperationOutcome. Both result routes accept Accept: text/csv or Accept: application/x-ndjson (default), and an optional decisionStatus filter. See Bulk matching.

Continuous matching

Continuous status includes pendingChanges and appliedChanges as whole-number valueDecimal parameters. They count captured events awaiting application and events applied since the latest build or reset. Several events can refer to one record. See Continuous matching for the separate application and matching progress shown in the admin UI.

MethodPathDescription
POST/api/continuous-match/:model-id/startStart, resume, or rebuild after a model change
POST/api/continuous-match/:model-id/pausePause while keeping progress and results
POST/api/continuous-match/:model-id/retryRequeue failed batches
GET/api/continuous-match/:model-id/statusGet process status and counts
GET/api/continuous-match/:model-id/resultExport current pairs
DELETE/api/continuous-match/:model-idReset a paused process, keeping the model and source records

Commands and status return FHIR Parameters; errors use OperationOutcome. Results support CSV, NDJSON, and paginated JSON with a decisionStatus filter. See Continuous matching for parameters and limits.

Admin UI

The admin interface is available through Aidbox at /mdmbox/admin. It provides:

  • /mdmbox/admin — model management (create, edit, delete MatchingModel and BulkMatchingModel)
  • /mdmbox/admin/bulk-match — Bulk matching (start, monitor, download, stop)
  • /mdmbox/admin/continuous-match — Continuous matching (start, pause, retry, download, reset)

The Algorithms section manages merge and unmerge scripts and their Git sources. See Algorithm management.

Last updated: