Skip to content

Flow action inputs and outputs

Detailed page. Use “On this page” to jump directly to the section you need.

Build a Flow that runs one Check Set or Check, branches on the returned Status, or validates every Check definition before activation.

Use the packaged Flow actions to evaluate a Salesforce record or validate Record Health Check configuration without writing Apex. A Flow can run one Check or a complete Check Set, then use a Decision element to respond to the result. An administrator Flow can also audit every active definition and inactive draft before activation.

Start with the Check Set action unless your Flow intentionally needs only one specific Check.

For the complete New Flow, trigger, Action, Decision, debug, and rollback recipe, start with Run Record Health Check from Flow. Use this page as the complete input/output and limits reference after that first build.

Salesforce can send a collection of Flow inputs to one action call. Each packaged action accepts at most 200 inputs, using no more than ten distinct Check-or-Check-Set and Event Publication combinations. If a Check Set contains more than 25 active Checks, Flow rejects the entire request with LIMIT and FRAMEWORK_MAX_CHECKS_EXCEEDED; it does not run a partial first page.

What does your Flow need?ActionWhat you will receive
The complete health assessment configured for a recordRun Record Health Check SetOverall status, outcome counts, and every Check result as JSON
One specific health decisionRun Record Health CheckCheck Status, Reason Code, and the complete result as JSON
A pre-activation audit of all Check Sets and ChecksValidate Record Health Check ConfigurationValid flag, error and warning counts, and the complete validation report as JSON

A Check Set is the normal starting point because it keeps the Flow aligned with the same ordered Checks users see on the Lightning record page.

This pattern runs a Check Set for one record and sends healthy and unhealthy results down different Flow paths.

  • Create or install an active Check Set with at least one active Check.
  • Assign the Flow’s running user the Record Health Check User Permission Set, or equivalent access to the packaged Flow action and RecordHealthCheck Apex class.
  • Copy the Check Set’s exact Qualified API Name from Setup. An administrator-created Check Set in your org might be Account_Readiness. A Check Set included with the installed package might be rhc__Example_Account_Check_Builder_Guide. Do not add or remove rhc__ yourself.
  • Make the current record ID available to the Flow.
  1. In Flow Builder, add an Action element.
  2. Search the Record Health Check category.
  3. Select Run Record Health Check Set.
  4. Set Check Set Qualified API Name to the exact QualifiedApiName returned by Salesforce.
  5. Set Record ID to the ID of the record you want to evaluate.
  6. Set Event Publication to NONE. The Flow already receives the result directly, so it does not need a Platform Event unless a separate process must also receive the result.

Event Publication is required. In Flow Builder, choose the value whose API form is NONE, ACTIONABLE, or ALL; use NONE for this recipe. Do not parse Result JSON when Status, counts, and Reason Code already provide the decision data.

Step 2: Check whether the action succeeded

Section titled “Step 2: Check whether the action succeeded”

Add a Decision element immediately after the action:

  • When Success is false, route by Error Type and record the safe Error Message for an administrator.
  • When Success is true, continue to the Status Decision described next.

Do not read Status or the count outputs when Success is false because the action did not produce a health result for that input.

After the Success = true path, add another Decision element with explicit branches for the returned Status.

Decision outcomeStatusRecommended use
HealthyPASSContinue the normal business process
Needs attentionFAILGuide the user or automation to review the unhealthy conditions
Not applicableSKIPPEDContinue only when skipping is acceptable for this process
Could not determineUNABLE_TO_EVALUATERoute for configuration, access, required data, or Salesforce limit review
System problemERRORRoute for technical investigation

Route PASS, FAIL, SKIPPED, UNABLE_TO_EVALUATE, and ERROR separately. UNABLE_TO_EVALUATE and ERROR need their own handling because neither confirms that the record is healthy.

Connect the action’s fault connector. Returned statuses and Flow faults are different:

ResultHow Flow receives itHow to handle it
PASS, FAIL, SKIPPED, UNABLE_TO_EVALUATE, or ERRORNormal action outputUse the Decision element
Missing authorization, invalid input, too many inputs or groups, response too large, or another recoverable execution problemNormal action output with Success falseBranch on Error Type and inspect Error Message
Unhandled platform or transaction failureFlow faultUse the fault connector

Test with records that produce each status your Flow handles. Also test using the same user context and access model that the activated Flow will use.

TestWhat to confirm
Healthy recordThe Flow follows the PASS path
Unhealthy recordThe Flow follows the FAIL path
Check that does not applyThe Flow follows the SKIPPED path
User missing required record or field accessThe Flow handles UNABLE_TO_EVALUATE or the documented fault path
Invalid API nameThe action returns Success false, with a safe error type and message

