Docs Memory API

Endpoint reference

Every endpoint, grouped by resource. All requests need a bearer key; all bodies are JSON.

#Endpoints

MethodPathPurpose
POST/v1/recordsIngest one record
POST/v1/records:batchIngest many records
GET/v1/records/{sourceId}Read a stored record
DELETE/v1/records/{sourceId}Delete a record and dependent memories
GET/v1/jobs/{jobId}Processing state of a send
POST/v1/recallRanked memories for a query
POST/v1/answerA cited answer composed from recall
GET/v1/memoriesList memories (filter by state, source, viewer)
PUT/v1/identities/{id}Create or update an identity
GET/v1/identities/{id}Read an identity
DELETE/v1/identities/{id}Remove an identity (optionally its records)
PUT/v1/audiences/{slug}Create or update an audience
GET/v1/audiencesList audiences
DELETE/v1/audiences/{slug}Delete an audience
POST/v1/sourcesCreate a webhook source
GET/v1/sources/{id}/eventsRecent webhook deliveries
GET/v1/projectProject, plan and limits
GET/v1/usageCredits used by day and endpoint

#POST /v1/records

POST/v1/records

Accept one record for processing.

FieldTypeDescription
textstring, requiredThe content. Empty or whitespace-only text is rejected.
sourceIdstringYour stable id. Re-sending replaces the record. Defaults to a hash of text.
occurredAtISO 8601When it happened. Defaults to now for new records.
titlestringShort label returned in sources.
authorstringIdentity id of the writer (≤ 200 chars).
visibilitystringproject, audience:{slug} or user:{id}.
metadataobjectYour JSON, returned with sources.

Responses: 202 { jobId, sourceId, state: "queued" }, or 200 { sourceId, state: "unchanged" }.

#POST /v1/recall

POST/v1/recall

Return memories visible to the viewer that answer the query.

FieldTypeDescription
querystring, requiredNatural-language question or topic.
viewerstring, requiredIdentity whose view to use.
asOfISO 8601Return what was current at this time.
maxTokensintegerBudget for the response, up to your plan’s limit.
includeHistorybooleanInclude superseded versions (default true).
200 OK
{
  "memories": [
    {
      "id": "mem_7Q2…",
      "text": "Halden Outdoor's renewal starts on 1 November 2026.",
      "state": "current",
      "validFrom": "2026-09-12T15:30:00Z",
      "validTo": null,
      "visibility": "audience:account-team",
      "sources": [{ "sourceId": "crm-4471", "title": "Renewal call notes",
                    "occurredAt": "2026-09-12T15:30:00Z",
                    "excerpt": "wants the renewal moved to 1 November" }],
      "history": [{ "text": "Renewal starts on 1 October 2026.", "validFrom": "2026-06-03T09:00:00Z",
                    "validTo": "2026-09-12T15:30:00Z", "sourceId": "email-0603" }]
    }
  ],
  "tokens": 214,
  "truncated": false
}

#POST /v1/answer

POST/v1/answer

Recall, then compose a short answer with citations. Same fields as recall plus question.

200 OK
{ "answer": "The renewal starts on 1 November 2026 [1]; it moved from 1 October [2].",
  "citations": [ { "n": 1, "sourceId": "crm-4471" }, { "n": 2, "sourceId": "email-0603" } ],
  "abstained": false }

When nothing visible supports an answer, abstained is true and answer says so.

#GET /v1/jobs/{jobId}

GET/v1/jobs/{jobId}

States: queued, processing, completed, failed. Failed jobs include an error object.

#DELETE /v1/records/{sourceId}

DELETE/v1/records/{sourceId}

Deletes the record and memories that depend only on it. Returns 202 with a job id; recall stops returning them when the job completes.

Illustrative interface example · replace the host and key placeholders