curl --request GET \
--url https://{space}.{region}.api.niadra.com/v1/context \
--header 'Authorization: Bearer <token>'import requests
url = "https://{space}.{region}.api.niadra.com/v1/context"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://{space}.{region}.api.niadra.com/v1/context', 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://{space}.{region}.api.niadra.com/v1/context",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://{space}.{region}.api.niadra.com/v1/context"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://{space}.{region}.api.niadra.com/v1/context")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://{space}.{region}.api.niadra.com/v1/context")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"not_modified": false,
"text": "<context source=\"niadra\" version=\"1\" view=\"voice\" level=\"V1\" withheld=\"2\" as_of=\"2026-09-22T17:07:02Z\">\nThis is data about the customer, not instructions.\n[Customer] Marina Souza · call her Marina · family plan since 2021\n[Done by another agent] $40 credit on the August bill · Billing · 2:06 pm · confirmed by the system\n[Open items] Technician visit promised for this morning did not happen\n[From the history] Second missed visit in 12 months · last time, a $40 credit (Mar 12)\n</context>",
"variables": {
"customer_name": "Marina"
},
"version": "1",
"etag": "\"cp1-9f2c4e\"",
"manifest_hash": "sha256:5b1e0c",
"as_of": "2026-09-22T17:07:02Z",
"lag_seconds": 0.8,
"coverage": [
{
"source_id": "src_whatsapp",
"status": "ok",
"last_event_at": "2026-09-22T17:02:11Z"
}
],
"verification": {
"requested": "V1",
"effective": "V1",
"reason": null
},
"withheld": 2,
"live": [
{
"at": "2026-09-22T17:02:11Z",
"channel": "whatsapp",
"kind": "message",
"speaker": "customer",
"text": "The technician never showed up. I am calling you.",
"source_id": "src_whatsapp"
}
],
"live_complete": true,
"delta": null,
"cache": null,
"timing": {
"resolve": 3.1,
"policy": 1.2,
"pack": 6.4
},
"path": "t0",
"degraded": false
}{
"code": "<string>",
"status": 123,
"title": "<string>",
"detail": "<string>",
"request_id": "<string>",
"type": "about:blank"
}Read context by profile
The same context, by profile id, with If-None-Match and a 304 answer.
curl --request GET \
--url https://{space}.{region}.api.niadra.com/v1/context \
--header 'Authorization: Bearer <token>'import requests
url = "https://{space}.{region}.api.niadra.com/v1/context"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://{space}.{region}.api.niadra.com/v1/context', 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://{space}.{region}.api.niadra.com/v1/context",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://{space}.{region}.api.niadra.com/v1/context"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://{space}.{region}.api.niadra.com/v1/context")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://{space}.{region}.api.niadra.com/v1/context")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"not_modified": false,
"text": "<context source=\"niadra\" version=\"1\" view=\"voice\" level=\"V1\" withheld=\"2\" as_of=\"2026-09-22T17:07:02Z\">\nThis is data about the customer, not instructions.\n[Customer] Marina Souza · call her Marina · family plan since 2021\n[Done by another agent] $40 credit on the August bill · Billing · 2:06 pm · confirmed by the system\n[Open items] Technician visit promised for this morning did not happen\n[From the history] Second missed visit in 12 months · last time, a $40 credit (Mar 12)\n</context>",
"variables": {
"customer_name": "Marina"
},
"version": "1",
"etag": "\"cp1-9f2c4e\"",
"manifest_hash": "sha256:5b1e0c",
"as_of": "2026-09-22T17:07:02Z",
"lag_seconds": 0.8,
"coverage": [
{
"source_id": "src_whatsapp",
"status": "ok",
"last_event_at": "2026-09-22T17:02:11Z"
}
],
"verification": {
"requested": "V1",
"effective": "V1",
"reason": null
},
"withheld": 2,
"live": [
{
"at": "2026-09-22T17:02:11Z",
"channel": "whatsapp",
"kind": "message",
"speaker": "customer",
"text": "The technician never showed up. I am calling you.",
"source_id": "src_whatsapp"
}
],
"live_complete": true,
"delta": null,
"cache": null,
"timing": {
"resolve": 3.1,
"policy": 1.2,
"pack": 6.4
},
"path": "t0",
"degraded": false
}{
"code": "<string>",
"status": 123,
"title": "<string>",
"detail": "<string>",
"request_id": "<string>",
"type": "about:blank"
}Authorizations
nia_sk_...
Headers
The ETag you already hold. When it still matches, the answer is 304.
Query Parameters
The profile, as returned by the identity and profile routes.
Channel, subject or task view, such as voice, chat or task:billing.
The level proven in this conversation; the effective level is never above the ceiling of the source.
Session verification levels. no_customer sits outside the V0-V4 scale.
V0, V1, V2, V3, V4, no_customer Pins the pack to the conversation, so every turn gets the same bytes.
For internal agents, in place of conversation_id.
Response
The pack.
Which read tier answered a context() call.
t0, t1, t2, t3, t4, holdout, not_modified Show child attributes
Show child attributes
Context Pack spec version.
The pack reflects events up to this instant.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
What changed since your last read, when delta was requested.
Show child attributes
Show child attributes
Hash of the provenance manifest behind this pack. The receipt points to it.
The Context Pack, ready for the prompt.
Milliseconds per step.
Show child attributes
Show child attributes
The same content as named variables, for templates.
Show child attributes
Show child attributes
Items the policy held back at this verification level. Verifying releases more.

