Skip to content

CLI reference

This page is generated from the crm command tree.

crm

Stateful CLI for Microsoft Dynamics 365 CE — on-prem v9.x (NTLM) or Dataverse online (OAuth), over the Web API.

Usage:

crm [OPTIONS] [COMMAND] [ARGS]...

Options:

  --json                          Emit machine-readable JSON output.
  --fields KEY[,KEY...]           Project the data payload down to these
                                  comma-separated top-level keys (JSON: per
                                  row/record; human: table columns). Applied
                                  after curation; the ok/error/meta envelope
                                  is untouched.
  --jq PROGRAM                    Run a jq program over the curated data
                                  payload; the result replaces data in the
                                  envelope. Implies --json. Mutually exclusive
                                  with --fields. An invalid program is a usage
                                  error (exit 2).
  --dry-run                       Preview writes without issuing them; reads
                                  run normally.
  --profile TEXT                  Connection profile name (from the profiles/
                                  dir under CRM_HOME; default ~/.crm).
  --password TEXT                 Secret for this run (overrides the profile's
                                  stored secret).
  --log-level [debug|info|warning|error]
                                  Log level (env: CRM_LOG_LEVEL). Default:
                                  warning.
  --verbose                       Alias for --log-level debug.
  --log-format [text|json-line]   Log output format (env: CRM_LOG_FORMAT).
                                  Default: text.
  --auth-scheme [ntlm|kerberos|negotiate|oauth]
                                  Override the active profile's auth scheme
                                  for this run. ntlm/kerberos/negotiate = on-
                                  prem; oauth = cloud.
  --stage-only                    Stage metadata changes without publishing
                                  (env: CRM_STAGE_ONLY). Forces every
                                  create/update command to --no-publish.
  --retry-on-ambiguous            Re-enable auto-retry of non-idempotent POST
                                  creates on transport error / 429 / 503 (env:
                                  CRM_RETRY_ON_AMBIGUOUS). Off by default: a
                                  lost POST response may have committed.
  --cache-metadata                Read entity definitions from the persistent
                                  on-disk cache (env: CRM_CACHE_METADATA).
                                  Default off.
  --refresh-metadata              Force-refresh the on-disk metadata cache on
                                  this call (one-shot; no env override).
  --session TEXT                  Session name.
  --version                       Show the version and exit.
  -h, --help                      Show this message and exit.

crm action

Invoke OData functions and actions (unbound or bound).

Usage:

crm action [OPTIONS] COMMAND [ARGS]...

Options:

  -h, --help  Show this message and exit.

crm action function

Call an OData function — unbound by default, bound when --bind-set is given.

Functions issue a GET. Scalar params are encoded inline per OData v4; a record-reference param ({"@odata.id": "()"}) or a value with URL-reserved characters is passed as a parameter alias (Fn(P=@p1)?@p1=...). --bind-set alone binds to a collection (set/Ns.Fn(...)); adding --bind-id binds to a single record (set(id)/Ns.Fn(...)). --bind-id requires --bind-set.

Usage:

crm action function [OPTIONS] NAME

Options:

  --params TEXT          JSON dict of function parameters.
  --bind-set TEXT        Entity set to bind the function to (e.g.
                         'systemusers'). Alone → collection-bound; with
                         --bind-id → record-bound.
  --bind-id TEXT         Record id to bind the function to. Requires --bind-
                         set.
  --cast TEXT            Namespace for the function when bound. Override only
                         for custom namespaces.  [default:
                         Microsoft.Dynamics.CRM]
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm action invoke

POST an OData action — unbound by default, bound when --bind-set/--bind-id given.

Usage:

crm action invoke [OPTIONS] NAME

Options:

  --body TEXT            JSON body for the action.
  --body-file FILE
  --bind-set TEXT        Entity set name to bind the action to (e.g.
                         'workflows'). Requires --bind-id.
  --bind-id TEXT         Record id to bind the action to. Requires --bind-set.
  --cast TEXT            Namespace for the action when bound. Override only
                         for custom namespaces.  [default:
                         Microsoft.Dynamics.CRM]
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm app

Create and manage model-driven apps (appmodule).

Usage:

crm app [OPTIONS] COMMAND [ARGS]...

Options:

  -h, --help  Show this message and exit.

crm app add-components

Bind components to an app (AddAppComponents).

Usage:

crm app add-components [OPTIONS] APP_ID

Options:

  --component TEXT       Repeatable 'kind:guid' (kind:
                         view|chart|form|dashboard|sitemap|bpf).  [required]
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm app build-sitemap

Build a SiteMapXml from areas/groups/subareas and create the sitemap.

Usage:

crm app build-sitemap [OPTIONS] SITEMAP_NAME

Options:

  --area TEXT               Repeatable 'id[:Title]'.  [required]
  --group TEXT              Repeatable 'areaId/groupId[:Title]'.
  --subarea TEXT            Repeatable
                            'areaId/groupId:entity=<logical>[:Title]'. Binds a
                            table via Entity=.
  --unique-name TEXT        App uniquename to link the sitemap to (sets
                            sitemapnameunique).
  --solution TEXT           Target unmanaged solution uniquename
                            (MSCRM.SolutionUniqueName). Required for
                            customization writes; pass --solution Default for
                            a deliberate Default-Solution-only write.
  --publish / --no-publish  Run PublishAllXml after the change. Default: stage
                            (no publish); run `solution publish-all` when your
                            set is done.
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm app create

Create a model-driven app.

Usage:

crm app create [OPTIONS]

Options:

  --name TEXT               App display name.  [required]
  --unique-name TEXT        Publisher-prefixed unique name, e.g.
                            'cwx_crmworx'.  [required]
  --description TEXT
  --if-exists [error|skip]
  --icon-webresource TEXT   Web resource (name or GUID) for the app icon.
                            Defaults to the platform icon when omitted.
  --solution TEXT           Target unmanaged solution uniquename
                            (MSCRM.SolutionUniqueName). Required for
                            customization writes; pass --solution Default for
                            a deliberate Default-Solution-only write.
  --publish / --no-publish  Run PublishAllXml after the change. Default: stage
                            (no publish); run `solution publish-all` when your
                            set is done.
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm app delete

Delete a model-driven app, sweeping FK-blocking dependent rows first.

Resolves NAME_OR_ID as an appmoduleid (GUID), else its uniquename, else its display name. Removes the dependent data rows that hold a record-level FK to the app (e.g. appsetting on on-prem) before deleting the app, and lists every record it removed. Refuses a managed app.

Usage:

crm app delete [OPTIONS] NAME_OR_ID

Options:

  --yes                  Skip interactive confirmation.
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm app remove-components

Unbind components from an app (RemoveAppComponents).

Usage:

crm app remove-components [OPTIONS] APP_ID

Options:

  --component TEXT       Repeatable 'kind:guid' (kind:
                         view|chart|form|dashboard|sitemap|bpf).  [required]
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm app set-sitemap

Create a sitemap from a SiteMapXml file.

Usage:

crm app set-sitemap [OPTIONS] SITEMAP_NAME

Options:

  --xml-file FILE           Path to a file containing the SiteMapXml.
                            [required]
  --unique-name TEXT        App uniquename to link the sitemap to (sets
                            sitemapnameunique).
  --solution TEXT           Target unmanaged solution uniquename
                            (MSCRM.SolutionUniqueName). Required for
                            customization writes; pass --solution Default for
                            a deliberate Default-Solution-only write.
  --publish / --no-publish  Run PublishAllXml after the change. Default: stage
                            (no publish); run `solution publish-all` when your
                            set is done.
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm apply

Apply a declarative desired-state spec.

The spec declares a publisher, solution, entities (with attributes, option sets, relationships, and views), web resources, security roles, and plug-ins (assembly + types + steps + images), driven in dependency order with PublishAllXml once at the end (web resources are published with everything else; security roles and plug-in registration are not publishable). A web resource's or plug-in assembly's file path is resolved relative to the spec file. apply is convergent: a component that already exists is reconciled against the spec — left untouched when it matches, updated in place when an allowed field drifts, or refused (no write) when the divergence would need a destructive drop-and-recreate (see ADR 0014). Emits {ok, data:{applied, updated, skipped, replace_blocked, pruned, planned, failed}, meta:{staged}}; a replace-blocked component makes ok=false (exit 1).

