Skip to main content

Limits

MemoClaw applies rate limits per wallet address to ensure fair usage.
ScopeLimitWindow
All endpoints100 requests1 minute
Extract / Consolidate10 requests1 minute
Rate limits are per wallet address, not per API key or IP. If you use the same wallet from multiple agents, they share the same limit.

Response Headers

Every response includes rate limit headers:
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 87
X-RateLimit-Reset: 1706889600
HeaderDescription
X-RateLimit-LimitMaximum requests allowed in the window
X-RateLimit-RemainingRequests remaining in the current window
X-RateLimit-ResetUnix timestamp when the window resets

Handling 429 Responses

When rate limited, you’ll receive a 429 response:
{
  "error": {
    "code": "RATE_LIMIT_EXCEEDED",
    "message": "Rate limit exceeded",
    "details": {
      "limit": 100,
      "reset_at": "2025-01-15T12:00:00Z"
    }
  }
}

Retry Strategy

Use exponential backoff with the X-RateLimit-Reset header:
import time
from memoclaw import MemoClaw, RateLimitError

client = MemoClaw()

def recall_with_retry(query, max_retries=3):
    for attempt in range(max_retries):
        try:
            return client.recall(query)
        except RateLimitError as e:
            if attempt == max_retries - 1:
                raise
            wait = 2 ** attempt
            time.sleep(wait)

Tips

  • Batch stores instead of individual calls — POST /v1/store/batch handles up to 100 memories in one request
  • Use ingest instead of multiple extract + store calls
  • Cache recall results client-side when the same query is used repeatedly