Plans and Limits

November 26, 2025 ยท View on GitHub

SerialMemory uses a credit-based system to meter usage. Different plans provide different credit allocations and limits.

Plans Overview

FeatureFreeStarterProEnterprise
Monthly Credits1001,00010,000Unlimited
Rate Limit (RPM)1060300Custom
Rate Limit (RPD)1001,00010,000Custom
Max Memories1,00010,000100,000Unlimited
Max Entities5005,00050,000Unlimited
Max Memory Size10KB50KB100KBCustom
Data ExportBasicFullFullFull
SupportCommunityEmailPriorityDedicated

Credit Costs

OperationCredits
memory_ingest1.0
memory_search0.5
memory_update0.5
memory_delete0.1
memory_multi_hop_search1.0
memory_about_user0.1
set_user_persona0.2

The /tenant/limits Endpoint

SDKs can call GET /tenant/limits to get current usage information.

Response Fields

{
  "plan": "starter",
  "displayName": "Starter Plan",

  "monthlyCredits": 1000,
  "creditsUsed": 450,
  "creditsRemaining": 550,
  "daysUntilReset": 15,
  "cycleResetAt": "2024-02-01T00:00:00Z",

  "rateLimitRpm": 60,
  "rateLimitRpd": 1000,

  "maxMemories": 10000,
  "maxEntities": 5000,
  "maxMemorySizeBytes": 51200,

  "currentMemories": 2500,
  "currentEntities": 1200,

  "warnings": [
    {
      "type": "credits",
      "message": "You have used 75% of your monthly credits",
      "percentUsed": 75,
      "severity": "info"
    }
  ]
}

Field Descriptions

FieldDescription
planPlan identifier (free, starter, pro, enterprise)
displayNameHuman-readable plan name
monthlyCreditsTotal credits allocated per billing cycle
creditsUsedCredits consumed this cycle
creditsRemainingCredits available until reset
daysUntilResetDays until credit counter resets
cycleResetAtTimestamp when credits reset
rateLimitRpmRequests per minute limit
rateLimitRpdRequests per day limit
maxMemoriesMaximum memories allowed (null = unlimited)
maxEntitiesMaximum entities allowed (null = unlimited)
maxMemorySizeBytesMaximum size per memory
currentMemoriesCurrent memory count
currentEntitiesCurrent entity count
warningsActive warnings about approaching limits

Warning Severities

SeverityThresholdMeaning
info75%Approaching limit, no action required
warning90%Near limit, consider upgrading
critical95%+At or over limit, requests may fail

Rate Limiting

When rate limits are exceeded, the API returns:

  • HTTP Status: 429 Too Many Requests
  • Header: Retry-After: <seconds>

SDKs automatically:

  1. Detect the 429 response
  2. Read the Retry-After header
  3. Wait and retry the request

Usage Limit Exceeded

When credit limits are exceeded, the API returns:

  • HTTP Status: 402 Payment Required
  • Body: {"error": "usage_limit_exceeded", "message": "..."}

Options when this occurs:

  1. Wait for the billing cycle to reset
  2. Upgrade to a higher plan
  3. Contact support for additional credits

SDK Integration

.NET

client.OnUsageWarning += warning =>
{
    if (warning.Severity == "critical")
    {
        // Alert or pause operations
    }
};

var limits = await client.GetLimitsAsync();
if (limits.CreditsRemaining < 50)
{
    // Consider reducing operations
}

Node.js

client.onUsageWarning = (warning) => {
  if (warning.severity === 'critical') {
    // Alert or pause operations
  }
};

const limits = await client.getLimits();
if (limits.creditsRemaining < 50) {
  // Consider reducing operations
}

Self-Hosted Mode

When running in self-hosted mode (SERIALMEMORY_MODE=self-hosted), limits are:

  • Unlimited credits - No credit metering
  • No rate limits - Subject to your infrastructure
  • No hard caps - Subject to your storage

Self-hosted mode bypasses all usage enforcement, suitable for:

  • Development environments
  • Private deployments
  • Unlimited usage scenarios

Next Steps