With the global --dry-run flag the same reconcile runs read-only and the result is a full drift report — planned (would create), updated (would update), replace_blocked, and pruned (solution components absent from the spec, each {kind, name, deleted: false}) — assembled from live reads with no write issued (#550). --prune opts in to deleting those extras (#553): schema- only kinds under a confirmation, data-bearing kinds only with --allow-data-loss.

Usage:

crm apply [OPTIONS]

Options:

  -f, --file FILE                 Path to the YAML or JSON desired-state spec.
                                  Exactly one of -f/--file or --from-plan is
                                  required.
  --from-plan FILE                Execute a saved plan (from `--dry-run apply
                                  -o`) only if it is still exactly true.
                                  Mutually exclusive with -f; its intent
                                  (prune / allow-data-loss / stage-only) is
                                  replayed, not re-specified. With --dry-run,
                                  re-verifies without executing.
  --include-referenced-optionsets / --no-include-referenced-optionsets
                                  Add a picklist's referenced global option
                                  set to the target solution (covers pre-
                                  existing globals the create step skips).
                                  [default: include-referenced-optionsets]
  --prune                         Delete components in the target solution
                                  that the spec no longer declares (schema-
                                  only kinds). Requires a target solution and
                                  a confirmation; preview with --dry-run
                                  first.
  --allow-data-loss               With --prune, also delete data-bearing
                                  extras (entities, attributes) — this
                                  destroys their row data.
  -o, --plan-out FILE             Serialize the --dry-run drift report to this
                                  path as a plan artifact (JSON). Valid only
                                  with the global --dry-run flag. The plan is
                                  always written, including when the dry-run
                                  exits 1.
  --yes                           Skip interactive confirmation.
  --json                          Emit machine-readable JSON output.  [global;
                                  also valid before the command]
  --fields KEY[,KEY...]           Project the data payload down to these
                                  comma-separated top-level keys.  [global;
                                  also valid before the command]
  --jq PROGRAM                    Run a jq program over the curated data
                                  payload; the result replaces data. Implies
                                  --json.  [global; also valid before the
                                  command]
  --profile TEXT                  Connection profile name.  [global; also
                                  valid before the command]
  --dry-run                       Preview writes without issuing them; reads
                                  run normally.  [global; also valid before
                                  the command]
  -h, --help                      Show this message and exit.

crm async

List, inspect, and cancel asynchronous operations.

Usage:

crm async [OPTIONS] COMMAND [ARGS]...

Options:

  -h, --help  Show this message and exit.

crm async cancel

Cancel a pending or suspended asyncoperation.

Usage:

crm async cancel [OPTIONS] ASYNC_OPERATION_ID

Options:

  --yes                  Skip interactive confirmation.
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm async get

Get one asyncoperation row.

Usage:

crm async get [OPTIONS] ASYNC_OPERATION_ID

Options:

  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm async list

List asyncoperation rows.

Usage:

crm async list [OPTIONS]

Options:

  --state TEXT           ready | suspended | locked | completed | <int>
  --message TEXT         Filter by messagename (e.g. ImportSolution).
  --owner TEXT           Filter by systemuser GUID.
  --top INTEGER          Page size per call (default 50).
  --order-by TEXT        OData $orderby expression (default: 'createdon
                         desc').
  --filter TEXT          Raw OData $filter expression to AND-join.
  --all                  Follow @odata.nextLink until exhausted (caps at
                         --max-pages).
  --max-pages INTEGER    Safety cap on pagination depth when --all is set
                         (default 20).
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm audit

Retrieve server-side audit change history (Web API audit functions).

Usage:

crm audit [OPTIONS] COMMAND [ARGS]...

Options:

  -h, --help  Show this message and exit.

crm audit detail

Retrieve the decoded AuditDetail for one audit row (RetrieveAuditDetails).

AUDIT_ID is the auditid GUID of a row in the audit table. The returned AuditDetail's concrete type is surfaced as AuditDetailType.

Usage:

crm audit detail [OPTIONS] AUDIT_ID

Options:

  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm audit history

Retrieve a record's audited data changes (RetrieveRecordChangeHistory).

ENTITY_SET is the target entity set (e.g. 'accounts'); RECORD_ID its GUID. Returns an AuditDetailCollection whose MoreRecords/PagingCookie/TotalRecordCount drive paging — pass the returned PagingCookie via --paging-cookie for the next page.

Usage:

crm audit history [OPTIONS] ENTITY_SET RECORD_ID

Options:

  --page INTEGER         1-based page number to retrieve.  [default: 1]
  --count INTEGER        Page size — audit rows to return per page.  [default:
                         50]
  --paging-cookie TEXT   PagingCookie from a prior page's
                         AuditDetailCollection, to fetch the next page.
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm batch

Execute a $batch from a JSON file.

Usage:

crm batch [OPTIONS] FILE_PATH

Options:

  --no-transaction       Send each op as a top-level operation; no changeset
                         wrapping.
  --continue-on-error    Send Prefer: odata.continue-on-error (requires --no-
                         transaction).
  -o, --output FILE      Write BatchResult[] JSON to this path.
  --timeout INTEGER      Override request timeout (seconds) for the batch
                         call.
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm chart

Author system and user charts (savedqueryvisualization / userqueryvisualization) headlessly, without the chart designer.

Usage:

crm chart [OPTIONS] COMMAND [ARGS]...

Options:

  -h, --help  Show this message and exit.

crm chart add-series

Add an aggregate series to a chart (fetch attribute + measure + presentation series).

Usage:

crm chart add-series [OPTIONS] CHART_ID

Options:

  --column TEXT                   Logical name of the column to aggregate.
                                  [required]
  --aggregate [count|countcolumn|sum|avg|min|max]
                                  Aggregate function applied to --column.
                                  [required]
  --alias TEXT                    Unique alias for the new series.  [required]
  --user-owned                    Edit a user chart (userqueryvisualization)
                                  instead of a system chart. User charts are
                                  never published.
  --solution TEXT                 Target unmanaged solution uniquename
                                  (MSCRM.SolutionUniqueName). Required for
                                  customization writes; pass --solution
                                  Default for a deliberate Default-Solution-
                                  only write.
  --publish / --no-publish        Run PublishAllXml after the change. Default:
                                  stage (no publish); run `solution publish-
                                  all` when your set is done.
  --json                          Emit machine-readable JSON output.  [global;
                                  also valid before the command]
  --fields KEY[,KEY...]           Project the data payload down to these
                                  comma-separated top-level keys.  [global;
                                  also valid before the command]
  --jq PROGRAM                    Run a jq program over the curated data
                                  payload; the result replaces data. Implies
                                  --json.  [global; also valid before the
                                  command]
  --profile TEXT                  Connection profile name.  [global; also
                                  valid before the command]
  --dry-run                       Preview writes without issuing them; reads
                                  run normally.  [global; also valid before
                                  the command]
  -h, --help                      Show this message and exit.

crm chart create

Create a chart on ENTITY.

Modes (mutually exclusive): --data-description FILE + --presentation-description FILE XML-based chart authored from files in source control. --web-resource NAME Script-based visualization backed by a web resource.

Usage:

crm chart create [OPTIONS] ENTITY

Options:

  --name TEXT                     Chart display name.  [required]
  --data-description FILE         Path to the datadescription XML file (use
                                  with --presentation-description; not with
                                  --web-resource).
  --presentation-description FILE
                                  Path to the presentationdescription XML file
                                  (use with --data-description; not with
                                  --web-resource).
  --web-resource TEXT             Web resource name or GUID for a script-based
                                  visualization (not with --data-description /
                                  --presentation-description).
  --user-owned                    Create a user chart (userqueryvisualization)
                                  instead of a system chart.
  --description TEXT              Chart description.
  --solution TEXT                 Target unmanaged solution uniquename
                                  (MSCRM.SolutionUniqueName). Required for
                                  customization writes; pass --solution
                                  Default for a deliberate Default-Solution-
                                  only write.
  --publish / --no-publish        Run PublishAllXml after the change. Default:
                                  stage (no publish); run `solution publish-
                                  all` when your set is done.
  --json                          Emit machine-readable JSON output.  [global;
                                  also valid before the command]
  --fields KEY[,KEY...]           Project the data payload down to these
                                  comma-separated top-level keys.  [global;
                                  also valid before the command]
  --jq PROGRAM                    Run a jq program over the curated data
                                  payload; the result replaces data. Implies
                                  --json.  [global; also valid before the
                                  command]
  --profile TEXT                  Connection profile name.  [global; also
                                  valid before the command]
  --dry-run                       Preview writes without issuing them; reads
                                  run normally.  [global; also valid before
                                  the command]
  -h, --help                      Show this message and exit.

crm chart delete

Delete a chart by CHART_ID.

Usage:

crm chart delete [OPTIONS] CHART_ID

Options:

  --user-owned           Delete a user chart instead of a system chart.
  --yes                  Skip interactive confirmation.
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm chart get

Get a single chart by CHART_ID (its XML included for --json export).

Usage:

crm chart get [OPTIONS] CHART_ID

Options:

  --user-owned           Look up a user chart instead of a system chart.
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm chart list

List charts for ENTITY (system charts by default; --user-owned for user charts).

Usage:

crm chart list [OPTIONS] ENTITY

Options:

  --user-owned           List user charts instead of system charts.
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm chart remove-series

Remove an aggregate series from a chart by its alias (refuses the last series).

Usage:

crm chart remove-series [OPTIONS] CHART_ID

Options:

  --alias TEXT              Alias of the series to remove.  [required]
  --user-owned              Edit a user chart (userqueryvisualization) instead
                            of a system chart. User charts are never
                            published.
  --solution TEXT           Target unmanaged solution uniquename
                            (MSCRM.SolutionUniqueName). Required for
                            customization writes; pass --solution Default for
                            a deliberate Default-Solution-only write.
  --publish / --no-publish  Run PublishAllXml after the change. Default: stage
                            (no publish); run `solution publish-all` when your
                            set is done.
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm chart set-fetch

Replace the inner of a chart's datadescription (keeps its categories).

Usage:

crm chart set-fetch [OPTIONS] CHART_ID

Options:

  --fetch FILE              Path to a file with the replacement <fetch>
                            element.  [required]
  --user-owned              Edit a user chart (userqueryvisualization) instead
                            of a system chart. User charts are never
                            published.
  --solution TEXT           Target unmanaged solution uniquename
                            (MSCRM.SolutionUniqueName). Required for
                            customization writes; pass --solution Default for
                            a deliberate Default-Solution-only write.
  --publish / --no-publish  Run PublishAllXml after the change. Default: stage
                            (no publish); run `solution publish-all` when your
                            set is done.
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm chart set-groupby

Set a chart's grouping (category) column, optionally with a date grouping.

Usage:

crm chart set-groupby [OPTIONS] CHART_ID

Options:

  --column TEXT                   Logical name of the grouping (category)
                                  column.  [required]
  --dategrouping [day|week|month|quarter|year|fiscal-period|fiscal-year]
                                  Date grouping interval (only for date
                                  columns).
  --user-owned                    Edit a user chart (userqueryvisualization)
                                  instead of a system chart. User charts are
                                  never published.
  --solution TEXT                 Target unmanaged solution uniquename
                                  (MSCRM.SolutionUniqueName). Required for
                                  customization writes; pass --solution
                                  Default for a deliberate Default-Solution-
                                  only write.
  --publish / --no-publish        Run PublishAllXml after the change. Default:
                                  stage (no publish); run `solution publish-
                                  all` when your set is done.
  --json                          Emit machine-readable JSON output.  [global;
                                  also valid before the command]
  --fields KEY[,KEY...]           Project the data payload down to these
                                  comma-separated top-level keys.  [global;
                                  also valid before the command]
  --jq PROGRAM                    Run a jq program over the curated data
                                  payload; the result replaces data. Implies
                                  --json.  [global; also valid before the
                                  command]
  --profile TEXT                  Connection profile name.  [global; also
                                  valid before the command]
  --dry-run                       Preview writes without issuing them; reads
                                  run normally.  [global; also valid before
                                  the command]
  -h, --help                      Show this message and exit.

crm chart update

Update a chart's XML, name/description, or series chart type.

On a partial XML update (only one of --data-description / --presentation-description) the other column is read live so the alias-coupling pair is validated together. The chart's host entity (primaryentitytypecode) is never changed.

Usage:

crm chart update [OPTIONS] CHART_ID

Options:

  --data-description FILE         Replace the datadescription XML from this
                                  file.
  --presentation-description FILE
                                  Replace the presentationdescription XML from
                                  this file.
  --name TEXT                     New chart display name.
  --description TEXT              New chart description.
  --type TEXT                     Set the chart type (ChartType) on every
                                  series, e.g. Column, Bar, Line, Pie.
  --user-owned                    Edit a user chart (userqueryvisualization)
                                  instead of a system chart. User charts are
                                  never published.
  --solution TEXT                 Target unmanaged solution uniquename
                                  (MSCRM.SolutionUniqueName). Required for
                                  customization writes; pass --solution
                                  Default for a deliberate Default-Solution-
                                  only write.
  --publish / --no-publish        Run PublishAllXml after the change. Default:
                                  stage (no publish); run `solution publish-
                                  all` when your set is done.
  --json                          Emit machine-readable JSON output.  [global;
                                  also valid before the command]
  --fields KEY[,KEY...]           Project the data payload down to these
                                  comma-separated top-level keys.  [global;
                                  also valid before the command]
  --jq PROGRAM                    Run a jq program over the curated data
                                  payload; the result replaces data. Implies
                                  --json.  [global; also valid before the
                                  command]
  --profile TEXT                  Connection profile name.  [global; also
                                  valid before the command]
  --dry-run                       Preview writes without issuing them; reads
                                  run normally.  [global; also valid before
                                  the command]
  -h, --help                      Show this message and exit.

crm completion

Print or install shell completion for bash, zsh, fish, or PowerShell.

Usage:

crm completion [OPTIONS] COMMAND [ARGS]...

Options:

  -h, --help  Show this message and exit.

crm completion install

Cache the completion script under CRM_HOME and print the rc line to source it.

Idempotent: re-running rewrites the same script + marker. Never edits a shell rc file — it only prints the one source <path> line for you to add.

Usage:

crm completion install [OPTIONS]

Options:

  --shell [zsh|bash|fish|powershell]
                                  Target shell. Defaults to autodetecting
                                  $SHELL.
  --path FILE                     Where to write the script. Default:
                                  ${CRM_HOME}/completion/crm.<shell>.
  --json                          Emit machine-readable JSON output.  [global;
                                  also valid before the command]
  --fields KEY[,KEY...]           Project the data payload down to these
                                  comma-separated top-level keys.  [global;
                                  also valid before the command]
  --jq PROGRAM                    Run a jq program over the curated data
                                  payload; the result replaces data. Implies
                                  --json.  [global; also valid before the
                                  command]
  --profile TEXT                  Connection profile name.  [global; also
                                  valid before the command]
  --dry-run                       Preview writes without issuing them; reads
                                  run normally.  [global; also valid before
                                  the command]
  -h, --help                      Show this message and exit.

crm completion show

Print the completion source script to stdout (does not write anything).

Usage:

crm completion show [OPTIONS]

Options:

  --shell [zsh|bash|fish|powershell]
                                  Target shell. Defaults to autodetecting
                                  $SHELL.
  --json                          Emit machine-readable JSON output.  [global;
                                  also valid before the command]
  --fields KEY[,KEY...]           Project the data payload down to these
                                  comma-separated top-level keys.  [global;
                                  also valid before the command]
  --jq PROGRAM                    Run a jq program over the curated data
                                  payload; the result replaces data. Implies
                                  --json.  [global; also valid before the
                                  command]
  --profile TEXT                  Connection profile name.  [global; also
                                  valid before the command]
  --dry-run                       Preview writes without issuing them; reads
                                  run normally.  [global; also valid before
                                  the command]
  -h, --help                      Show this message and exit.

crm connection

Diagnose the active connection (WhoAmI, reachability, doctor).

Profiles and stored secrets are managed under crm profile.

Usage:

crm connection [OPTIONS] COMMAND [ARGS]...

Options:

  -h, --help  Show this message and exit.

crm connection doctor

Diagnose the connection: DNS/TCP, TLS, api_version, auth, rate-limit.

Usage:

crm connection doctor [OPTIONS]

Options:

  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm connection status

Show the active session + profile (no network call).

Usage:

crm connection status [OPTIONS]

Options:

  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm connection test

Reachability check: WhoAmI + report API base.

Usage:

crm connection test [OPTIONS]

Options:

  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm connection whoami

Issue WhoAmI() against the server, with the serving profile/org/URL.

Usage:

crm connection whoami [OPTIONS]

Options:

  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm connectionrole

Define record-to-record connection roles (create / scope / match).

Usage:

crm connectionrole [OPTIONS] COMMAND [ARGS]...

Options:

  -h, --help  Show this message and exit.

crm connectionrole create

Create a connection role named NAME.

Usage:

crm connectionrole create [OPTIONS]

Options:

  --name TEXT                     Connection role name.  [required]
  --category [business|family|other|sales|sales-team|service|social|stakeholder]
                                  Connection role category.
  --description TEXT              Role description.
  --solution TEXT                 Target unmanaged solution uniquename
                                  (MSCRM.SolutionUniqueName). Required for
                                  customization writes; pass --solution
                                  Default for a deliberate Default-Solution-
                                  only write.
  --json                          Emit machine-readable JSON output.  [global;
                                  also valid before the command]
  --fields KEY[,KEY...]           Project the data payload down to these
                                  comma-separated top-level keys.  [global;
                                  also valid before the command]
  --jq PROGRAM                    Run a jq program over the curated data
                                  payload; the result replaces data. Implies
                                  --json.  [global; also valid before the
                                  command]
  --profile TEXT                  Connection profile name.  [global; also
                                  valid before the command]
  --dry-run                       Preview writes without issuing them; reads
                                  run normally.  [global; also valid before
                                  the command]
  -h, --help                      Show this message and exit.

crm connectionrole match

Pair ROLE_A and ROLE_B (each a name or id) as reciprocal roles.

Usage:

crm connectionrole match [OPTIONS] ROLE_A ROLE_B

Options:

  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm connectionrole scope

Restrict ROLE (name or id) to records of ENTITY.

Call repeatedly to scope a role to several entity types.

Usage:

crm connectionrole scope [OPTIONS] ROLE

Options:

  --entity TEXT          Entity logical name the role applies to.  [required]
  --solution TEXT        Target unmanaged solution uniquename
                         (MSCRM.SolutionUniqueName). Required for
                         customization writes; pass --solution Default for a
                         deliberate Default-Solution-only write.
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm dashboard

Author organization-owned system dashboards (systemform type=0) from FormXml headlessly, without the dashboard designer.

Usage:

crm dashboard [OPTIONS] COMMAND [ARGS]...

Options:

  -h, --help  Show this message and exit.

crm dashboard add-chart

Add a chart tile (ChartGrid) to dashboard DASHBOARD_ID's FormXml.

Usage:

crm dashboard add-chart [OPTIONS] DASHBOARD_ID

Options:

  --view TEXT               savedquery id (GUID) whose data the grid shows.
                            [required]
  --chart TEXT              savedqueryvisualization id (GUID) to render; its
                            primary entity must match the view's.  [required]
  --force                   Add beyond the default six-component cap.
  --colspan INTEGER RANGE   Cell colspan.  [default: 1; x>=1]
  --rowspan INTEGER RANGE   Cell rowspan; the section is padded to match it.
                            [default: 1; x>=1]
  --section TEXT            Add to an existing section (name or id); default:
                            a new section per tile (one component per
                            section).
  --tab TEXT                Target tab (name or id; default: first tab).
  --solution TEXT           Target unmanaged solution uniquename
                            (MSCRM.SolutionUniqueName). Required for
                            customization writes; pass --solution Default for
                            a deliberate Default-Solution-only write.
  --publish / --no-publish  Run PublishAllXml after the change. Default: stage
                            (no publish); run `solution publish-all` when your
                            set is done.
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm dashboard add-iframe

Add an IFRAME tile to dashboard DASHBOARD_ID's FormXml.

Usage:

crm dashboard add-iframe [OPTIONS] DASHBOARD_ID

Options:

  --url TEXT                The IFRAME URL (must be non-empty).  [required]
  --security                Restrict cross-frame scripting (the FormXml
                            Security flag).
  --scrolling               Show IFRAME scrollbars.
  --border                  Draw a border around the IFRAME.
  --pass-parameters         Pass record object-type code and id as URL
                            parameters.
  --force                   Add beyond the default six-component cap.
  --colspan INTEGER RANGE   Cell colspan.  [default: 1; x>=1]
  --rowspan INTEGER RANGE   Cell rowspan; the section is padded to match it.
                            [default: 1; x>=1]
  --section TEXT            Add to an existing section (name or id); default:
                            a new section per tile (one component per
                            section).
  --tab TEXT                Target tab (name or id; default: first tab).
  --solution TEXT           Target unmanaged solution uniquename
                            (MSCRM.SolutionUniqueName). Required for
                            customization writes; pass --solution Default for
                            a deliberate Default-Solution-only write.
  --publish / --no-publish  Run PublishAllXml after the change. Default: stage
                            (no publish); run `solution publish-all` when your
                            set is done.
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm dashboard add-view

Add a view-only grid tile (ChartGrid) to dashboard DASHBOARD_ID's FormXml.

Usage:

crm dashboard add-view [OPTIONS] DASHBOARD_ID

Options:

  --view TEXT                     savedquery id (GUID) whose data the grid
                                  shows.  [required]
  --mode [list|all]               Grid only (list) or grid with the chart
                                  toggle (all).  [default: list]
  --records-per-page INTEGER RANGE
                                  Rows shown per page in the grid.  [default:
                                  10; x>=1]
  --force                         Add beyond the default six-component cap.
  --colspan INTEGER RANGE         Cell colspan.  [default: 1; x>=1]
  --rowspan INTEGER RANGE         Cell rowspan; the section is padded to match
                                  it.  [default: 1; x>=1]
  --section TEXT                  Add to an existing section (name or id);
                                  default: a new section per tile (one
                                  component per section).
  --tab TEXT                      Target tab (name or id; default: first tab).
  --solution TEXT                 Target unmanaged solution uniquename
                                  (MSCRM.SolutionUniqueName). Required for
                                  customization writes; pass --solution
                                  Default for a deliberate Default-Solution-
                                  only write.
  --publish / --no-publish        Run PublishAllXml after the change. Default:
                                  stage (no publish); run `solution publish-
                                  all` when your set is done.
  --json                          Emit machine-readable JSON output.  [global;
                                  also valid before the command]
  --fields KEY[,KEY...]           Project the data payload down to these
                                  comma-separated top-level keys.  [global;
                                  also valid before the command]
  --jq PROGRAM                    Run a jq program over the curated data
                                  payload; the result replaces data. Implies
                                  --json.  [global; also valid before the
                                  command]
  --profile TEXT                  Connection profile name.  [global; also
                                  valid before the command]
  --dry-run                       Preview writes without issuing them; reads
                                  run normally.  [global; also valid before
                                  the command]
  -h, --help                      Show this message and exit.

crm dashboard add-webresource

Add a web-resource tile to dashboard DASHBOARD_ID's FormXml.

Usage:

crm dashboard add-webresource [OPTIONS] DASHBOARD_ID

Options:

  --webresource TEXT        Web resource id (GUID) or unique name to embed.
                            [required]
  --force                   Add beyond the default six-component cap.
  --colspan INTEGER RANGE   Cell colspan.  [default: 1; x>=1]
  --rowspan INTEGER RANGE   Cell rowspan; the section is padded to match it.
                            [default: 1; x>=1]
  --section TEXT            Add to an existing section (name or id); default:
                            a new section per tile (one component per
                            section).
  --tab TEXT                Target tab (name or id; default: first tab).
  --solution TEXT           Target unmanaged solution uniquename
                            (MSCRM.SolutionUniqueName). Required for
                            customization writes; pass --solution Default for
                            a deliberate Default-Solution-only write.
  --publish / --no-publish  Run PublishAllXml after the change. Default: stage
                            (no publish); run `solution publish-all` when your
                            set is done.
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm dashboard create

Create an organization-owned system dashboard from a FormXml file.

Usage:

crm dashboard create [OPTIONS]

Options:

  --name TEXT               Dashboard display name.  [required]
  --formxml FILE            Path to the dashboard FormXml file.  [required]
  --description TEXT        Dashboard description.
  --interactive             (Rejected) interactive-experience (type-10)
                            dashboards are not creatable over the Web API —
                            see the error for details.
  --solution TEXT           Target unmanaged solution uniquename
                            (MSCRM.SolutionUniqueName). Required for
                            customization writes; pass --solution Default for
                            a deliberate Default-Solution-only write.
  --publish / --no-publish  Run PublishAllXml after the change. Default: stage
                            (no publish); run `solution publish-all` when your
                            set is done.
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm dashboard delete

Delete a dashboard by DASHBOARD_ID.

Usage:

crm dashboard delete [OPTIONS] DASHBOARD_ID

Options:

  --yes                  Skip interactive confirmation.
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm dashboard get

Get a single dashboard by DASHBOARD_ID (its FormXml included for export).

Usage:

crm dashboard get [OPTIONS] DASHBOARD_ID

Options:

  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm dashboard list

List organization-owned dashboards.

Usage:

crm dashboard list [OPTIONS]

Options:

  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm dashboard remove-component

Remove one component from dashboard DASHBOARD_ID, selected by exactly one of --cell-id / --index / --view / --chart / --url.

Usage:

crm dashboard remove-component [OPTIONS] DASHBOARD_ID

Options:

  --cell-id TEXT            Remove the component cell with this id.
  --index INTEGER           Remove the component at this 0-based position.
  --view TEXT               Remove the component whose ViewId is this
                            savedquery id.
  --chart TEXT              Remove the component whose VisualizationId is this
                            id.
  --url TEXT                Remove the IFRAME/web-resource component with this
                            Url.
  --solution TEXT           Target unmanaged solution uniquename
                            (MSCRM.SolutionUniqueName). Required for
                            customization writes; pass --solution Default for
                            a deliberate Default-Solution-only write.
  --publish / --no-publish  Run PublishAllXml after the change. Default: stage
                            (no publish); run `solution publish-all` when your
                            set is done.
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm data

Bulk CSV/JSON dataset import/export.

Usage:

crm data [OPTIONS] COMMAND [ARGS]...

Options:

  -h, --help  Show this message and exit.

crm data delete

Submit a server-side BulkDelete job for records matching a FetchXML query.

The Web API's BulkDelete action takes a QueryExpression, so the FetchXML is converted server-side before submission (raw OData $filter is not accepted). Returns the job's async-operation id; pass --wait to poll to completion.

Usage:

crm data delete [OPTIONS] ENTITY_SET

Options:

  --fetchxml TEXT           FetchXML <fetch> document selecting the records to
                            delete.
  --fetchxml-file FILENAME  Read the FetchXML from a file instead of
                            --fetchxml.
  --job-name TEXT           Name for the bulk-delete system job (default
                            derived from the entity).
  --wait                    Block until the job finishes, then report
                            succeeded/failed counts.
  --timeout INTEGER         Seconds to wait under --wait (default: the
                            profile's async timeout).
  --yes                     Skip interactive confirmation.
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm data export

Export records from an entity set to a CSV/JSON file.

Pages through the entity set (--page-size per request, capped by --max-records), narrowing columns with --select and rows with an OData --filter, and writes the result to --output. --format is optional — when omitted it is inferred from the output file's suffix (.csv → csv, else json).

Usage:

crm data export [OPTIONS] ENTITY_SET

Options:

  -o, --output FILE      [required]
  --select TEXT
  --filter TEXT          OData $filter.
  --page-size INTEGER
  --max-records INTEGER
  --format [csv|json]
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm data import

Bulk-import records from a JSONL/CSV file via $batch.

Usage:

crm data import [OPTIONS] ENTITY_SET INPUT_FILE

Options:

  --format [jsonl|csv]           Input format; inferred from suffix when
                                 omitted (.csv→csv, else jsonl).
  --mode [create|upsert|delete]  create=POST new records; upsert=PATCH by GUID
                                 (--id-column) or by alternate key (--key);
                                 delete=DELETE by GUID (--id-column) or by
                                 alternate key (--key).
  --id-column TEXT               Column/key holding the record GUID (for
                                 --mode upsert/delete; mutually exclusive with
                                 --key).
  --key ATTR[,ATTR...]           Upsert by an alternate key instead of the
                                 primary GUID: one attribute, or a comma-
                                 separated composite key. Values are read from
                                 each row. Mutually exclusive with --id-
                                 column.
  --chunk-size INTEGER           Records per $batch call (each chunk is one
                                 transactional changeset by default).
  --no-transaction               Send each op as a top-level operation; no
                                 changeset wrapping.
  --continue-on-error            Send Prefer: odata.continue-on-error
                                 (requires --no-transaction).
  --yes                          Skip interactive confirmation.
  --json                         Emit machine-readable JSON output.  [global;
                                 also valid before the command]
  --fields KEY[,KEY...]          Project the data payload down to these comma-
                                 separated top-level keys.  [global; also
                                 valid before the command]
  --jq PROGRAM                   Run a jq program over the curated data
                                 payload; the result replaces data. Implies
                                 --json.  [global; also valid before the
                                 command]
  --profile TEXT                 Connection profile name.  [global; also valid
                                 before the command]
  --dry-run                      Preview writes without issuing them; reads
                                 run normally.  [global; also valid before the
                                 command]
  -h, --help                     Show this message and exit.

crm describe

Emit a machine-readable catalogue of all commands, options, and choices.

With no argument, walks the whole tree. With GROUP, walks only that command's subtree — importing just that one module (a lazy win over the full walk).

Usage:

crm describe [OPTIONS] [GROUP]

Options:

  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm doctor

Diagnose the connection: DNS/TCP, TLS, api_version, auth, rate-limit.

Usage:

crm doctor [OPTIONS]

Options:

  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm dup

Manage duplicate-detection rules (duplicaterule / duplicaterulecondition).

Usage:

crm dup [OPTIONS] COMMAND [ARGS]...

Options:

  -h, --help  Show this message and exit.

crm dup add-condition

Add a match condition to RULE (name or id).

--operator one of: exact, same-first, same-last, same-date, same-datetime, exact-picklist-label, exact-picklist-value. The same-first / same-last operators require --operator-param N (the character count); the others reject it.

Usage:

crm dup add-condition [OPTIONS] RULE

Options:

  --attr TEXT                     Base column logical name to compare.
                                  [required]
  --operator [exact|same-first|same-last|same-date|same-datetime|exact-picklist-label|exact-picklist-value]
                                  Match operator for the condition.
                                  [required]
  --matching-attr TEXT            Matching column logical name (defaults to
                                  --attr).
  --operator-param INTEGER        Character count N for same-first / same-last
                                  operators.
  --ignore-blank-values           Treat blank values as non-duplicates (do not
                                  match on null).
  --solution TEXT                 Target unmanaged solution uniquename
                                  (MSCRM.SolutionUniqueName). Required for
                                  customization writes; pass --solution
                                  Default for a deliberate Default-Solution-
                                  only write.
  --json                          Emit machine-readable JSON output.  [global;
                                  also valid before the command]
  --fields KEY[,KEY...]           Project the data payload down to these
                                  comma-separated top-level keys.  [global;
                                  also valid before the command]
  --jq PROGRAM                    Run a jq program over the curated data
                                  payload; the result replaces data. Implies
                                  --json.  [global; also valid before the
                                  command]
  --profile TEXT                  Connection profile name.  [global; also
                                  valid before the command]
  --dry-run                       Preview writes without issuing them; reads
                                  run normally.  [global; also valid before
                                  the command]
  -h, --help                      Show this message and exit.

crm dup bulk-detect

Sweep ENTITY for duplicates via the async BulkDetectDuplicates job.

Detects duplicates among ENTITY rows according to the published duplicate rules for that table and logs them as duplicaterecord rows. Sweeps the whole table by default, or the records matched by --fetchxml. Returns the job id immediately; pass --wait to poll to completion and list the detected duplicates. Detection only — nothing is merged or deleted.

Usage:

crm dup bulk-detect [OPTIONS] ENTITY

Options:

  --fetchxml TEXT           FetchXML <fetch> narrowing the swept records (its
                            <entity> must be ENTITY). Omit to sweep the whole
                            table.
  --fetchxml-file FILENAME  Read the narrowing FetchXML from a file instead of
                            --fetchxml.
  --job-name TEXT           Name for the detection system job (default derived
                            from ENTITY).
  --wait                    Block until the job finishes, then report the
                            detected duplicates.
  --timeout INTEGER         Seconds to wait under --wait (default: the
                            profile's async timeout).
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm dup check

Test a candidate ENTITY record against the published rules (RetrieveDuplicates).

Supply the candidate record's column values via --data-file or --data. Only published rules on a duplicate-detection-enabled entity match; with no published rule the result is always empty.

Usage:

crm dup check [OPTIONS] ENTITY

Options:

  --data-file TEXT        Path to a JSON file with the candidate record's
                          column values.
  --data TEXT             Inline JSON object of the candidate record's column
                          values.
  --matching-entity TEXT  Matching entity logical name (defaults to ENTITY).
  --top INTEGER           Maximum number of matches to return.  [default: 50]
  --json                  Emit machine-readable JSON output.  [global; also
                          valid before the command]
  --fields KEY[,KEY...]   Project the data payload down to these comma-
                          separated top-level keys.  [global; also valid
                          before the command]
  --jq PROGRAM            Run a jq program over the curated data payload; the
                          result replaces data. Implies --json.  [global; also
                          valid before the command]
  --profile TEXT          Connection profile name.  [global; also valid before
                          the command]
  --dry-run               Preview writes without issuing them; reads run
                          normally.  [global; also valid before the command]
  -h, --help              Show this message and exit.

crm dup create

Create an (unpublished) duplicate-detection rule on ENTITY.

The rule is created unpublished — add conditions with dup add-condition, then activate it with dup publish.

Usage:

crm dup create [OPTIONS] ENTITY

Options:

  --name TEXT             Rule display name.  [required]
  --matching-entity TEXT  Matching entity logical name (defaults to ENTITY).
  --description TEXT      Rule description.
  --solution TEXT         Target unmanaged solution uniquename
                          (MSCRM.SolutionUniqueName). Required for
                          customization writes; pass --solution Default for a
                          deliberate Default-Solution-only write.
  --json                  Emit machine-readable JSON output.  [global; also
                          valid before the command]
  --fields KEY[,KEY...]   Project the data payload down to these comma-
                          separated top-level keys.  [global; also valid
                          before the command]
  --jq PROGRAM            Run a jq program over the curated data payload; the
                          result replaces data. Implies --json.  [global; also
                          valid before the command]
  --profile TEXT          Connection profile name.  [global; also valid before
                          the command]
  --dry-run               Preview writes without issuing them; reads run
                          normally.  [global; also valid before the command]
  -h, --help              Show this message and exit.

crm dup get

Show one rule (by name or id) and the conditions it carries.

Usage:

crm dup get [OPTIONS] RULE

Options:

  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm dup list

List duplicate-detection rules.

Usage:

crm dup list [OPTIONS]

Options:

  --entity TEXT          Filter to rules whose base entity is this logical
                         name.
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm dup publish

Publish RULE (name or id) — submits the async PublishDuplicateRule job.

The rule must carry at least one condition. Without --wait the command returns once the job is submitted; with --wait it polls to completion.

Usage:

crm dup publish [OPTIONS] RULE

Options:

  --wait                 Block until the async publish job completes.
  --timeout INTEGER      Seconds to wait for the job (with --wait).
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm dup unpublish

Unpublish RULE (name or id) — UnpublishDuplicateRule (synchronous).

Usage:

crm dup unpublish [OPTIONS] RULE

Options:

  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm entity

Record CRUD against entity sets (accounts, contacts, ...).

Usage:

crm entity [OPTIONS] COMMAND [ARGS]...

Options:

  -h, --help  Show this message and exit.

crm entity associate

Associate two records via a collection-valued nav property (1:N from one-side or N:N).

Usage:

crm entity associate [OPTIONS] TARGET_SET TARGET_ID NAV RELATED_SET RELATED_ID

Options:

  --as-user GUID            Impersonate systemuser by GUID via MSCRMCallerID
                            header. Mutually exclusive with --as-user-object-
                            id.
  --as-user-object-id GUID  Impersonate by Entra ID object id (cloud) via
                            CallerObjectId header. Mutually exclusive with
                            --as-user.
  --suppress-dup-detection  Send MSCRM.SuppressDuplicateDetection: true.
  --bypass-plugins          Send MSCRM.BypassCustomPluginExecution: true
                            (requires prvBypassCustomPluginExecution).
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm entity children

Per-relationship related-record counts for the 1:N relationships where is the parent. Counts go through chunked $batch (a few POSTs), not one count query per relationship.

Each row: child entity logical name, referencing attribute, child entity set, and count. Read-only (composes with --dry-run).

Usage:

crm entity children [OPTIONS] ENTITY_SET RECORD_ID

Options:

  --non-empty              Drop relationships whose related-record count is 0.
  --filter-entities REGEX  Only count child entities whose logical name
                           matches REGEX. Applied before querying — fewer
                           requests, not a post-filter.
  --json                   Emit machine-readable JSON output.  [global; also
                           valid before the command]
  --fields KEY[,KEY...]    Project the data payload down to these comma-
                           separated top-level keys.  [global; also valid
                           before the command]
  --jq PROGRAM             Run a jq program over the curated data payload; the
                           result replaces data. Implies --json.  [global;
                           also valid before the command]
  --profile TEXT           Connection profile name.  [global; also valid
                           before the command]
  --dry-run                Preview writes without issuing them; reads run
                           normally.  [global; also valid before the command]
  -h, --help               Show this message and exit.

crm entity clear-lookup

Clear a single-valued lookup via DELETE /$ref.

Usage:

crm entity clear-lookup [OPTIONS] ENTITY_SET RECORD_ID NAV

Options:

  --yes                     Skip interactive confirmation.
  --as-user GUID            Impersonate systemuser by GUID via MSCRMCallerID
                            header. Mutually exclusive with --as-user-object-
                            id.
  --as-user-object-id GUID  Impersonate by Entra ID object id (cloud) via
                            CallerObjectId header. Mutually exclusive with
                            --as-user.
  --suppress-dup-detection  Send MSCRM.SuppressDuplicateDetection: true.
  --bypass-plugins          Send MSCRM.BypassCustomPluginExecution: true
                            (requires prvBypassCustomPluginExecution).
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm entity clone

Clone a single record, optionally its children.

Copies 's values minus the never-copy set (ids, state/status, owner), rebinding each lookup to the same parent. --override and --unset adjust the new record before it is written; --dry-run previews the fully resolved create body without writing (all lookup/field resolution still runs, so the preview is the complete fix list against an untouched org).

--with-children also clones the direct child rows of every custom 1:N relationship where this record is the parent (one level — no recursion). A child create that fails does not roll back or abort: the rest continue and the envelope reports ok=false with meta.created (parent + per-entity child ids) and data.failures (entity, source id, reason). Recover by cloning the failed rows individually — never re-run the whole verb.

Usage:

crm entity clone [OPTIONS] ENTITY_SET RECORD_ID

Options:

  --override FIELD=VALUE       Repeatable. Set/replace a field on the clone.
                               VALUE is parsed as JSON, else taken as a
                               string. The key passes raw, so
                               'ownerid@odata.bind=/systemusers(<id>)' re-adds
                               a never-copy field.
  --unset FIELD                Repeatable. Drop a field (logical name) from
                               the clone; a lookup's logical name drops the
                               bind it produced.
  --no-return                  Don't request the record back; return just the
                               new GUID.
  --with-children              Also clone the direct child rows of every
                               custom 1:N relationship where this record is
                               the parent (one level deep). --override/--unset
                               apply to the parent only.
  --skip-child-entity LOGICAL  Repeatable. With --with-children, exclude this
                               child entity (logical name) from cloning — e.g.
                               an org-specific plugin-derived table.
  --json                       Emit machine-readable JSON output.  [global;
                               also valid before the command]
  --fields KEY[,KEY...]        Project the data payload down to these comma-
                               separated top-level keys.  [global; also valid
                               before the command]
  --jq PROGRAM                 Run a jq program over the curated data payload;
                               the result replaces data. Implies --json.
                               [global; also valid before the command]
  --profile TEXT               Connection profile name.  [global; also valid
                               before the command]
  --dry-run                    Preview writes without issuing them; reads run
                               normally.  [global; also valid before the
                               command]
  -h, --help                   Show this message and exit.

crm entity create

POST a new record.

Usage:

crm entity create [OPTIONS] ENTITY_SET

Options:

  --data TEXT               JSON object as string.
  --data-file FILE          Path to a JSON file with the record body.
  --no-return               Don't request the record back; just GUID.
  --return-record           Ask server to return the created row (the default
                            for create).
  --validate                Pre-write field-name check (1-3 metadata GETs);
                            blocks unknown fields with did-you-mean.
                            Composable with --dry-run.
  --full                    Human mode: show every field including nulls and
                            @odata.* plumbing. Default human output is concise
                            (populated fields only, new id first). No effect
                            in --json mode.
  --as-user GUID            Impersonate systemuser by GUID via MSCRMCallerID
                            header. Mutually exclusive with --as-user-object-
                            id.
  --as-user-object-id GUID  Impersonate by Entra ID object id (cloud) via
                            CallerObjectId header. Mutually exclusive with
                            --as-user.
  --suppress-dup-detection  Send MSCRM.SuppressDuplicateDetection: true.
  --bypass-plugins          Send MSCRM.BypassCustomPluginExecution: true
                            (requires prvBypassCustomPluginExecution).
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm entity delete

DELETE a record.

Usage:

crm entity delete [OPTIONS] ENTITY_SET RECORD_ID

Options:

  --if-match ETAG           Optimistic concurrency etag.
  --yes                     Skip interactive confirmation.
  --as-user GUID            Impersonate systemuser by GUID via MSCRMCallerID
                            header. Mutually exclusive with --as-user-object-
                            id.
  --as-user-object-id GUID  Impersonate by Entra ID object id (cloud) via
                            CallerObjectId header. Mutually exclusive with
                            --as-user.
  --suppress-dup-detection  Send MSCRM.SuppressDuplicateDetection: true.
  --bypass-plugins          Send MSCRM.BypassCustomPluginExecution: true
                            (requires prvBypassCustomPluginExecution).
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm entity disassociate

Disassociate two records. Omit --related-* for single-valued lookups.

Usage:

crm entity disassociate [OPTIONS] TARGET_SET TARGET_ID NAV

Options:

  --related-set TEXT        Required for collection-valued nav properties.
  --related-id TEXT         Required for collection-valued nav properties.
  --yes                     Skip interactive confirmation.
  --as-user GUID            Impersonate systemuser by GUID via MSCRMCallerID
                            header. Mutually exclusive with --as-user-object-
                            id.
  --as-user-object-id GUID  Impersonate by Entra ID object id (cloud) via
                            CallerObjectId header. Mutually exclusive with
                            --as-user.
  --suppress-dup-detection  Send MSCRM.SuppressDuplicateDetection: true.
  --bypass-plugins          Send MSCRM.BypassCustomPluginExecution: true
                            (requires prvBypassCustomPluginExecution).
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm entity get

GET .

Usage:

crm entity get [OPTIONS] ENTITY_SET RECORD_ID

Options:

  --select TEXT                   Repeatable; column names.
  --expand TEXT                   Repeatable; navigation properties.
  --annotations / --no-annotations
                                  Include formatted values.
  --minimal                       JSON mode: drop every key containing '@'
                                  (OData annotations like @odata.etag,
                                  *@FormattedValue, *@lookuplogicalname);
                                  keeps business fields, _*_value lookup
                                  GUIDs, and the primary id.
  --expect ATTR=VALUE             Repeatable; assert str(record[ATTR]) ==
                                  VALUE (an absent key never matches). Any
                                  mismatch exits 1 (the --json envelope
                                  carries meta {attr, expected, actual}; human
                                  mode prints the error line); all match exits
                                  0.
  --full                          Human mode: show every field including nulls
                                  and @odata.* plumbing. Default human output
                                  is concise (populated fields only, id
                                  first). No effect in --json mode.
  --json                          Emit machine-readable JSON output.  [global;
                                  also valid before the command]
  --fields KEY[,KEY...]           Project the data payload down to these
                                  comma-separated top-level keys.  [global;
                                  also valid before the command]
  --jq PROGRAM                    Run a jq program over the curated data
                                  payload; the result replaces data. Implies
                                  --json.  [global; also valid before the
                                  command]
  --profile TEXT                  Connection profile name.  [global; also
                                  valid before the command]
  --dry-run                       Preview writes without issuing them; reads
                                  run normally.  [global; also valid before
                                  the command]
  -h, --help                      Show this message and exit.

crm entity set-lookup

Set a single-valued lookup via @odata.bind PATCH.

Usage:

crm entity set-lookup [OPTIONS] ENTITY_SET RECORD_ID NAV RELATED_SET
                      RELATED_ID

Options:

  --as-user GUID            Impersonate systemuser by GUID via MSCRMCallerID
                            header. Mutually exclusive with --as-user-object-
                            id.
  --as-user-object-id GUID  Impersonate by Entra ID object id (cloud) via
                            CallerObjectId header. Mutually exclusive with
                            --as-user.
  --suppress-dup-detection  Send MSCRM.SuppressDuplicateDetection: true.
  --bypass-plugins          Send MSCRM.BypassCustomPluginExecution: true
                            (requires prvBypassCustomPluginExecution).
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm entity update

PATCH an existing record.

Usage:

crm entity update [OPTIONS] ENTITY_SET RECORD_ID

Options:

  --data TEXT               JSON object as string.
  --data-file FILE          Path to a JSON file with the record body.
  --allow-create            Permit upsert (skip If-Match header).
  --return-record           Ask server to return the updated row (update is
                            silent by default).
  --no-return               Don't request the record back (the default for
                            update).
  --if-match ETAG           Optimistic concurrency etag. Example (POSIX):
                            --if-match 'W/"123"'. Use --if-match "*" to
                            require any current version.
  --validate                Pre-write field-name check (1-3 metadata GETs);
                            blocks unknown fields with did-you-mean.
                            Composable with --dry-run.
  --as-user GUID            Impersonate systemuser by GUID via MSCRMCallerID
                            header. Mutually exclusive with --as-user-object-
                            id.
  --as-user-object-id GUID  Impersonate by Entra ID object id (cloud) via
                            CallerObjectId header. Mutually exclusive with
                            --as-user.
  --suppress-dup-detection  Send MSCRM.SuppressDuplicateDetection: true.
  --bypass-plugins          Send MSCRM.BypassCustomPluginExecution: true
                            (requires prvBypassCustomPluginExecution).
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm entity upsert

PATCH with create-if-missing semantics (by GUID, or --key alternate key).

Usage:

crm entity upsert [OPTIONS] ENTITY_SET [RECORD_ID]

Options:

  --key ATTR[,ATTR...]      Upsert by an alternate key instead of the primary
                            GUID: one attribute, or a comma-separated
                            composite key. Values are read from --data, so
                            omit the RECORD_ID. Mutually exclusive with it.
  --data TEXT               JSON object as string.
  --data-file FILE          Path to a JSON file with the record body.
  --if-none-match           Create-only: send If-None-Match: * so the write
                            succeeds only if the record does not already exist
                            (412 precondition error when it does). The
                            complement to update's --if-match.
  --as-user GUID            Impersonate systemuser by GUID via MSCRMCallerID
                            header. Mutually exclusive with --as-user-object-
                            id.
  --as-user-object-id GUID  Impersonate by Entra ID object id (cloud) via
                            CallerObjectId header. Mutually exclusive with
                            --as-user.
  --suppress-dup-detection  Send MSCRM.SuppressDuplicateDetection: true.
  --bypass-plugins          Send MSCRM.BypassCustomPluginExecution: true
                            (requires prvBypassCustomPluginExecution).
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm examples

Browse a curated gallery of runnable example commands.

With no GROUP on a terminal, pick a group then an example; the chosen command is printed for you to copy and edit. With GROUP, jump straight to that group's examples. Under --json or when not on a terminal, prints the full listing.

Usage:

crm examples [OPTIONS] [GROUP]

Options:

  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm fieldsec

Manage field security profiles and column-level permissions.

Usage:

crm fieldsec [OPTIONS] COMMAND [ARGS]...

Options:

  -h, --help  Show this message and exit.

crm fieldsec add-permission

Grant column permissions on ENTITY.ATTRIBUTE for PROFILE (name or id).

Pass at least one of --read / --create / --update.

Usage:

crm fieldsec add-permission [OPTIONS] PROFILE ENTITY ATTRIBUTE

Options:

  --read                 Grant read access to the column.
  --create               Grant create access to the column.
  --update               Grant update access to the column.
  --solution TEXT        Target unmanaged solution uniquename
                         (MSCRM.SolutionUniqueName). Required for
                         customization writes; pass --solution Default for a
                         deliberate Default-Solution-only write.
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm fieldsec assign

Assign PROFILE (name or id) to a user or a team.

Pass exactly one of --user-id / --team.

Usage:

crm fieldsec assign [OPTIONS] PROFILE

Options:

  --user-id TEXT         System user id to assign.
  --team TEXT            Team id to assign.
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm fieldsec create-profile

Create a field security profile named NAME.

Usage:

crm fieldsec create-profile [OPTIONS] NAME

Options:

  --description TEXT     Profile description.
  --solution TEXT        Target unmanaged solution uniquename
                         (MSCRM.SolutionUniqueName). Required for
                         customization writes; pass --solution Default for a
                         deliberate Default-Solution-only write.
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm fieldsec get

Show one profile (by name or id) and the field permissions it grants.

Usage:

crm fieldsec get [OPTIONS] PROFILE

Options:

  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm fieldsec list

List all field security profiles.

Usage:

crm fieldsec list [OPTIONS]

Options:

  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm form

Read and clone entity forms.

Usage:

crm form [OPTIONS] COMMAND [ARGS]...

Options:

  -h, --help  Show this message and exit.

crm form add-field

Add a field to an entity form (resolves the control type from metadata).

Usage:

crm form add-field [OPTIONS] ENTITY ATTRIBUTE

Options:

  --form TEXT               Target form by name or id (default: the sole main
                            form, or the primary form if the entity has
                            several).
  --tab TEXT                Target tab by name or id (default: the first tab).
  --section TEXT            Target section by name or id (default: the first
                            section).
  --publish / --no-publish  Run PublishAllXml after the change. Default: stage
                            (no publish); run `solution publish-all` when your
                            set is done.
  --solution TEXT           Target unmanaged solution uniquename
                            (MSCRM.SolutionUniqueName). Required for
                            customization writes; pass --solution Default for
                            a deliberate Default-Solution-only write.
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm form add-handler

Wire a JS event handler on an entity form (registering its library).

Usage:

crm form add-handler [OPTIONS] ENTITY

Options:

  --event [onload|onsave|onchange]
                                  Form event to wire the handler to.
                                  [required]
  --library TEXT                  Unique name of the JS web resource holding
                                  the function (it must already exist).
                                  [required]
  --function TEXT                 JS function to call when the event fires
                                  (e.g. App.onLoad).  [required]
  --field TEXT                    Attribute whose onchange fires the handler
                                  (required for --event onchange; invalid
                                  otherwise).
  --param TEXT                    Parameter passed to the function
                                  (repeatable; emitted as a comma-separated
                                  list).
  --pass-context / --no-pass-context
                                  Pass the execution context as the function's
                                  first parameter. Default: pass.
  --enabled / --no-enabled        Whether the handler is enabled. Default:
                                  enabled.
  --form TEXT                     Target form by name or id (default: the sole
                                  main form, or the primary form if the entity
                                  has several).
  --publish / --no-publish        Run PublishAllXml after the change. Default:
                                  stage (no publish); run `solution publish-
                                  all` when your set is done.
  --solution TEXT                 Target unmanaged solution uniquename
                                  (MSCRM.SolutionUniqueName). Required for
                                  customization writes; pass --solution
                                  Default for a deliberate Default-Solution-
                                  only write.
  --json                          Emit machine-readable JSON output.  [global;
                                  also valid before the command]
  --fields KEY[,KEY...]           Project the data payload down to these
                                  comma-separated top-level keys.  [global;
                                  also valid before the command]
  --jq PROGRAM                    Run a jq program over the curated data
                                  payload; the result replaces data. Implies
                                  --json.  [global; also valid before the
                                  command]
  --profile TEXT                  Connection profile name.  [global; also
                                  valid before the command]
  --dry-run                       Preview writes without issuing them; reads
                                  run normally.  [global; also valid before
                                  the command]
  -h, --help                      Show this message and exit.

crm form add-library

Register a JS script library on an entity form (idempotent).

Usage:

crm form add-library [OPTIONS] ENTITY

Options:

  --library TEXT            Unique name of the JS web resource to register (it
                            must already exist — the editor never creates it).
                            [required]
  --form TEXT               Target form by name or id (default: the sole main
                            form, or the primary form if the entity has
                            several).
  --publish / --no-publish  Run PublishAllXml after the change. Default: stage
                            (no publish); run `solution publish-all` when your
                            set is done.
  --solution TEXT           Target unmanaged solution uniquename
                            (MSCRM.SolutionUniqueName). Required for
                            customization writes; pass --solution Default for
                            a deliberate Default-Solution-only write.
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm form add-section

Add a section to a tab of an entity form.

Usage:

crm form add-section [OPTIONS] ENTITY NAME

Options:

  --tab TEXT                Target tab by name or id (default: the first tab).
  --label TEXT              Display label for the new tab/section (default:
                            its name).
  --columns INTEGER         Layout columns (1-4): a new tab's layout columns,
                            or a new section's cell columns.  [default: 1]
  --after TEXT              Place/move after this sibling tab or section (by
                            name or id). Add appends to the end by default;
                            move goes first.
  --form TEXT               Target form by name or id (default: the sole main
                            form, or the primary form if the entity has
                            several).
  --publish / --no-publish  Run PublishAllXml after the change. Default: stage
                            (no publish); run `solution publish-all` when your
                            set is done.
  --solution TEXT           Target unmanaged solution uniquename
                            (MSCRM.SolutionUniqueName). Required for
                            customization writes; pass --solution Default for
                            a deliberate Default-Solution-only write.
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm form add-tab

Add a tab (with a starter section) to an entity form.

Usage:

crm form add-tab [OPTIONS] ENTITY NAME

Options:

  --label TEXT              Display label for the new tab/section (default:
                            its name).
  --columns INTEGER         Layout columns (1-4): a new tab's layout columns,
                            or a new section's cell columns.  [default: 1]
  --after TEXT              Place/move after this sibling tab or section (by
                            name or id). Add appends to the end by default;
                            move goes first.
  --form TEXT               Target form by name or id (default: the sole main
                            form, or the primary form if the entity has
                            several).
  --publish / --no-publish  Run PublishAllXml after the change. Default: stage
                            (no publish); run `solution publish-all` when your
                            set is done.
  --solution TEXT           Target unmanaged solution uniquename
                            (MSCRM.SolutionUniqueName). Required for
                            customization writes; pass --solution Default for
                            a deliberate Default-Solution-only write.
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm form clone

Clone a named form to another entity.

Usage:

crm form clone [OPTIONS] ENTITY FORM_NAME

Options:

  --to TEXT                 Target entity logical name.  [required]
  --publish / --no-publish  Run PublishAllXml after the change. Default: stage
                            (no publish); run `solution publish-all` when your
                            set is done.
  --solution TEXT           Target unmanaged solution uniquename
                            (MSCRM.SolutionUniqueName). Required for
                            customization writes; pass --solution Default for
                            a deliberate Default-Solution-only write.
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm form export

Export a form's formxml.

Usage:

crm form export [OPTIONS] ENTITY FORM_NAME

Options:

  -o, --output FILE      Write the formxml to this file instead of stdout.
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm form list

List an entity's forms (main forms by default).

Usage:

crm form list [OPTIONS] ENTITY

Options:

  --type [dashboard|main|quickview|quickcreate|dialog|card]
                                  Form type to list (repeatable). Default:
                                  main.
  --all                           List every form type (cannot be combined
                                  with --type).
  --json                          Emit machine-readable JSON output.  [global;
                                  also valid before the command]
  --fields KEY[,KEY...]           Project the data payload down to these
                                  comma-separated top-level keys.  [global;
                                  also valid before the command]
  --jq PROGRAM                    Run a jq program over the curated data
                                  payload; the result replaces data. Implies
                                  --json.  [global; also valid before the
                                  command]
  --profile TEXT                  Connection profile name.  [global; also
                                  valid before the command]
  --dry-run                       Preview writes without issuing them; reads
                                  run normally.  [global; also valid before
                                  the command]
  -h, --help                      Show this message and exit.

crm form list-handlers

List the JS event handlers wired on an entity form.

Usage:

crm form list-handlers [OPTIONS] ENTITY

Options:

  --form TEXT            Target form by name or id (default: the sole main
                         form, or the primary form if the entity has several).
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm form move-section

Reorder a section within its tab on an entity form.

Usage:

crm form move-section [OPTIONS] ENTITY SECTION

Options:

  --tab TEXT                Target tab by name or id (default: the first tab).
  --after TEXT              Place/move after this sibling tab or section (by
                            name or id). Add appends to the end by default;
                            move goes first.
  --form TEXT               Target form by name or id (default: the sole main
                            form, or the primary form if the entity has
                            several).
  --publish / --no-publish  Run PublishAllXml after the change. Default: stage
                            (no publish); run `solution publish-all` when your
                            set is done.
  --solution TEXT           Target unmanaged solution uniquename
                            (MSCRM.SolutionUniqueName). Required for
                            customization writes; pass --solution Default for
                            a deliberate Default-Solution-only write.
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm form move-tab

Reorder a tab on an entity form (to the front, or after --after).

Usage:

crm form move-tab [OPTIONS] ENTITY TAB

Options:

  --after TEXT              Place/move after this sibling tab or section (by
                            name or id). Add appends to the end by default;
                            move goes first.
  --form TEXT               Target form by name or id (default: the sole main
                            form, or the primary form if the entity has
                            several).
  --publish / --no-publish  Run PublishAllXml after the change. Default: stage
                            (no publish); run `solution publish-all` when your
                            set is done.
  --solution TEXT           Target unmanaged solution uniquename
                            (MSCRM.SolutionUniqueName). Required for
                            customization writes; pass --solution Default for
                            a deliberate Default-Solution-only write.
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm form remove-field

Remove a field from an entity form.

Usage:

crm form remove-field [OPTIONS] ENTITY ATTRIBUTE

Options:

  --form TEXT               Target form by name or id (default: the sole main
                            form, or the primary form if the entity has
                            several).
  --publish / --no-publish  Run PublishAllXml after the change. Default: stage
                            (no publish); run `solution publish-all` when your
                            set is done.
  --solution TEXT           Target unmanaged solution uniquename
                            (MSCRM.SolutionUniqueName). Required for
                            customization writes; pass --solution Default for
                            a deliberate Default-Solution-only write.
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm form remove-handler

Remove a JS event handler from an entity form.

Usage:

crm form remove-handler [OPTIONS] ENTITY

Options:

  --event [onload|onsave|onchange]
                                  Form event to wire the handler to.
                                  [required]
  --function TEXT                 JS function name of the handler to remove.
                                  [required]
  --field TEXT                    Attribute whose onchange fires the handler
                                  (required for --event onchange; invalid
                                  otherwise).
  --form TEXT                     Target form by name or id (default: the sole
                                  main form, or the primary form if the entity
                                  has several).
  --publish / --no-publish        Run PublishAllXml after the change. Default:
                                  stage (no publish); run `solution publish-
                                  all` when your set is done.
  --solution TEXT                 Target unmanaged solution uniquename
                                  (MSCRM.SolutionUniqueName). Required for
                                  customization writes; pass --solution
                                  Default for a deliberate Default-Solution-
                                  only write.
  --json                          Emit machine-readable JSON output.  [global;
                                  also valid before the command]
  --fields KEY[,KEY...]           Project the data payload down to these
                                  comma-separated top-level keys.  [global;
                                  also valid before the command]
  --jq PROGRAM                    Run a jq program over the curated data
                                  payload; the result replaces data. Implies
                                  --json.  [global; also valid before the
                                  command]
  --profile TEXT                  Connection profile name.  [global; also
                                  valid before the command]
  --dry-run                       Preview writes without issuing them; reads
                                  run normally.  [global; also valid before
                                  the command]
  -h, --help                      Show this message and exit.

crm form remove-section

Remove a section from a tab of an entity form (refuses a section holding bound fields without --force).

Usage:

crm form remove-section [OPTIONS] ENTITY SECTION

Options:

  --tab TEXT                Target tab by name or id (default: the first tab).
  --force                   Remove even if it still holds bound fields
                            (orphaning them; the orphaned fields are surfaced
                            in the output).
  --form TEXT               Target form by name or id (default: the sole main
                            form, or the primary form if the entity has
                            several).
  --publish / --no-publish  Run PublishAllXml after the change. Default: stage
                            (no publish); run `solution publish-all` when your
                            set is done.
  --solution TEXT           Target unmanaged solution uniquename
                            (MSCRM.SolutionUniqueName). Required for
                            customization writes; pass --solution Default for
                            a deliberate Default-Solution-only write.
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm form remove-tab

Remove a tab from an entity form (refuses the only tab, or a tab holding bound fields without --force).

Usage:

crm form remove-tab [OPTIONS] ENTITY TAB

Options:

  --force                   Remove even if it still holds bound fields
                            (orphaning them; the orphaned fields are surfaced
                            in the output).
  --form TEXT               Target form by name or id (default: the sole main
                            form, or the primary form if the entity has
                            several).
  --publish / --no-publish  Run PublishAllXml after the change. Default: stage
                            (no publish); run `solution publish-all` when your
                            set is done.
  --solution TEXT           Target unmanaged solution uniquename
                            (MSCRM.SolutionUniqueName). Required for
                            customization writes; pass --solution Default for
                            a deliberate Default-Solution-only write.
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm form rename-section

Set a section's display label on an entity form.

Usage:

crm form rename-section [OPTIONS] ENTITY SECTION

Options:

  --tab TEXT                Target tab by name or id (default: the first tab).
  --label TEXT              New display label for the section.  [required]
  --form TEXT               Target form by name or id (default: the sole main
                            form, or the primary form if the entity has
                            several).
  --publish / --no-publish  Run PublishAllXml after the change. Default: stage
                            (no publish); run `solution publish-all` when your
                            set is done.
  --solution TEXT           Target unmanaged solution uniquename
                            (MSCRM.SolutionUniqueName). Required for
                            customization writes; pass --solution Default for
                            a deliberate Default-Solution-only write.
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm form rename-tab

Set a tab's display label (its logical name is left intact).

Usage:

crm form rename-tab [OPTIONS] ENTITY TAB

Options:

  --label TEXT              New display label for the tab.  [required]
  --form TEXT               Target form by name or id (default: the sole main
                            form, or the primary form if the entity has
                            several).
  --publish / --no-publish  Run PublishAllXml after the change. Default: stage
                            (no publish); run `solution publish-all` when your
                            set is done.
  --solution TEXT           Target unmanaged solution uniquename
                            (MSCRM.SolutionUniqueName). Required for
                            customization writes; pass --solution Default for
                            a deliberate Default-Solution-only write.
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm form set-field

Move an existing field to a different tab/section of an entity form.

Usage:

crm form set-field [OPTIONS] ENTITY ATTRIBUTE

Options:

  --form TEXT               Target form by name or id (default: the sole main
                            form, or the primary form if the entity has
                            several).
  --tab TEXT                Target tab by name or id (default: the first tab).
  --section TEXT            Target section by name or id (default: the first
                            section).
  --publish / --no-publish  Run PublishAllXml after the change. Default: stage
                            (no publish); run `solution publish-all` when your
                            set is done.
  --solution TEXT           Target unmanaged solution uniquename
                            (MSCRM.SolutionUniqueName). Required for
                            customization writes; pass --solution Default for
                            a deliberate Default-Solution-only write.
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm form set-field-props

Toggle presentation properties of an existing field on an entity form.

Usage:

crm form set-field-props [OPTIONS] ENTITY ATTRIBUTE

Options:

  --locked / --unlocked           Lock the field against being moved/removed
                                  on the form (cell locklevel).
  --disabled / --enabled          Make the field read-only (control disabled).
  --show-label / --no-show-label  Show the field's label (cell showlabel).
  --visible / --hidden            Show the field on the form (cell visible).
  --required LEVEL                Required-level is attribute metadata, not a
                                  form property; passing it here routes you to
                                  `crm metadata update-attribute --required`
                                  instead of silently no-op'ing.
  --form TEXT                     Target form by name or id (default: the sole
                                  main form, or the primary form if the entity
                                  has several).
  --publish / --no-publish        Run PublishAllXml after the change. Default:
                                  stage (no publish); run `solution publish-
                                  all` when your set is done.
  --solution TEXT                 Target unmanaged solution uniquename
                                  (MSCRM.SolutionUniqueName). Required for
                                  customization writes; pass --solution
                                  Default for a deliberate Default-Solution-
                                  only write.
  --json                          Emit machine-readable JSON output.  [global;
                                  also valid before the command]
  --fields KEY[,KEY...]           Project the data payload down to these
                                  comma-separated top-level keys.  [global;
                                  also valid before the command]
  --jq PROGRAM                    Run a jq program over the curated data
                                  payload; the result replaces data. Implies
                                  --json.  [global; also valid before the
                                  command]
  --profile TEXT                  Connection profile name.  [global; also
                                  valid before the command]
  --dry-run                       Preview writes without issuing them; reads
                                  run normally.  [global; also valid before
                                  the command]
  -h, --help                      Show this message and exit.

crm metadata

Browse entity / attribute / relationship metadata.

Usage:

crm metadata [OPTIONS] COMMAND [ARGS]...

Options:

  -h, --help  Show this message and exit.

crm metadata add-attribute

Add an attribute (column) to an existing entity.

Usage:

crm metadata add-attribute [OPTIONS] ENTITY

Options:

  --kind [string|memo|integer|bigint|decimal|double|money|boolean|datetime|picklist|multiselect|lookup|customer|image|file]
                                  Attribute kind.  [required]
  --schema-name TEXT              PascalCase with publisher prefix, e.g.
                                  'new_Amount'. Defaults to
                                  <publisher_prefix>_<Display> from the
                                  profile.
  --display TEXT                  UI label.  [required]
  --description TEXT
  --required [None|Recommended|ApplicationRequired]
  --max-length INTEGER            String/memo: max characters (default
                                  100/2000).
  --format TEXT                   String: Text|Email|Url|Phone|TextArea.
                                  Datetime: DateOnly|DateAndTime.
  --auto-number-format TEXT       String: Auto-number format pattern (e.g.
                                  'INV-{SEQNUM:5}').
  --behavior [UserLocal|DateOnly|TimeZoneIndependent]
                                  Datetime: DateTimeBehavior. Omit for the
                                  server default (UserLocal).
  --min FLOAT                     Numeric kinds: minimum value.
  --max FLOAT                     Numeric kinds: maximum value.
  --precision INTEGER             Decimal/double/money: precision (decimals).
  --true-label TEXT               Boolean: label for true.
  --false-label TEXT              Boolean: label for false.
  --default-value TEXT            Boolean: 'true'/'false'. Picklist: int
                                  option value.
  --optionset-name TEXT           Picklist/multiselect: reference an existing
                                  global option set.
  --option TEXT                   Picklist/multiselect: inline option as
                                  'value:label' or ':label' (auto value).
                                  Repeatable.
  --target-entity TEXT            Lookup: referenced entity logical name.
  --relationship-schema TEXT      Lookup: override auto-generated relationship
                                  name.
  --max-size-kb INTEGER           File: max attachment size in KB. Default
                                  32768.
  --type [simple|rollup|calculated]
                                  Column source: simple (default), or
                                  rollup/calculated — the latter two turn the
                                  --kind column into a rollup/calculated field
                                  and require --formula-file.
  --formula-file FILE             Rollup/calculated: path to the formula XAML
                                  file. Sent verbatim — the formula body is
                                  officially editor-authored, so hand-written
                                  XAML is unsupported (not validated here).
  --audit / --no-audit            Enable/disable auditing (IsAuditEnabled).
                                  Requires org-level auditing to be turned on
                                  for audit records to be written; omit to
                                  leave unchanged.
  --solution TEXT                 Target unmanaged solution uniquename
                                  (MSCRM.SolutionUniqueName). Required for
                                  customization writes; pass --solution
                                  Default for a deliberate Default-Solution-
                                  only write.
  --if-exists [error|skip]        If the attribute already exists: error
                                  (default) or skip (no-op success).
  --publish / --no-publish        Run PublishAllXml after the change. Default:
                                  stage (no publish); run `solution publish-
                                  all` when your set is done.
  --json                          Emit machine-readable JSON output.  [global;
                                  also valid before the command]
  --fields KEY[,KEY...]           Project the data payload down to these
                                  comma-separated top-level keys.  [global;
                                  also valid before the command]
  --jq PROGRAM                    Run a jq program over the curated data
                                  payload; the result replaces data. Implies
                                  --json.  [global; also valid before the
                                  command]
  --profile TEXT                  Connection profile name.  [global; also
                                  valid before the command]
  --dry-run                       Preview writes without issuing them; reads
                                  run normally.  [global; also valid before
                                  the command]
  -h, --help                      Show this message and exit.

crm metadata attribute

Show a single attribute definition.

Usage:

crm metadata attribute [OPTIONS] LOGICAL_NAME ATTRIBUTE_NAME

Options:

  --expect ATTR=VALUE    Repeatable; assert str(record[ATTR]) == VALUE (an
                         absent key never matches). Any mismatch exits 1 (the
                         --json envelope carries meta {attr, expected,
                         actual}; human mode prints the error line); all match
                         exits 0.
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm metadata attributes

List attributes for an entity.

Usage:

crm metadata attributes [OPTIONS] LOGICAL_NAME

Options:

  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm metadata cache-clear

Delete the active profile's on-disk metadata cache.

Usage:

crm metadata cache-clear [OPTIONS]

Options:

  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm metadata can-relate

Check whether ENTITY can take part in a relationship (read-only).

Without --valid-partners, answers the yes/no eligibility check for the role. With --valid-partners, lists the legal partner tables. Use this before create-one-to-many / create-many-to-many to avoid a server-side fault.

Usage:

crm metadata can-relate [OPTIONS] ENTITY

Options:

  --as [referenced|referencing|many-to-many]
                                  Role to test: referenced (1 side),
                                  referencing (N side), or many-to-many.
                                  [required]
  --valid-partners                List the tables ENTITY may legally pair with
                                  (GetValid* functions) instead of the yes/no
                                  eligibility check. Note: many-to-many lists
                                  ALL N:N-capable tables org-wide, not
                                  partners specific to ENTITY.
  --json                          Emit machine-readable JSON output.  [global;
                                  also valid before the command]
  --fields KEY[,KEY...]           Project the data payload down to these
                                  comma-separated top-level keys.  [global;
                                  also valid before the command]
  --jq PROGRAM                    Run a jq program over the curated data
                                  payload; the result replaces data. Implies
                                  --json.  [global; also valid before the
                                  command]
  --profile TEXT                  Connection profile name.  [global; also
                                  valid before the command]
  --dry-run                       Preview writes without issuing them; reads
                                  run normally.  [global; also valid before
                                  the command]
  -h, --help                      Show this message and exit.

crm metadata changes

Retrieve new/changed metadata since a version stamp (RetrieveMetadataChanges).

Save the returned server_version_stamp and pass it as --since next time to sync only what changed (plus a deleted_count). Omit --since for a baseline.

Usage:

crm metadata changes [OPTIONS]

Options:

  --since TEXT           Prior ServerVersionStamp; return only metadata
                         changed since it. Omit for a baseline snapshot that
                         returns a fresh stamp to save.
  --entity TEXT          Scope to an entity logical name (repeatable). Omit to
                         query every table — heavy on a baseline call.
  --attributes           Include attribute (column) definitions so column-
                         level changes show.
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm metadata clone-entity

Duplicate a custom entity (skeleton + opt-in forms/views/workflows/charts).

Pure Web API -- no XML. The ribbon is not cloned (no API write path; the result carries a ribbon_note saying so). N:N relationships and the source's parent-side relationships are not cloned.

Usage:

crm metadata clone-entity [OPTIONS] SOURCE NEW_SCHEMA_NAME

Options:

  --display TEXT            Display name for the clone. Default: '<source
                            display> (Clone)'.
  --with-forms              Clone the source's main forms onto the clone.
  --with-views              Clone the source's public views onto the clone.
  --with-workflows          Clone the source's classic workflows / business
                            rules onto the clone.
  --with-charts             Clone the source's public system charts onto the
                            clone.
  --with-all                Enable --with-forms, --with-views, --with-
                            workflows, and --with-charts.
  --solution TEXT           Target unmanaged solution uniquename
                            (MSCRM.SolutionUniqueName). Required for
                            customization writes; pass --solution Default for
                            a deliberate Default-Solution-only write.
  --publish / --no-publish  Run PublishAllXml after the change. Default: stage
                            (no publish); run `solution publish-all` when your
                            set is done.
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm metadata create-entity

Create a new custom entity (table).

Pass --external-name/--external-collection-name/--data-provider to create a VIRTUAL table instead, backed by an external data source. Virtual tables are read-only on v9.1 and require the data-provider/data-source records to exist first.

Usage:

crm metadata create-entity [OPTIONS]

Options:

  --schema-name TEXT              PascalCase with publisher prefix, e.g.
                                  'new_Project'. Defaults to
                                  <publisher_prefix>_<Display> from the
                                  profile.
  --display TEXT                  Singular UI label, e.g. 'Project'.
                                  [required]
  --display-collection TEXT       Plural UI label. Defaults to <display>+'s'.
  --primary-attr TEXT             Schema name of the primary name attribute
                                  (default '<prefix>_Name').
  --primary-label TEXT            UI label for primary attribute. Default
                                  'Name'.
  --primary-max-length INTEGER    Max length for primary name string column.
                                  Default 200.
  --description TEXT
  --ownership [UserOwned|OrganizationOwned]
  --has-activities
  --has-notes
  --is-activity                   Create as an activity entity.
  --audit / --no-audit            Enable/disable auditing (IsAuditEnabled).
                                  Requires org-level auditing to be turned on
                                  for audit records to be written; omit to
                                  leave unchanged.
  --data-provider TEXT            Virtual-table data-provider record GUID.
                                  Setting any --external-* / --data-* option
                                  creates a VIRTUAL table (rows live in an
                                  external store). Virtual tables are READ-
                                  ONLY on v9.1 and require the data-provider
                                  (and optional data-source) records to exist
                                  FIRST — configure those prerequisites before
                                  running this.
  --data-source TEXT              Virtual-table data-source record GUID
                                  (optional).
  --external-name TEXT            External table name a virtual table maps to
                                  (required for virtual).
  --external-collection-name TEXT
                                  External collection/plural name (required
                                  for virtual).
  --solution TEXT                 Target unmanaged solution uniquename
                                  (MSCRM.SolutionUniqueName). Required for
                                  customization writes; pass --solution
                                  Default for a deliberate Default-Solution-
                                  only write.
  --if-exists [error|skip]        If the entity already exists: error
                                  (default) or skip (no-op success).
  --publish / --no-publish        Run PublishAllXml after the change. Default:
                                  stage (no publish); run `solution publish-
                                  all` when your set is done.
  --json                          Emit machine-readable JSON output.  [global;
                                  also valid before the command]
  --fields KEY[,KEY...]           Project the data payload down to these
                                  comma-separated top-level keys.  [global;
                                  also valid before the command]
  --jq PROGRAM                    Run a jq program over the curated data
                                  payload; the result replaces data. Implies
                                  --json.  [global; also valid before the
                                  command]
  --profile TEXT                  Connection profile name.  [global; also
                                  valid before the command]
  --dry-run                       Preview writes without issuing them; reads
                                  run normally.  [global; also valid before
                                  the command]
  -h, --help                      Show this message and exit.

crm metadata create-key

Create an alternate key on an entity.

Usage:

crm metadata create-key [OPTIONS] ENTITY

Options:

  --name TEXT               Alternate key schema name, PascalCase with
                            publisher prefix, e.g. 'new_Code'. Defaults to
                            <prefix>_<display> from the profile.
  --key-attributes TEXT     Comma-separated attribute logical names forming
                            the key, e.g. 'accountnumber' or
                            'firstname,emailaddress1'.  [required]
  --display TEXT            UI label. Defaults to the schema name.
  --solution TEXT           Target unmanaged solution uniquename
                            (MSCRM.SolutionUniqueName). Required for
                            customization writes; pass --solution Default for
                            a deliberate Default-Solution-only write.
  --if-exists [error|skip]  If the key already exists: error (default) or skip
                            (no-op success).
  --publish / --no-publish  Run PublishAllXml after the change. Default: stage
                            (no publish); run `solution publish-all` when your
                            set is done.
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm metadata create-many-to-many

Create an N:N relationship via the dedicated action.

Usage:

crm metadata create-many-to-many [OPTIONS]

Options:

  --schema-name TEXT              [required]
  --entity1 TEXT                  [required]
  --entity2 TEXT                  [required]
  --intersect-entity TEXT         [required]
  --entity1-menu-label TEXT
  --entity1-menu-behavior [UseLabel|UseCollectionName|DoNotDisplay]
  --entity1-menu-order INTEGER
  --entity2-menu-label TEXT
  --entity2-menu-behavior [UseLabel|UseCollectionName|DoNotDisplay]
  --entity2-menu-order INTEGER
  --solution TEXT                 Target unmanaged solution uniquename
                                  (MSCRM.SolutionUniqueName). Required for
                                  customization writes; pass --solution
                                  Default for a deliberate Default-Solution-
                                  only write.
  --if-exists [error|skip]        If the relationship already exists: error
                                  (default) or skip (no-op success).
  --publish / --no-publish        Run PublishAllXml after the change. Default:
                                  stage (no publish); run `solution publish-
                                  all` when your set is done.
  --json                          Emit machine-readable JSON output.  [global;
                                  also valid before the command]
  --fields KEY[,KEY...]           Project the data payload down to these
                                  comma-separated top-level keys.  [global;
                                  also valid before the command]
  --jq PROGRAM                    Run a jq program over the curated data
                                  payload; the result replaces data. Implies
                                  --json.  [global; also valid before the
                                  command]
  --profile TEXT                  Connection profile name.  [global; also
                                  valid before the command]
  --dry-run                       Preview writes without issuing them; reads
                                  run normally.  [global; also valid before
                                  the command]
  -h, --help                      Show this message and exit.

crm metadata create-mapping

Create a field mapping on a 1:N relationship, or --auto generate them.

Usage:

crm metadata create-mapping [OPTIONS] RELATIONSHIP

Options:

  --from TEXT            Source (parent) attribute logical name.
  --to TEXT              Target (child) attribute logical name.
  --auto                 Bulk-generate likely mappings via AutoMapEntity
                         (replaces any existing maps for the pair).
  --solution TEXT        Target unmanaged solution uniquename
                         (MSCRM.SolutionUniqueName). Required for
                         customization writes; pass --solution Default for a
                         deliberate Default-Solution-only write.
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm metadata create-one-to-many

Create a 1:N relationship and its lookup attribute atomically.

Usage:

crm metadata create-one-to-many [OPTIONS]

Options:

  --schema-name TEXT              Relationship schema name with publisher
                                  prefix.  [required]
  --referenced-entity TEXT        "1" side logical name (e.g. account).
                                  [required]
  --referencing-entity TEXT       "N" side logical name (e.g. new_project).
                                  [required]
  --lookup-schema TEXT            Lookup attribute schema name on referencing
                                  entity.  [required]
  --lookup-display TEXT           UI label for the lookup attribute.
                                  [required]
  --lookup-required [None|Recommended|ApplicationRequired]
  --lookup-description TEXT
  --cascade-assign [NoCascade|Cascade|Active|UserOwned|RemoveLink|Restrict]
  --cascade-delete [NoCascade|Cascade|Active|UserOwned|RemoveLink|Restrict]
  --cascade-reparent [NoCascade|Cascade|Active|UserOwned|RemoveLink|Restrict]
  --cascade-share [NoCascade|Cascade|Active|UserOwned|RemoveLink|Restrict]
  --cascade-unshare [NoCascade|Cascade|Active|UserOwned|RemoveLink|Restrict]
  --cascade-merge [NoCascade|Cascade|Active|UserOwned|RemoveLink|Restrict]
  --menu-label TEXT
  --menu-behavior [UseLabel|UseCollectionName|DoNotDisplay]
  --menu-order INTEGER
  --hierarchical                  Mark the 1:N as hierarchical
                                  (IsHierarchical). Use with a self-
                                  referencing relationship (referenced ==
                                  referencing entity) to enable the
                                  parent/child hierarchy and Above/Under
                                  operators.
  --solution TEXT                 Target unmanaged solution uniquename
                                  (MSCRM.SolutionUniqueName). Required for
                                  customization writes; pass --solution
                                  Default for a deliberate Default-Solution-
                                  only write.
  --if-exists [error|skip]        If the relationship already exists: error
                                  (default) or skip (no-op success).
  --publish / --no-publish        Run PublishAllXml after the change. Default:
                                  stage (no publish); run `solution publish-
                                  all` when your set is done.
  --json                          Emit machine-readable JSON output.  [global;
                                  also valid before the command]
  --fields KEY[,KEY...]           Project the data payload down to these
                                  comma-separated top-level keys.  [global;
                                  also valid before the command]
  --jq PROGRAM                    Run a jq program over the curated data
                                  payload; the result replaces data. Implies
                                  --json.  [global; also valid before the
                                  command]
  --profile TEXT                  Connection profile name.  [global; also
                                  valid before the command]
  --dry-run                       Preview writes without issuing them; reads
                                  run normally.  [global; also valid before
                                  the command]
  -h, --help                      Show this message and exit.

crm metadata create-optionset

Create a global option set.

Usage:

crm metadata create-optionset [OPTIONS]

Options:

  --name TEXT               Fully prefixed option set name, e.g.
                            'new_priority'. Defaults to
                            <publisher_prefix>_<display> from the profile.
  --display TEXT            [required]
  --description TEXT
  --option TEXT             Option as 'value:label' or ':label' (auto value).
                            Repeatable.
  --solution TEXT           Target unmanaged solution uniquename
                            (MSCRM.SolutionUniqueName). Required for
                            customization writes; pass --solution Default for
                            a deliberate Default-Solution-only write.
  --if-exists [error|skip]  If the option set already exists: error (default)
                            or skip (no-op success).
  --publish / --no-publish  Run PublishAllXml after the change. Default: stage
                            (no publish); run `solution publish-all` when your
                            set is done.
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm metadata delete-attribute

Delete a custom attribute (column) from an entity.

Usage:

crm metadata delete-attribute [OPTIONS] ENTITY ATTRIBUTE

Options:

  --yes                  Skip interactive confirmation.
  --solution TEXT        Optional. Forwarded as MSCRM.SolutionUniqueName; a
                         hard delete removes the component globally, so this
                         does not scope the delete.
  --check-dependencies   Preview blocking dependencies
                         (RetrieveDependenciesForDelete) in the result; pairs
                         with --dry-run.
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm metadata delete-entity

Permanently delete a custom entity (table) and ALL its rows.

Usage:

crm metadata delete-entity [OPTIONS] LOGICAL_NAME

Options:

  --yes                  Skip interactive confirmation.
  --solution TEXT        Optional. Forwarded as MSCRM.SolutionUniqueName; a
                         hard delete removes the component globally, so this
                         does not scope the delete.
  --check-dependencies   Preview blocking dependencies
                         (RetrieveDependenciesForDelete) in the result; pairs
                         with --dry-run.
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm metadata delete-key

Delete an alternate key from an entity.

Usage:

crm metadata delete-key [OPTIONS] ENTITY KEY

Options:

  --yes                  Skip interactive confirmation.
  --solution TEXT        Optional. Forwarded as MSCRM.SolutionUniqueName; a
                         hard delete removes the component globally, so this
                         does not scope the delete.
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm metadata delete-optionset

Delete a custom global option set.

Usage:

crm metadata delete-optionset [OPTIONS] NAME

Options:

  --yes                  Skip interactive confirmation.
  --solution TEXT        Optional. Forwarded as MSCRM.SolutionUniqueName; a
                         hard delete removes the component globally, so this
                         does not scope the delete.
  --check-dependencies   Preview blocking dependencies
                         (RetrieveDependenciesForDelete) in the result; pairs
                         with --dry-run.
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm metadata delete-relationship

Delete a custom relationship (1:N or N:N) by schema name.

Usage:

crm metadata delete-relationship [OPTIONS] SCHEMA_NAME

Options:

  --yes                  Skip interactive confirmation.
  --solution TEXT        Optional. Forwarded as MSCRM.SolutionUniqueName; a
                         hard delete removes the component globally, so this
                         does not scope the delete.
  --check-dependencies   Preview blocking dependencies
                         (RetrieveDependenciesForDelete) in the result; pairs
                         with --dry-run.
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm metadata dependencies

Show solution-component dependencies for a metadata target.

Read-only. --for delete returns components that block deletion (can_delete + blockers[]); --for dependents returns components that depend on the target; --for required returns the components the target itself depends on.

Usage:

crm metadata dependencies [OPTIONS] TARGET

Options:

  --kind [entity|attribute|optionset|relationship]
                                  Component kind of <target>. attribute uses
                                  dotted 'entity.attribute'.  [default:
                                  entity]
  --for [delete|dependents|required]
                                  delete = blockers preventing delete
                                  (RetrieveDependenciesForDelete); dependents
                                  = components that depend on it
                                  (RetrieveDependentComponents); required =
                                  components it depends on
                                  (RetrieveRequiredComponents).  [default:
                                  delete]
  --json                          Emit machine-readable JSON output.  [global;
                                  also valid before the command]
  --fields KEY[,KEY...]           Project the data payload down to these
                                  comma-separated top-level keys.  [global;
                                  also valid before the command]
  --jq PROGRAM                    Run a jq program over the curated data
                                  payload; the result replaces data. Implies
                                  --json.  [global; also valid before the
                                  command]
  --profile TEXT                  Connection profile name.  [global; also
                                  valid before the command]
  --dry-run                       Preview writes without issuing them; reads
                                  run normally.  [global; also valid before
                                  the command]
  -h, --help                      Show this message and exit.

crm metadata describe

One-shot write-readiness brief for an entity.

Consolidates everything an agent needs to construct a valid create/update payload in one read-only call: the entity set name, primary id/name, and each writable attribute with its required level. Lookups carry bind_key (<Nav>@odata.bind) plus targets[] (logical + set_name); picklist / state / status attributes carry inline {value, label} options, and a picklist bound to a global option set also carries its global_optionset_id GUID. Read-only.

Usage:

crm metadata describe [OPTIONS] LOGICAL_NAME

Options:

  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm metadata entities

List entity definitions.

Usage:

crm metadata entities [OPTIONS]

Options:

  --custom-only
  --managed-only
  --filter TEXT
  --top INTEGER
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm metadata entity

Show full entity definition.

Usage:

crm metadata entity [OPTIONS] LOGICAL_NAME

Options:

  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm metadata export-spec

Export a live entity as a desired-state spec for crm apply -f.

Reads the entity's metadata over the Web API (pure GETs) and emits a spec. Pass --solution to bake in the top-level solution: block that crm apply requires; without it the document is valid but not directly appliable (apply exits 2 until a solution: block is added). Pass --with-forms to project the entity's seedable main form (custom fields and their placement, script libraries, event handlers); a form that cannot round-trip a real apply is reported in the skipped bucket (ADR 0019) — meta.skipped under the JSON envelope, data.skipped in the -o summary. Without -o, the spec is emitted under the standard JSON envelope (pipeable); with -o, the bare YAML spec is written to FILE.

Usage:

crm metadata export-spec [OPTIONS] LOGICAL_NAME

Options:

  --with-views           Include the entity's public views in the spec.
  --with-relationships   Include the entity's custom 1:N relationships in the
                         spec.
  --with-forms           Include the entity's seedable main form (custom
                         fields, libraries, handlers) as a forms: block.
  --solution TEXT        Bake a top-level solution: block (unique_name) into
                         the spec so it applies directly (crm apply requires
                         one). Omit to emit a valid but non-appliable
                         document.
  -o, --output FILE      Write the bare spec as YAML to FILE (appliable with
                         crm apply -f when --solution is given).
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm metadata get-optionset

Retrieve a global option set, including its options.

Usage:

crm metadata get-optionset [OPTIONS] NAME

Options:

  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm metadata keys

List alternate keys defined on an entity.

Usage:

crm metadata keys [OPTIONS] LOGICAL_NAME

Options:

  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm metadata list-actions

List OData actions advertised by the service ($metadata).

Usage:

crm metadata list-actions [OPTIONS]

Options:

  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm metadata list-functions

List OData functions advertised by the service ($metadata).

Usage:

crm metadata list-functions [OPTIONS]

Options:

  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm metadata list-optionsets

List global option set definitions.

Usage:

crm metadata list-optionsets [OPTIONS]

Options:

  --custom-only
  --top INTEGER
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm metadata picklist

Retrieve option set values for a picklist / state / status attribute.

Usage:

crm metadata picklist [OPTIONS] LOGICAL_NAME ATTRIBUTE

Options:

  --no-global            Skip GlobalOptionSet expansion.
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm metadata relationships

Show one-to-many, many-to-one, and many-to-many relationships.

Usage:

crm metadata relationships [OPTIONS] LOGICAL_NAME

Options:

  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm metadata state-relabel

Relabel a statecode state option (UpdateStateValue).

Usage:

crm metadata state-relabel [OPTIONS] ENTITY

Options:

  --value INTEGER                 statecode value to relabel (e.g. 1 =
                                  Inactive).  [required]
  --label TEXT                    New state label.  [required]
  --description TEXT
  --merge-labels / --no-merge-labels
                                  Preserve labels in untouched languages
                                  (MergeLabels).
  --solution TEXT                 Target unmanaged solution uniquename
                                  (MSCRM.SolutionUniqueName). Required for
                                  customization writes; pass --solution
                                  Default for a deliberate Default-Solution-
                                  only write.
  --publish / --no-publish        Run PublishAllXml after the change. Default:
                                  stage (no publish); run `solution publish-
                                  all` when your set is done.
  --json                          Emit machine-readable JSON output.  [global;
                                  also valid before the command]
  --fields KEY[,KEY...]           Project the data payload down to these
                                  comma-separated top-level keys.  [global;
                                  also valid before the command]
  --jq PROGRAM                    Run a jq program over the curated data
                                  payload; the result replaces data. Implies
                                  --json.  [global; also valid before the
                                  command]
  --profile TEXT                  Connection profile name.  [global; also
                                  valid before the command]
  --dry-run                       Preview writes without issuing them; reads
                                  run normally.  [global; also valid before
                                  the command]
  -h, --help                      Show this message and exit.

crm metadata status-add

Add a statuscode option tied to a state (InsertStatusValue).

Usage:

crm metadata status-add [OPTIONS] ENTITY

Options:

  --state INTEGER           statecode value the new status belongs to (e.g. 0
                            = Active).  [required]
  --label TEXT              Status option label.  [required]
  --value INTEGER           Explicit statuscode value. Omit to let the server
                            assign one.
  --description TEXT
  --solution TEXT           Target unmanaged solution uniquename
                            (MSCRM.SolutionUniqueName). Required for
                            customization writes; pass --solution Default for
                            a deliberate Default-Solution-only write.
  --publish / --no-publish  Run PublishAllXml after the change. Default: stage
                            (no publish); run `solution publish-all` when your
                            set is done.
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm metadata update-attribute

Update an attribute (column) definition (retrieve-merge-write).

Option-set option edits are NOT handled here — use update-optionset.

Usage:

crm metadata update-attribute [OPTIONS] ENTITY ATTRIBUTE

Options:

  --display TEXT                  New UI label.
  --description TEXT
  --required [None|Recommended|ApplicationRequired]
  --max-length INTEGER            String/memo: max characters.
  --precision INTEGER             Decimal/double/money: precision (decimals).
  --min FLOAT                     Numeric: minimum value.
  --max FLOAT                     Numeric: maximum value.
  --format TEXT                   String: Text|Email|Url|Phone|TextArea.
                                  Datetime: DateOnly|DateAndTime.
  --behavior [UserLocal|DateOnly|TimeZoneIndependent]
                                  Datetime: change DateTimeBehavior. Only a
                                  UserLocal column may change, once, to
                                  DateOnly or TimeZoneIndependent (both
                                  terminal). DateOnly auto-sets --format
                                  DateOnly. Existing stored values are not
                                  migrated (no Web API backfill).
  --audit / --no-audit            Enable/disable auditing (IsAuditEnabled).
                                  Requires org-level auditing to be turned on
                                  for audit records to be written; omit to
                                  leave unchanged.
  --solution TEXT                 Target unmanaged solution uniquename
                                  (MSCRM.SolutionUniqueName). Required for
                                  customization writes; pass --solution
                                  Default for a deliberate Default-Solution-
                                  only write.
  --publish / --no-publish        Run PublishAllXml after the change. Default:
                                  stage (no publish); run `solution publish-
                                  all` when your set is done.
  --json                          Emit machine-readable JSON output.  [global;
                                  also valid before the command]
  --fields KEY[,KEY...]           Project the data payload down to these
                                  comma-separated top-level keys.  [global;
                                  also valid before the command]
  --jq PROGRAM                    Run a jq program over the curated data
                                  payload; the result replaces data. Implies
                                  --json.  [global; also valid before the
                                  command]
  --profile TEXT                  Connection profile name.  [global; also
                                  valid before the command]
  --dry-run                       Preview writes without issuing them; reads
                                  run normally.  [global; also valid before
                                  the command]
  -h, --help                      Show this message and exit.

crm metadata update-entity

Update an entity (table) definition (retrieve-merge-write).

Usage:

crm metadata update-entity [OPTIONS] LOGICAL_NAME

Options:

  --display TEXT                  New singular UI label.
  --display-collection TEXT       New plural UI label.
  --description TEXT              New entity description.
  --ownership [UserOwned|OrganizationOwned]
                                  Note: Dataverse rejects ownership changes
                                  post-create.
  --has-activities / --no-has-activities
                                  Enable/disable activities.
  --has-notes / --no-has-notes    Enable/disable notes.
  --audit / --no-audit            Enable/disable auditing (IsAuditEnabled).
                                  Requires org-level auditing to be turned on
                                  for audit records to be written; omit to
                                  leave unchanged.
  --solution TEXT                 Target unmanaged solution uniquename
                                  (MSCRM.SolutionUniqueName). Required for
                                  customization writes; pass --solution
                                  Default for a deliberate Default-Solution-
                                  only write.
  --publish / --no-publish        Run PublishAllXml after the change. Default:
                                  stage (no publish); run `solution publish-
                                  all` when your set is done.
  --json                          Emit machine-readable JSON output.  [global;
                                  also valid before the command]
  --fields KEY[,KEY...]           Project the data payload down to these
                                  comma-separated top-level keys.  [global;
                                  also valid before the command]
  --jq PROGRAM                    Run a jq program over the curated data
                                  payload; the result replaces data. Implies
                                  --json.  [global; also valid before the
                                  command]
  --profile TEXT                  Connection profile name.  [global; also
                                  valid before the command]
  --dry-run                       Preview writes without issuing them; reads
                                  run normally.  [global; also valid before
                                  the command]
  -h, --help                      Show this message and exit.

crm metadata update-optionset

Granular update: insert/update/delete/reorder options.

Usage:

crm metadata update-optionset [OPTIONS] NAME

Options:

  --insert-option TEXT      Insert option 'value:label' or ':label'.
                            Repeatable.
  --update-option TEXT      Update an existing option's label, 'value:label'.
                            Repeatable.
  --delete-option INTEGER   Delete option by value. Repeatable.
  --reorder INT-LIST        Comma-separated full ordered list of values, e.g.
                            '1,2,7,4'.
  --solution TEXT           Target unmanaged solution uniquename
                            (MSCRM.SolutionUniqueName). Required for
                            customization writes; pass --solution Default for
                            a deliberate Default-Solution-only write.
  --publish / --no-publish  Run PublishAllXml after the change. Default: stage
                            (no publish); run `solution publish-all` when your
                            set is done.
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm metadata update-relationship

Update a relationship definition (retrieve-merge-write).

Usage:

crm metadata update-relationship [OPTIONS] SCHEMA_NAME

Options:

  --cascade-assign [NoCascade|Cascade|Active|UserOwned|RemoveLink|Restrict]
  --cascade-delete [NoCascade|Cascade|Active|UserOwned|RemoveLink|Restrict]
  --cascade-reparent [NoCascade|Cascade|Active|UserOwned|RemoveLink|Restrict]
  --cascade-share [NoCascade|Cascade|Active|UserOwned|RemoveLink|Restrict]
  --cascade-unshare [NoCascade|Cascade|Active|UserOwned|RemoveLink|Restrict]
  --cascade-merge [NoCascade|Cascade|Active|UserOwned|RemoveLink|Restrict]
  --menu-behavior [UseLabel|UseCollectionName|DoNotDisplay]
  --menu-label TEXT
  --menu-order INTEGER
  --hierarchical / --no-hierarchical
                                  Set IsHierarchical on a 1:N relationship
                                  (rejected for N:N).
  --solution TEXT                 Target unmanaged solution uniquename
                                  (MSCRM.SolutionUniqueName). Required for
                                  customization writes; pass --solution
                                  Default for a deliberate Default-Solution-
                                  only write.
  --publish / --no-publish        Run PublishAllXml after the change. Default:
                                  stage (no publish); run `solution publish-
                                  all` when your set is done.
  --json                          Emit machine-readable JSON output.  [global;
                                  also valid before the command]
  --fields KEY[,KEY...]           Project the data payload down to these
                                  comma-separated top-level keys.  [global;
                                  also valid before the command]
  --jq PROGRAM                    Run a jq program over the curated data
                                  payload; the result replaces data. Implies
                                  --json.  [global; also valid before the
                                  command]
  --profile TEXT                  Connection profile name.  [global; also
                                  valid before the command]
  --dry-run                       Preview writes without issuing them; reads
                                  run normally.  [global; also valid before
                                  the command]
  -h, --help                      Show this message and exit.

crm org

Org-level orientation (inventory, recon).

Usage:

crm org [OPTIONS] COMMAND [ARGS]...

Options:

  -h, --help  Show this message and exit.

crm org brief

One-call read-only org inventory: counts and key names, never full rows.

Consolidates what six fat list verbs (solution list, metadata entities, webresource list, plugin list, workflow list, app list) would return into one summarized brief, so an agent can orient without spending its context budget. Sections: identity, solutions, publishers, schema, apps, automation, components. Read-only — safe to run first.

Usage:

crm org brief [OPTIONS]

Options:

  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm plugin

Register and manage plug-in assemblies, processing steps, and step images.

Usage:

crm plugin [OPTIONS] COMMAND [ARGS]...

Options:

  -h, --help  Show this message and exit.

crm plugin list-types

List registered plug-in types (optionally for one assembly).

Usage:

crm plugin list-types [OPTIONS]

Options:

  --assembly TEXT        Filter to plug-in types of this assembly (by name).
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm plugin register-assembly

Register a plug-in assembly from a .dll file (uploads its bytes).

Usage:

crm plugin register-assembly [OPTIONS] PATH

Options:

  --name TEXT                     Assembly name; defaults to the file name
                                  stem.
  --version TEXT                  Assembly version; defaults to 1.0.0.0.
  --culture TEXT                  Culture code; defaults to 'neutral'.
  --public-key-token TEXT         Public key token; defaults to 'null'
                                  (unsigned).
  --isolation-mode [sandbox|none]
                                  Isolation mode (sandbox=2, none=1). Default:
                                  sandbox.
  --description TEXT              Assembly description.
  --solution TEXT                 Target unmanaged solution uniquename
                                  (MSCRM.SolutionUniqueName). Required for
                                  customization writes; pass --solution
                                  Default for a deliberate Default-Solution-
                                  only write.
  --update                        PATCH the content of an existing assembly
                                  (resolved by name).
  --json                          Emit machine-readable JSON output.  [global;
                                  also valid before the command]
  --fields KEY[,KEY...]           Project the data payload down to these
                                  comma-separated top-level keys.  [global;
                                  also valid before the command]
  --jq PROGRAM                    Run a jq program over the curated data
                                  payload; the result replaces data. Implies
                                  --json.  [global; also valid before the
                                  command]
  --profile TEXT                  Connection profile name.  [global; also
                                  valid before the command]
  --dry-run                       Preview writes without issuing them; reads
                                  run normally.  [global; also valid before
                                  the command]
  -h, --help                      Show this message and exit.

crm plugin register-image

Register a step entity image (sdkmessageprocessingstepimage).

Usage:

crm plugin register-image [OPTIONS]

Options:

  --step TEXT                   Step GUID or exact step name
                                (sdkmessageprocessingstep).  [required]
  --type [pre|post|both]        Image type (pre=0, post=1, both=2). Post-
                                images require a PostOperation-stage step.
                                [required]
  --alias TEXT                  Entity alias — the key used to access the
                                image from PreEntityImages/PostEntityImages in
                                plug-in code.  [required]
  --attributes TEXT             Comma-separated columns to include in the
                                image. Omit for all columns (hurts
                                performance; pass a list).
  --name TEXT                   Image name; defaults to the alias.
  --message-property-name TEXT  Override the derived request property
                                (required for Send-message steps: FaxId,
                                EmailId or TemplateId).
  --solution TEXT               Target unmanaged solution uniquename
                                (MSCRM.SolutionUniqueName). Required for
                                customization writes; pass --solution Default
                                for a deliberate Default-Solution-only write.
  --json                        Emit machine-readable JSON output.  [global;
                                also valid before the command]
  --fields KEY[,KEY...]         Project the data payload down to these comma-
                                separated top-level keys.  [global; also valid
                                before the command]
  --jq PROGRAM                  Run a jq program over the curated data
                                payload; the result replaces data. Implies
                                --json.  [global; also valid before the
                                command]
  --profile TEXT                Connection profile name.  [global; also valid
                                before the command]
  --dry-run                     Preview writes without issuing them; reads run
                                normally.  [global; also valid before the
                                command]
  -h, --help                    Show this message and exit.

crm plugin register-step

Register a plug-in step (sdkmessageprocessingstep).

The step's event handler is a plug-in type (--plugin-type) or a service endpoint such as a webhook (--service-endpoint) — pass exactly one.

Usage:

crm plugin register-step [OPTIONS]

Options:

  --message TEXT                  SDK message name (e.g. Create, Update,
                                  Delete).  [required]
  --plugin-type TEXT              Plug-in type name (the fully qualified
                                  typename). Provide this or --service-
                                  endpoint (exactly one event handler).
  --service-endpoint TEXT         Bind the step to a service endpoint (e.g. a
                                  webhook from register-webhook) by name
                                  instead of a plug-in type. Provide this or
                                  --plugin-type (exactly one event handler).
  --entity TEXT                   Primary entity logical name
                                  (primaryobjecttypecode). Omit for a message-
                                  level step (all entities).
  --stage [prevalidation|preoperation|postoperation]
                                  Pipeline stage (prevalidation=10,
                                  preoperation=20, postoperation=40). Default:
                                  postoperation.
  --mode [sync|async]             Execution mode (sync=0, async=1). Default:
                                  sync. async requires --stage postoperation.
  --rank INTEGER                  Execution order within the stage. Default:
                                  1.
  --filtering-attributes TEXT     Comma-separated attributes that trigger the
                                  step (Update).
  --name TEXT                     Step name; defaults to a derived label. Pass
                                  explicitly if the derived name would exceed
                                  the platform's 256-char limit.
  --configuration TEXT            Unsecure configuration string.
  --secure-configuration TEXT     Secure configuration string, stored as a
                                  separate related record linked from the
                                  step. Write-only: the platform never returns
                                  it and it is omitted from normal command
                                  output. A --dry-run preview echoes the
                                  request body, so it includes this value —
                                  treat dry-run output as sensitive.
  --async-auto-delete             Auto-delete the system job on success (async
                                  steps only).
  --assembly TEXT                 Scope the plug-in type lookup to this
                                  assembly (by name).
  --solution TEXT                 Target unmanaged solution uniquename
                                  (MSCRM.SolutionUniqueName). Required for
                                  customization writes; pass --solution
                                  Default for a deliberate Default-Solution-
                                  only write.
  --json                          Emit machine-readable JSON output.  [global;
                                  also valid before the command]
  --fields KEY[,KEY...]           Project the data payload down to these
                                  comma-separated top-level keys.  [global;
                                  also valid before the command]
  --jq PROGRAM                    Run a jq program over the curated data
                                  payload; the result replaces data. Implies
                                  --json.  [global; also valid before the
                                  command]
  --profile TEXT                  Connection profile name.  [global; also
                                  valid before the command]
  --dry-run                       Preview writes without issuing them; reads
                                  run normally.  [global; also valid before
                                  the command]
  -h, --help                      Show this message and exit.

crm plugin register-type

Register a plug-in type (plugintypes) under an existing assembly.

A content-only register-assembly does not create plugintype rows, so name each type here before register-step --plugin-type can resolve it.

Usage:

crm plugin register-type [OPTIONS]

Options:

  --assembly TEXT        Existing assembly NAME the plug-in type belongs to.
                         [required]
  --type TEXT            Fully qualified plug-in type name (e.g.
                         Contoso.Plugins.PreCreateAccount).  [required]
  --friendly-name TEXT   Display name (friendlyname); defaults to the type
                         name.
  --name TEXT            Designer label (plugintype name); defaults to the
                         type name. Workflow activities use this as the
                         classic-designer Add-Step label — a null name shows
                         an empty, unusable label.
  --solution TEXT        Target unmanaged solution uniquename
                         (MSCRM.SolutionUniqueName). Required for
                         customization writes; pass --solution Default for a
                         deliberate Default-Solution-only write.
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm plugin register-webhook

Register a webhook service endpoint (serviceendpoint, contract=8).

Usage:

crm plugin register-webhook [OPTIONS]

Options:

  --name TEXT                     Unique webhook name (serviceendpoint.name).
                                  [required]
  --url TEXT                      Endpoint URL the platform POSTs the
                                  execution context to (http on port 80 or
                                  https on port 443).  [required]
  --auth [webhookkey|httpheader|httpquerystring]
                                  Authentication scheme the endpoint expects
                                  (authtype: webhookkey=4, httpheader=5,
                                  httpquerystring=6).  [required]
  --auth-value TEXT               Authentication value the endpoint expects
                                  (the ?code= key for webhookkey, or the
                                  header/query-string key-value pairs). Write-
                                  only; the platform never returns it.
                                  [required]
  --solution TEXT                 Target unmanaged solution uniquename
                                  (MSCRM.SolutionUniqueName). Required for
                                  customization writes; pass --solution
                                  Default for a deliberate Default-Solution-
                                  only write.
  --json                          Emit machine-readable JSON output.  [global;
                                  also valid before the command]
  --fields KEY[,KEY...]           Project the data payload down to these
                                  comma-separated top-level keys.  [global;
                                  also valid before the command]
  --jq PROGRAM                    Run a jq program over the curated data
                                  payload; the result replaces data. Implies
                                  --json.  [global; also valid before the
                                  command]
  --profile TEXT                  Connection profile name.  [global; also
                                  valid before the command]
  --dry-run                       Preview writes without issuing them; reads
                                  run normally.  [global; also valid before
                                  the command]
  -h, --help                      Show this message and exit.

crm plugin set-step-state

Enable or disable a plug-in step (sdkmessageprocessingstep).

Usage:

crm plugin set-step-state [OPTIONS] STEP

Options:

  --enable               Enable the step.  [required]
  --disable              Disable the step.  [required]
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm plugin unregister-assembly

Unregister a plug-in assembly (NAME or GUID), deleting dependent steps first.

Usage:

crm plugin unregister-assembly [OPTIONS] ASSEMBLY

Options:

  --yes                  Skip interactive confirmation.
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm plugin unregister-image

Unregister a step entity image (sdkmessageprocessingstepimage, NAME or GUID).

Usage:

crm plugin unregister-image [OPTIONS] IMAGE

Options:

  --yes                  Skip interactive confirmation.
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm plugin unregister-step

Unregister a plug-in step (sdkmessageprocessingstep, NAME or GUID).

Usage:

crm plugin unregister-step [OPTIONS] STEP

Options:

  --yes                  Skip interactive confirmation.
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm profile

Create, switch, and manage connection profiles.

Usage:

crm profile [OPTIONS] COMMAND [ARGS]...

Options:

  -h, --help  Show this message and exit.

crm profile add

Create a profile, save its secret, test the connection, and activate it.

Run with no flags for an interactive wizard; pass flags for scripting/CI.

Usage:

crm profile add [OPTIONS]

Options:

  --url TEXT                      Server URL, e.g.
                                  https://crm.contoso.local/org or
                                  https://org.crm.dynamics.com
  --name TEXT                     Profile name (default: URL host label).
  --auth-scheme [ntlm|kerberos|negotiate|oauth]
                                  Override the auth scheme inferred from the
                                  URL.
  --username TEXT                 NTLM: username.
  --domain TEXT                   NTLM: AD domain (blank for UPN).
  --tenant-id TEXT                OAuth: Azure AD tenant id.
  --client-id TEXT                OAuth: application (client) id.
  --password TEXT                 NTLM password (or OAuth client secret).
                                  Prompted if omitted on a TTY.
  --client-secret TEXT            OAuth client secret — alias for --password
                                  (mutually exclusive).
  --api-version TEXT              Web API version. Omit to auto-negotiate
                                  (v9.2 → v9.1 on on-prem).
  --no-verify-ssl                 Skip SSL certificate verification.
  --publisher-prefix TEXT         Default schema-name prefix, e.g. 'new'.
  --store-password-plaintext      Force plaintext storage (skip the OS
                                  keyring).
  --read-only                     Mark the profile read-only: the backend
                                  refuses org mutations. Clearing it later
                                  requires an interactive terminal.
  -y, --yes                       Skip the overwrite-confirm prompt.
  --save-on-test-failure          Save the profile even if the live connection
                                  test fails, as long as it is structurally
                                  valid (for CI / no-TTY runs; a malformed URL
                                  still errors). Distinct from --yes.
  --json                          Emit machine-readable JSON output.  [global;
                                  also valid before the command]
  --fields KEY[,KEY...]           Project the data payload down to these
                                  comma-separated top-level keys.  [global;
                                  also valid before the command]
  --jq PROGRAM                    Run a jq program over the curated data
                                  payload; the result replaces data. Implies
                                  --json.  [global; also valid before the
                                  command]
  --profile TEXT                  Connection profile name.  [global; also
                                  valid before the command]
  --dry-run                       Preview writes without issuing them; reads
                                  run normally.  [global; also valid before
                                  the command]
  -h, --help                      Show this message and exit.

crm profile delete-password

Remove a stored secret (OS keyring AND plaintext).

Usage:

crm profile delete-password [OPTIONS]

Options:

  --profile TEXT         Profile whose secret to remove.  [required]
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm profile edit

Change a profile's fields (not its secret — use set-password).

No NAME argument shows a picker.

Usage:

crm profile edit [OPTIONS] [NAME]

Options:

  --url TEXT
  --username TEXT
  --domain TEXT
  --tenant-id TEXT
  --client-id TEXT
  --api-version TEXT
  --publisher-prefix TEXT
  --verify-ssl / --no-verify-ssl  Enable or skip SSL certificate verification
                                  (parity with `profile add`'s --no-verify-
                                  ssl).
  --read-only / --no-read-only    Set or clear the read-only guardrail.
                                  Clearing (--no-read-only) requires an
                                  interactive terminal to confirm.
  --json                          Emit machine-readable JSON output.  [global;
                                  also valid before the command]
  --fields KEY[,KEY...]           Project the data payload down to these
                                  comma-separated top-level keys.  [global;
                                  also valid before the command]
  --jq PROGRAM                    Run a jq program over the curated data
                                  payload; the result replaces data. Implies
                                  --json.  [global; also valid before the
                                  command]
  --profile TEXT                  Connection profile name.  [global; also
                                  valid before the command]
  --dry-run                       Preview writes without issuing them; reads
                                  run normally.  [global; also valid before
                                  the command]
  -h, --help                      Show this message and exit.

crm profile list

List saved profiles; the active one is marked.

Usage:

crm profile list [OPTIONS]

Options:

  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm profile rename

Rename profile OLD to NEW, cascading its secret, active pointer, and cache.

No OLD shows a picker; a missing NEW is prompted for. All validation runs before any mutation; a keyring failure warns (with a profile set-password NEW recovery hint) rather than rolling back.

Usage:

crm profile rename [OPTIONS] [OLD] [NEW]

Options:

  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm profile rm

Delete a profile and its stored secret. No argument shows a picker.

Usage:

crm profile rm [OPTIONS] [NAME]

Options:

  -y, --yes              Skip confirmation.
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm profile set-password

Store/replace the secret for an existing profile.

Usage:

crm profile set-password [OPTIONS]

Options:

  --profile TEXT              Profile to store the secret for.  [required]
  --password TEXT             Secret to store (else prompted on a TTY).
  --client-secret TEXT        OAuth client secret — alias for --password
                              (mutually exclusive).
  --store-password-plaintext  Force plaintext storage.
  --json                      Emit machine-readable JSON output.  [global;
                              also valid before the command]
  --fields KEY[,KEY...]       Project the data payload down to these comma-
                              separated top-level keys.  [global; also valid
                              before the command]
  --jq PROGRAM                Run a jq program over the curated data payload;
                              the result replaces data. Implies --json.
                              [global; also valid before the command]
  --dry-run                   Preview writes without issuing them; reads run
                              normally.  [global; also valid before the
                              command]
  -h, --help                  Show this message and exit.

crm profile use

Switch the active profile. No argument shows an interactive picker.

Usage:

crm profile use [OPTIONS] [NAME]

Options:

  --none                 Clear the active profile.
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm query

Run OData and FetchXML queries.

Usage:

crm query [OPTIONS] COMMAND [ARGS]...

Options:

  -h, --help  Show this message and exit.

crm query count

Count rows for an entity via RetrieveTotalRecordCount (cached server-side).

ENTITY may be the entity-set name ("accounts") or the logical name ("account"), in any case — it is resolved to the logical name that RetrieveTotalRecordCount requires, so it matches the entity-set form used everywhere else in the CLI.

Usage:

crm query count [OPTIONS] ENTITY

Options:

  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm query fetchxml

Run a FetchXML query.

ENTITY_SET is the OData entity-set name (e.g. "accounts"). When omitted, the logical entity name is parsed from the attribute of the FetchXML and resolved to the entity-set name via one metadata GET (EntityDefinitions). Pass ENTITY_SET explicitly to skip that resolution call.

Examples: crm --json query fetchxml --xml '...' crm --json query fetchxml accounts --xml '...'

Usage:

crm query fetchxml [OPTIONS] [ENTITY_SET]

Options:

  --xml TEXT                      Inline FetchXML string.
  --file FILE                     Path to a FetchXML file.
  --annotations / --no-annotations
                                  Include formatted values.
  --minimal                       JSON mode: drop every record key containing
                                  '@' (OData annotations like @odata.etag,
                                  *@FormattedValue, *@lookuplogicalname);
                                  keeps business fields, _*_value lookup
                                  GUIDs, and the primary id.
  --json                          Emit machine-readable JSON output.  [global;
                                  also valid before the command]
  --fields KEY[,KEY...]           Project the data payload down to these
                                  comma-separated top-level keys.  [global;
                                  also valid before the command]
  --jq PROGRAM                    Run a jq program over the curated data
                                  payload; the result replaces data. Implies
                                  --json.  [global; also valid before the
                                  command]
  --profile TEXT                  Connection profile name.  [global; also
                                  valid before the command]
  --dry-run                       Preview writes without issuing them; reads
                                  run normally.  [global; also valid before
                                  the command]
  -h, --help                      Show this message and exit.

crm query odata

OData v4 GET — entity set, bound-function path, or metadata path.

Accepted forms: contacts bare entity set RetrieveAppComponents(AppModuleId=) bound-function path EntityDefinitions(LogicalName='account')/Keys metadata path

OData query options go through --select/--filter/etc., never inline. A '?' or '$' in the positional arg is rejected client-side before the request.

Usage:

crm query odata [OPTIONS] ENTITY_SET|BOUND_FUNC|METADATA_PATH

Options:

  --select TEXT
  --filter TEXT                   OData $filter expression.
  --top INTEGER
  --order-by TEXT                 OData $orderby expression.
  --expand TEXT
  --apply EXPR                    OData $apply aggregation expression, e.g.
                                  'groupby((field),aggregate(measure with sum
                                  as total))'. The result shape is whatever
                                  the aggregation returns.
  --count                         Also request $count.
  --page-size INTEGER
  --all                           Follow @odata.nextLink across all pages and
                                  merge the results into one array (default: a
                                  single server page).
  --max-records INTEGER           Cap the total rows returned, following
                                  @odata.nextLink only as far as needed.
                                  Implies page-following; bounds --all when
                                  both given.
  --annotations / --no-annotations
                                  Include formatted values.
  --track-changes                 Request a change-tracking delta link
                                  (Prefer: odata.track-changes): returns the
                                  current rows plus
                                  meta.delta_token/meta.delta_link to resume
                                  from later. Rejects --filter/--order-
                                  by/--expand/--top/--all.
  --delta-token TEXT              Resume change tracking from a prior
                                  meta.delta_token: returns only rows
                                  created/updated/deleted since (deletes carry
                                  reason="deleted").
  --minimal                       JSON mode: drop every record key containing
                                  '@' (OData annotations like @odata.etag,
                                  *@FormattedValue, *@lookuplogicalname);
                                  keeps business fields, _*_value lookup
                                  GUIDs, and the primary id.
  --json                          Emit machine-readable JSON output.  [global;
                                  also valid before the command]
  --fields KEY[,KEY...]           Project the data payload down to these
                                  comma-separated top-level keys.  [global;
                                  also valid before the command]
  --jq PROGRAM                    Run a jq program over the curated data
                                  payload; the result replaces data. Implies
                                  --json.  [global; also valid before the
                                  command]
  --profile TEXT                  Connection profile name.  [global; also
                                  valid before the command]
  --dry-run                       Preview writes without issuing them; reads
                                  run normally.  [global; also valid before
                                  the command]
  -h, --help                      Show this message and exit.

