curl -s \
"https://engine.example.com/v1/instruments/FUND/supply" \
-H "Authorization: Bearer $TOKEN"// A client from OpenAPI Generator: see Build a client.
import {
Configuration,
ProblemFromJSON,
ReportsApi,
ResponseError,
} from "./nodeasset-client";
const api = new ReportsApi(new Configuration({
basePath: "https://engine.example.com",
accessToken: process.env.TOKEN,
}));
try {
const answer = await api.getInstrumentSupply({ instrumentId: "FUND" });
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 os
import sys
import nodeasset_client
config = nodeasset_client.Configuration(
host="https://engine.example.com",
access_token=os.environ["TOKEN"],
)
with nodeasset_client.ApiClient(config) as client:
api = nodeasset_client.ReportsApi(client)
try:
answer = api.get_instrument_supply(instrument_id="FUND")
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.ReportsApi;
import nodeasset.client.model.Problem;
public class GetInstrumentSupply {
public static void main(String[] args) throws Exception {
ApiClient client = new ApiClient();
client.updateBaseUri("https://engine.example.com");
client.setRequestInterceptor(builder ->
builder.header("Authorization", "Bearer " + System.getenv("TOKEN")));
ReportsApi api = new ReportsApi(client);
try {
var request = ReportsApi.APIGetInstrumentSupplyRequest.newBuilder()
.instrumentId("FUND")
.build();
var answer = api.getInstrumentSupply(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": 669,
"ledgerTime": "2026-10-03T13:26:05.372083Z",
"now": "2026-10-03T13:26:05.984083456Z",
"value": {
"instrumentId": "FUND",
"total": 159875611.65,
"treasury": 79367875.15,
"registrarLocked": 0,
"holdersUnlocked": 80507636.5,
"holdersLocked": 100,
"holderCount": 5,
"accruals": {
"holderAccruals": 6,
"balance": 159875611.65,
"accruedUnits": 0.0138,
"provisionUnits": 98034.1362
},
"activity": {
"since": "2026-10-02T13:25:31.491Z",
"window": "PT24H",
"increased": 159875681.15,
"decreased": 69.5,
"net": 159875611.65,
"transactions": 40
},
"display": {
"displayName": null,
"symbol": null,
"currency": null,
"decimalsForDisplay": null
},
"currency": "USD",
"ledger": {
"contractId": "004857af22cb31323be117f99038e5b8f603c51fe3f0698216d1776fe5f2a9ba67a115985b63e24879991e774038da751573176dc31b0ce5c8fcce00bfe40b38d30353aa63",
"registrar": "issuer::12207ae69b2ef2f1249abd41923a06ee30bffa9298a17b0a875355c441bf32045d73",
"issued": 159875611.65,
"terms": {
"supplyCap": null,
"liquidateOnly": false,
"redemptionsPaused": false,
"issuance": {
"limit": null,
"window": "PT24H"
},
"redemption": {
"limit": null,
"window": "PT24H"
}
},
"pending": [],
"issuance": {
"limit": null,
"window": "PT24H",
"windowStart": "2026-10-03T13:25:31.491Z",
"spent": 0,
"spentNow": 0,
"nextWindow": "2026-10-04T13:25:31.491Z"
},
"redemption": {
"limit": null,
"window": "PT24H",
"windowStart": "2026-10-03T13:25:31.491Z",
"spent": 0,
"spentNow": 0,
"nextWindow": "2026-10-04T13:25:31.491Z"
},
"loosenDelay": "PT24H"
},
"proposals": [
{
"kind": "terms",
"contractId": "009446ecbc07ca77182cd08b30ca8c0b7cac6dc9717406f32184675dde4a1ed764b60d789aeba86e44f37ae04ad4a9e7f72a388194b9427fcf8cf410c6b8dc8e91e373ac1d",
"terms": {
"supplyCap": 200000000,
"liquidateOnly": false,
"redemptionsPaused": false,
"issuance": {
"limit": 5000000,
"window": "PT24H"
},
"redemption": {
"limit": 5000000,
"window": "PT24H"
}
},
"issued": null,
"loosenDelay": null,
"effectiveAt": 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>"
}
]
}{
"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>"
}
]
}{
"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>"
}
]
}{
"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>"
}
]
}{
"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>"
}
]
}{
"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>"
}
]
}{
"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>"
}
]
}Get an instrument's supply
Returns the instrument’s supply, where it sits, how it moved over a window, and its supply ledger.
curl -s \
"https://engine.example.com/v1/instruments/FUND/supply" \
-H "Authorization: Bearer $TOKEN"// A client from OpenAPI Generator: see Build a client.
import {
Configuration,
ProblemFromJSON,
ReportsApi,
ResponseError,
} from "./nodeasset-client";
const api = new ReportsApi(new Configuration({
basePath: "https://engine.example.com",
accessToken: process.env.TOKEN,
}));
try {
const answer = await api.getInstrumentSupply({ instrumentId: "FUND" });
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 os
import sys
import nodeasset_client
config = nodeasset_client.Configuration(
host="https://engine.example.com",
access_token=os.environ["TOKEN"],
)
with nodeasset_client.ApiClient(config) as client:
api = nodeasset_client.ReportsApi(client)
try:
answer = api.get_instrument_supply(instrument_id="FUND")
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.ReportsApi;
import nodeasset.client.model.Problem;
public class GetInstrumentSupply {
public static void main(String[] args) throws Exception {
ApiClient client = new ApiClient();
client.updateBaseUri("https://engine.example.com");
client.setRequestInterceptor(builder ->
builder.header("Authorization", "Bearer " + System.getenv("TOKEN")));
ReportsApi api = new ReportsApi(client);
try {
var request = ReportsApi.APIGetInstrumentSupplyRequest.newBuilder()
.instrumentId("FUND")
.build();
var answer = api.getInstrumentSupply(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": 669,
"ledgerTime": "2026-10-03T13:26:05.372083Z",
"now": "2026-10-03T13:26:05.984083456Z",
"value": {
"instrumentId": "FUND",
"total": 159875611.65,
"treasury": 79367875.15,
"registrarLocked": 0,
"holdersUnlocked": 80507636.5,
"holdersLocked": 100,
"holderCount": 5,
"accruals": {
"holderAccruals": 6,
"balance": 159875611.65,
"accruedUnits": 0.0138,
"provisionUnits": 98034.1362
},
"activity": {
"since": "2026-10-02T13:25:31.491Z",
"window": "PT24H",
"increased": 159875681.15,
"decreased": 69.5,
"net": 159875611.65,
"transactions": 40
},
"display": {
"displayName": null,
"symbol": null,
"currency": null,
"decimalsForDisplay": null
},
"currency": "USD",
"ledger": {
"contractId": "004857af22cb31323be117f99038e5b8f603c51fe3f0698216d1776fe5f2a9ba67a115985b63e24879991e774038da751573176dc31b0ce5c8fcce00bfe40b38d30353aa63",
"registrar": "issuer::12207ae69b2ef2f1249abd41923a06ee30bffa9298a17b0a875355c441bf32045d73",
"issued": 159875611.65,
"terms": {
"supplyCap": null,
"liquidateOnly": false,
"redemptionsPaused": false,
"issuance": {
"limit": null,
"window": "PT24H"
},
"redemption": {
"limit": null,
"window": "PT24H"
}
},
"pending": [],
"issuance": {
"limit": null,
"window": "PT24H",
"windowStart": "2026-10-03T13:25:31.491Z",
"spent": 0,
"spentNow": 0,
"nextWindow": "2026-10-04T13:25:31.491Z"
},
"redemption": {
"limit": null,
"window": "PT24H",
"windowStart": "2026-10-03T13:25:31.491Z",
"spent": 0,
"spentNow": 0,
"nextWindow": "2026-10-04T13:25:31.491Z"
},
"loosenDelay": "PT24H"
},
"proposals": [
{
"kind": "terms",
"contractId": "009446ecbc07ca77182cd08b30ca8c0b7cac6dc9717406f32184675dde4a1ed764b60d789aeba86e44f37ae04ad4a9e7f72a388194b9427fcf8cf410c6b8dc8e91e373ac1d",
"terms": {
"supplyCap": 200000000,
"liquidateOnly": false,
"redemptionsPaused": false,
"issuance": {
"limit": 5000000,
"window": "PT24H"
},
"redemption": {
"limit": 5000000,
"window": "PT24H"
}
},
"issued": null,
"loosenDelay": null,
"effectiveAt": 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>"
}
]
}{
"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>"
}
]
}{
"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>"
}
]
}{
"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>"
}
]
}{
"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>"
}
]
}{
"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>"
}
]
}{
"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>"
}
]
}app, approver, auditor, investor, operator, risk.Authorizations
A JWT from the deployment's identity provider, whose roles claim names the caller's roles and whose holder claim names an investor's holder.
Headers
A signed request's key id, as venue.api.signing.clients configures it for the bearer's subject.
Seconds since the epoch, within venue.api.signing.window of the engine's clock, 5 minutes by default.
^[0-9]+$At least 16 random bytes in base64url, never reused within twice the window.
22 - 128^[A-Za-z0-9_-]+={0,2}$The base64 HMAC-SHA256, under the key's secret, of the method, the path and query, the timestamp, the nonce and the body's SHA-256.
Your id for this request, 1 to 128 printable characters, repeated in the answer; absent, the engine makes one.
128^[\x21-\x7E]+$A W3C trace context, which the engine joins and passes on.
^[0-9a-f]{2}-[0-9a-f]{32}-[0-9a-f]{16}-[0-9a-f]{2}$Path Parameters
The instrument's id on the Registry.
Query Parameters
How far back the activity reaches, an ISO-8601 duration from PT1H to P365D.
The ledger offset to read at, instead of the latest; not with asOf. What depends on time is judged at the offset's ledger time.
An instant to read the ledger as it stood then; not with at. What depends on time is judged at that instant.
Response
The supply.
The ledger offset the answer was read at; 0 for an answer from the engine's own records.
The ledger time of offset: the effective time of the latest transaction at or before it; null where the projection records none.
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

