FishMem

Memory feedback

Read, set, or clear an audited quality signal on a memory.

GET /v1/memories/{id}/feedback

Returns the current feedback signal for one memory. A memory with no current signal returns 200 with feedback: null; an unknown or inaccessible memory returns 404 MEMORY_NOT_FOUND.

curl https://fishmem.com/v1/memories/mem_123/feedback \
  -H "Authorization: Bearer fm_..."

POST /v1/memories/{id}/feedback

Sets the current signal. FishMem Cloud requires an Idempotency-Key, so a network retry cannot append the same signal twice.

FieldTypeRequiredDescription
ratingstringyespositive, negative, or very_negative
reasonstringnoActionable explanation, at most 2,000 characters
request_idstringnoRetrieval/request trace that produced this result
curl -X POST https://fishmem.com/v1/memories/mem_123/feedback \
  -H "Authorization: Bearer fm_..." \
  -H "Idempotency-Key: support-answer-42-feedback-v1" \
  -H "Content-Type: application/json" \
  -d '{
    "rating": "negative",
    "reason": "The preference is no longer current",
    "request_id": "req_01H..."
  }'
{
  "feedback": {
    "id": "op_...:feedback",
    "memory_id": "mem_123",
    "rating": "negative",
    "reason": "The preference is no longer current",
    "request_id": "req_01H...",
    "created_at": "2026-07-31T13:00:00.000Z"
  }
}

DELETE /v1/memories/{id}/feedback

Clears the current signal. It does not erase the audit event. Cloud requires an Idempotency-Key.

curl -X DELETE https://fishmem.com/v1/memories/mem_123/feedback \
  -H "Authorization: Bearer fm_..." \
  -H "Idempotency-Key: support-answer-42-feedback-clear-v1"
{ "cleared": true }

Storage and ranking semantics

Feedback is an immutable FEEDBACK event in the same memory history and operation journal used by updates and deletes. It is therefore included in namespace export/import. Setting feedback does not rewrite memory content, metadata, importance, or vector projections.

The current release records feedback for audit, analysis, and future calibrated ranking. It does not silently train on a signal or change recall ranking at request time. Applications that know a fact is wrong should also call PUT /v1/memories/{id} or delete it explicitly.

SDK

const current = await fishmem.memories.getFeedback("mem_123");

await fishmem.memories.setFeedback(
  "mem_123",
  {
    rating: "negative",
    reason: "The preference is no longer current",
    request_id: "req_01H...",
  },
  { idempotencyKey: "support-answer-42-feedback-v1" },
);

await fishmem.memories.clearFeedback("mem_123", {
  idempotencyKey: "support-answer-42-feedback-clear-v1",
});

The same methods work through FishMemDesktop; the local call does not need the embedding model to be ready.

current = fishmem.memories.get_feedback("mem_123")
fishmem.memories.set_feedback(
    "mem_123",
    {"rating": "negative", "reason": "The preference is stale"},
    idempotency_key="support-answer-42-feedback-v1",
)
fishmem.memories.clear_feedback(
    "mem_123",
    idempotency_key="support-answer-42-feedback-clear-v1",
)

Credits

Feedback reads and writes are free.

On this page