curl --request POST \
--url https://api.example.com/v1/memory/cypher \
--header 'Content-Type: application/json' \
--data '
{
"query": "<string>",
"limit": 500
}
'import requests
url = "https://api.example.com/v1/memory/cypher"
payload = {
"query": "<string>",
"limit": 500
}
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: '<string>', limit: 500})
};
fetch('https://api.example.com/v1/memory/cypher', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/v1/memory/cypher",
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' => '<string>',
'limit' => 500
]),
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;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/v1/memory/cypher"
payload := strings.NewReader("{\n \"query\": \"<string>\",\n \"limit\": 500\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))
}HttpResponse<String> response = Unirest.post("https://api.example.com/v1/memory/cypher")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"<string>\",\n \"limit\": 500\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/memory/cypher")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"query\": \"<string>\",\n \"limit\": 500\n}"
response = http.request(request)
puts response.read_body{
"nodes": [
{
"id": "<string>",
"entity_type": "<string>",
"display_tier": "<string>",
"display_color": "<string>",
"properties": {}
}
],
"edges": [
{
"source": "<string>",
"target": "<string>",
"type": "<string>",
"last_activity_at": "<string>"
}
],
"truncated": false,
"total_nodes": 123
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Execute a read-only Cypher query
Runs a user-supplied Cypher query against the tenant Memory graph and returns the result in the same v2 contract shape as GET /v1/memory/graph. Backs the Console UI ‘Cypher view’ feature.
Safety: the query is validated to be read-only — write keywords (CREATE, MERGE, DELETE, SET, REMOVE, DROP, FOREACH, LOAD, CALL) cause a 400. Edges between the returned nodes are fetched automatically so the frontend doesn’t need to RETURN them.
curl --request POST \
--url https://api.example.com/v1/memory/cypher \
--header 'Content-Type: application/json' \
--data '
{
"query": "<string>",
"limit": 500
}
'import requests
url = "https://api.example.com/v1/memory/cypher"
payload = {
"query": "<string>",
"limit": 500
}
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: '<string>', limit: 500})
};
fetch('https://api.example.com/v1/memory/cypher', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/v1/memory/cypher",
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' => '<string>',
'limit' => 500
]),
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;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/v1/memory/cypher"
payload := strings.NewReader("{\n \"query\": \"<string>\",\n \"limit\": 500\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))
}HttpResponse<String> response = Unirest.post("https://api.example.com/v1/memory/cypher")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"<string>\",\n \"limit\": 500\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/memory/cypher")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"query\": \"<string>\",\n \"limit\": 500\n}"
response = http.request(request)
puts response.read_body{
"nodes": [
{
"id": "<string>",
"entity_type": "<string>",
"display_tier": "<string>",
"display_color": "<string>",
"properties": {}
}
],
"edges": [
{
"source": "<string>",
"target": "<string>",
"type": "<string>",
"last_activity_at": "<string>"
}
],
"truncated": false,
"total_nodes": 123
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Body
Request body for POST /v1/memory/cypher.
Response
Successful Response
Response for GET /graph (the full tenant graph, v2 contract).
Show child attributes
Show child attributes
Show child attributes
Show child attributes
True when the result was capped by the limit parameter. The frontend can use this to show 'displaying N of total_nodes'.
Actual node count before the cap was applied. Only populated when truncated=True.