Memory API

Errors

Every refusal uses a JSON body with code, status, debugMessage and data, except the per-minute limit, which answers with no body.

Copy page
View as Markdown

400 Bad Request

CodeWhen
content-requiredcontent is missing, blank, or the write is refused as empty content.
id-invalidThe id contains / or is longer than 512 characters.
nul-characterThe text contains a U+0000 character.
invalid-ingestionThe body has an unknown field, the batch is empty, has more than 1,000 items, or repeats an id. debugMessage names the item.
audience-unknownaudience is set to a value other than omitted or project.
invalid-deletionThe delete body is not valid: ids is empty, has more than 1,000 entries, or is not a list.
identity-requiredA recall carries no identity.
recall-query-requiredquery is missing from a recall request.
recall-sort-invalidsort is not relevance or chronological.
recall-range-invalidoccurredFrom is after occurredTo.
recall-level-invalidlevel is not low, medium, high or extra-high.
recall-level-conflictlevel and maxTokens are both sent.
recall-budget-invalidmaxTokens is below 256.
invalid-recalllimit is outside 1 to 200, or the body is not the shape of a recall.
acting-user-requiredAn app-key call carries no X-Harny-User header.
identity-invalidAn export names an identity that is empty or longer than 200 characters.
cursor-invalidAn export cursor is not one this API returned.

401 Unauthorized

CodeWhen
unauthorizedThe key is missing, unknown or revoked.

403 Forbidden

CodeWhen
identity-mismatchA body identity does not match the acting user.

404 Not Found

CodeWhen
not-foundThe ingestionId is not a send of this user, or an exported identity is not a person of this app.
data-point-not-foundThe data point does not exist. With bulk delete, data.ids lists the missing ids and nothing is deleted.

409 Conflict

CodeWhen
idempotency-conflictThe same idempotencyKey is sent with a different body.
data-point-deletedAn id that has been deleted is sent again.
memory-ids-unknownA data point you asked to delete finished its delivery after the call that sent it returned, so its memories are not recorded. Erase the user's data instead.
data-point-processingA data point you asked to delete is still being delivered. Nothing is deleted. Try again when the send completes.

413 Payload Too Large

CodeWhen
content-too-largecontent is over 500,000 characters, or a batch is over 16 MiB, or a webhook body is over 1 MiB.

429 Too Many Requests

CodeWhen
project-cap-reachedA usage quota for your app is used up.
export-rate-limitedOne person was exported 5 times in the last hour. Retry-After gives the seconds to wait.

A per-minute 429 has an empty body and a Retry-After header.

503 Service Unavailable

CodeWhen
pipeline-disabledMemory is switched off for the app.
organization-not-readyThe memory service is not ready. Retry after a short wait.

Retrying

Retry on 429 and 503. Wait the seconds in Retry-After when it is present. For a send that stopped partway, send the same idempotencyKey and the same body: a finished send returns its original receipt and does not run twice, and a batch resumes at the item that was refused.