mem0ai/mem0 · warning · NodeOperationError

Mem0 memory event ${eventId} failed: ${reason}

Error message

Mem0 memory event ${eventId} failed: ${reason}

What it means

The /auth endpoints enforce a minimum password length of 8 characters (MIN_PASSWORD_LENGTH in server/routers/auth.py). _require_password_length runs on registration (and any flow reusing it) before any DB write, rejecting shorter passwords with 400. This is a local policy check independent of bcrypt's own 72-byte limit.

Source

Thrown at integrations/n8n-nodes-mem0/nodes/Mem0/Mem0.node.ts:613

}

// Polls GET /v1/event/{id}/ until the memory-addition event resolves.
async function pollEvent(
	request: (m: IHttpRequestMethods, u: string) => Promise<IDataObject>,
	eventId: string,
	ctx: IExecuteFunctions,
	itemIndex: number,
): Promise<IDataObject | IDataObject[]> {
	for (let attempt = 0; attempt < MAX_POLL_ATTEMPTS; attempt++) {
		const event = await request('GET', `/v1/event/${encodeURIComponent(eventId)}/`);
		const status = event.status as string;
		if (status === 'SUCCEEDED') {
			// Match the shape of search/getAll (a clean array); fall back to the envelope.
			return Array.isArray(event.results) ? (event.results as IDataObject[]) : event;
		}
		if (status === 'FAILED') {
			const reason = (event.error as string) || (event.message as string) || 'unknown error';
			throw new NodeOperationError(
				ctx.getNode(),
				`Mem0 memory event ${eventId} failed: ${reason}`,
				{ itemIndex },
			);
		}
		await sleep(POLL_INTERVAL_MS);
	}
	throw new NodeOperationError(
		ctx.getNode(),
		`Timed out waiting for memory event ${eventId} to complete`,
		{ itemIndex },
	);
}

View on GitHub (pinned to 001c235229)

Solutions

  1. Use a password of at least 8 characters when registering.
  2. Align frontend validation with the 8-character minimum so the error never reaches the server.
  3. Mirror the rule in client-side form validation: minlength=8 on the input.

Example fix

<!-- before -->
<input type="password" name="password" minlength="4" required>

<!-- after -->
<input type="password" name="password" minlength="8" required>
Defensive patterns

Strategy: validation

Validate before calling

MIN_PASSWORD_LENGTH = 8

def validate_password(pw: str) -> str:
    if len(pw) < MIN_PASSWORD_LENGTH:
        raise ValueError(f"Password must be at least {MIN_PASSWORD_LENGTH} characters.")
    return pw

Type guard

def is_valid_password(pw: str | None) -> bool:
    return isinstance(pw, str) and len(pw) >= 8

Prevention

When it happens

Trigger: POST /auth/register with password '1234567' (7 chars) or shorter; onboarding flows whose frontend allows shorter passwords than the server; whitespace-trimmed passwords that drop below 8 characters.

Common situations: Quick local testing with throwaway passwords like 'test'; frontend validation set to 6 chars while the server requires 8; password managers generating short passphrases for sandbox environments.

Related errors


AI-assisted analysis of mem0ai/mem0@001c235229 (2026-08-15). Data as JSON: /api/errors/14916940f156bff2. Report an issue: GitHub.