crm query saved

Execute a system view (savedquery) by GUID. Use --json query odata savedqueries to discover IDs.

Usage:

crm query saved [OPTIONS] ENTITY_SET SAVEDQUERY_ID

Options:

  --annotations / --no-annotations
                                  Include formatted values.
  --page-size INTEGER
  --minimal                       JSON mode: drop every record key containing
                                  '@' (OData annotations like @odata.etag,
                                  *@FormattedValue, *@lookuplogicalname);
                                  keeps business fields, _*_value lookup
                                  GUIDs, and the primary id.
  --json                          Emit machine-readable JSON output.  [global;
                                  also valid before the command]
  --fields KEY[,KEY...]           Project the data payload down to these
                                  comma-separated top-level keys.  [global;
                                  also valid before the command]
  --jq PROGRAM                    Run a jq program over the curated data
                                  payload; the result replaces data. Implies
                                  --json.  [global; also valid before the
                                  command]
  --profile TEXT                  Connection profile name.  [global; also
                                  valid before the command]
  --dry-run                       Preview writes without issuing them; reads
                                  run normally.  [global; also valid before
                                  the command]
  -h, --help                      Show this message and exit.

crm query user

Execute a saved view (userquery) by GUID.

Usage:

crm query user [OPTIONS] ENTITY_SET USERQUERY_ID