All three actions appear under the Record Health Check category in Flow Builder.

This action runs every active Check in one Check Set. Its Apex implementation is RecordHealthCheckRunSetFlowAction.

InputRequiredWhat to provide
Check Set Qualified API NameYesExact value copied from Setup, such as Account_Readiness for an administrator-created Check Set or rhc__Example_Account_Check_Builder_Guide for an installed example
Record IDYesID of the Salesforce record to evaluate
Event PublicationYesUse NONE for no Platform Events; ACTIONABLE for actionable Check Results plus a completed Set Run heartbeat; or ALL for every result, including PASS and SKIPPED.
OutputWhat it tells youTypical Flow use
SuccessWhether this input produced an evaluation responseBranch before reading Status or counts
Error TypeAUTHORIZATION, VALIDATION, LIMIT, or EXECUTION for a recoverable action problemRoute stable error categories without parsing text
Error MessageSafe explanation when Success is falseLog or display administrator guidance
StatusOverall Check Set resultBranch in a Decision element
Passed CountNumber of Checks that passedDisplay or record a summary
Failed CountNumber of Checks that found an unhealthy conditionDecide whether review is required
Skipped CountNumber of Checks that did not apply or did not runIdentify intentionally omitted checks
Unable CountNumber of Checks that could not reach a reliable conclusionRoute for configuration or access review
System Error CountNumber of Checks with unexpected execution problemsRoute for technical investigation
Result JSONComplete serialized RecordHealthCheckResponse for the input recordUse only when later Flow elements or another integration need Check-level fields not exposed separately
Contract VersionVersion carried by the returned responsePreserve and inspect it when a long-lived integration stores or forwards the response

Flow actions always request the evaluation-only result mode. Result JSON therefore omits display messages, formatted values, and actions, regardless of the running user’s diagnostics permission. An Apex caller that is building a user interface can explicitly request EVALUATION_WITH_DISPLAY; Flow automation should branch on the stable evaluation fields above.

The overall Set status reflects the most serious contained result:

ERROR → UNABLE_TO_EVALUATE → FAIL → PASS → SKIPPED

For example, one Check that is unable to evaluate makes the Set status UNABLE_TO_EVALUATE, even when other Checks pass.

This action runs one Check. Its Apex implementation is RecordHealthCheckRunCheckFlowAction.

InputRequiredWhat to provide
Check Qualified API NameYesExact value copied from Setup, such as Billing_City_Is_Populated for an administrator-created Check or rhc__Example_Guide_Industry_Manufacturing for an installed example
Record IDYesID of the Salesforce record to evaluate
Event PublicationYesUse NONE for no Platform Events; ACTIONABLE for actionable Check Results plus a completed Set Run heartbeat; or ALL for every result, including PASS and SKIPPED.
OutputWhat it tells youTypical Flow use
SuccessWhether this input produced an evaluation responseBranch before reading Status or Reason Code
Error TypeAUTHORIZATION, VALIDATION, LIMIT, or EXECUTION for a recoverable action problemRoute stable error categories without parsing text
Error MessageSafe explanation when Success is falseLog or display administrator guidance
StatusPASS, FAIL, SKIPPED, UNABLE_TO_EVALUATE, or ERRORBranch in a Decision element
Reason CodeStable technical reason for a non-normal resultRoute or log a known condition without reading message text
Result JSONComplete serialized RecordHealthCheckResultItemUse when later Flow elements or another integration need additional result fields
Contract VersionVersion carried by the returned responsePreserve and inspect it when a long-lived integration stores or forwards the response

The success value is PASS, not SUCCESS.

Validate Record Health Check Configuration

Section titled “Validate Record Health Check Configuration”

This administrator action audits every Check Set and Check, including inactive drafts. Its Apex implementation is RecordHealthCheckValidateMetadataAction.

The action has no inputs. Add it to an administrator-only autolaunched or screen Flow and run it after Custom Metadata changes and before activation. The running user needs access to the packaged action; Record Health Check Admin provides that access.

OutputWhat it tells youTypical Flow use
Configuration Is Validtrue when the audit found no errorsBlock an activation or deployment handoff while false
Error CountNumber of findings that make configuration invalidRequire correction before activation
Warning CountNumber of advisory findings that need reviewRoute for administrator review without treating the configuration as invalid
Validation Report JSONStructured list of every finding, including severity, component, field, Reason Code, and messageDisplay, log, or pass the detailed report to an approved review process

The validator uses the same required-field, query-shape, identity, dependency, and compatibility checks used by runtime configuration loading. Correct every error and review every warning before users or automation rely on the affected Check Set.

