curl --request POST \
--url http://127.0.0.1:4319/memory/query \
--header 'Content-Type: application/json' \
--data '
{
"query": "what are my plans for today"
}
'import requests
url = "http://127.0.0.1:4319/memory/query"
payload = { "query": "what are my plans for today" }
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({query: 'what are my plans for today'})
};
fetch('http://127.0.0.1:4319/memory/query', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "http://127.0.0.1:4319/memory/query"
payload := strings.NewReader("{\n \"query\": \"what are my plans for today\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "4319",
CURLOPT_URL => "http://127.0.0.1:4319/memory/query",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'query' => 'what are my plans for today'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}require 'uri'
require 'net/http'
url = URI("http://127.0.0.1:4319/memory/query")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"query\": \"what are my plans for today\"\n}"
response = http.request(request)
puts response.read_bodyHttpResponse<String> response = Unirest.post("http://127.0.0.1:4319/memory/query")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"what are my plans for today\"\n}")
.asString();using RestSharp;
var options = new RestClientOptions("http://127.0.0.1:4319/memory/query");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddJsonBody("{\n \"query\": \"what are my plans for today\"\n}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
{
"memories": [
{
"id": "<string>",
"ownerId": "<string>",
"status": "active",
"memoryType": "fact",
"canonical": "<string>",
"content": "<string>",
"summary": "<string>",
"assertedAt": "2023-11-07T05:31:56Z",
"createdAt": "2023-11-07T05:31:56Z",
"similarity": 0.85,
"rrfScore": 0.0328,
"kind": "memory",
"source": {
"documentId": "<string>",
"title": "Deploy Guide",
"path": "<string>",
"headingPath": "Deploy Guide > Database",
"page": 123
}
}
]
}{
"error": "invalid request body",
"issues": [
{
"path": "query",
"message": "query must be a non-empty string"
}
]
}{
"error": "the store is locked by a connected Postgres wire client (Drizzle Studio, psql, a DB panel). PGLite is single-connection; disconnect that client and retry."
}Recall memories
Hybrid retrieval over active memories: vector similarity + exact keyword + entity match,
fused with reciprocal-rank fusion. Results are ordered by rrfScore, which is rank-based
and small by design (about 0.03 max). similarity is the plain cosine similarity score.
curl --request POST \
--url http://127.0.0.1:4319/memory/query \
--header 'Content-Type: application/json' \
--data '
{
"query": "what are my plans for today"
}
'import requests
url = "http://127.0.0.1:4319/memory/query"
payload = { "query": "what are my plans for today" }
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({query: 'what are my plans for today'})
};
fetch('http://127.0.0.1:4319/memory/query', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "http://127.0.0.1:4319/memory/query"
payload := strings.NewReader("{\n \"query\": \"what are my plans for today\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "4319",
CURLOPT_URL => "http://127.0.0.1:4319/memory/query",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'query' => 'what are my plans for today'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}require 'uri'
require 'net/http'
url = URI("http://127.0.0.1:4319/memory/query")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"query\": \"what are my plans for today\"\n}"
response = http.request(request)
puts response.read_bodyHttpResponse<String> response = Unirest.post("http://127.0.0.1:4319/memory/query")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"what are my plans for today\"\n}")
.asString();using RestSharp;
var options = new RestClientOptions("http://127.0.0.1:4319/memory/query");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddJsonBody("{\n \"query\": \"what are my plans for today\"\n}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
{
"memories": [
{
"id": "<string>",
"ownerId": "<string>",
"status": "active",
"memoryType": "fact",
"canonical": "<string>",
"content": "<string>",
"summary": "<string>",
"assertedAt": "2023-11-07T05:31:56Z",
"createdAt": "2023-11-07T05:31:56Z",
"similarity": 0.85,
"rrfScore": 0.0328,
"kind": "memory",
"source": {
"documentId": "<string>",
"title": "Deploy Guide",
"path": "<string>",
"headingPath": "Deploy Guide > Database",
"page": 123
}
}
]
}{
"error": "invalid request body",
"issues": [
{
"path": "query",
"message": "query must be a non-empty string"
}
]
}{
"error": "the store is locked by a connected Postgres wire client (Drizzle Studio, psql, a DB panel). PGLite is single-connection; disconnect that client and retry."
}Headers
The owner this request acts for. Applies to every owner-scoped endpoint, reads as well
as writes. Omit it and the daemon's own default owner answers (see GET /health), which
is what a single-owner install has always used. A value that is not a uuid is refused
with 400 rather than coerced.
Body
Response
Ranked memories.
Hide child attributes
Hide child attributes
active, stale The kind of memory: one of fact, preference, episode, procedure. Recall results for ingested context chunks carry the sentinel context (see kind).
"fact"
Cosine similarity to the query (meaning signal alone). Present on recall results.
0.85
Fused reciprocal-rank-fusion score. Rank-based and small by design. Use it for ordering; it is not a percentage.
0.0328
Whether this result is a saved memory or a chunk of an ingested context document.
memory, context Present on context-chunk results; describes where the text came from.