Options:

  --annotations / --no-annotations
                                  Include formatted values.
  --page-size INTEGER
  --minimal                       JSON mode: drop every record key containing
                                  '@' (OData annotations like @odata.etag,
                                  *@FormattedValue, *@lookuplogicalname);
                                  keeps business fields, _*_value lookup
                                  GUIDs, and the primary id.
  --json                          Emit machine-readable JSON output.  [global;
                                  also valid before the command]
  --fields KEY[,KEY...]           Project the data payload down to these
                                  comma-separated top-level keys.  [global;
                                  also valid before the command]
  --jq PROGRAM                    Run a jq program over the curated data
                                  payload; the result replaces data. Implies
                                  --json.  [global; also valid before the
                                  command]
  --profile TEXT                  Connection profile name.  [global; also
                                  valid before the command]
  --dry-run                       Preview writes without issuing them; reads
                                  run normally.  [global; also valid before
                                  the command]
  -h, --help                      Show this message and exit.

crm repl

Interactive REPL (default when no subcommand is provided).

Usage:

crm repl [OPTIONS]

Options:

  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm report

Register and manage custom reports (SSRS RDL or link) headlessly.

create --body-file uploads an RDL; create --url registers a link report. create --org makes a report organization-wide (otherwise it is personal). set-category files a report under sales/service/marketing/administrative.