StatusPlain-language meaningIs it a Flow fault?
PASSThe configured health condition is satisfiedNo
FAILEvaluation completed and found an unhealthy business conditionNo
SKIPPEDThe Check intentionally did not run because of applicability, dependency, or stop behaviorNo
UNABLE_TO_EVALUATEConfiguration, access, required data, or a Salesforce limit prevented a reliable conclusionNo
ERRORAn unexpected evaluator or platform problem occurredNo; route the returned status, then investigate

Use Reason Code or the documented count outputs for automation. Branch automation on Status, Reason Code, and Qualified API Name; administrators can change message text without changing the result meaning.

Evaluation uses the effective Salesforce access of the Flow’s running user. The actions do not elevate record, object, field, or sharing access.

Flow contextWhat to test
User-run screen flowTest with representative users and their actual record and field access
Record-triggered or other automated FlowConfirm the configured execution context and effective access
Troubleshooting with diagnosticsAdd Record Health Check Diagnostics Viewer temporarily to the affected runner and remove it when no longer needed

A user-run screen Flow and system-context automation can produce different results for the same record. Always test in the Flow’s actual run context.

No-rows behavior is also context-relative: it means the Flow transaction’s effective user-mode scope contained no matching visible rows. The action does not issue an elevated comparison query to discover rows hidden by sharing, restriction rules, or scoping rules.

Flow sends a collection of requests to the packaged action. The public limits apply to each call.

LimitMaximumWhat to do when you exceed it
Flow requests200Split the collection across transactions
Distinct Check-or-Check-Set and Event Publication combinations in one action call10Use fewer Check identities or publication choices in the call, or split the work across transactions.
Combined Result JSON returned by one action call2,000,000 charactersUse fewer records or a smaller Check Set per transaction.

The 200-input cap does not guarantee that every collection of 200 will fit in one Salesforce transaction. Each Check can use query, formula, Apex CPU-time, and memory limits. Use fewer records or a smaller Check Set when realistic testing reaches one of those limits.

The action runs inside the current Flow transaction. If later Flow work causes Salesforce to roll back that transaction, Platform Events configured to publish after commit are not delivered.

Troubleshoot faults and unexpected results

Section titled “Troubleshoot faults and unexpected results”
What you seeLikely causeWhat to investigate
LIMIT error for more than 200 requestsThe request collection exceeds the public capSplit the collection across transactions
VALIDATION or EXECUTION responseThe supplied input is missing, malformed, or could not be evaluatedInspect Error Message, then verify the exact QualifiedApiName and activation
Salesforce access fault or unable resultThe running user lacks required record, object, field, or Apex accessGrant only the required access and retest in the same Flow context
Governor-limit faultThe transaction has insufficient remaining Salesforce limitsReduce other work or run the evaluation in a separate transaction
FAIL returned as a normal outputThe Check found an unhealthy business conditionRoute the status with a Decision element; keep the fault connector for invalid requests and transaction failures

Use the reason-code reference when the action returns a code you do not recognize.

The Flow outputs are enough for most automation. Use Platform Events only when a separate Flow, Apex trigger, or external integration must also receive the results after Salesforce successfully commits the Flow transaction.

Event Publication inputPlatform Events from the Flow call
NONENo Set Run or Check Result events. Use this when the current Flow handles the result itself.
ACTIONABLECheck Result events only for FAIL, UNABLE_TO_EVALUATE, and ERROR, plus a completed Set Run heartbeat for every scanned record.
ALLA Check Result event for every result, including PASS and SKIPPED, plus the Set Run event.

Event Publication is required, so explicitly use NONE when no event is needed. For Flow calls, this input controls result publication directly. The Check Set’s Publish User Run Event and the Check’s Publish User Result Event settings control user-initiated Lightning-card runs; they do not override the Flow input.

Flow-published events use Source__c = FLOW. Publication can fail and does not change the result returned to Flow. A successful Flow action does not prove that the receiving Flow, Apex trigger, or integration completed.

Record Health Check ERROR diagnostics are separate from these result events. The Check Set’s default-off PublishErrorLogEvent__c controls Record_Health_Check_Log__e; enable it only after assigning Record Health Check Error Log Publisher to the running identity. Leaving it off does not disable Salesforce debug logs.

Receiving automation must tolerate repeated or replayed delivery. Use EventId__c so the same event does not create the same follow-up work twice. For the complete event fields and receiving-process guidance, see Lifecycle events.

Flow responses and lifecycle events carry independent contract-version fields because they are different response shapes. Do not substitute one field for the other or infer either value from the installed package release.

The version is useful when a Flow result is stored, serialized, or passed to another integration: it identifies the shape of that response. It is separate from the Record Health Check product version so compatible product updates do not require every Flow to be rebuilt.

New JSON fields can be added without changing the existing fields, so integrations should ignore fields they do not recognize.