curl -s \
"https://engine.example.com/v1/dealing-cycles?limit=100" \
-H "Authorization: Bearer $TOKEN"
# Send each page's next back as after, until null.// A client from OpenAPI Generator: see Build a client.
import {
Configuration,
DealingCyclesApi,
ProblemFromJSON,
ResponseError,
} from "./nodeasset-client";
const api = new DealingCyclesApi(new Configuration({
basePath: "https://engine.example.com",
accessToken: process.env.TOKEN,
}));
try {
// Send each page's next back as after, until null.
let after: string | undefined;
do {
const page = await api.listDealingCycles({ limit: 100, after });
for (const dealingCycle of page.value ?? []) {
console.log(dealingCycle);
}
after = page.next ?? undefined;
} while (after);
} 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.DealingCyclesApi(client)
try:
# Send each page's next back as after, until null.
after = None
while True:
page = api.list_dealing_cycles(limit=100, after=after)
for dealing_cycle in page.value or []:
print(dealing_cycle)
after = page.next
if after is None:
break
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.DealingCyclesApi;
import nodeasset.client.model.Problem;
public class ListDealingCycles {
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")));
DealingCyclesApi api = new DealingCyclesApi(client);
try {
// Send each page's next back as after, until null.
String after = null;
do {
var request = DealingCyclesApi.APIListDealingCyclesRequest.newBuilder()
.limit(100)
.after(after)
.build();
var page = api.listDealingCycles(request);
for (var dealingCycle : page.getValue()) {
System.out.println(dealingCycle);
}
after = page.getNext();
} while (after != null);
} 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.675005Z",
"now": "2026-10-03T13:26:06.287005710Z",
"value": [
{
"dealingCycleId": "cy-0001",
"instrumentId": "FUND",
"payment": {
"admin": "bank::12207ae69b2ef2f1249abd41923a06ee30bffa9298a17b0a875355c441bf32045d73",
"id": "TD"
},
"strike": 1.004,
"deadline": "2026-10-04T01:25:01.008743Z",
"intentCid": "00f71c57fbae36e795ea0e2011183751b5fa0386db85af71582fb3983fd9fc65b6ca121220f3cdc69dbe07314db9676a5c799439981ffb269b277497b596938d6c98ca0733",
"state": "awaiting-allocations",
"orders": [
{
"kind": "subscription",
"id": "lot-alpha-0004",
"holderId": "alpha",
"party": "alpha::12207ae69b2ef2f1249abd41923a06ee30bffa9298a17b0a875355c441bf32045d73",
"units": 100,
"amount": 100.4,
"allocated": [
"fund",
"payment"
],
"paymentLeg": {
"legId": "lot-alpha-0004-payment",
"from": "alpha::12207ae69b2ef2f1249abd41923a06ee30bffa9298a17b0a875355c441bf32045d73",
"to": "treasury::12207ae69b2ef2f1249abd41923a06ee30bffa9298a17b0a875355c441bf32045d73",
"amount": 100.4,
"allocationCid": "00d4b6f8a0c2e4f6a8b0c2d4e6f8a0b2c4d6e8f0a2b4c6d8e0f2a4b6c8d0e2f4a6ca1212205b7d9f1a3c5e7b9d2f4a6c8e0b1d3f5a7c9e2b4d6f8a0c3e5b7d9f1a2c4e6b8",
"allocated": true
},
"lastFailure": null
},
{
"kind": "redemption",
"id": "red-beta-0002",
"holderId": "beta",
"party": "beta::12207ae69b2ef2f1249abd41923a06ee30bffa9298a17b0a875355c441bf32045d73",
"units": 60,
"amount": 60.24,
"allocated": [],
"paymentLeg": {
"legId": "red-beta-0002-payment",
"from": "treasury::12207ae69b2ef2f1249abd41923a06ee30bffa9298a17b0a875355c441bf32045d73",
"to": "beta::12207ae69b2ef2f1249abd41923a06ee30bffa9298a17b0a875355c441bf32045d73",
"amount": 60.24,
"allocationCid": null,
"allocated": false
},
"lastFailure": {
"type": "urn:nodeasset:problem:in-dealing-cycle",
"check": null,
"detail": "redemption 'red-beta-0002' is in dealing cycle 'cy-0001': it settles with the cycle, not alone",
"operationId": "op-3c1e5a7b-9d2f-4b6a-8c0e-2d4f6a8b0c1e",
"failedAt": "2026-10-03T13:25:41.207815Z"
}
}
],
"paidIn": 100.4,
"paidOut": 60.24,
"net": 40.16,
"endedAt": null,
"endedUpdateId": null,
"lastFailure": null
}
],
"next": 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>"
}
]
}List dealing cycles
Lists the dealing cycles, by id: the open ones, or, by state, those that settled or were released, each with when and in which ledger update it ended.
curl -s \
"https://engine.example.com/v1/dealing-cycles?limit=100" \
-H "Authorization: Bearer $TOKEN"
# Send each page's next back as after, until null.// A client from OpenAPI Generator: see Build a client.
import {
Configuration,
DealingCyclesApi,
ProblemFromJSON,
ResponseError,
} from "./nodeasset-client";
const api = new DealingCyclesApi(new Configuration({
basePath: "https://engine.example.com",
accessToken: process.env.TOKEN,
}));
try {
// Send each page's next back as after, until null.
let after: string | undefined;
do {
const page = await api.listDealingCycles({ limit: 100, after });
for (const dealingCycle of page.value ?? []) {
console.log(dealingCycle);
}
after = page.next ?? undefined;
} while (after);
} 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.DealingCyclesApi(client)
try:
# Send each page's next back as after, until null.
after = None
while True:
page = api.list_dealing_cycles(limit=100, after=after)
for dealing_cycle in page.value or []:
print(dealing_cycle)
after = page.next
if after is None:
break
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.DealingCyclesApi;
import nodeasset.client.model.Problem;
public class ListDealingCycles {
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")));
DealingCyclesApi api = new DealingCyclesApi(client);
try {
// Send each page's next back as after, until null.
String after = null;
do {
var request = DealingCyclesApi.APIListDealingCyclesRequest.newBuilder()
.limit(100)
.after(after)
.build();
var page = api.listDealingCycles(request);
for (var dealingCycle : page.getValue()) {
System.out.println(dealingCycle);
}
after = page.getNext();
} while (after != null);
} 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.675005Z",
"now": "2026-10-03T13:26:06.287005710Z",
"value": [
{
"dealingCycleId": "cy-0001",
"instrumentId": "FUND",
"payment": {
"admin": "bank::12207ae69b2ef2f1249abd41923a06ee30bffa9298a17b0a875355c441bf32045d73",
"id": "TD"
},
"strike": 1.004,
"deadline": "2026-10-04T01:25:01.008743Z",
"intentCid": "00f71c57fbae36e795ea0e2011183751b5fa0386db85af71582fb3983fd9fc65b6ca121220f3cdc69dbe07314db9676a5c799439981ffb269b277497b596938d6c98ca0733",
"state": "awaiting-allocations",
"orders": [
{
"kind": "subscription",
"id": "lot-alpha-0004",
"holderId": "alpha",
"party": "alpha::12207ae69b2ef2f1249abd41923a06ee30bffa9298a17b0a875355c441bf32045d73",
"units": 100,
"amount": 100.4,
"allocated": [
"fund",
"payment"
],
"paymentLeg": {
"legId": "lot-alpha-0004-payment",
"from": "alpha::12207ae69b2ef2f1249abd41923a06ee30bffa9298a17b0a875355c441bf32045d73",
"to": "treasury::12207ae69b2ef2f1249abd41923a06ee30bffa9298a17b0a875355c441bf32045d73",
"amount": 100.4,
"allocationCid": "00d4b6f8a0c2e4f6a8b0c2d4e6f8a0b2c4d6e8f0a2b4c6d8e0f2a4b6c8d0e2f4a6ca1212205b7d9f1a3c5e7b9d2f4a6c8e0b1d3f5a7c9e2b4d6f8a0c3e5b7d9f1a2c4e6b8",
"allocated": true
},
"lastFailure": null
},
{
"kind": "redemption",
"id": "red-beta-0002",
"holderId": "beta",
"party": "beta::12207ae69b2ef2f1249abd41923a06ee30bffa9298a17b0a875355c441bf32045d73",
"units": 60,
"amount": 60.24,
"allocated": [],
"paymentLeg": {
"legId": "red-beta-0002-payment",
"from": "treasury::12207ae69b2ef2f1249abd41923a06ee30bffa9298a17b0a875355c441bf32045d73",
"to": "beta::12207ae69b2ef2f1249abd41923a06ee30bffa9298a17b0a875355c441bf32045d73",
"amount": 60.24,
"allocationCid": null,
"allocated": false
},
"lastFailure": {
"type": "urn:nodeasset:problem:in-dealing-cycle",
"check": null,
"detail": "redemption 'red-beta-0002' is in dealing cycle 'cy-0001': it settles with the cycle, not alone",
"operationId": "op-3c1e5a7b-9d2f-4b6a-8c0e-2d4f6a8b0c1e",
"failedAt": "2026-10-03T13:25:41.207815Z"
}
}
],
"paidIn": 100.4,
"paidOut": 60.24,
"net": 40.16,
"endedAt": null,
"endedUpdateId": null,
"lastFailure": null
}
],
"next": 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>"
}
]
}app, approver, auditor, 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}$Query Parameters
Only this instrument's records.
Only dealing cycles in these states; repeat it for several. Absent, awaiting-allocations and allocated: the open ones.
Where a dealing cycle stands: open, or ended.
awaiting-allocations, allocated, settled, released 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.
The most records a page holds, 1 to 1000; absent, every record.
1 <= x <= 1000The previous page's next; absent, the first page.
Response
The dealing cycles.
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
The cursor for the next page, sent back as after; null on a list's last page, never on a feed.