Usage:

crm report [OPTIONS] COMMAND [ARGS]...

Options:

  -h, --help  Show this message and exit.

crm report create

Create a report from an RDL file (--body-file) or a link (--url).

Usage:

crm report create [OPTIONS]

Options:

  --name TEXT            Report display name.  [required]
  --body-file FILE       Path to an SSRS RDL file to upload (Reporting
                         Services report). Mutually exclusive with --url.
  --url TEXT             External report URL (link report). Mutually exclusive
                         with --body-file.
  --filename TEXT        Report file name. Defaults to the --body-file
                         basename.
  --description TEXT     Report description.
  --org                  Make the report available to the organization
                         (ispersonal=false). Default: personal.
  --solution TEXT        Target unmanaged solution uniquename
                         (MSCRM.SolutionUniqueName). Required for
                         customization writes; pass --solution Default for a
                         deliberate Default-Solution-only write.
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm report delete

Delete a report by REPORT_ID.

Usage:

crm report delete [OPTIONS] REPORT_ID

Options:

  --yes                  Skip interactive confirmation.
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm report get

Get a single report by REPORT_ID (its RDL body / link URL included).

Usage:

crm report get [OPTIONS] REPORT_ID

Options:

  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm report list

List all reports (summary columns only — use report get for the body).

