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.

On this page