mem0ai/mem0 · error

The timestamp parameter is not supported by the OSS Memory S

Error message

The timestamp parameter is not supported by the OSS Memory SDK.

What it means

Memory.add() rejects the timestamp option because temporal memory features are platform-only; when config.timestamp !== undefined the SDK fetches a notice id and throws a feature-gate message (which contains this base text) explaining the parameter is not supported by the OSS SDK. This prevents silently ignoring temporal data you intended to store.

Source

Thrown at mem0-ts/src/oss/src/memory/index.ts:726

    }
  }

  async updateProject(options: UpdateProjectOptions = {}): Promise<never> {
    if (options?.decay === true) {
      await this._getNoticeTelemetryId();
      throw new Error(await getDecayFeatureErrorMessage(this));
    }

    throw new Error("Project updates are not supported by the OSS Memory SDK.");
  }

  async add(
    messages: string | Message[],
    config: AddMemoryOptions,
  ): Promise<SearchResult> {
    if (config?.timestamp !== undefined) {
      await this._getNoticeTelemetryId();
      throw new Error(
        await getTemporalFeatureErrorMessage(this, {
          triggerFunction: "add",
          triggerParameter: "timestamp",
        }),
      );
    }

    // Validate messages input
    if (messages === undefined || messages === null) {
      throw new Error(
        "messages is required and cannot be undefined or null. Provide a string or array of messages.",
      );
    }
    if (Array.isArray(messages)) {
      if (messages.length === 0) {
        throw new Error(
          "messages array cannot be empty. Provide at least one message with non-empty content.",
        );

View on GitHub (pinned to 001c235229)

Solutions

  1. Remove the timestamp option from add() calls; rely on the SDK's internal recording of when memories were created.
  2. If you need custom temporal data self-hosted, store it in the memory's own content/metadata you control rather than the timestamp param.
  3. Use the hosted MemoryClient (which accepts timestamp) if temporal memory is a requirement.
  4. Check other temporal parameters in the same feature family before shipping — they are gated identically.

Example fix

// before
await memory.add('moved to Berlin', { filters: { userId: 'u1' }, timestamp: 1672531200 }); // throws

// after
await memory.add('moved to Berlin in Jan 2023', { filters: { userId: 'u1' } }); // time expressed in content
Defensive patterns

Strategy: validation

Validate before calling

function stripUnsupportedOssOptions<T extends Record<string, any>>(options: T): T {
  const { timestamp, ...rest } = options;
  return rest as T; // OSS add() rejects timestamp
}

Type guard

function hasOssUnsupportedTemporalParams(options: Record<string, unknown>): boolean {
  return options?.timestamp !== undefined;
}

Try / catch

try {
  await memory.add(text, opts);
} catch (err) {
  if (err instanceof Error && /timestamp parameter is not supported by the OSS/.test(err.message)) {
    const { timestamp, ...rest } = opts as any;
    await memory.add(text, rest);
    return;
  }
  throw err;
}

Prevention

When it happens

Trigger: Calling memory.add(text, { timestamp: 1710000000 }) or { timestamp: new Date().toISOString() } on an OSS Memory instance — anything where the timestamp key is present and not undefined.

Common situations: Backfilling memories with historical event times, porting hosted-client code that supports timestamp, or adding createdAt-style metadata via the timestamp option in self-hosted deployments.

Related errors


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