curl --request POST \
--url https://app.recallio.ai/api/Memory/write \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"userId": "user_123",
"content": "[{ \"role\": \"user\", \"content\": \"I prefer dark mode\" }, { \"role\": \"assistant\", \"content\": \"I will set the dark mode\" }]",
"consentFlag": true,
"projectId": "project_abc",
"tags": [
"preferences",
"ui",
"notifications"
],
"metadata": {
"timestamp": "2025-08-02T14:30:00Z",
"category": "user-preferences",
"source": "settings-page"
}
}
'import requests
url = "https://app.recallio.ai/api/Memory/write"
payload = {
"userId": "user_123",
"content": "[{ \"role\": \"user\", \"content\": \"I prefer dark mode\" }, { \"role\": \"assistant\", \"content\": \"I will set the dark mode\" }]",
"consentFlag": True,
"projectId": "project_abc",
"tags": ["preferences", "ui", "notifications"],
"metadata": {
"timestamp": "2025-08-02T14:30:00Z",
"category": "user-preferences",
"source": "settings-page"
}
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
userId: 'user_123',
content: '[{ "role": "user", "content": "I prefer dark mode" }, { "role": "assistant", "content": "I will set the dark mode" }]',
consentFlag: true,
projectId: 'project_abc',
tags: ['preferences', 'ui', 'notifications'],
metadata: {
timestamp: '2025-08-02T14:30:00Z',
category: 'user-preferences',
source: 'settings-page'
}
})
};
fetch('https://app.recallio.ai/api/Memory/write', 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://app.recallio.ai/api/Memory/write",
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([
'userId' => 'user_123',
'content' => '[{ "role": "user", "content": "I prefer dark mode" }, { "role": "assistant", "content": "I will set the dark mode" }]',
'consentFlag' => true,
'projectId' => 'project_abc',
'tags' => [
'preferences',
'ui',
'notifications'
],
'metadata' => [
'timestamp' => '2025-08-02T14:30:00Z',
'category' => 'user-preferences',
'source' => 'settings-page'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"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://app.recallio.ai/api/Memory/write"
payload := strings.NewReader("{\n \"userId\": \"user_123\",\n \"content\": \"[{ \\\"role\\\": \\\"user\\\", \\\"content\\\": \\\"I prefer dark mode\\\" }, { \\\"role\\\": \\\"assistant\\\", \\\"content\\\": \\\"I will set the dark mode\\\" }]\",\n \"consentFlag\": true,\n \"projectId\": \"project_abc\",\n \"tags\": [\n \"preferences\",\n \"ui\",\n \"notifications\"\n ],\n \"metadata\": {\n \"timestamp\": \"2025-08-02T14:30:00Z\",\n \"category\": \"user-preferences\",\n \"source\": \"settings-page\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
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://app.recallio.ai/api/Memory/write")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"userId\": \"user_123\",\n \"content\": \"[{ \\\"role\\\": \\\"user\\\", \\\"content\\\": \\\"I prefer dark mode\\\" }, { \\\"role\\\": \\\"assistant\\\", \\\"content\\\": \\\"I will set the dark mode\\\" }]\",\n \"consentFlag\": true,\n \"projectId\": \"project_abc\",\n \"tags\": [\n \"preferences\",\n \"ui\",\n \"notifications\"\n ],\n \"metadata\": {\n \"timestamp\": \"2025-08-02T14:30:00Z\",\n \"category\": \"user-preferences\",\n \"source\": \"settings-page\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.recallio.ai/api/Memory/write")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"userId\": \"user_123\",\n \"content\": \"[{ \\\"role\\\": \\\"user\\\", \\\"content\\\": \\\"I prefer dark mode\\\" }, { \\\"role\\\": \\\"assistant\\\", \\\"content\\\": \\\"I will set the dark mode\\\" }]\",\n \"consentFlag\": true,\n \"projectId\": \"project_abc\",\n \"tags\": [\n \"preferences\",\n \"ui\",\n \"notifications\"\n ],\n \"metadata\": {\n \"timestamp\": \"2025-08-02T14:30:00Z\",\n \"category\": \"user-preferences\",\n \"source\": \"settings-page\"\n }\n}"
response = http.request(request)
puts response.read_body{
"error": "\"Invalid scope type. Must be 'user', 'project', or 'team'.\""
}{
"error": "\"Invalid scope type. Must be 'user', 'project', or 'team'.\""
}Store a new memory (background processing)
Stores a new memory with embedding vector for semantic search and retrieval. The content will be automatically vectorized using embeddings for semantic search capabilities. This endpoint returns immediately and processes the memory in the background.
curl --request POST \
--url https://app.recallio.ai/api/Memory/write \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"userId": "user_123",
"content": "[{ \"role\": \"user\", \"content\": \"I prefer dark mode\" }, { \"role\": \"assistant\", \"content\": \"I will set the dark mode\" }]",
"consentFlag": true,
"projectId": "project_abc",
"tags": [
"preferences",
"ui",
"notifications"
],
"metadata": {
"timestamp": "2025-08-02T14:30:00Z",
"category": "user-preferences",
"source": "settings-page"
}
}
'import requests
url = "https://app.recallio.ai/api/Memory/write"
payload = {
"userId": "user_123",
"content": "[{ \"role\": \"user\", \"content\": \"I prefer dark mode\" }, { \"role\": \"assistant\", \"content\": \"I will set the dark mode\" }]",
"consentFlag": True,
"projectId": "project_abc",
"tags": ["preferences", "ui", "notifications"],
"metadata": {
"timestamp": "2025-08-02T14:30:00Z",
"category": "user-preferences",
"source": "settings-page"
}
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
userId: 'user_123',
content: '[{ "role": "user", "content": "I prefer dark mode" }, { "role": "assistant", "content": "I will set the dark mode" }]',
consentFlag: true,
projectId: 'project_abc',
tags: ['preferences', 'ui', 'notifications'],
metadata: {
timestamp: '2025-08-02T14:30:00Z',
category: 'user-preferences',
source: 'settings-page'
}
})
};
fetch('https://app.recallio.ai/api/Memory/write', 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://app.recallio.ai/api/Memory/write",
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([
'userId' => 'user_123',
'content' => '[{ "role": "user", "content": "I prefer dark mode" }, { "role": "assistant", "content": "I will set the dark mode" }]',
'consentFlag' => true,
'projectId' => 'project_abc',
'tags' => [
'preferences',
'ui',
'notifications'
],
'metadata' => [
'timestamp' => '2025-08-02T14:30:00Z',
'category' => 'user-preferences',
'source' => 'settings-page'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"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://app.recallio.ai/api/Memory/write"
payload := strings.NewReader("{\n \"userId\": \"user_123\",\n \"content\": \"[{ \\\"role\\\": \\\"user\\\", \\\"content\\\": \\\"I prefer dark mode\\\" }, { \\\"role\\\": \\\"assistant\\\", \\\"content\\\": \\\"I will set the dark mode\\\" }]\",\n \"consentFlag\": true,\n \"projectId\": \"project_abc\",\n \"tags\": [\n \"preferences\",\n \"ui\",\n \"notifications\"\n ],\n \"metadata\": {\n \"timestamp\": \"2025-08-02T14:30:00Z\",\n \"category\": \"user-preferences\",\n \"source\": \"settings-page\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
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://app.recallio.ai/api/Memory/write")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"userId\": \"user_123\",\n \"content\": \"[{ \\\"role\\\": \\\"user\\\", \\\"content\\\": \\\"I prefer dark mode\\\" }, { \\\"role\\\": \\\"assistant\\\", \\\"content\\\": \\\"I will set the dark mode\\\" }]\",\n \"consentFlag\": true,\n \"projectId\": \"project_abc\",\n \"tags\": [\n \"preferences\",\n \"ui\",\n \"notifications\"\n ],\n \"metadata\": {\n \"timestamp\": \"2025-08-02T14:30:00Z\",\n \"category\": \"user-preferences\",\n \"source\": \"settings-page\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.recallio.ai/api/Memory/write")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"userId\": \"user_123\",\n \"content\": \"[{ \\\"role\\\": \\\"user\\\", \\\"content\\\": \\\"I prefer dark mode\\\" }, { \\\"role\\\": \\\"assistant\\\", \\\"content\\\": \\\"I will set the dark mode\\\" }]\",\n \"consentFlag\": true,\n \"projectId\": \"project_abc\",\n \"tags\": [\n \"preferences\",\n \"ui\",\n \"notifications\"\n ],\n \"metadata\": {\n \"timestamp\": \"2025-08-02T14:30:00Z\",\n \"category\": \"user-preferences\",\n \"source\": \"settings-page\"\n }\n}"
response = http.request(request)
puts response.read_body{
"error": "\"Invalid scope type. Must be 'user', 'project', or 'team'.\""
}{
"error": "\"Invalid scope type. Must be 'user', 'project', or 'team'.\""
}Authorizations
JWT Authorization header using the Bearer scheme. Example: "Authorization: Bearer {token}"
Body
Unique identifier for the user storing the memory
1"user_123"
The actual content/text to be stored. This can be either a string or a JSON object. The JSON object format is: [{ "role": "user", "content": "string" }, { "role": "assistant", "content": "string" }]
1 - 30000"[{ \"role\": \"user\", \"content\": \"I prefer dark mode\" }, { \"role\": \"assistant\", \"content\": \"I will set the dark mode\" }]"
User consent flag - must be true to store the memory (required for compliance)
true
Project identifier to associate the memory with (optional)
"project_abc"
Optional tags to categorize and filter memories
["preferences", "ui", "notifications"]
Optional JSON Metadata to categorize and filter memories
{
"timestamp": "2025-08-02T14:30:00Z",
"category": "user-preferences",
"source": "settings-page"
}
Response
Accepted

