RocketChat/Rocket.Chat · error · Error
Param " " must be an array if provided
Error message
Param "${params.members.key}" must be an array if provided What it means
Validation error from POST channels.create: the optional members parameter was provided but is not an array. The API expects members to be a JSON array of usernames to invite on creation; sending a comma-separated string, a single string, or an object fails this check.
Solutions
- Send members as a JSON array of username strings: members: ["alice", "bob"]
- When accepting free-text input client-side, split and trim: input.split(',').map(s => s.trim()).filter(Boolean)
- Omit members entirely when there are none to invite — it is optional
Example fix
// before
{ "name": "dev-talk", "members": "alice,bob" }
// after
{ "name": "dev-talk", "members": ["alice", "bob"] } Defensive patterns
Strategy: type-guard
Validate before calling
if (body.members !== undefined && !Array.isArray(body.members)) {
body.members = String(body.members).split(',').map((s) => s.trim()).filter(Boolean);
} Type guard
const isUsernameArray = (m: unknown): m is string[] => Array.isArray(m) && m.every((x) => typeof x === 'string');
Try / catch
try { await POST('/api/v1/channels.create', body); } catch (e) {
if (/must be an array if provided/.test(e.message)) { /* coerce members to array and retry */ }
} Prevention
- Always send members as a JSON array of username strings
- Split-and-trim comma input at the UI boundary, not on the server
When it happens
Trigger: POST /api/v1/channels.create with members: "alice,bob", members: "alice", or members: {"0":"alice"} instead of members: ["alice","bob"].
Common situations: Joining a split string without .split(','); passing a single username for convenience; form data parsed as object instead of array; serialization library converting single-element arrays to scalars (common with PHP http_build_query or some XML->JSON paths).
Related errors
- Param " " must be an object if provided
- Param " " is required
- Param must be an array
- error-not-allowed
- error-room-archived
AI-assisted analysis of RocketChat/Rocket.Chat@e4b8178b20 (2026-08-18).
Data as JSON: /api/errors/e58a1f299e1c2eeb.
Report an issue: GitHub.
Appendix: source
Thrown at apps/meteor/server/api/v1/channels.ts:1023
teams?: { key: string; value?: string[] };
teamId?: { key: string; value?: string };
}) {
const teamId = params.teamId?.value;
const team = teamId && (await Team.getInfoById(teamId));
if (
(!teamId && !(await hasPermissionAsync(params.user.value, 'create-c'))) ||
(teamId && team && !(await hasPermissionAsync(params.user.value, 'create-team-channel', team.roomId)))
) {
throw new Error('unauthorized');
}
if (!params.name?.value) {
throw new Error(`Param "${params.name?.key}" is required`);
}
if (params.members?.value && !Array.isArray(params.members.value)) {
throw new Error(`Param "${params.members.key}" must be an array if provided`);
}
if (params.customFields?.value && !(typeof params.customFields.value === 'object')) {
throw new Error(`Param "${params.customFields.key}" must be an object if provided`);
}
if (params.teams?.value && !Array.isArray(params.teams.value)) {
throw new Error(`Param ${params.teams.key} must be an array`);
}
}
async function createChannel(
userId: string,
params: {
name?: string;
members?: string[];
customFields?: Record<string, any>;
extraData?: Record<string, any>;View on GitHub (pinned to e4b8178b20)