Quick setup examples
Java (HTTP) Quickstart
Call the Unison brain from Java using the built-in java.net.http.HttpClient — no extra dependencies.
java.net.http.HttpClient (introduced in Java 11) handles both calls. No Maven or Gradle dependencies needed beyond the JDK.
Prerequisites
export UNISON_TOKEN=usk_live_...Java 11 or later.
Recall — fetch prompt-ready context
import java.net.URI;
import java.net.URLEncoder;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import com.fasterxml.jackson.databind.ObjectMapper; // or any JSON lib
public class UnisonRecall {
private static final String BASE = "https://brain.unisonlabs.ai";
private static final String TOKEN = System.getenv("UNISON_TOKEN");
public static String recall(String query) throws Exception {
String q = URLEncoder.encode(query, StandardCharsets.UTF_8);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(BASE + "/v1/brain/context?q=" + q + "&k=5&mode=auto"))
.header("Authorization", "Bearer " + TOKEN)
.GET()
.build();
HttpClient client = HttpClient.newHttpClient();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
// Parse with your preferred JSON library; example uses Jackson
ObjectMapper mapper = new ObjectMapper();
var node = mapper.readTree(response.body());
if (node.get("weakEvidence").asBoolean()) return "";
return node.get("contextMd").asText();
}
public static void main(String[] args) throws Exception {
System.out.println(recall("payment service architecture"));
}
}If you prefer to avoid Jackson, swap the JSON parsing block for any library (Gson, org.json, etc.) — the HTTP layer stays identical.
Persist — save a conversation to the brain
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class UnisonPersist {
private static final String BASE = "https://brain.unisonlabs.ai";
private static final String TOKEN = System.getenv("UNISON_TOKEN");
public static void persist() throws Exception {
String body = """
{
"dump": {
"turns": [
{ "role": "user", "content": "What queue library should we use?" },
{ "role": "assistant", "content": "Switched to pgmq — simpler ops than Redis." }
]
},
"sourceRef": "session-1"
}
""";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(BASE + "/v1/brain/remember"))
.header("Authorization", "Bearer " + TOKEN)
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
HttpClient client = HttpClient.newHttpClient();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); // { "jobId": "job_..." }
}
public static void main(String[] args) throws Exception {
persist();
}
}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.