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 ▾
400 Bad Request
| Code | When |
|---|
content-required | content is missing, blank, or the write is refused as empty content. |
id-invalid | The id contains / or is longer than 512 characters. |
nul-character | The text contains a U+0000 character. |
invalid-ingestion | The body has an unknown field, the batch is empty, has more than 1,000 items, or repeats an id. debugMessage names the item. |
audience-unknown | audience is set to a value other than omitted or project. |
invalid-deletion | The delete body is not valid: ids is empty, has more than 1,000 entries, or is not a list. |
identity-required | A recall carries no identity. |
recall-query-required | query is missing from a recall request. |
recall-sort-invalid | sort is not relevance or chronological. |
recall-range-invalid | occurredFrom is after occurredTo. |
recall-level-invalid | level is not low, medium, high or extra-high. |
recall-level-conflict | level and maxTokens are both sent. |
recall-budget-invalid | maxTokens is below 256. |
invalid-recall | limit is outside 1 to 200, or the body is not the shape of a recall. |
acting-user-required | An app-key call carries no X-Harny-User header. |
identity-invalid | An export names an identity that is empty or longer than 200 characters. |
cursor-invalid | An export cursor is not one this API returned. |
401 Unauthorized
| Code | When |
|---|
unauthorized | The key is missing, unknown or revoked. |
403 Forbidden
| Code | When |
|---|
identity-mismatch | A body identity does not match the acting user. |
404 Not Found
| Code | When |
|---|
not-found | The ingestionId is not a send of this user, or an exported identity is not a person of this app. |
data-point-not-found | The data point does not exist. With bulk delete, data.ids lists the missing ids and nothing is deleted. |
409 Conflict
| Code | When |
|---|
idempotency-conflict | The same idempotencyKey is sent with a different body. |
data-point-deleted | An id that has been deleted is sent again. |
memory-ids-unknown | A 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-processing | A data point you asked to delete is still being delivered. Nothing is deleted. Try again when the send completes. |
413 Payload Too Large
| Code | When |
|---|
content-too-large | content is over 500,000 characters, or a batch is over 16 MiB, or a webhook body is over 1 MiB. |
429 Too Many Requests
| Code | When |
|---|
project-cap-reached | A usage quota for your app is used up. |
export-rate-limited | One 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
| Code | When |
|---|
pipeline-disabled | Memory is switched off for the app. |
organization-not-ready | The 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.