{"record":{"id":"8b7e6f2cc7307d0f","repo":"RocketChat/Rocket.Chat","slug":"error-creator-not-in-room","errorCode":"error-creator-not-in-room","errorMessage":"The creator user must be part of the direct room","messagePattern":"The creator user must be part of the direct room","errorType":"exception","errorClass":"Meteor.Error","httpStatus":null,"severity":"error","filePath":"apps/meteor/server/lib/rooms/createDirectRoom.ts","lineNumber":160,"sourceCode":"\t\t\t\t$setOnInsert: generateSubscription(roomMembers[0].name! || roomMembers[0].username!, roomMembers[0].username!, roomMembers[0], {\n\t\t\t\t\t...options?.subscriptionExtra,\n\t\t\t\t}),\n\t\t\t},\n\t\t\t{ upsert: true },\n\t\t);\n\t\tif (modifiedCount || upsertedCount) {\n\t\t\tvoid notifyOnSubscriptionChangedByRoomIdAndUserId(rid, roomMembers[0]._id, modifiedCount ? 'updated' : 'inserted');\n\t\t}\n\t} else {\n\t\tconst memberIds = roomMembers.map((member) => member._id);\n\t\tconst membersWithPreferences: IUser[] = await Users.find(\n\t\t\t{ _id: { $in: memberIds } },\n\t\t\t{ projection: { 'username': 1, 'settings.preferences': 1 } },\n\t\t).toArray();\n\n\t\tconst creatorUser = roomMembers.find((member) => member._id === options?.creator);\n\t\tif (roomExtraData.federated && !creatorUser) {\n\t\t\tthrow new Meteor.Error('error-creator-not-in-room', 'The creator user must be part of the direct room');\n\t\t}\n\n\t\tconst roomNames = getNameForDMs(roomMembers);\n\n\t\tfor (const member of membersWithPreferences) {\n\t\t\tconst subscriptionStatus: Partial<ISubscription> =\n\t\t\t\troomExtraData.federated && options.creator !== member._id && creatorUser\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tstatus: 'INVITED',\n\t\t\t\t\t\t\tinviter: {\n\t\t\t\t\t\t\t\t_id: creatorUser._id,\n\t\t\t\t\t\t\t\tusername: creatorUser.username!,\n\t\t\t\t\t\t\t\tname: creatorUser.name,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\topen: true,\n\t\t\t\t\t\t\tunread: 1,\n\t\t\t\t\t\t\tuserMentions: 1,\n\t\t\t\t\t\t}","sourceCodeStart":142,"sourceCodeEnd":178,"githubUrl":"https://github.com/RocketChat/Rocket.Chat/blob/2a7de457074cbb4d4373fbd9a4e5bea292c9c764/apps/meteor/server/lib/rooms/createDirectRoom.ts#L142-L178","documentation":"createDirectRoom throws error-creator-not-in-room when a federated direct room is being created but the user specified in options.creator does not appear among the resolved room members. For federated DMs the server needs a local creator record to build INVITED subscriptions with an inviter, so a missing creator makes the room state impossible to construct.","triggerScenarios":"Calling createDirectRoom (directly or via createRoom/createDirectMessage) with roomExtraData.federated = true while options.creator is undefined or references a user id that is not in the members array resolved from the passed usernames/user objects. The check is `roomExtraData.federated && !creatorUser` where creatorUser = roomMembers.find(m => m._id === options?.creator).","commonSituations":"Federation apps calling the room creation API without passing creator; passing a creator id that was not included in the member list (e.g. expecting the server to add the creator implicitly); federation enabled in settings while an integration or app still uses the non-federated call shape.","solutions":["Ensure options.creator is set when creating federated direct rooms, e.g. { ...options, creator: options?.creator || owner?._id } (createRoom already does this for type 'd')","Verify the creator user id is included in the members array passed to createDirectRoom so roomMembers.find(...) resolves it","Check federation peer setup if the creator is a remote user: the local server must have the creator registered locally before creating the DM"],"exampleFix":"// before\nawait createDirectRoom(members, { federated: true }); // no creator\n\n// after\nawait createDirectRoom(members, { federated: true }, { creator: owner._id });","handlingStrategy":"validation","validationCode":"const creatorId = options?.creator || owner._id;\nconst memberIds = new Set(members.map(m => typeof m === 'string' ? m : m._id));\nif (extraData.federated && !memberIds.has(creatorId)) {\n  throw new Error(`Creator ${creatorId} must be included in members for federated DMs`);\n}\nawait createDirectRoom(members, extraData, { creator: creatorId });","typeGuard":"const isCreatorInMembers = (\n  members: IUser[] | string[],\n  creatorId: string | undefined,\n  federated: boolean,\n): boolean =>\n  !federated ||\n  (creatorId !== undefined &&\n    members.some(m => (typeof m === 'string' ? m === creatorId : m._id === creatorId)));","tryCatchPattern":"try {\n  await createDirectRoom(members, extraData, { creator });\n} catch (err) {\n  if (err instanceof Meteor.Error && err.error === 'error-creator-not-in-room') {\n    // include the creator id in members and retry once\n  }\n  throw err;\n}","preventionTips":["Always pass a resolved creator id when federated: true","Treat creator as an implicit member — validate membership before the call","Unit-test federated DM creation with and without the creator in members"],"tags":["federation","direct-message","room-creation","validation"],"backgroundTag":"invalid-request-parameters","analyzedSha":"2a7de457074cbb4d4373fbd9a4e5bea292c9c764","analyzedAt":"2026-08-18T15:26:39.429Z","schemaVersion":2},"datasetVersion":"2026-08-21T18:17:14.833Z"}