curl -s \
"https://engine.example.com/v1/forced-moves?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,
ProblemFromJSON,
ResponseError,
RestrictionsAndIssuerPowersApi,
} from "./nodeasset-client";
const api = new RestrictionsAndIssuerPowersApi(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.listForcedMoves({ limit: 100, after });
for (const forcedMove of page.value ?? []) {
console.log(forcedMove);
}
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.RestrictionsAndIssuerPowersApi(client)
try:
# Send each page's next back as after, until null.
after = None
while True:
page = api.list_forced_moves(limit=100, after=after)
for forced_move in page.value or []:
print(forced_move)
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.RestrictionsAndIssuerPowersApi;
import nodeasset.client.model.Problem;
public class ListForcedMoves {
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")));
RestrictionsAndIssuerPowersApi api = new RestrictionsAndIssuerPowersApi(client);
try {
// Send each page's next back as after, until null.
String after = null;
do {
var request = RestrictionsAndIssuerPowersApi.APIListForcedMovesRequest.newBuilder()
.limit(100)
.after(after)
.build();
var page = api.listForcedMoves(request);
for (var forcedMove : page.getValue()) {
System.out.println(forcedMove);
}
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": 0,
"now": "2026-10-03T13:26:40.118204411Z",
"value": [
{
"grounds": "forced-transfer",
"fromHolderId": "alpha",
"toHolderId": "beta",
"instrumentId": "FUND",
"units": 250,
"order": {
"reference": "ORDER-2026-117",
"documentHash": "de6f72d2c8e3165161aea2e30829263566003f52d777eb726139719e434abbca"
},
"rationale": "Court-ordered transfer",
"maker": "compliance-1",
"makerName": "Cora Lim",
"makerEmail": "cora.lim@venue.example",
"signers": [
{
"sub": "approver-1",
"name": "Ann Kim",
"email": "ann.kim@venue.example",
"signedAt": "2026-10-03T13:25:34.019274Z"
},
{
"sub": "approver-2",
"name": null,
"email": null,
"signedAt": "2026-10-03T13:25:37.402116Z"
}
],
"operationId": "op-93976a63-f5f9-43ea-8219-12421e728561",
"updateId": "1220c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2",
"movedAt": "2026-10-03T13:25:39.811027Z"
}
],
"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>"
}
]
}List forced moves
Lists each forced transfer and recovery that moved units, newest first: who moved what to whom, on what grounds, the order cited and who approved it. A holder’s moves are those from or to it.
curl -s \
"https://engine.example.com/v1/forced-moves?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,
ProblemFromJSON,
ResponseError,
RestrictionsAndIssuerPowersApi,
} from "./nodeasset-client";
const api = new RestrictionsAndIssuerPowersApi(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.listForcedMoves({ limit: 100, after });
for (const forcedMove of page.value ?? []) {
console.log(forcedMove);
}
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.RestrictionsAndIssuerPowersApi(client)
try:
# Send each page's next back as after, until null.
after = None
while True:
page = api.list_forced_moves(limit=100, after=after)
for forced_move in page.value or []:
print(forced_move)
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.RestrictionsAndIssuerPowersApi;
import nodeasset.client.model.Problem;
public class ListForcedMoves {
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")));
RestrictionsAndIssuerPowersApi api = new RestrictionsAndIssuerPowersApi(client);
try {
// Send each page's next back as after, until null.
String after = null;
do {
var request = RestrictionsAndIssuerPowersApi.APIListForcedMovesRequest.newBuilder()
.limit(100)
.after(after)
.build();
var page = api.listForcedMoves(request);
for (var forcedMove : page.getValue()) {
System.out.println(forcedMove);
}
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": 0,
"now": "2026-10-03T13:26:40.118204411Z",
"value": [
{
"grounds": "forced-transfer",
"fromHolderId": "alpha",
"toHolderId": "beta",
"instrumentId": "FUND",
"units": 250,
"order": {
"reference": "ORDER-2026-117",
"documentHash": "de6f72d2c8e3165161aea2e30829263566003f52d777eb726139719e434abbca"
},
"rationale": "Court-ordered transfer",
"maker": "compliance-1",
"makerName": "Cora Lim",
"makerEmail": "cora.lim@venue.example",
"signers": [
{
"sub": "approver-1",
"name": "Ann Kim",
"email": "ann.kim@venue.example",
"signedAt": "2026-10-03T13:25:34.019274Z"
},
{
"sub": "approver-2",
"name": null,
"email": null,
"signedAt": "2026-10-03T13:25:37.402116Z"
}
],
"operationId": "op-93976a63-f5f9-43ea-8219-12421e728561",
"updateId": "1220c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2",
"movedAt": "2026-10-03T13:25:39.811027Z"
}
],
"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>"
}
]
}app, approver, auditor, compliance, 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 the moves from or to this holder.
Only this instrument's records.
Only moves made at this instant or later, by movedAt.
Only moves made before this instant, by movedAt.
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 moves.
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
The cursor for the next page, sent back as after; null on a list's last page, never on a feed.

