twentyhq/twenty · error · Error

Failed to merge records

Error message

Failed to merge records

What it means

Thrown by useMergeRecordsActions (useMergeRecordsActions.ts:47-49) when mergeManyRecords returns a falsy mergedRecord. This indicates the merge mutation did not return the merged record, either due to a server error swallowed in the response or a schema/metadata mismatch.

Source

Thrown at packages/twenty-front/src/modules/object-record/record-merge/hooks/useMergeRecordsActions.ts:46

  const setIsMergeInProgress = useSetAtomState(isMergeInProgressState);

  const { t } = useLingui();
  const { enqueueSuccessSnackBar, enqueueErrorSnackBar } = useSnackBar();
  const { closeSidePanelMenu } = useSidePanelMenu();

  const navigate = useNavigateApp();
  const handleMergeRecords = async () => {
    setIsMergeInProgress(true);
    try {
      const mergedRecord = await mergeManyRecords({
        recordIds: selectedRecords.map((record) => record.id),
        mergeSettings,
        preview: false,
      });

      if (!mergedRecord) {
        throw new Error('Failed to merge records');
      }

      const recordCount = selectedRecords.length;

      enqueueSuccessSnackBar({
        message: t`Successfully merged ${recordCount} records`,
      });
      closeSidePanelMenu();

      navigate(AppPath.RecordShowPage, {
        objectNameSingular,
        objectRecordId: mergedRecord.id,
      });
    } catch (error) {
      enqueueErrorSnackBar({
        message:
          error instanceof Error
            ? error.message

View on GitHub (pinned to 1f5dd2bbd2)

Solutions

  1. Refresh object metadata and retry the merge.
  2. Inspect the mergeManyRecords mutation response in Apollo devtools.
  3. Verify the current user has permission to merge the selected records.
  4. Check server logs for merge resolver errors returning null.
Defensive patterns

Strategy: try-catch

Type guard

const hasMergedRecord = <T>(r: T | null | undefined): r is T =>
  isDefined(r);

Try / catch

try {
  await handleMergeRecords();
} catch (err) {
  if (err.message === 'Failed to merge records') {
    enqueueErrorSnackBar({ message: t`Merge failed, please try again` });
  }
}

Prevention

When it happens

Trigger: User clicks merge with selected records, mergeManyRecords resolves, but the returned mergedRecord is undefined/null.

Common situations: Stale object metadata causing a malformed merge mutation; server-side merge validation failure returning partial/null data; Apollo cache returning an incomplete object; permissions issue preventing the merge from completing.

Related errors


AI-assisted analysis of twentyhq/twenty@1f5dd2bbd2 (2026-08-12). Data as JSON: /api/errors/e0bea03be0d96131. Report an issue: GitHub.