cURL
curl -s \
"https://engine.example.com/v1/tenants/demo"// A client from OpenAPI Generator: see Build a client.
import {
Configuration,
HoldersApi,
ProblemFromJSON,
ResponseError,
} from "./nodeasset-client";
const api = new HoldersApi(new Configuration({
basePath: "https://engine.example.com",
}));
try {
const answer = await api.getTenant({ tenantId: "demo" });
console.log(answer.value);
} catch (e) {
if (!(e instanceof ResponseError)) throw e;
// A refusal is a problem; its type ends in the slug.
const problem = ProblemFromJSON(await e.response.json());
const slug = problem.type.split(":").pop();
console.error(e.response.status, slug, problem.detail);
}
# A client from OpenAPI Generator: see Build a client.
import sys
import nodeasset_client
config = nodeasset_client.Configuration(
host="https://engine.example.com",
)
with nodeasset_client.ApiClient(config) as client:
api = nodeasset_client.HoldersApi(client)
try:
answer = api.get_tenant(tenant_id="demo")
print(answer.value)
except nodeasset_client.ApiException as e:
# A refusal is a problem; its type ends in the slug.
problem = nodeasset_client.Problem.from_json(e.body)
slug = problem.type.rsplit(":", 1)[-1]
print(e.status, slug, problem.detail, file=sys.stderr)
// A client from OpenAPI Generator: see Build a client.
import nodeasset.client.ApiClient;
import nodeasset.client.ApiException;
import nodeasset.client.api.HoldersApi;
import nodeasset.client.model.Problem;
public class GetTenant {
public static void main(String[] args) throws Exception {
ApiClient client = new ApiClient();
client.updateBaseUri("https://engine.example.com");
HoldersApi api = new HoldersApi(client);
try {
var request = HoldersApi.APIGetTenantRequest.newBuilder()
.tenantId("demo")
.build();
var answer = api.getTenant(request);
System.out.println(answer.getValue());
} catch (ApiException e) {
// A refusal is a problem; its type ends in the slug.
Problem problem = client.getObjectMapper()
.readValue(e.getResponseBody(), Problem.class);
String type = problem.getType();
String slug = type.substring(type.lastIndexOf(':') + 1);
System.err.println(e.getCode() + " " + slug + " " + problem.getDetail());
}
}
}
{
"offset": 0,
"now": "2026-10-03T13:23:25.102546857Z",
"value": {
"tenantId": "demo",
"displayName": "Demo Distribution",
"theme": {
"primary": "#1F4E79",
"accent": "#F2A900",
"logoUrl": null
},
"terms": {
"version": "2026-10",
"title": "Terms of use",
"text": "These terms cover the holdings, settlements and statements of the holder you sign in as, as the venue's\nengine reads them from the ledger. Subscriptions and redemptions you start settle only when your\ncustodian allocates them. Accept these terms to continue.\n",
"url": null
},
"signIn": null
}
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"requestId": "<string>",
"gate": "<string>",
"check": "<string>",
"recovery": "<string>",
"retryAfter": 123,
"retryable": true,
"packageName": "<string>",
"party": "<string>",
"contractId": "<string>",
"projectionOffset": 123,
"ledgerEnd": 123,
"code": 123,
"reason": "<string>",
"policyVersion": 123,
"errors": [
{
"pointer": "<string>",
"detail": "<string>"
}
]
}Holders
Get a tenant
Returns a distributor’s branding, the terms its investors accept, and where they sign in. It needs no sign-in.
GET
/
v1
/
tenants
/
{tenantId}
cURL
curl -s \
"https://engine.example.com/v1/tenants/demo"// A client from OpenAPI Generator: see Build a client.
import {
Configuration,
HoldersApi,
ProblemFromJSON,
ResponseError,
} from "./nodeasset-client";
const api = new HoldersApi(new Configuration({
basePath: "https://engine.example.com",
}));
try {
const answer = await api.getTenant({ tenantId: "demo" });
console.log(answer.value);
} catch (e) {
if (!(e instanceof ResponseError)) throw e;
// A refusal is a problem; its type ends in the slug.
const problem = ProblemFromJSON(await e.response.json());
const slug = problem.type.split(":").pop();
console.error(e.response.status, slug, problem.detail);
}
# A client from OpenAPI Generator: see Build a client.
import sys
import nodeasset_client
config = nodeasset_client.Configuration(
host="https://engine.example.com",
)
with nodeasset_client.ApiClient(config) as client:
api = nodeasset_client.HoldersApi(client)
try:
answer = api.get_tenant(tenant_id="demo")
print(answer.value)
except nodeasset_client.ApiException as e:
# A refusal is a problem; its type ends in the slug.
problem = nodeasset_client.Problem.from_json(e.body)
slug = problem.type.rsplit(":", 1)[-1]
print(e.status, slug, problem.detail, file=sys.stderr)
// A client from OpenAPI Generator: see Build a client.
import nodeasset.client.ApiClient;
import nodeasset.client.ApiException;
import nodeasset.client.api.HoldersApi;
import nodeasset.client.model.Problem;
public class GetTenant {
public static void main(String[] args) throws Exception {
ApiClient client = new ApiClient();
client.updateBaseUri("https://engine.example.com");
HoldersApi api = new HoldersApi(client);
try {
var request = HoldersApi.APIGetTenantRequest.newBuilder()
.tenantId("demo")
.build();
var answer = api.getTenant(request);
System.out.println(answer.getValue());
} catch (ApiException e) {
// A refusal is a problem; its type ends in the slug.
Problem problem = client.getObjectMapper()
.readValue(e.getResponseBody(), Problem.class);
String type = problem.getType();
String slug = type.substring(type.lastIndexOf(':') + 1);
System.err.println(e.getCode() + " " + slug + " " + problem.getDetail());
}
}
}
{
"offset": 0,
"now": "2026-10-03T13:23:25.102546857Z",
"value": {
"tenantId": "demo",
"displayName": "Demo Distribution",
"theme": {
"primary": "#1F4E79",
"accent": "#F2A900",
"logoUrl": null
},
"terms": {
"version": "2026-10",
"title": "Terms of use",
"text": "These terms cover the holdings, settlements and statements of the holder you sign in as, as the venue's\nengine reads them from the ledger. Subscriptions and redemptions you start settle only when your\ncustodian allocates them. Accept these terms to continue.\n",
"url": null
},
"signIn": null
}
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"requestId": "<string>",
"gate": "<string>",
"check": "<string>",
"recovery": "<string>",
"retryAfter": 123,
"retryable": true,
"packageName": "<string>",
"party": "<string>",
"contractId": "<string>",
"projectionOffset": 123,
"ledgerEnd": 123,
"code": 123,
"reason": "<string>",
"policyVersion": 123,
"errors": [
{
"pointer": "<string>",
"detail": "<string>"
}
]
}Public: no sign-in needed.
Headers
Your id for this request, 1 to 128 printable characters, repeated in the answer; absent, the engine makes one.
Maximum string length:
128Pattern:
^[\x21-\x7E]+$A W3C trace context, which the engine joins and passes on.
Pattern:
^[0-9a-f]{2}-[0-9a-f]{32}-[0-9a-f]{16}-[0-9a-f]{2}$Path Parameters
The tenant's id: a distributor the deployment configures.
Response
The tenant.
The ledger offset the answer was read at; 0 for an answer from the engine's own records.
The engine's clock when it answered, an ISO-8601 instant.
What the read answers; for a list, the page's records in the list's order.
Show child attributes
Show child attributes