Usage:

crm report list [OPTIONS]

Options:

  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm report set-category

File REPORT_ID under a report area (creates a reportcategory record).

Usage:

crm report set-category [OPTIONS] REPORT_ID

Options:

  --category [administrative|marketing|sales|service]
                                  Report area: sales, service, marketing, or
                                  administrative.  [required]
  --solution TEXT                 Target unmanaged solution uniquename
                                  (MSCRM.SolutionUniqueName). Required for
                                  customization writes; pass --solution
                                  Default for a deliberate Default-Solution-
                                  only write.
  --json                          Emit machine-readable JSON output.  [global;
                                  also valid before the command]
  --fields KEY[,KEY...]           Project the data payload down to these
                                  comma-separated top-level keys.  [global;
                                  also valid before the command]
  --jq PROGRAM                    Run a jq program over the curated data
                                  payload; the result replaces data. Implies
                                  --json.  [global; also valid before the
                                  command]
  --profile TEXT                  Connection profile name.  [global; also
                                  valid before the command]
  --dry-run                       Preview writes without issuing them; reads
                                  run normally.  [global; also valid before
                                  the command]
  -h, --help                      Show this message and exit.

crm ribbon

Read and edit entity command-bar (ribbon) buttons.

Usage:

crm ribbon [OPTIONS] COMMAND [ARGS]...

Options:

  -h, --help  Show this message and exit.

crm ribbon add-button

Add a JavaScript command-bar button to an entity (no manual XML editing).

Optionally set the button's icon at creation: --modern-image (SVG web resource, Unified Interface) and/or --image16 / --image32 (raster web resources, classic UI). Each is written as a $webresource: reference (which adds a solution dependency on the icon) and validated for existence + type before the import. With --diff-file the edit is applied offline to a local RibbonDiffXml file (no backend calls); the icon web-resource existence check is skipped and deferred to ribbon apply's import-time validation.

Usage:

crm ribbon add-button [OPTIONS] ENTITY

Options:

  --label TEXT                    Button label text.  [required]
  --location [form|homegrid|subgrid]
                                  Where the button appears.  [required]
  --group TEXT                    Override the target ribbon group id.
  --webresource TEXT              JS web resource name, e.g.
                                  'cwx_/scripts/x.js'.  [required]
  --function TEXT                 JavaScript function name, e.g. 'ns.fn'.
                                  [required]
  --param [PrimaryControl|SelectedControlSelectedItemIds]
                                  CrmParameter passed to the function.
                                  [required]
  --sequence INTEGER              [default: 50]
  --id TEXT                       Override the generated id base
                                  ({entity}.{location}.{label}).
  --modern-image TEXT             Web resource (SVG) for the Unified Interface
                                  ModernImage icon.
  --image16 TEXT                  Web resource (16×16 raster: PNG/JPG/GIF/ICO)
                                  for the classic Image16by16 icon.
  --image32 TEXT                  Web resource (32×32 raster: PNG/JPG/GIF/ICO)
                                  for the classic Image32by32 icon.
  --publish / --no-publish        Run PublishAllXml after the change. Default:
                                  stage (no publish); run `solution publish-
                                  all` when your set is done.
  --solution TEXT                 Target unmanaged solution uniquename
                                  (MSCRM.SolutionUniqueName). Required for
                                  customization writes; pass --solution
                                  Default for a deliberate Default-Solution-
                                  only write.
  --diff-file FILE                Offline: apply this edit to a local
                                  RibbonDiffXml file (from `ribbon export
                                  --solution`), no backend calls. Compose N
                                  edits, then `ribbon apply`. Mutually
                                  exclusive with --solution/--publish.
  --json                          Emit machine-readable JSON output.  [global;
                                  also valid before the command]
  --fields KEY[,KEY...]           Project the data payload down to these
                                  comma-separated top-level keys.  [global;
                                  also valid before the command]
  --jq PROGRAM                    Run a jq program over the curated data
                                  payload; the result replaces data. Implies
                                  --json.  [global; also valid before the
                                  command]
  --profile TEXT                  Connection profile name.  [global; also
                                  valid before the command]
  --dry-run                       Preview writes without issuing them; reads
                                  run normally.  [global; also valid before
                                  the command]
  -h, --help                      Show this message and exit.

crm ribbon add-custom-rule

Add a custom (JavaScript) enable rule to a command and reference it.

Defines an EnableRule whose CustomRule calls the given web-resource function, then references it on the command. The web resource must already exist. The CommandDefinition Id is never touched. With --diff-file the edit is applied offline to a local RibbonDiffXml file (no backend calls); the web-resource existence check is skipped and deferred to ribbon apply's import.

Usage:

crm ribbon add-custom-rule [OPTIONS] ENTITY

Options:

  --command-id TEXT         The CommandDefinition Id to attach the rule to.
                            [required]
  --webresource TEXT        JS web resource holding the rule function, e.g.
                            'cwx_/scripts/x.js'.  [required]
  --function TEXT           JavaScript function returning bool/Promise, e.g.
                            'ns.canRun'.  [required]
  --publish / --no-publish  Run PublishAllXml after the change. Default: stage
                            (no publish); run `solution publish-all` when your
                            set is done.
  --solution TEXT           Target unmanaged solution uniquename
                            (MSCRM.SolutionUniqueName). Required for
                            customization writes; pass --solution Default for
                            a deliberate Default-Solution-only write.
  --diff-file FILE          Offline: apply this edit to a local RibbonDiffXml
                            file (from `ribbon export --solution`), no backend
                            calls. Compose N edits, then `ribbon apply`.
                            Mutually exclusive with --solution/--publish.
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm ribbon apply

Import a local RibbonDiffXml working-copy file, full-replacing ENTITY's ribbon.

The terminal step of the offline flow: ribbon export ENTITY --solution S --output f.xml, compose N --diff-file edits against f.xml, then ribbon apply ENTITY --solution S --from f.xml — one export → import → publish. ENTITY's in the solution is replaced VERBATIM with the file's content (desired-state: an element removed offline does not reappear from live state).

Usage:

crm ribbon apply [OPTIONS] ENTITY

Options:

  --from FILE               The local RibbonDiffXml working-copy file to
                            import (from `ribbon export --solution`, edited
                            with `--diff-file`).  [required]
  --publish / --no-publish  Run PublishAllXml after the import. Default:
                            publish (the working-copy flow's single terminal
                            publish); pass --no-publish to stage the import
                            without publishing.  [default: publish]
  --solution TEXT           Target unmanaged solution uniquename
                            (MSCRM.SolutionUniqueName). Required for
                            customization writes; pass --solution Default for
                            a deliberate Default-Solution-only write.
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm ribbon export

Export a ribbon as readable XML.

Pass ENTITY for one table's composed ribbon, or --application for the app-wide ribbon (the commands not bound to a specific table). With --solution, export ENTITY's editable RibbonDiffXml fragment from that solution — the working-copy the offline --diff-file verbs edit and ribbon apply imports. Read-only.

Usage:

crm ribbon export [OPTIONS] [ENTITY]

Options:

  -a, --application      Export the application-wide ribbon
                         (RetrieveApplicationRibbon) instead of a single
                         entity's. Omit ENTITY when set.
  --solution TEXT        Export ENTITY's editable RibbonDiffXml fragment from
                         this solution (the importable working-copy the
                         `--diff-file` verbs edit and `ribbon apply` imports),
                         instead of the composed read-only ribbon. Requires
                         ENTITY.
  -o, --output FILE      Write the ribbon XML to this file instead of stdout.
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm ribbon hide-button

Hide an out-of-box command-bar button (reversibly by default).

Validates --target-id against the live composed ribbon so a typo errors instead of silently doing nothing. Never touches the button's classid/Command/ TemplateAlias. display-rule overrides the button's command with two always-false platform DisplayRules; hide-action writes a HideCustomAction, which is irreversible without a new solution version and is gated behind --yes.

Usage:

crm ribbon hide-button [OPTIONS] ENTITY

Options:

  --target-id TEXT                The OOB button (control) Id to hide, as it
                                  appears in `crm ribbon export ENTITY`.
                                  [required]
  --method [display-rule|hide-action]
                                  display-rule: reversible (override the
                                  command with two always-false DisplayRules).
                                  hide-action: HideCustomAction, a one-way
                                  trapdoor removable only by a new solution
                                  version.  [default: display-rule]
  --yes                           Skip interactive confirmation.
  --publish / --no-publish        Run PublishAllXml after the change. Default:
                                  stage (no publish); run `solution publish-
                                  all` when your set is done.
  --solution TEXT                 Target unmanaged solution uniquename
                                  (MSCRM.SolutionUniqueName). Required for
                                  customization writes; pass --solution
                                  Default for a deliberate Default-Solution-
                                  only write.
  --json                          Emit machine-readable JSON output.  [global;
                                  also valid before the command]
  --fields KEY[,KEY...]           Project the data payload down to these
                                  comma-separated top-level keys.  [global;
                                  also valid before the command]
  --jq PROGRAM                    Run a jq program over the curated data
                                  payload; the result replaces data. Implies
                                  --json.  [global; also valid before the
                                  command]
  --profile TEXT                  Connection profile name.  [global; also
                                  valid before the command]
  --dry-run                       Preview writes without issuing them; reads
                                  run normally.  [global; also valid before
                                  the command]
  -h, --help                      Show this message and exit.

crm ribbon list

List the custom buttons declared in a solution's RibbonDiffXml.

Usage:

crm ribbon list [OPTIONS] ENTITY

Options:

  --solution TEXT        Target unmanaged solution uniquename
                         (MSCRM.SolutionUniqueName). Required for
                         customization writes; pass --solution Default for a
                         deliberate Default-Solution-only write.
  --json                 Emit machine-readable JSON output.  [global; also
                         valid before the command]
  --fields KEY[,KEY...]  Project the data payload down to these comma-
                         separated top-level keys.  [global; also valid before
                         the command]
  --jq PROGRAM           Run a jq program over the curated data payload; the
                         result replaces data. Implies --json.  [global; also
                         valid before the command]
  --profile TEXT         Connection profile name.  [global; also valid before
                         the command]
  --dry-run              Preview writes without issuing them; reads run
                         normally.  [global; also valid before the command]
  -h, --help             Show this message and exit.

crm ribbon remove

Remove a custom button (CustomAction + its CommandDefinition).

With --diff-file the button is removed from a local RibbonDiffXml file offline (no backend calls); ribbon apply then imports the result.

Usage:

crm ribbon remove [OPTIONS] ENTITY

Options:

  --button-id TEXT          The CustomAction Id to remove (see `crm ribbon
                            list`).  [required]
  --yes                     Skip interactive confirmation.
  --publish / --no-publish  Run PublishAllXml after the change. Default: stage
                            (no publish); run `solution publish-all` when your
                            set is done.
  --solution TEXT           Target unmanaged solution uniquename
                            (MSCRM.SolutionUniqueName). Required for
                            customization writes; pass --solution Default for
                            a deliberate Default-Solution-only write.
  --diff-file FILE          Offline: apply this edit to a local RibbonDiffXml
                            file (from `ribbon export --solution`), no backend
                            calls. Compose N edits, then `ribbon apply`.
                            Mutually exclusive with --solution/--publish.
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm ribbon set-icon

Set a custom command-bar button's icon on an existing button.

Writes only the icon attributes — ModernImage (--modern-image, an SVG web resource for the Unified Interface) and/or Image16by16 / Image32by32 (--image16 / --image32, raster web resources for the classic UI). The button's Command, LabelText, TemplateAlias, Sequence and Id are protected. Pass at least one icon flag. Each reference is validated (exists + slot type) before the solution round-trip, and written as a $webresource: directive so the solution gains a dependency on the icon web resource.

Usage:

crm ribbon set-icon [OPTIONS] ENTITY

