Quick setup examples
.NET (HTTP) Quickstart
Call the Unison brain from C# using System.Net.Http.HttpClient and System.Text.Json — no NuGet packages required.
HttpClient and System.Text.Json ship with .NET 6+. The snippets below work as a top-level program (no boilerplate class needed).
Prerequisites
export UNISON_TOKEN=usk_live_....NET 6 or later.
Recall — fetch prompt-ready context
using System.Net.Http.Headers;
using System.Text.Json;
using System.Web;
const string Base = "https://brain.unisonlabs.ai";
string token = Environment.GetEnvironmentVariable("UNISON_TOKEN")!;
using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
var query = HttpUtility.UrlEncode("payment service architecture");
var url = $"{Base}/v1/brain/context?q={query}&k=5&mode=auto";
var json = await http.GetStringAsync(url);
using var doc = JsonDocument.Parse(json);
var root = doc.RootElement;
bool weak = root.GetProperty("weakEvidence").GetBoolean();
string memory = weak ? "" : root.GetProperty("contextMd").GetString()!;
Console.WriteLine(memory);System.Web.HttpUtility is available in .NET 6+ via the System.Web namespace without extra packages. On older targets use Uri.EscapeDataString instead.
Persist — save a conversation to the brain
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;
const string Base = "https://brain.unisonlabs.ai";
string token = Environment.GetEnvironmentVariable("UNISON_TOKEN")!;
using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
var payload = new
{
dump = new
{
turns = new[]
{
new { role = "user", content = "What queue library should we use?" },
new { role = "assistant", content = "Switched to pgmq — simpler ops than Redis." },
},
},
sourceRef = "session-1",
};
var body = JsonSerializer.Serialize(payload);
var content = new StringContent(body, Encoding.UTF8, "application/json");
var response = await http.PostAsync($"{Base}/v1/brain/remember", content);
var result = await response.Content.ReadAsStringAsync();
using var doc = JsonDocument.Parse(result);
string jobId = doc.RootElement.GetProperty("jobId").GetString()!;
Console.WriteLine($"jobId: {jobId}");remember runs the save-or-skip curation pipeline (dedupe, curated notes, entity facts) as a background job — poll GET /v1/brain/jobs/{jobId} for status. To write a document directly instead, POST a { type: "document", content, ... } item to /v1/brain/ingest — see Ingest.