Options:

  --button-id TEXT          The custom button's CustomAction Id (see `crm
                            ribbon list`).  [required]
  --modern-image TEXT       Web resource (SVG) for the Unified Interface
                            ModernImage icon.
  --image16 TEXT            Web resource (16×16 raster: PNG/JPG/GIF/ICO) for
                            the classic Image16by16 icon.
  --image32 TEXT            Web resource (32×32 raster: PNG/JPG/GIF/ICO) for
                            the classic Image32by32 icon.
  --publish / --no-publish  Run PublishAllXml after the change. Default: stage
                            (no publish); run `solution publish-all` when your
                            set is done.
  --solution TEXT           Target unmanaged solution uniquename
                            (MSCRM.SolutionUniqueName). Required for
                            customization writes; pass --solution Default for
                            a deliberate Default-Solution-only write.
  --json                    Emit machine-readable JSON output.  [global; also
                            valid before the command]
  --fields KEY[,KEY...]     Project the data payload down to these comma-
                            separated top-level keys.  [global; also valid
                            before the command]
  --jq PROGRAM              Run a jq program over the curated data payload;
                            the result replaces data. Implies --json.
                            [global; also valid before the command]
  --profile TEXT            Connection profile name.  [global; also valid
                            before the command]
  --dry-run                 Preview writes without issuing them; reads run
                            normally.  [global; also valid before the command]
  -h, --help                Show this message and exit.

crm ribbon set-label

Set a custom command-bar button's label and tooltips.

Touches only LabelText / ToolTipTitle / ToolTipDescription — the button's Command, TemplateAlias, Sequence and Id are protected. Pass at least one of --label / --tooltip-title / --tooltip-description. With --lcid the text is localized through a CASE-SENSITIVE $LocLabels:<id> directive (the text lands in a row), so it can be re-run per language; without --lcid the text is set inline. Text is XML-escaped automatically. With --diff-file the edit is applied offline to a local RibbonDiffXml file (no backend calls); --lcid then writes the $LocLabels directive without checking provisioned languages (a bad LCID surfaces at <code>ribbon apply</code>'s import).</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm ribbon set-label [OPTIONS] ENTITY </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --button-id TEXT The custom button's CustomAction Id (see `crm ribbon list`). [required] --label TEXT New button LabelText. --tooltip-title TEXT New button ToolTipTitle. --tooltip-description TEXT New button ToolTipDescription. --lcid INTEGER Localize the text for this language (LCID) via a $LocLabels directive instead of setting it inline. Validated against the org's provisioned languages. --publish / --no-publish Run PublishAllXml after the change. Default: stage (no publish); run `solution publish-all` when your set is done. --solution TEXT Target unmanaged solution uniquename (MSCRM.SolutionUniqueName). Required for customization writes; pass --solution Default for a deliberate Default-Solution-only write. --diff-file FILE Offline: apply this edit to a local RibbonDiffXml file (from `ribbon export --solution`), no backend calls. Compose N edits, then `ribbon apply`. Mutually exclusive with --solution/--publish. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-ribbon-set-rules">crm ribbon set-rules</h4> <p>Set the enable/display rule references on a command's CommandDefinition.</p> <p>Each rule id is a platform rule (validated against a curated <code>Mscrm.*</code> allow-list) or a custom rule (e.g. one added with <code>ribbon add-custom-rule</code>). The CommandDefinition Id is never touched. With --diff-file the edit is applied offline to a local RibbonDiffXml file (no backend calls).</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm ribbon set-rules [OPTIONS] ENTITY </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --command-id TEXT The CommandDefinition Id whose rules to set (see `crm ribbon list`). [required] --enable-rule RULE_ID Enable-rule id to reference (repeatable). Replaces the command's enable rules with exactly these, in order. --display-rule RULE_ID Display-rule id to reference (repeatable). Replaces the command's display rules with exactly these, in order. --publish / --no-publish Run PublishAllXml after the change. Default: stage (no publish); run `solution publish-all` when your set is done. --solution TEXT Target unmanaged solution uniquename (MSCRM.SolutionUniqueName). Required for customization writes; pass --solution Default for a deliberate Default-Solution-only write. --diff-file FILE Offline: apply this edit to a local RibbonDiffXml file (from `ribbon export --solution`), no backend calls. Compose N edits, then `ribbon apply`. Mutually exclusive with --solution/--publish. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h3 id="crm-scaffold">crm scaffold</h3> <p>Generate D365 metadata from shorthand specs.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm scaffold [OPTIONS] COMMAND [ARGS]... </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-scaffold-table">crm scaffold table</h4> <p>Create an entity (table) with N columns in a single publish.</p> <p>Builds a one-entity in-memory apply spec from the given display name and column shorthands, then runs it through <code>crm.core.apply.apply_spec</code>. Each resource is created with if_exists=skip in dependency order, so re-running the same command is a no-op. One PublishAllXml fires at the end (or is suppressed by --stage-only).</p> <p>Global --dry-run: reports the entity + all columns as planned without making any create calls (only the entity existence GET fires to probe the current state).</p> <p>Global --stage-only: creates everything but skips the final publish; the result envelope carries meta.staged=true.</p> <p>Emits {ok, data:{applied, skipped, planned, failed}, meta:{staged}}.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm scaffold table [OPTIONS] DISPLAY </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --column DISPLAY:KIND[:opts] Column shorthand: DISPLAY:KIND[:key=value,...]. KIND is one of string, memo, integer, bigint, decimal, double, money, boolean, datetime, picklist, multiselect, lookup, image, file. string/memo default max_length to 100/2000; override with max_length=N. lookup requires target_entity=<logical_name>. picklist/multiselect require optionset_name=<name>. Optional: required=No ne|Recommended|ApplicationRequired, description=<text> (opts are comma- separated, so description cannot contain a comma). Repeatable — pass one --column per column. [required] --schema-name TEXT Entity schema name override (PascalCase with prefix, e.g. new_Project). Derived from DISPLAY and publisher prefix when omitted. --display-collection TEXT Plural UI label for the entity set. Derived by apply when omitted. --ownership [UserOwned|OrganizationOwned] Entity ownership model. [default: UserOwned] --solution TEXT Target unmanaged solution uniquename (MSCRM.SolutionUniqueName). Required for customization writes; pass --solution Default for a deliberate Default-Solution- only write. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma-separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h3 id="crm-security">crm security</h3> <p>List and assign security roles, and share records (POA).</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm security [OPTIONS] COMMAND [ARGS]... </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-security-assign-role">crm security assign-role</h4> <p>Assign a security role to a user or team.</p> <p>Exactly one of --to-user or --to-team must be provided. Role assignment is cumulative and not cleanly reversible.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm security assign-role [OPTIONS] ROLE_ID </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --to-user GUID Assign the role to this system user GUID. --to-team GUID Assign the role to this team GUID. --yes Skip interactive confirmation. --as-user GUID Impersonate systemuser by GUID via MSCRMCallerID header. Mutually exclusive with --as-user-object- id. --as-user-object-id GUID Impersonate by Entra ID object id (cloud) via CallerObjectId header. Mutually exclusive with --as-user. --suppress-dup-detection Send MSCRM.SuppressDuplicateDetection: true. --bypass-plugins Send MSCRM.BypassCustomPluginExecution: true (requires prvBypassCustomPluginExecution). --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-security-create-role">crm security create-role</h4> <p>Create a security role (NAME is the role's display name).</p> <p>The role starts with no privileges; grant them with <code>security set-role-privileges</code>. Pass --solution to add the new role to an unmanaged solution as a component (only a newly created role is added; with --if-exists skip an existing role is reused, not added). Use --dry-run to preview without writing.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm security create-role [OPTIONS] NAME </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --business-unit GUID Business unit GUID for the role (defaults to the caller's). --if-exists [error|skip] On a same-name role in the same business unit: error, or skip (reuse the existing role). [default: error] --solution TEXT Target unmanaged solution uniquename (MSCRM.SolutionUniqueName). Required for customization writes; pass --solution Default for a deliberate Default-Solution-only write. --yes Skip interactive confirmation. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-security-grant">crm security grant</h4> <p>Share a record with a principal (POA GrantAccess).</p> <p>ENTITY_SET is the entity-set name (e.g. accounts); RECORD_ID is the record GUID. Sharing is reversible with <code>security revoke</code>.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm security grant [OPTIONS] ENTITY_SET RECORD_ID </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --to TYPE:GUID Principal to share with, as <user|team|org>:<guid>. [required] --rights RIGHTS Comma-separated access rights: Read,Write,Append,Appe ndTo,Create,Delete,Share,Assign. [required] --yes Skip interactive confirmation. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-security-list-access">crm security list-access</h4> <p>List the principals a record is shared with and their rights.</p> <p>ENTITY_SET is the entity-set name (e.g. accounts); RECORD_ID is the GUID. Reports each principal's type, id, and effective shared access mask (RetrieveSharedPrincipalsAndAccess).</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm security list-access [OPTIONS] ENTITY_SET RECORD_ID </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-security-list-roles">crm security list-roles</h4> <p>List security roles (optionally filtered by business unit or name).</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm security list-roles [OPTIONS] </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --business-unit GUID Filter to roles belonging to this business unit GUID. --name-contains TEXT Filter to roles whose name contains this text (server-side). --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-security-list-team-roles">crm security list-team-roles</h4> <p>List security roles assigned to a team (TEAM_ID is a GUID).</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm security list-team-roles [OPTIONS] TEAM_ID </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-security-list-user-roles">crm security list-user-roles</h4> <p>List security roles directly assigned to a system user (USER_ID is a GUID).</p> <p>Shows only roles assigned directly to the user, not roles inherited through team membership. Use <code>security user-privileges</code> to see the full effective privilege set (direct + team-inherited).</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm security list-user-roles [OPTIONS] USER_ID </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-security-revoke">crm security revoke</h4> <p>Remove a principal's shared access to a record (POA RevokeAccess).</p> <p>Removes all of the principal's shared rights on the record (there is no per-right revoke). ENTITY_SET is the entity-set name; RECORD_ID is the GUID.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm security revoke [OPTIONS] ENTITY_SET RECORD_ID </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --from TYPE:GUID Principal to unshare, as <user|team|org>:<guid>. [required] --yes Skip interactive confirmation. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-security-set-role-privileges">crm security set-role-privileges</h4> <p>Add or replace a security role's privileges (ROLE is a role id or name).</p> <p>Resolve privileges from access×entity selectors and/or explicit privilege names, clamp the requested --depth per privilege, then grant them. --replace wipes any privilege not in the resolved set. Use --dry-run to preview.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm security set-role-privileges [OPTIONS] ROLE </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --access LIST Comma-separated access types: read,write,create,delet e,append,appendto,assign,share. Requires --entities or --all-entities. --entities LIST Comma-separated entity logical names to scope --access to. --all-entities Apply --access across every entity (org-wide). --privilege LIST Explicit privilege names (comma-separated), e.g. prvCreateEntity. The escape hatch for non-entity privileges. --depth LEVEL Privilege depth: basic|local|deep|global (aliases user|businessunit|parentchild|organization). Clamped per privilege to the levels it supports. [required] --add Merge privileges into the role (default, non- destructive). --replace Replace the role's privileges with exactly the resolved set. --yes Skip interactive confirmation. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-security-user-privileges">crm security user-privileges</h4> <p>Show a system user's effective privileges (USER_ID is a GUID).</p> <p>Resolves the user's full privilege set — from their own roles plus team-inherited — via RetrieveUserPrivileges. Team-inherited privileges are reported at Basic depth only.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm security user-privileges [OPTIONS] USER_ID </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h3 id="crm-self-update">crm self-update</h3> <p>Update the crm CLI (method-aware) or report available updates.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm self-update [OPTIONS] </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --check Report current vs latest version and exit without modifying anything. --yes Run the upgrade non-interactively (uv/pipx installs; skips the confirm prompt). --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h3 id="crm-service-document">crm service-document</h3> <p>GET the root service document — lists every entity set the server exposes.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm service-document [OPTIONS] </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h3 id="crm-session">crm session</h3> <p>Local session state.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm session [OPTIONS] COMMAND [ARGS]... </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-session-audit">crm session audit</h4> <p>Show this session's LOCAL mutation journal (client-side).</p> <p>This is the local, client-side record of mutating commands run in this session — it is NOT the Dataverse server-side audit log.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm session audit [OPTIONS] </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --tail INTEGER RANGE Only the last N entries (N >= 1). [x>=1] --session TEXT Read another session's journal (default: current --session). --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-session-clear">crm session clear</h4> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm session clear [OPTIONS] </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-session-history">crm session history</h4> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm session history [OPTIONS] </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-session-info">crm session info</h4> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm session info [OPTIONS] </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h3 id="crm-sitemap">crm sitemap</h3> <p>Edit a live model-driven app SiteMap's navigation (areas/groups/subareas).</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm sitemap [OPTIONS] COMMAND [ARGS]... </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-sitemap-add-area">crm sitemap add-area</h4> <p>Add an Area to the sitemap SITEMAP_ID.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm sitemap add-area [OPTIONS] SITEMAP_ID </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --id TEXT New Area Id ([a-zA-Z0-9_]+). [required] --title TEXT Area display title. [required] --icon TEXT Area icon (a path or '$webresource:<name>'). --show-groups Set ShowGroups='true' on the new Area. --solution TEXT Target unmanaged solution uniquename (MSCRM.SolutionUniqueName). Required for customization writes; pass --solution Default for a deliberate Default-Solution-only write. --publish / --no-publish Run PublishAllXml after the change. Default: stage (no publish); run `solution publish-all` when your set is done. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-sitemap-add-group">crm sitemap add-group</h4> <p>Add a Group under an Area in the sitemap SITEMAP_ID.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm sitemap add-group [OPTIONS] SITEMAP_ID </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --area TEXT Parent Area Id. [required] --id TEXT New Group Id ([a-zA-Z0-9_]+). [required] --title TEXT Group display title. [required] --solution TEXT Target unmanaged solution uniquename (MSCRM.SolutionUniqueName). Required for customization writes; pass --solution Default for a deliberate Default-Solution-only write. --publish / --no-publish Run PublishAllXml after the change. Default: stage (no publish); run `solution publish-all` when your set is done. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-sitemap-add-subarea">crm sitemap add-subarea</h4> <p>Add a SubArea under a Group (exactly one of --entity/--url/--dashboard).</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm sitemap add-subarea [OPTIONS] SITEMAP_ID </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --area TEXT Parent Area Id. [required] --group TEXT Parent Group Id. [required] --id TEXT New SubArea Id ([a-zA-Z0-9_]+). [required] --entity TEXT Bind a table by logical name (validated to exist). --url TEXT Link to a URL (incl. an HTML web resource). --dashboard TEXT Open a dashboard by GUID. --title TEXT SubArea display title. --icon TEXT SubArea icon (a path or '$webresource:<name>'). --pass-params With --url: append context params (userid, orgname, orglcid, userlcid) to the URL (emits PassParams="true"). --solution TEXT Target unmanaged solution uniquename (MSCRM.SolutionUniqueName). Required for customization writes; pass --solution Default for a deliberate Default-Solution-only write. --publish / --no-publish Run PublishAllXml after the change. Default: stage (no publish); run `solution publish-all` when your set is done. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-sitemap-move-node">crm sitemap move-node</h4> <p>Reorder a node within its parent in the sitemap SITEMAP_ID.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm sitemap move-node [OPTIONS] SITEMAP_ID </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --id TEXT Id of the Area/Group/SubArea to reorder. [required] --before TEXT Move directly before this sibling Id (same parent + type). --after TEXT Move directly after this sibling Id (same parent + type). --index INTEGER Move to this 0-based position among its same-type siblings. --solution TEXT Target unmanaged solution uniquename (MSCRM.SolutionUniqueName). Required for customization writes; pass --solution Default for a deliberate Default-Solution-only write. --publish / --no-publish Run PublishAllXml after the change. Default: stage (no publish); run `solution publish-all` when your set is done. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-sitemap-remove-node">crm sitemap remove-node</h4> <p>Remove (or comment out) a node from the sitemap SITEMAP_ID.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm sitemap remove-node [OPTIONS] SITEMAP_ID </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --id TEXT Id of the Area/Group/SubArea to remove. [required] --comment-out Replace the node with an XML comment instead of deleting it. --solution TEXT Target unmanaged solution uniquename (MSCRM.SolutionUniqueName). Required for customization writes; pass --solution Default for a deliberate Default-Solution-only write. --publish / --no-publish Run PublishAllXml after the change. Default: stage (no publish); run `solution publish-all` when your set is done. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-sitemap-set-description">crm sitemap set-description</h4> <p>Set localized description(s) on a node in the sitemap SITEMAP_ID.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm sitemap set-description [OPTIONS] SITEMAP_ID </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --id TEXT Id of the Area/Group/SubArea to describe. [required] --lcid INTEGER 4-digit locale ID (repeatable; paired positionally with --description; must be an installed language). [required] --description TEXT Localized description for the matching --lcid (repeatable). [required] --solution TEXT Target unmanaged solution uniquename (MSCRM.SolutionUniqueName). Required for customization writes; pass --solution Default for a deliberate Default-Solution-only write. --publish / --no-publish Run PublishAllXml after the change. Default: stage (no publish); run `solution publish-all` when your set is done. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-sitemap-set-title">crm sitemap set-title</h4> <p>Set localized title(s) on a node in the sitemap SITEMAP_ID.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm sitemap set-title [OPTIONS] SITEMAP_ID </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --id TEXT Id of the Area/Group/SubArea to title. [required] --lcid INTEGER 4-digit locale ID (repeatable; paired positionally with --title; must be an installed language). [required] --title TEXT Localized title for the matching --lcid (repeatable). [required] --solution TEXT Target unmanaged solution uniquename (MSCRM.SolutionUniqueName). Required for customization writes; pass --solution Default for a deliberate Default-Solution-only write. --publish / --no-publish Run PublishAllXml after the change. Default: stage (no publish); run `solution publish-all` when your set is done. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h3 id="crm-skill">crm skill</h3> <p>Install the bundled agent skill (SKILL.md) for Copilot / Claude / Cursor.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm skill [OPTIONS] COMMAND [ARGS]... </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-skill-install">crm skill install</h4> <p>Copy the bundled skill tree (SKILL.md + reference/) into the agent's skill directory.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm skill install [OPTIONS] </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --target [claude|copilot|cursor] Where to install the skill. Ignored if --dest is given. [default: claude] --dest DIRECTORY Custom destination directory (overrides --target). --force Overwrite an existing skill at the destination. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma-separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-skill-path">crm skill path</h4> <p>Show the path of the bundled skill directory inside the installed package.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm skill path [OPTIONS] </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-skill-uninstall">crm skill uninstall</h4> <p>Remove the installed skill (SKILL.md + reference/, and the directory if empty).</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm skill uninstall [OPTIONS] </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --target [claude|copilot|cursor] [default: claude] --dest DIRECTORY --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma-separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h3 id="crm-sla">crm sla</h3> <p>Create, configure, and activate D365 SLAs and their backing workflows.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm sla [OPTIONS] COMMAND [ARGS]... </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-sla-activate">crm sla activate</h4> <p>Activate an SLA: its backing workflows first, then the SLA record.</p> <p>Backing workflows already active are skipped, so re-running is safe. If any backing workflow fails to activate (compile errors after a solution import), the SLA is left untouched and the per-workflow error report explains why UI activation is required.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm sla activate [OPTIONS] SLA_ID </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --as-user GUID Impersonate systemuser by GUID via MSCRMCallerID header. Mutually exclusive with --as-user-object- id. --as-user-object-id GUID Impersonate by Entra ID object id (cloud) via CallerObjectId header. Mutually exclusive with --as-user. --suppress-dup-detection Send MSCRM.SuppressDuplicateDetection: true. --bypass-plugins Send MSCRM.BypassCustomPluginExecution: true (requires prvBypassCustomPluginExecution). --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-sla-add-kpi">crm sla add-kpi</h4> <p>Attach a KPI / SLA-item to an existing SLA before activation.</p> <p>--applicable-when and --success-criteria each accept an inline FetchXML/ condition string or a <code>*-file</code> path.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm sla add-kpi [OPTIONS] </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --sla TEXT Parent SLA id. [required] --kpi TEXT KPI field the item tracks (slaitem.relatedfield); also the default item name. [required] --name TEXT SLA-item name (defaults to --kpi). --applicable-when TEXT FetchXML/condition for when the KPI applies (slaitem.applicablewhenxml). --applicable-when-file FILE Read --applicable-when from a file. --success-criteria TEXT FetchXML/condition defining KPI success (slaitem.successconditionsxml). --success-criteria-file FILE Read --success-criteria from a file. --solution TEXT Target unmanaged solution uniquename (MSCRM.SolutionUniqueName). Required for customization writes; pass --solution Default for a deliberate Default-Solution-only write. --as-user GUID Impersonate systemuser by GUID via MSCRMCallerID header. Mutually exclusive with --as-user-object-id. --as-user-object-id GUID Impersonate by Entra ID object id (cloud) via CallerObjectId header. Mutually exclusive with --as-user. --suppress-dup-detection Send MSCRM.SuppressDuplicateDetection: true. --bypass-plugins Send MSCRM.BypassCustomPluginExecution: true (requires prvBypassCustomPluginExecution). --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-sla-create">crm sla create</h4> <p>Create an SLA for a target entity and ensure that entity is SLA-enabled.</p> <p>Defines the SLA record; attach KPI / SLA-item conditions with <code>sla add-kpi</code>, then activate with <code>sla activate</code>. The <code>sla</code> entity has no FetchXML condition of its own — per-KPI <code>--applicable-when</code> / <code>--success-criteria</code> live on <code>sla add-kpi</code>.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm sla create [OPTIONS] </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --name TEXT SLA name. [required] --entity TEXT Target entity logical name (objecttypecode); also the entity whose IsSLAEnabled flag is verified/set. [required] --applicable-from TEXT Date-anchor field the SLA calculates from, e.g. 'createdon' (sla.applicablefrom). --business-hours GUID Business-hours calendar id (sla.businesshoursid). --description TEXT SLA description. --solution TEXT Target unmanaged solution uniquename (MSCRM.SolutionUniqueName). Required for customization writes; pass --solution Default for a deliberate Default-Solution-only write. --as-user GUID Impersonate systemuser by GUID via MSCRMCallerID header. Mutually exclusive with --as-user-object- id. --as-user-object-id GUID Impersonate by Entra ID object id (cloud) via CallerObjectId header. Mutually exclusive with --as-user. --suppress-dup-detection Send MSCRM.SuppressDuplicateDetection: true. --bypass-plugins Send MSCRM.BypassCustomPluginExecution: true (requires prvBypassCustomPluginExecution). --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h3 id="crm-solution">crm solution</h3> <p>Solution lifecycle (create-publisher / create / list / info / components / export / import).</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm solution [OPTIONS] COMMAND [ARGS]... </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-solution-add-component">crm solution add-component</h4> <p>Add an existing component to an unmanaged solution (AddSolutionComponent).</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm solution add-component [OPTIONS] </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --solution TEXT Target unmanaged solution unique name. [required] --type TEXT Component type: integer or friendly name (e.g. 61 or webresource). [required] --id GUID Component GUID (objectid) to add. [required] --no-add-required Do not also add required components (AddRequiredComponents: false). --no-subcomponents Exclude subcomponents (DoNotIncludeSubcomponents: true). --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-solution-apply-upgrade">crm solution apply-upgrade</h4> <p>Apply a previously-staged holding-solution upgrade (DeleteAndPromote).</p> <p>Promotes a solution already staged via <code>stage-and-upgrade</code> (run without --promote), replacing the base solution and deleting its patches. This is the separate-promote path that decouples stage-time from promote-time; <code>stage-and-upgrade --promote</code> remains the one-shot path.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm solution apply-upgrade [OPTIONS] UNIQUE_NAME </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --yes Skip interactive confirmation. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-solution-clone-as-patch">crm solution clone-as-patch</h4> <p>Create a solution patch from a parent solution (CloneAsPatch).</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm solution clone-as-patch [OPTIONS] </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --solution TEXT Parent solution unique name to clone a patch from. [required] --display TEXT Patch display name (defaults to the parent's friendly name). --version TEXT Patch version (4-part dotted). Must share the parent's major.minor; defaults to the parent version with the revision bumped. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-solution-components">crm solution components</h4> <p>List solution components; with --save write a normalized inventory, with --diff compare live vs expected (non-zero exit on drift).</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm solution components [OPTIONS] UNIQUE_NAME </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --diff FILE Compare live components against this saved JSON snapshot; exits non-zero on drift. --save FILE Write a normalized component inventory to this path as JSON. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-solution-create">crm solution create</h4> <p>Create an unmanaged solution bound to a publisher (solutions).</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm solution create [OPTIONS] </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --name TEXT Solution unique name, e.g. 'CRMWorx'. [required] --display TEXT Friendly name (defaults to --name). --version TEXT Solution version (default 1.0.0.0). --publisher TEXT Publisher unique name (mutually exclusive with --publisher-id). --publisher-id TEXT Publisher GUID (mutually exclusive with --publisher). --if-exists [error|skip] --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-solution-create-publisher">crm solution create-publisher</h4> <p>Create a solution publisher (publishers).</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm solution create-publisher [OPTIONS] </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --name TEXT Publisher unique name, e.g. 'crmworx'. [required] --display TEXT Friendly name (defaults to --name). --prefix TEXT Customization prefix: 2-8 alphanumeric, starts with a letter, not 'mscrm'. e.g. 'cwx'. [required] --option-value-prefix INTEGER Option-value prefix (integer 10000-99999). [required] --if-exists [error|skip] --set-default / --no-set-default Write publisher_prefix back to the active named profile (default on). --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma-separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-solution-dependencies">crm solution dependencies</h4> <p>Show blockers that would prevent UNINSTALLING a managed solution.</p> <p>Read-only. Calls RetrieveDependenciesForUninstall(SolutionUniqueName='<name>').</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm solution dependencies [OPTIONS] UNIQUE_NAME </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-solution-export">crm solution export</h4> <p>Export a solution to a zip.</p> <p>With no UNIQUE_NAME on an interactive terminal, lists the org's solutions (unmanaged first) and prompts you to pick one. Under --json or with no TTY the name is required (a missing one is a usage error, exit 2).</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm solution export [OPTIONS] [UNIQUE_NAME] </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> -o, --output FILE [required] --managed --export-setting [autonumbering|calendar|customizations|email-tracking|general|isv-config|marketing|outlook-sync|relationship-roles|sales] Repeatable; include a named export setting in the solution payload. --timeout INTEGER Async operation timeout in seconds. Overrides profile.async_timeout. --no-retry Disable the 429/5xx retry loop for this invocation. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma-separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-solution-export-spec">crm solution export-spec</h4> <p>Project a whole solution into one apply-consumable desired-state spec.</p> <p>Walks the solution's members (pure GETs, read-only) and merges every entity it touches — entity, attribute, global option set, view, 1:N relationship — into a single spec via build_entity_spec per touched entity. A top-level <code>solution:</code> key is emitted so a round-trip <code>crm --dry-run apply -f <file></code> against another org auto-scopes its drift/prune report (the source side of the org-to-org drift recipe).</p> <p>Apply-seedable members project in full: entities (+ their attributes, option sets, views, 1:N relationships, seedable main form), security roles (name, business unit, privileges by depth), web resources (inline base64 content, display name, type), and model-driven apps (identity + Entity-backed sitemap, under a top-level <code>apps:</code> block). Members that cannot round-trip a real apply (plug-ins, additional main forms, an app's record-backed component bindings, ...) are reported in a <code>skipped</code> bucket or <code>warnings</code>; the verb never fails on an unsupported component and never drops one silently.</p> <p>With -o, the bare YAML spec is written to FILE (apply-ready). Without -o, a summary plus the skipped bucket is emitted under the JSON envelope.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm solution export-spec [OPTIONS] UNIQUE_NAME </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> -o, --output FILE Write the bare merged spec as YAML to FILE (directly consumable by crm apply -f). --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-solution-extract">crm solution extract</h4> <p>Extract a solution zip into a folder tree (offline; pac solution unpack).</p> <p>OFFLINE local-file transform — no connection or profile required.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm solution extract [OPTIONS] </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --zipfile FILE Exported solution zip to unpack. [required] --folder DIRECTORY Destination folder for the source- controllable tree. [required] --package-type [unmanaged|managed|both] pac --packagetype (default Unmanaged). --pac-path FILE Path to the pac executable (else CRM_PAC env, then PATH). --timeout INTEGER pac subprocess timeout in seconds. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma-separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-solution-import">crm solution import</h4> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm solution import [OPTIONS] ZIP_PATH </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --publish / --no-publish Set the import's PublishWorkflows server option (activate imported workflows). NOT PublishAllXml. Default: publish. --overwrite / --no-overwrite Set ImportSolution OverwriteUnmanagedCustomizations. Default: overwrite (clobbers unmanaged customizations in the target org). --skip-dependency-check Set ImportSolution SkipProductUpdateDependencies to proceed past a product-update dependency block. --timeout INTEGER Async operation timeout in seconds. Overrides profile.async_timeout. --no-retry Disable the 429/5xx retry loop for this invocation. -q, --quiet Suppress per-tick import-progress lines on stderr. --formatted Also fetch the Excel-format RetrieveFormattedImportJobResults report and attach it verbatim under formatted_results. --yes Skip the overwrite confirmation prompt. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-solution-import-result">crm solution import-result</h4> <p>Re-fetch a prior ImportJob and parse its per-component pass/fail results.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm solution import-result [OPTIONS] IMPORT_JOB_ID </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --formatted Also fetch the Excel-format RetrieveFormattedImportJobResults report and attach it verbatim under formatted_results. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-solution-info">crm solution info</h4> <p>Show details for one solution (version, managed state, publisher) by unique name.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm solution info [OPTIONS] UNIQUE_NAME </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-solution-job-cancel">crm solution job-cancel</h4> <p>Alias for <code>crm async cancel <id></code>.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm solution job-cancel [OPTIONS] ASYNC_OPERATION_ID </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --yes Skip interactive confirmation. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-solution-job-status">crm solution job-status</h4> <p>Alias for <code>crm async get <id></code> — inspect a solution import/export job.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm solution job-status [OPTIONS] ASYNC_OPERATION_ID </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-solution-layer-conflicts">crm solution layer-conflicts</h4> <p>Report components present in BOTH a managed and an unmanaged solution.</p> <p>Those are managed components that also carry unmanaged-layer customizations — the potential unmanaged-layer conflicts. Read-only; works identically on v9.x on-prem and Dataverse online. Matching is at solution-component granularity: a customized subcomponent (e.g. one attribute) of a whole-table managed component is its own component and will not show as a conflict.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm solution layer-conflicts [OPTIONS] </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --solution TEXT Managed solution unique name. [required] --unmanaged-solution TEXT Unmanaged solution unique name. [required] --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-solution-list">crm solution list</h4> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm solution list [OPTIONS] </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --managed / --unmanaged Filter by managed flag. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-solution-missing-components">crm solution missing-components</h4> <p>List components an exported solution needs that this org is missing.</p> <p>SOLUTION_FILE is a path to an exported solution .zip. The check runs against the connected org (the import target): an empty result means the org already has everything the solution requires. Read-only — run before importing.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm solution missing-components [OPTIONS] SOLUTION_FILE </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-solution-pack">crm solution pack</h4> <p>Pack a folder tree back into a solution zip (offline; pac solution pack).</p> <p>OFFLINE local-file transform — no connection or profile required.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm solution pack [OPTIONS] </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --zipfile FILE Destination solution zip to build. [required] --folder DIRECTORY Source folder tree to pack. [required] --package-type [unmanaged|managed|both] pac --packagetype (default Unmanaged). --pac-path FILE Path to the pac executable (else CRM_PAC env, then PATH). --timeout INTEGER pac subprocess timeout in seconds. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma-separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-solution-publish">crm solution publish</h4> <p>Call PublishXml with a Publish Request Schema XML payload.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm solution publish [OPTIONS] </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --xml TEXT Inline Publish Request Schema XML. --xml-file FILE Path to a Publish Request Schema XML file. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-solution-publish-all">crm solution publish-all</h4> <p>Call PublishAllXml — publish every unpublished customization.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm solution publish-all [OPTIONS] </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-solution-remove-component">crm solution remove-component</h4> <p>Remove a component from an unmanaged solution (RemoveSolutionComponent).</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm solution remove-component [OPTIONS] </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --solution TEXT Target unmanaged solution unique name. [required] --type TEXT Component type: integer or friendly name (e.g. 61 or webresource). [required] --id GUID Component GUID (objectid) to remove. [required] --yes Skip interactive confirmation. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-solution-set-version">crm solution set-version</h4> <p>Update an unmanaged solution's version / friendly name / description in place.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm solution set-version [OPTIONS] UNIQUE_NAME </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --version TEXT New 4-part dotted version, e.g. 2.0.0.0. --friendly-name TEXT New friendly (display) name. --description TEXT New description. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-solution-stage-and-upgrade">crm solution stage-and-upgrade</h4> <p>Stage a managed-solution upgrade as a holding solution (ImportSolution HoldingSolution).</p> <p>Stages only by default; pass --promote (with --solution) to also apply the upgrade via DeleteAndPromote, replacing the base solution.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm solution stage-and-upgrade [OPTIONS] ZIP_PATH </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --promote After staging, apply the upgrade with DeleteAndPromote (replaces the base solution). Requires --solution. --solution TEXT Unique name of the staged solution to promote (required with --promote). --no-publish --no-overwrite --skip-dependency-check Set ImportSolution SkipProductUpdateDependencies to proceed past a product-update dependency block. --timeout INTEGER Async operation timeout in seconds. Overrides profile.async_timeout. --no-retry Disable the 429/5xx retry loop for this invocation. -q, --quiet Suppress per-tick import-progress lines on stderr. --formatted Also fetch the Excel-format RetrieveFormattedImportJobResults report and attach it verbatim under formatted_results. --yes Skip the staging/promote confirmation prompt. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-solution-uninstall">crm solution uninstall</h4> <p>Uninstall (delete) a solution (DELETE /solutions).</p> <p>Pre-checks RetrieveDependenciesForUninstall and refuses with the blocker list unless --force. For a managed base solution the server also uninstalls its patches.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm solution uninstall [OPTIONS] </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --solution TEXT Unique name of the solution to uninstall. [required] --force Uninstall even if dependency blockers exist (skip the pre-check). --yes Skip interactive confirmation. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-solution-validate">crm solution validate</h4> <p>Statically validate a solution zip before import.</p> <p>OFFLINE by default -- no connection or profile required. --against-org adds online checks (GUID collisions, web-resource & option-set existence). Exits non-zero when any error-severity problem is found.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm solution validate [OPTIONS] ZIP_PATH </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --against-org Also run online checks against the connected org (form/view + BPF process-stage GUID collisions, web- resource & option-set existence). Requires a connection/profile. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h3 id="crm-theme">crm theme</h3> <p>Author application themes (product branding: colors, logo) headlessly.</p> <p>A theme is an ordinary record; <code>publish</code> promotes one to the active org theme via PublishTheme. Themes are NOT solution-aware — they do not travel with a solution export, so there is no --solution flag here.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm theme [OPTIONS] COMMAND [ARGS]... </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-theme-create">crm theme create</h4> <p>Create a theme. Set branding columns with repeatable --set FIELD=VALUE.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm theme create [OPTIONS] </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --name TEXT Theme name. [required] --set FIELD=VALUE Repeatable; a theme branding column, e.g. --set maincolor=#0066cc. VALUE is parsed as JSON with a raw-string fallback. --logo TEXT Web resource name or GUID to bind as the theme logo. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-theme-get">crm theme get</h4> <p>Get a single theme by THEME_ID (branding columns included).</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm theme get [OPTIONS] THEME_ID </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-theme-list">crm theme list</h4> <p>List all themes (org-wide; summary columns only — use <code>theme get</code> for colors).</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm theme list [OPTIONS] </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-theme-publish">crm theme publish</h4> <p>Publish THEME_ID as the active org theme (PublishTheme).</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm theme publish [OPTIONS] THEME_ID </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-theme-update">crm theme update</h4> <p>Update THEME_ID's name, branding columns (--set), and/or --logo.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm theme update [OPTIONS] THEME_ID </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --name TEXT New theme name. --set FIELD=VALUE Repeatable; a theme branding column, e.g. --set maincolor=#0066cc. VALUE is parsed as JSON with a raw-string fallback. --logo TEXT Web resource name or GUID to bind as the theme logo. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h3 id="crm-translation">crm translation</h3> <p>Export / import localizable display labels for a solution.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm translation [OPTIONS] COMMAND [ARGS]... </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-translation-export">crm translation export</h4> <p>Export all translations for SOLUTION to a zip (CrmTranslations.xml).</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm translation export [OPTIONS] </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --solution TEXT Unique name of the solution whose labels to export. [required] -o, --output FILE [required] --timeout INTEGER Read timeout in seconds for the export request. Overrides profile.async_timeout. --no-retry Disable the 429/5xx retry loop for this invocation. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-translation-import">crm translation import</h4> <p>Import a translations zip; labels surface only after publishing.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm translation import [OPTIONS] ZIP_PATH </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --timeout INTEGER Read timeout in seconds for the import request. Overrides profile.async_timeout. --no-retry Disable the 429/5xx retry loop for this invocation. --yes Skip the overwrite confirmation prompt. --publish Publish all customizations after a successful import. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h3 id="crm-view">crm view</h3> <p>Create and manage system views (savedquery).</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm view [OPTIONS] COMMAND [ARGS]... </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-view-add-filter">crm view add-filter</h4> <p>Add FetchXML filter condition(s) to VIEW on ENTITY (by name or savedqueryid).</p> <p>Editing an out-of-box / managed view creates an unmanaged layer that a solution upgrade may revert.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm view add-filter [OPTIONS] ENTITY VIEW </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --query-type [public|advanced-find|associated|quick-find|lookup] Saved-query type to resolve the view by (with its name). [default: public] --condition TEXT Add a filter condition '<attribute> <operator> [value ...]' (repeatable). Operator must be a FetchXML condition operator; value count must match it ('null' none, 'between' two, 'in' a list). [required] --type [and|or] Combine the condition(s) into an and/or filter. [default: and] --solution TEXT Target unmanaged solution uniquename (MSCRM.SolutionUniqueName). Required for customization writes; pass --solution Default for a deliberate Default-Solution- only write. --publish / --no-publish Run PublishAllXml after the change. Default: stage (no publish); run `solution publish- all` when your set is done. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma-separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-view-create">crm view create</h4> <p>Create a system view on ENTITY (public by default; see --query-type).</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm view create [OPTIONS] ENTITY </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --name TEXT View display name. [required] --otc INTEGER Entity ObjectTypeCode (from `metadata entity <name>`). [required] --column TEXT Repeatable 'logicalname[:width]'. Order preserved. [required] --order-by TEXT Sort attribute, optional 'asc'/'desc' suffix (e.g. 'createdon desc'). Default: ascending. --filter-active Filter to statecode=0 (active) rows. --default Mark as the default view. --if-exists [error|skip] --query-type [public|advanced-find|associated|quick-find|lookup] Saved-query type to create. [default: public] --description TEXT View description. --solution TEXT Target unmanaged solution uniquename (MSCRM.SolutionUniqueName). Required for customization writes; pass --solution Default for a deliberate Default-Solution- only write. --publish / --no-publish Run PublishAllXml after the change. Default: stage (no publish); run `solution publish- all` when your set is done. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma-separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-view-edit-columns">crm view edit-columns</h4> <p>Edit the grid columns of VIEW on ENTITY (by name or savedqueryid).</p> <p>Editing an out-of-box / managed view creates an unmanaged layer that a solution upgrade may revert.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm view edit-columns [OPTIONS] ENTITY VIEW </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --query-type [public|advanced-find|associated|quick-find|lookup] Saved-query type to resolve the view by (with its name). [default: public] --add TEXT Add a column 'logicalname[:width]' (repeatable). Adds both the layout cell and the fetch attribute. --remove TEXT Remove a column by logical name (repeatable). --width TEXT Resize an existing column 'logicalname:width' (repeatable). --reorder TEXT Comma-separated logical names giving the new column order (must be a permutation of the current columns; not combinable with --add/--remove/--width). --solution TEXT Target unmanaged solution uniquename (MSCRM.SolutionUniqueName). Required for customization writes; pass --solution Default for a deliberate Default-Solution- only write. --publish / --no-publish Run PublishAllXml after the change. Default: stage (no publish); run `solution publish- all` when your set is done. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma-separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-view-list">crm view list</h4> <p>List the public views (savedquery) for an entity.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm view list [OPTIONS] ENTITY </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-view-remove-filter">crm view remove-filter</h4> <p>Remove FetchXML filter condition(s) from VIEW on ENTITY (by name or id).</p> <p>Editing an out-of-box / managed view creates an unmanaged layer that a solution upgrade may revert.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm view remove-filter [OPTIONS] ENTITY VIEW </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --query-type [public|advanced-find|associated|quick-find|lookup] Saved-query type to resolve the view by (with its name). [default: public] --condition TEXT Remove a filter condition matching '<attribute> <operator> [value ...]' (repeatable). Add value(s) to disambiguate when several conditions share the same attribute and operator. [required] --solution TEXT Target unmanaged solution uniquename (MSCRM.SolutionUniqueName). Required for customization writes; pass --solution Default for a deliberate Default-Solution- only write. --publish / --no-publish Run PublishAllXml after the change. Default: stage (no publish); run `solution publish- all` when your set is done. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma-separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-view-set-order">crm view set-order</h4> <p>Set the sort order of VIEW on ENTITY (by name or savedqueryid).</p> <p>Editing an out-of-box / managed view creates an unmanaged layer that a solution upgrade may revert.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm view set-order [OPTIONS] ENTITY VIEW </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --query-type [public|advanced-find|associated|quick-find|lookup] Saved-query type to resolve the view by (with its name). [default: public] --order TEXT Replace the sort with '<attribute> [asc|desc]' (repeatable to sort by several attributes, in order). --add-order TEXT Append '<attribute> [asc|desc]' to the current sort (repeatable). --clear-order Remove all sorting. --solution TEXT Target unmanaged solution uniquename (MSCRM.SolutionUniqueName). Required for customization writes; pass --solution Default for a deliberate Default-Solution- only write. --publish / --no-publish Run PublishAllXml after the change. Default: stage (no publish); run `solution publish- all` when your set is done. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma-separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h3 id="crm-webresource">crm webresource</h3> <p>Create and manage web resources (HTML/JS/CSS/images).</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm webresource [OPTIONS] COMMAND [ARGS]... </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-webresource-create">crm webresource create</h4> <p>Create a web resource.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm webresource create [OPTIONS] </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --name TEXT Web resource unique name, e.g. 'cwx_/scripts/foo.js'. [required] --file FILE Source file whose bytes become the web resource content. [required] --display TEXT Display name (defaults to the unique name). --type INTEGER Override the D365 webresourcetype int; inferred from the file extension if omitted. --solution TEXT Target unmanaged solution uniquename (MSCRM.SolutionUniqueName). Required for customization writes; pass --solution Default for a deliberate Default-Solution-only write. --publish / --no-publish Run PublishAllXml after the change. Default: stage (no publish); run `solution publish-all` when your set is done. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-webresource-delete">crm webresource delete</h4> <p>Delete a web resource by unique name or id.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm webresource delete [OPTIONS] NAME </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --yes Skip interactive confirmation. --check-dependencies Preview blocking dependencies (RetrieveDependenciesForDelete) in the result; pairs with --dry-run. Informational — does not block. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-webresource-get">crm webresource get</h4> <p>Resolve a web resource by name and print its record.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm webresource get [OPTIONS] NAME </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-webresource-list">crm webresource list</h4> <p>List web resources.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm webresource list [OPTIONS] </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --custom-only Only unmanaged web resources. --top INTEGER Limit to the first N rows. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-webresource-push">crm webresource push</h4> <p>Walk DIRECTORY and upsert every file as a web resource, publishing once.</p> <p>The filesystem is the source of truth: a missing resource is created, a changed one updated, a byte-identical one skipped, and all changes are published once at the end (PublishAllXml) — nothing publishes mid-run. A per-file failure is reported without aborting the rest. Honors the global --dry-run flag (lists the would-create / would-update sets, writes nothing) and --stage-only / --no-publish (write the resources, defer the publish). For a continuous redeploy loop, pair with a file watcher, e.g. <code>find webresources -name '*.js' | entr crm webresource push webresources --prefix cwx</code>.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm webresource push [OPTIONS] DIRECTORY </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --prefix TEXT Publisher customization prefix (2-8 alphanumerics, starts with a letter, not 'mscrm'); each file maps to web resource name '<prefix>_<relpath>' (path relative to DIRECTORY, '/' separators, type inferred from extension). [required] --solution TEXT Target unmanaged solution uniquename (MSCRM.SolutionUniqueName). Required for customization writes; pass --solution Default for a deliberate Default-Solution-only write. --publish / --no-publish Run PublishAllXml after the change. Default: stage (no publish); run `solution publish-all` when your set is done. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-webresource-update">crm webresource update</h4> <p>Update a web resource by name (content and/or display name).</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm webresource update [OPTIONS] NAME </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --file FILE New source file whose bytes replace the web resource content. --display TEXT New display name. --solution TEXT Target unmanaged solution uniquename (MSCRM.SolutionUniqueName). Required for customization writes; pass --solution Default for a deliberate Default-Solution-only write. --publish / --no-publish Run PublishAllXml after the change. Default: stage (no publish); run `solution publish-all` when your set is done. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h3 id="crm-workflow">crm workflow</h3> <p>List, activate, and trigger D365 workflows.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm workflow [OPTIONS] COMMAND [ARGS]... </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-workflow-activate">crm workflow activate</h4> <p>Activate a workflow (statecode=1, statuscode=2).</p> <p>An activation-record GUID (type=2) is resolved to its parent definition automatically and the state change is applied to the parent.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm workflow activate [OPTIONS] WORKFLOW_ID </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --as-user GUID Impersonate systemuser by GUID via MSCRMCallerID header. Mutually exclusive with --as-user-object- id. --as-user-object-id GUID Impersonate by Entra ID object id (cloud) via CallerObjectId header. Mutually exclusive with --as-user. --suppress-dup-detection Send MSCRM.SuppressDuplicateDetection: true. --bypass-plugins Send MSCRM.BypassCustomPluginExecution: true (requires prvBypassCustomPluginExecution). --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-workflow-clone">crm workflow clone</h4> <p>Clone a workflow definition onto another entity (xaml-retargeted).</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm workflow clone [OPTIONS] WORKFLOW_ID </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --to-entity TEXT Logical name of the entity to clone the workflow onto. [required] --name TEXT Name for the clone. Default: '<source> (Clone)'. --activate / --no-activate Activate the clone after creating it (compiles the xaml). Default: activate. --solution TEXT Target unmanaged solution uniquename (MSCRM.SolutionUniqueName). Required for customization writes; pass --solution Default for a deliberate Default-Solution-only write. --as-user GUID Impersonate systemuser by GUID via MSCRMCallerID header. Mutually exclusive with --as-user- object-id. --as-user-object-id GUID Impersonate by Entra ID object id (cloud) via CallerObjectId header. Mutually exclusive with --as-user. --suppress-dup-detection Send MSCRM.SuppressDuplicateDetection: true. --bypass-plugins Send MSCRM.BypassCustomPluginExecution: true (requires prvBypassCustomPluginExecution). --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-workflow-deactivate">crm workflow deactivate</h4> <p>Deactivate a workflow (statecode=0, statuscode=1).</p> <p>An activation-record GUID (type=2) is resolved to its parent definition automatically and the state change is applied to the parent.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm workflow deactivate [OPTIONS] WORKFLOW_ID </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --yes Skip interactive confirmation. --as-user GUID Impersonate systemuser by GUID via MSCRMCallerID header. Mutually exclusive with --as-user-object- id. --as-user-object-id GUID Impersonate by Entra ID object id (cloud) via CallerObjectId header. Mutually exclusive with --as-user. --suppress-dup-detection Send MSCRM.SuppressDuplicateDetection: true. --bypass-plugins Send MSCRM.BypassCustomPluginExecution: true (requires prvBypassCustomPluginExecution). --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-workflow-delete">crm workflow delete</h4> <p>Delete a workflow definition, deactivating it first if active.</p> <p>An activation-record GUID (type=2) is resolved to its parent definition; deleting the definition removes the activation record server-side. Not atomic: if the deactivate lands but the delete fails, the definition remains a draft (no rollback).</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm workflow delete [OPTIONS] WORKFLOW_ID </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --yes Skip interactive confirmation. --as-user GUID Impersonate systemuser by GUID via MSCRMCallerID header. Mutually exclusive with --as-user-object- id. --as-user-object-id GUID Impersonate by Entra ID object id (cloud) via CallerObjectId header. Mutually exclusive with --as-user. --suppress-dup-detection Send MSCRM.SuppressDuplicateDetection: true. --bypass-plugins Send MSCRM.BypassCustomPluginExecution: true (requires prvBypassCustomPluginExecution). --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-workflow-export">crm workflow export</h4> <p>Export a workflow definition (incl. xaml) to a JSON file.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm workflow export [OPTIONS] WORKFLOW_ID </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> -o, --output FILE Write the workflow definition to this JSON file. Default: stdout only. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-workflow-import">crm workflow import</h4> <p>Import (upsert) a workflow definition from an exported JSON file.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm workflow import [OPTIONS] </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --file FILE Exported workflow JSON file to upsert. [required] --activate / --no-activate Activate after import. Default: leave as draft. --as-user GUID Impersonate systemuser by GUID via MSCRMCallerID header. Mutually exclusive with --as-user- object-id. --as-user-object-id GUID Impersonate by Entra ID object id (cloud) via CallerObjectId header. Mutually exclusive with --as-user. --suppress-dup-detection Send MSCRM.SuppressDuplicateDetection: true. --bypass-plugins Send MSCRM.BypassCustomPluginExecution: true (requires prvBypassCustomPluginExecution). --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-workflow-list">crm workflow list</h4> <p>List workflow definitions.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm workflow list [OPTIONS] </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --category CATEGORY Filter by category. Accepts an integer (0–5) or a friendly name: workflow, dialog, businessrule, action, bpf, flow. --entity TEXT Filter by primary entity logical name. --activated / --all Restrict to activated workflows. Default returns all states. --on-demand Only on-demand workflows. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-workflow-migration-assess">crm workflow migration-assess</h4> <p>Assess classic workflows for migration to cloud (Power Automate) flows.</p> <p>Inventories category-0 workflow definitions and flags blockers from the MS capability table: real-time (synchronous) mode, wait conditions, and custom workflow activities. Read-only. Blockers are "needs redesign" signals, not verdicts of impossibility. On an on-prem profile the report still runs and carries an advisory note (cloud flows live only on Dataverse online).</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm workflow migration-assess [OPTIONS] </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --entity TEXT Filter by primary entity logical name. --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-workflow-run">crm workflow run</h4> <p>Trigger an on-demand workflow against a target record via ExecuteWorkflow.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm workflow run [OPTIONS] WORKFLOW_ID </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --target TEXT GUID of the record to run the workflow against. [required] --as-user GUID Impersonate systemuser by GUID via MSCRMCallerID header. Mutually exclusive with --as-user-object- id. --as-user-object-id GUID Impersonate by Entra ID object id (cloud) via CallerObjectId header. Mutually exclusive with --as-user. --suppress-dup-detection Send MSCRM.SuppressDuplicateDetection: true. --bypass-plugins Send MSCRM.BypassCustomPluginExecution: true (requires prvBypassCustomPluginExecution). --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> <h4 id="crm-workflow-update">crm workflow update</h4> <p>Edit a workflow definition's metadata, or replace its step XAML.</p> <p>Metadata path (default) — edit name, scope, triggers, on-demand. Works on both targets (not provenance-gated). A published (activated) definition is edited via an automatic deactivate -> edit -> reactivate cycle; a draft is edited in place. Only the fields you pass change.</p> <p>XAML logic path (--xaml-file) — replace the whole step definition. This is <strong>on-premises only</strong>; on Dataverse it refuses up front with the provenance wall. The blob is reference-validated against the entity's live attribute set (warnings land on meta.warnings; --strict promotes them to a failure), then driven deactivate-if-active -> PATCH xaml -> reactivate. A failed reactivation rolls back to the prior XAML by default (--no-rollback keeps the rejected one). An activation-record GUID (type=2) resolves to its parent definition first in either path.</p> <p><strong>Usage:</strong></p> <div class="highlight"><pre><span></span><code>crm workflow update [OPTIONS] WORKFLOW_ID </code></pre></div> <p><strong>Options:</strong></p> <div class="highlight"><pre><span></span><code> --name TEXT New display name. --scope SCOPE Execution scope. Integer (1–4) or a name: user, businessunit, parentchildbusinessunits, organization. --on-demand / --no-on-demand Toggle whether the workflow can be run on demand. --on-create / --no-on-create Toggle the trigger-on-create flag. --on-delete / --no-on-delete Toggle the trigger-on-delete flag. --on-update-attributes TEXT Comma-separated attribute logical names that trigger the workflow on update. Pass an empty string to clear it (disables the on-update trigger). --xaml-file FILE Replace the workflow's step logic with the XAML in this file (whole-definition replace). On-premises only — refuses on Dataverse. Mutually exclusive with the metadata flags above. --strict With --xaml-file: promote any reference- validation warning to a hard failure before writing. --rollback / --no-rollback With --xaml-file: on reactivation failure, restore the prior XAML (default). --no- rollback leaves the rejected XAML in place for inspection. --as-user GUID Impersonate systemuser by GUID via MSCRMCallerID header. Mutually exclusive with --as-user-object-id. --as-user-object-id GUID Impersonate by Entra ID object id (cloud) via CallerObjectId header. Mutually exclusive with --as-user. --suppress-dup-detection Send MSCRM.SuppressDuplicateDetection: true. --bypass-plugins Send MSCRM.BypassCustomPluginExecution: true (requires prvBypassCustomPluginExecution). --json Emit machine-readable JSON output. [global; also valid before the command] --fields KEY[,KEY...] Project the data payload down to these comma- separated top-level keys. [global; also valid before the command] --jq PROGRAM Run a jq program over the curated data payload; the result replaces data. Implies --json. [global; also valid before the command] --profile TEXT Connection profile name. [global; also valid before the command] --dry-run Preview writes without issuing them; reads run normally. [global; also valid before the command] -h, --help Show this message and exit. </code></pre></div> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var labels=set.querySelector(".tabbed-labels");for(var tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type="button" class="md-top md-icon" data-md-component="top" hidden> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg> Back to top </button> </main> <footer class="md-footer"> <nav class="md-footer__inner md-grid" aria-label="Footer" > <a href="../../how-to/translation/" class="md-footer__link md-footer__link--prev" aria-label="Previous: translation"> <div class="md-footer__button md-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg> </div> <div class="md-footer__title"> <span class="md-footer__direction"> Previous </span> <div class="md-ellipsis"> translation </div> </div> </a> <a href="../../changelog/" class="md-footer__link md-footer__link--next" aria-label="Next: Changelog"> <div class="md-footer__title"> <span class="md-footer__direction"> Next </span> <div class="md-ellipsis"> Changelog </div> </div> <div class="md-footer__button md-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class="md-copyright"> <div class="md-copyright__highlight"> Made by Ahmed Gharib </div> Made with <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener"> Material for MkDocs </a> </div> <div class="md-social"> <a href="https://github.com/Gharib89/crm" target="_blank" rel="noopener" title="crm on GitHub" class="md-social__link"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </a> </div> </div> </div> </footer> </div> <div class="md-dialog" data-md-component="dialog"> <div class="md-dialog__inner md-typeset"></div> </div> <script id="__config" type="application/json">{"annotate": null, "base": "../..", "features": ["navigation.tabs", "navigation.tabs.sticky", "navigation.sections", "navigation.top", "navigation.tracking", "navigation.indexes", "navigation.footer", "toc.follow", "search.suggest", "search.highlight", "search.share", "content.code.copy", "content.code.annotate", "content.tabs.link"], "search": "../../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script> <script src="../../assets/javascripts/bundle.d7400e89.min.js"></script> </body> </html>