From 1518f91b2ee426704e9876360ef9cf37a02ea886 Mon Sep 17 00:00:00 2001 From: danielporterda Date: Mon, 24 Aug 2026 12:58:10 -0400 Subject: [PATCH 01/14] Define generated reference target inventory Signed-off-by: danielporterda --- config/x2mdx/reference-targets.json | 253 ++++++++++++++++++ scripts/generate_all_reference_docs.py | 12 + scripts/reference_target_inventory.py | 315 +++++++++++++++++++++++ tests/test_reference_target_inventory.py | 84 ++++++ 4 files changed, 664 insertions(+) create mode 100644 config/x2mdx/reference-targets.json create mode 100644 scripts/reference_target_inventory.py create mode 100644 tests/test_reference_target_inventory.py diff --git a/config/x2mdx/reference-targets.json b/config/x2mdx/reference-targets.json new file mode 100644 index 000000000..927a5e403 --- /dev/null +++ b/config/x2mdx/reference-targets.json @@ -0,0 +1,253 @@ +{ + "schema_version": 1, + "targets": [ + { + "id": "json-ledger-api-openapi", + "title": "JSON Ledger API OpenAPI", + "generator": "scripts/generate_json_api_reference.py", + "format": "openapi", + "owner": "digital-asset/docs", + "item_boundary": "operation", + "identity_policy": "openapi.operation_id", + "history_mode": "snapshots", + "version_policy": "configured_publish_version", + "source_config": "config/x2mdx/ledger-api/source-artifacts.json", + "reader_output_roots": [ + "docs-main/reference/json-api-reference" + ], + "source_artifact_roots": [ + "docs-main/openapi/json-ledger-api" + ], + "current_page_renderer": "native_mintlify_openapi", + "target_page_renderer": "x2mdx_mdx", + "route_policy": "preserve_or_redirect" + }, + { + "id": "json-ledger-api-asyncapi", + "title": "JSON Ledger API AsyncAPI", + "generator": "scripts/generate_json_api_asyncapi_reference.py", + "format": "asyncapi", + "owner": "digital-asset/docs", + "item_boundary": "channel_action", + "identity_policy": "asyncapi.channel_action", + "history_mode": "snapshots", + "version_policy": "configured_publish_version", + "source_config": "config/x2mdx/ledger-api-asyncapi/source-artifacts.json", + "reader_output_roots": [ + "docs-main/reference/json-api-asyncapi-reference" + ], + "source_artifact_roots": [], + "current_page_renderer": "x2mdx_mdx", + "target_page_renderer": "x2mdx_mdx", + "route_policy": "preserve_or_redirect" + }, + { + "id": "ledger-api-grpc", + "title": "Ledger API gRPC", + "generator": "scripts/generate_grpc_ledger_api_reference.py", + "format": "grpc", + "owner": "digital-asset/docs", + "item_boundary": "service_method", + "identity_policy": "protobuf.fully_qualified_service_method", + "history_mode": "snapshots", + "version_policy": "latest_selected_release", + "source_config": "config/x2mdx/grpc-ledger-api-reference/source-artifacts.json", + "reader_output_roots": [ + "docs-main/reference/grpc-ledger-api-reference" + ], + "source_artifact_roots": [], + "current_page_renderer": "x2mdx_mdx", + "target_page_renderer": "x2mdx_mdx", + "route_policy": "preserve_or_redirect" + }, + { + "id": "java-bindings", + "title": "Java bindings", + "generator": "scripts/generate_ledger_bindings_api_reference.py", + "format": "jvm_docs", + "owner": "digital-asset/docs", + "item_boundary": "canonical_symbol", + "identity_policy": "jvm.canonical_symbol", + "history_mode": "snapshots", + "version_policy": "latest_configured_version_per_artifact", + "source_config": "config/x2mdx/ledger-bindings/source-artifacts.json", + "reader_output_roots": [ + "docs-main/reference/java-bindings.mdx", + "docs-main/reference/java" + ], + "source_artifact_roots": [], + "current_page_renderer": "x2mdx_mdx", + "target_page_renderer": "x2mdx_mdx", + "route_policy": "preserve_or_redirect" + }, + { + "id": "daml-standard-library", + "title": "Daml Standard Library", + "generator": "scripts/generate_daml_standard_library_reference.py", + "format": "daml_json", + "owner": "digital-asset/docs", + "item_boundary": "module_entity", + "identity_policy": "daml.canonical_module_entity", + "history_mode": "snapshots", + "version_policy": "configured_publish_version", + "source_config": "config/x2mdx/daml-standard-library/source-artifacts.json", + "reader_output_roots": [ + "docs-main/appdev/reference/daml-standard-library" + ], + "source_artifact_roots": [], + "current_page_renderer": "x2mdx_mdx", + "target_page_renderer": "x2mdx_mdx", + "route_policy": "preserve_or_redirect" + }, + { + "id": "daml-script", + "title": "Daml Script", + "generator": "scripts/generate_daml_script_reference.py", + "format": "daml_json", + "owner": "digital-asset/docs", + "item_boundary": "module_entity", + "identity_policy": "daml.canonical_module_entity", + "history_mode": "snapshots", + "version_policy": "configured_publish_version", + "source_config": "config/x2mdx/daml-script/source-artifacts.json", + "reader_output_roots": [ + "docs-main/appdev/reference/daml-script" + ], + "source_artifact_roots": [], + "current_page_renderer": "x2mdx_mdx", + "target_page_renderer": "x2mdx_mdx", + "route_policy": "preserve_or_redirect" + }, + { + "id": "ledger-api-protobuf", + "title": "Ledger API protobuf", + "generator": "scripts/generate_canton_protobuf_history.py", + "format": "protobuf", + "owner": "digital-asset/docs", + "item_boundary": "service_method", + "identity_policy": "protobuf.fully_qualified_service_method", + "history_mode": "snapshots", + "version_policy": "latest_selected_release", + "source_config": "config/x2mdx/protobuf-history/source-artifacts.json", + "reader_output_roots": [ + "docs-main/appdev/reference/protobuf-history" + ], + "source_artifact_roots": [], + "current_page_renderer": "x2mdx_mdx", + "target_page_renderer": "x2mdx_mdx", + "route_policy": "preserve_or_redirect" + }, + { + "id": "admin-api-protobuf", + "title": "Admin API protobuf", + "generator": "scripts/generate_canton_protobuf_history.py", + "format": "protobuf", + "owner": "digital-asset/docs", + "item_boundary": "service_method", + "identity_policy": "protobuf.fully_qualified_service_method", + "history_mode": "snapshots", + "version_policy": "latest_selected_release", + "source_config": "config/x2mdx/protobuf-history/source-artifacts.json", + "reader_output_roots": [ + "docs-main/reference/admin-api/protobuf" + ], + "source_artifact_roots": [], + "current_page_renderer": "x2mdx_mdx", + "target_page_renderer": "x2mdx_mdx", + "route_policy": "preserve_or_redirect" + }, + { + "id": "wallet-gateway-openrpc", + "title": "Wallet Gateway OpenRPC", + "generator": "scripts/generate_wallet_gateway_openrpc_reference.py", + "format": "openrpc", + "owner": "digital-asset/docs", + "item_boundary": "spec_method", + "identity_policy": "openrpc.spec_method", + "history_mode": "snapshots", + "version_policy": "configured_publish_version", + "source_config": "config/x2mdx/wallet-gateway-openrpc/source-artifacts.json", + "reader_output_roots": [ + "docs-main/reference/wallet-gateway-json-rpc" + ], + "source_artifact_roots": [], + "current_page_renderer": "x2mdx_mdx", + "target_page_renderer": "x2mdx_mdx", + "route_policy": "preserve_or_redirect" + }, + { + "id": "splice-openapi", + "title": "Splice OpenAPI", + "generator": "scripts/generate_splice_mintlify_openapi.py", + "format": "openapi", + "owner": "digital-asset/docs", + "item_boundary": "operation", + "identity_policy": "openapi.operation_id", + "history_mode": "snapshots", + "version_policy": "configured_publish_version", + "source_config": "config/mintlify-openapi/splice-openapi/source-artifacts.json", + "reader_output_roots": [ + "docs-main/reference/splice-ans-api", + "docs-main/reference/splice-scan-api", + "docs-main/reference/splice-scan-proxy-api", + "docs-main/reference/splice-scan-streaming-api", + "docs-main/reference/splice-token-metadata-service", + "docs-main/reference/splice-transfer-instruction-api", + "docs-main/reference/splice-transfer-instruction-v2-api", + "docs-main/reference/splice-allocation-api", + "docs-main/reference/splice-allocation-v2-api", + "docs-main/reference/splice-allocation-instruction-api", + "docs-main/reference/splice-allocation-instruction-v2-api", + "docs-main/reference/splice-wallet-api-external" + ], + "source_artifact_roots": [ + "docs-main/openapi/splice" + ], + "current_page_renderer": "native_mintlify_openapi", + "target_page_renderer": "x2mdx_mdx", + "route_policy": "preserve_or_redirect" + }, + { + "id": "splice-token-standard-v2-daml", + "title": "Splice Token Standard v2 Daml", + "generator": "scripts/generate_splice_token_standard_v2_reference.py", + "format": "daml_json", + "owner": "digital-asset/docs", + "item_boundary": "module_entity", + "identity_policy": "daml.canonical_module_entity", + "history_mode": "snapshots", + "version_policy": "configured_publish_version", + "source_config": "config/x2mdx/splice-token-standard-v2/source-artifacts.json", + "reader_output_roots": [ + "docs-main/sdks-tools/api-reference/splice-daml" + ], + "source_artifact_roots": [], + "current_page_renderer": "x2mdx_mdx", + "target_page_renderer": "x2mdx_mdx", + "route_policy": "preserve_or_redirect", + "limitations": [ + "The configured source currently provides one publish snapshot, so no cross-version changes can be observed." + ] + }, + { + "id": "typescript-bindings", + "title": "TypeScript bindings", + "generator": "scripts/generate_typescript_bindings_reference.py", + "format": "typedoc", + "owner": "digital-asset/docs", + "item_boundary": "package_symbol", + "identity_policy": "typedoc.package_symbol", + "history_mode": "snapshots", + "version_policy": "configured_publish_version_per_package", + "source_config": "config/x2mdx/typescript-bindings/source-artifacts.json", + "reader_output_roots": [ + "docs-main/reference/typescript.mdx", + "docs-main/reference/typescript" + ], + "source_artifact_roots": [], + "current_page_renderer": "x2mdx_mdx", + "target_page_renderer": "x2mdx_mdx", + "route_policy": "preserve_or_redirect" + } + ] +} diff --git a/scripts/generate_all_reference_docs.py b/scripts/generate_all_reference_docs.py index 3a5a338c0..c34249e05 100644 --- a/scripts/generate_all_reference_docs.py +++ b/scripts/generate_all_reference_docs.py @@ -40,6 +40,7 @@ class NavSlice: class ScriptJob: script_path: Path nav_slices: tuple[NavSlice, ...] + target_ids: tuple[str, ...] extra_args: tuple[str, ...] = () @@ -47,14 +48,17 @@ class ScriptJob: ScriptJob( script_path=REPO_ROOT / "scripts" / "generate_json_api_reference.py", nav_slices=(NavSlice("ledger_child", (reference_nav.OPENAPI_GROUP,)),), + target_ids=("json-ledger-api-openapi",), ), ScriptJob( script_path=REPO_ROOT / "scripts" / "generate_json_api_asyncapi_reference.py", nav_slices=(NavSlice("ledger_child", (reference_nav.ASYNCAPI_GROUP,)),), + target_ids=("json-ledger-api-asyncapi",), ), ScriptJob( script_path=REPO_ROOT / "scripts" / "generate_grpc_ledger_api_reference.py", nav_slices=(NavSlice("ledger_child", (reference_nav.GRPC_GROUP,)),), + target_ids=("ledger-api-grpc",), extra_args=( # The gRPC and protobuf wrappers both default to the same protobuf-history # cache tree, so parallel fanout gives the gRPC wrapper its own cache root. @@ -67,14 +71,17 @@ class ScriptJob: ScriptJob( script_path=REPO_ROOT / "scripts" / "generate_ledger_bindings_api_reference.py", nav_slices=(NavSlice("ledger_child", (reference_nav.BINDINGS_GROUP,)),), + target_ids=("java-bindings",), ), ScriptJob( script_path=REPO_ROOT / "scripts" / "generate_daml_standard_library_reference.py", nav_slices=(NavSlice("top_group", ("Daml Standard Library",)),), + target_ids=("daml-standard-library",), ), ScriptJob( script_path=REPO_ROOT / "scripts" / "generate_daml_script_reference.py", nav_slices=(NavSlice("top_group", ("Daml Script",)),), + target_ids=("daml-script",), ), ScriptJob( script_path=REPO_ROOT / "scripts" / "generate_canton_protobuf_history.py", @@ -82,22 +89,27 @@ class ScriptJob: NavSlice("ledger_child", (reference_nav.PROTOBUF_GROUP,)), NavSlice("top_group", (reference_nav.ADMIN_API_PARENT_GROUP,)), ), + target_ids=("ledger-api-protobuf", "admin-api-protobuf"), ), ScriptJob( script_path=REPO_ROOT / "scripts" / "generate_wallet_gateway_openrpc_reference.py", nav_slices=(NavSlice("top_groups", ("dApp API", "Wallet Gateway")),), + target_ids=("wallet-gateway-openrpc",), ), ScriptJob( script_path=REPO_ROOT / "scripts" / "generate_splice_mintlify_openapi.py", nav_slices=(NavSlice("top_group", ("Splice APIs",)),), + target_ids=("splice-openapi",), ), ScriptJob( script_path=REPO_ROOT / "scripts" / "generate_splice_token_standard_v2_reference.py", nav_slices=(NavSlice("nested_group", ("Splice APIs", "Splice Daml Packages")),), + target_ids=("splice-token-standard-v2-daml",), ), ScriptJob( script_path=REPO_ROOT / "scripts" / "generate_typescript_bindings_reference.py", nav_slices=(NavSlice("top_group", ("TypeScript",)),), + target_ids=("typescript-bindings",), ), ] diff --git a/scripts/reference_target_inventory.py b/scripts/reference_target_inventory.py new file mode 100644 index 000000000..41f87d562 --- /dev/null +++ b/scripts/reference_target_inventory.py @@ -0,0 +1,315 @@ +from __future__ import annotations + +import json +import re +from dataclasses import dataclass +from pathlib import Path +from typing import Literal, cast + + +REPO_ROOT = Path(__file__).resolve().parents[1] +DEFAULT_INVENTORY_PATH = REPO_ROOT / "config" / "x2mdx" / "reference-targets.json" +TARGET_ID_RE = re.compile(r"^[a-z0-9]+(?:-[a-z0-9]+)*$") + +HistoryMode = Literal["snapshots", "authored", "unavailable"] +PageRenderer = Literal["native_mintlify_openapi", "x2mdx_mdx"] +ReferenceFormat = Literal[ + "asyncapi", + "daml_json", + "grpc", + "jvm_docs", + "openapi", + "openrpc", + "protobuf", + "typedoc", +] +RoutePolicy = Literal["preserve_or_redirect"] +VersionPolicy = Literal[ + "configured_publish_version", + "configured_publish_version_per_package", + "latest_configured_version_per_artifact", + "latest_selected_release", +] + + +@dataclass(frozen=True) +class ReferenceTarget: + id: str + title: str + generator: str + format: ReferenceFormat + owner: str + item_boundary: str + identity_policy: str + history_mode: HistoryMode + version_policy: VersionPolicy + source_config: str + reader_output_roots: tuple[str, ...] + source_artifact_roots: tuple[str, ...] + current_page_renderer: PageRenderer + target_page_renderer: PageRenderer + route_policy: RoutePolicy + limitations: tuple[str, ...] = () + + +@dataclass(frozen=True) +class ReferenceTargetInventory: + schema_version: int + targets: tuple[ReferenceTarget, ...] + + def by_id(self) -> dict[str, ReferenceTarget]: + return {target.id: target for target in self.targets} + + def target_ids_by_generator(self) -> dict[str, tuple[str, ...]]: + grouped: dict[str, list[str]] = {} + for target in self.targets: + grouped.setdefault(target.generator, []).append(target.id) + return { + generator: tuple(sorted(target_ids)) + for generator, target_ids in sorted(grouped.items()) + } + + +def _required_string(payload: dict[str, object], field: str, *, context: str) -> str: + value = payload.get(field) + if not isinstance(value, str) or not value.strip(): + raise ValueError(f"{context}.{field} must be a non-empty string") + return value + + +def _string_tuple( + payload: dict[str, object], + field: str, + *, + context: str, + required: bool, +) -> tuple[str, ...]: + value = payload.get(field) + if not isinstance(value, list) or not all( + isinstance(item, str) and item.strip() for item in value + ): + raise ValueError(f"{context}.{field} must be a list of non-empty strings") + if required and not value: + raise ValueError(f"{context}.{field} must not be empty") + return tuple(value) + + +def _literal( + payload: dict[str, object], + field: str, + allowed: set[str], + *, + context: str, +) -> str: + value = _required_string(payload, field, context=context) + if value not in allowed: + choices = ", ".join(sorted(allowed)) + raise ValueError(f"{context}.{field} must be one of: {choices}") + return value + + +def _validate_repo_path( + path: str, *, field: str, context: str, prefix: str | None = None +) -> None: + candidate = Path(path) + if candidate.is_absolute() or ".." in candidate.parts: + raise ValueError( + f"{context}.{field} must be a repository-relative path: {path}" + ) + if prefix is not None and not path.startswith(prefix): + raise ValueError(f"{context}.{field} must start with {prefix}: {path}") + + +def _parse_target(payload: object, *, index: int, repo_root: Path) -> ReferenceTarget: + context = f"targets[{index}]" + if not isinstance(payload, dict): + raise ValueError(f"{context} must be an object") + + target_id = _required_string(payload, "id", context=context) + if not TARGET_ID_RE.fullmatch(target_id): + raise ValueError(f"{context}.id must be lower kebab case: {target_id}") + + generator = _required_string(payload, "generator", context=context) + source_config = _required_string(payload, "source_config", context=context) + reader_output_roots = _string_tuple( + payload, + "reader_output_roots", + context=context, + required=True, + ) + source_artifact_roots = _string_tuple( + payload, + "source_artifact_roots", + context=context, + required=False, + ) + limitations_raw = payload.get("limitations", []) + if not isinstance(limitations_raw, list) or not all( + isinstance(item, str) and item.strip() for item in limitations_raw + ): + raise ValueError(f"{context}.limitations must be a list of non-empty strings") + + _validate_repo_path( + generator, field="generator", context=context, prefix="scripts/" + ) + _validate_repo_path( + source_config, field="source_config", context=context, prefix="config/" + ) + if not (repo_root / generator).is_file(): + raise ValueError(f"{context}.generator does not exist: {generator}") + if not (repo_root / source_config).is_file(): + raise ValueError(f"{context}.source_config does not exist: {source_config}") + for field, paths in ( + ("reader_output_roots", reader_output_roots), + ("source_artifact_roots", source_artifact_roots), + ): + for path in paths: + _validate_repo_path(path, field=field, context=context, prefix="docs-main/") + + history_mode = _literal( + payload, + "history_mode", + {"snapshots", "authored", "unavailable"}, + context=context, + ) + version_policy = _literal( + payload, + "version_policy", + { + "configured_publish_version", + "configured_publish_version_per_package", + "latest_configured_version_per_artifact", + "latest_selected_release", + }, + context=context, + ) + current_page_renderer = _literal( + payload, + "current_page_renderer", + {"native_mintlify_openapi", "x2mdx_mdx"}, + context=context, + ) + target_page_renderer = _literal( + payload, + "target_page_renderer", + {"native_mintlify_openapi", "x2mdx_mdx"}, + context=context, + ) + route_policy = _literal( + payload, + "route_policy", + {"preserve_or_redirect"}, + context=context, + ) + reference_format = _literal( + payload, + "format", + { + "asyncapi", + "daml_json", + "grpc", + "jvm_docs", + "openapi", + "openrpc", + "protobuf", + "typedoc", + }, + context=context, + ) + if ( + current_page_renderer == "native_mintlify_openapi" + and reference_format != "openapi" + ): + raise ValueError( + f"{context} can use native_mintlify_openapi only for format=openapi" + ) + + return ReferenceTarget( + id=target_id, + title=_required_string(payload, "title", context=context), + generator=generator, + format=cast(ReferenceFormat, reference_format), + owner=_required_string(payload, "owner", context=context), + item_boundary=_required_string(payload, "item_boundary", context=context), + identity_policy=_required_string(payload, "identity_policy", context=context), + history_mode=cast(HistoryMode, history_mode), + version_policy=cast(VersionPolicy, version_policy), + source_config=source_config, + reader_output_roots=reader_output_roots, + source_artifact_roots=source_artifact_roots, + current_page_renderer=cast(PageRenderer, current_page_renderer), + target_page_renderer=cast(PageRenderer, target_page_renderer), + route_policy=cast(RoutePolicy, route_policy), + limitations=tuple(limitations_raw), + ) + + +def load_reference_target_inventory( + path: Path = DEFAULT_INVENTORY_PATH, + *, + repo_root: Path = REPO_ROOT, +) -> ReferenceTargetInventory: + payload = json.loads(path.read_text(encoding="utf-8")) + if not isinstance(payload, dict): + raise ValueError(f"Reference target inventory must be an object: {path}") + schema_version = payload.get("schema_version") + if schema_version != 1: + raise ValueError( + f"Unsupported reference target inventory schema_version: {schema_version}" + ) + targets_raw = payload.get("targets") + if not isinstance(targets_raw, list) or not targets_raw: + raise ValueError( + "Reference target inventory must contain a non-empty targets list" + ) + + targets = tuple( + _parse_target(target, index=index, repo_root=repo_root) + for index, target in enumerate(targets_raw) + ) + target_ids = [target.id for target in targets] + if len(target_ids) != len(set(target_ids)): + duplicates = sorted( + {target_id for target_id in target_ids if target_ids.count(target_id) > 1} + ) + raise ValueError(f"Duplicate reference target IDs: {', '.join(duplicates)}") + if any(target.target_page_renderer != "x2mdx_mdx" for target in targets): + raise ValueError( + "Every reference target must converge on target_page_renderer=x2mdx_mdx" + ) + + return ReferenceTargetInventory(schema_version=schema_version, targets=targets) + + +def validate_runner_targets( + inventory: ReferenceTargetInventory, + runner_targets: dict[str, tuple[str, ...]], +) -> None: + inventory_targets = inventory.target_ids_by_generator() + if runner_targets == inventory_targets: + return + + runner_generators = set(runner_targets) + inventory_generators = set(inventory_targets) + missing_generators = sorted(runner_generators - inventory_generators) + orphan_generators = sorted(inventory_generators - runner_generators) + mismatched_generators = sorted( + generator + for generator in runner_generators & inventory_generators + if tuple(sorted(runner_targets[generator])) != inventory_targets[generator] + ) + details: list[str] = [] + if missing_generators: + details.append( + f"runner generators missing from inventory: {', '.join(missing_generators)}" + ) + if orphan_generators: + details.append( + f"inventory generators missing from runner: {', '.join(orphan_generators)}" + ) + if mismatched_generators: + details.append(f"target ownership differs: {', '.join(mismatched_generators)}") + raise ValueError( + "Reference target inventory does not match aggregate runner; " + + "; ".join(details) + ) diff --git a/tests/test_reference_target_inventory.py b/tests/test_reference_target_inventory.py new file mode 100644 index 000000000..4da78f122 --- /dev/null +++ b/tests/test_reference_target_inventory.py @@ -0,0 +1,84 @@ +from __future__ import annotations + +import sys +from pathlib import Path + + +REPO_ROOT = Path(__file__).resolve().parents[1] +SCRIPT_DIR = REPO_ROOT / "scripts" +if str(SCRIPT_DIR) not in sys.path: + sys.path.insert(0, str(SCRIPT_DIR)) + +import generate_all_reference_docs # noqa: E402 +from reference_target_inventory import ( # noqa: E402 + load_reference_target_inventory, + validate_runner_targets, +) + + +EXPECTED_TARGET_IDS = { + "admin-api-protobuf", + "daml-script", + "daml-standard-library", + "java-bindings", + "json-ledger-api-asyncapi", + "json-ledger-api-openapi", + "ledger-api-grpc", + "ledger-api-protobuf", + "splice-openapi", + "splice-token-standard-v2-daml", + "typescript-bindings", + "wallet-gateway-openrpc", +} + + +def runner_targets() -> dict[str, tuple[str, ...]]: + return { + job.script_path.relative_to(REPO_ROOT).as_posix(): tuple(sorted(job.target_ids)) + for job in generate_all_reference_docs.SCRIPT_JOBS + } + + +def test_inventory_declares_every_current_reader_target() -> None: + inventory = load_reference_target_inventory() + + assert set(inventory.by_id()) == EXPECTED_TARGET_IDS + assert len(inventory.targets) == 12 + validate_runner_targets(inventory, runner_targets()) + + +def test_every_target_converges_on_checked_in_mdx() -> None: + inventory = load_reference_target_inventory() + + assert {target.target_page_renderer for target in inventory.targets} == { + "x2mdx_mdx" + } + assert { + target.id + for target in inventory.targets + if target.current_page_renderer == "native_mintlify_openapi" + } == {"json-ledger-api-openapi", "splice-openapi"} + + +def test_scala_is_not_an_active_reader_target() -> None: + inventory = load_reference_target_inventory() + + assert "scala-bindings" not in inventory.by_id() + assert all( + "scala" not in output_root + for target in inventory.targets + for output_root in target.reader_output_roots + ) + + +def test_inventory_rejects_runner_drift() -> None: + inventory = load_reference_target_inventory() + drifted = runner_targets() + drifted["scripts/generate_new_reference.py"] = ("new-reference",) + + try: + validate_runner_targets(inventory, drifted) + except ValueError as error: + assert "runner generators missing from inventory" in str(error) + else: + raise AssertionError("Expected aggregate-runner drift to fail validation") From 94290dfc7aeb059b8dfd605bfc26771b02f024e3 Mon Sep 17 00:00:00 2001 From: danielporterda Date: Mon, 24 Aug 2026 12:58:15 -0400 Subject: [PATCH 02/14] Add shared reference history contract Signed-off-by: danielporterda --- src/x2mdx/history/__init__.py | 50 +++ src/x2mdx/history/events.py | 99 ++++++ src/x2mdx/history/io.py | 153 +++++++++ src/x2mdx/history/models.py | 147 ++++++++ src/x2mdx/history/validation.py | 317 ++++++++++++++++++ src/x2mdx/history/versioning.py | 70 ++++ .../fixtures/history/conformance/report.json | 188 +++++++++++ tests/test_history_contract.py | 143 ++++++++ 8 files changed, 1167 insertions(+) create mode 100644 src/x2mdx/history/__init__.py create mode 100644 src/x2mdx/history/events.py create mode 100644 src/x2mdx/history/io.py create mode 100644 src/x2mdx/history/models.py create mode 100644 src/x2mdx/history/validation.py create mode 100644 src/x2mdx/history/versioning.py create mode 100644 tests/fixtures/history/conformance/report.json create mode 100644 tests/test_history_contract.py diff --git a/src/x2mdx/history/__init__.py b/src/x2mdx/history/__init__.py new file mode 100644 index 000000000..b602cc6d8 --- /dev/null +++ b/src/x2mdx/history/__init__.py @@ -0,0 +1,50 @@ +"""Shared history contracts for generated reference surfaces.""" + +from x2mdx.history.events import history_events_for_item +from x2mdx.history.io import ( + history_report_from_dict, + history_report_to_dict, + load_history_report, +) +from x2mdx.history.models import ( + ChangeDetail, + Evidence, + EvidenceKind, + HistoryEvent, + HistoryEventKind, + HistoryItem, + HistoryMode, + IdentityConfidence, + LifecycleState, + LifecycleTransition, + ReferenceFormat, + ReplacementEdge, + SourceArtifact, + SurfaceHistoryReport, + VersionSelectionPolicy, +) +from x2mdx.history.validation import HistoryValidationError, validate_history_report + +__all__ = [ + "ChangeDetail", + "Evidence", + "EvidenceKind", + "HistoryEvent", + "HistoryEventKind", + "HistoryItem", + "HistoryMode", + "HistoryValidationError", + "IdentityConfidence", + "LifecycleState", + "LifecycleTransition", + "ReferenceFormat", + "ReplacementEdge", + "SourceArtifact", + "SurfaceHistoryReport", + "VersionSelectionPolicy", + "history_events_for_item", + "history_report_from_dict", + "history_report_to_dict", + "load_history_report", + "validate_history_report", +] diff --git a/src/x2mdx/history/events.py b/src/x2mdx/history/events.py new file mode 100644 index 000000000..3e0825076 --- /dev/null +++ b/src/x2mdx/history/events.py @@ -0,0 +1,99 @@ +from __future__ import annotations + +from functools import cmp_to_key + +from x2mdx.history.models import ( + HistoryEvent, + HistoryEventKind, + HistoryItem, + LifecycleState, +) +from x2mdx.history.versioning import compare_versions + + +EVENT_KIND_PRIORITY = { + HistoryEventKind.REMOVE_AS_OF: 0, + HistoryEventKind.DEPRECATED: 1, + HistoryEventKind.CHANGED: 2, + HistoryEventKind.INTRODUCED: 3, + HistoryEventKind.REPLACEMENT: 4, +} + + +def history_events_for_item( + item: HistoryItem, + *, + comparison_versions: tuple[str, ...], +) -> tuple[HistoryEvent, ...]: + events: list[HistoryEvent] = [] + if item.remove_as_of is not None and item.remove_as_of_evidence is not None: + events.append( + HistoryEvent( + kind=HistoryEventKind.REMOVE_AS_OF, + version=item.remove_as_of, + label=f"Remove as of {item.remove_as_of}", + details=(), + evidence=(item.remove_as_of_evidence,), + ) + ) + + for transition in item.lifecycle_transitions: + if transition.state != LifecycleState.DEPRECATED: + continue + events.append( + HistoryEvent( + kind=HistoryEventKind.DEPRECATED, + version=transition.version, + label="Deprecated", + details=(), + evidence=(transition.evidence,), + ) + ) + + for change in item.changes: + events.append( + HistoryEvent( + kind=HistoryEventKind.CHANGED, + version=change.version, + label="Changed", + details=(change.summary,), + evidence=change.evidence, + ) + ) + + events.append( + HistoryEvent( + kind=HistoryEventKind.INTRODUCED, + version=item.first_seen, + label="Introduced", + details=(), + evidence=(item.introduction_evidence,), + ) + ) + + for edge in item.replacement_edges: + if edge.to_item_id == item.id: + detail = f"Replaces {edge.from_item_id}" + else: + detail = f"Replaced by {edge.to_item_id}" + events.append( + HistoryEvent( + kind=HistoryEventKind.REPLACEMENT, + version=edge.version, + label="Replacement", + details=(detail,), + evidence=(edge.evidence,), + ) + ) + + def compare_events(left: HistoryEvent, right: HistoryEvent) -> int: + version_comparison = compare_versions( + left.version, + right.version, + known_order=comparison_versions, + ) + if version_comparison: + return -version_comparison + return EVENT_KIND_PRIORITY[left.kind] - EVENT_KIND_PRIORITY[right.kind] + + return tuple(sorted(events, key=cmp_to_key(compare_events))) diff --git a/src/x2mdx/history/io.py b/src/x2mdx/history/io.py new file mode 100644 index 000000000..81160b127 --- /dev/null +++ b/src/x2mdx/history/io.py @@ -0,0 +1,153 @@ +from __future__ import annotations + +import json +from dataclasses import asdict +from pathlib import Path +from typing import Any + +from x2mdx.history.models import ( + ChangeDetail, + Evidence, + EvidenceKind, + HistoryItem, + HistoryMode, + IdentityConfidence, + LifecycleState, + LifecycleTransition, + ReferenceFormat, + ReplacementEdge, + SourceArtifact, + SurfaceHistoryReport, + VersionSelectionPolicy, +) + + +def _evidence(payload: dict[str, Any]) -> Evidence: + return Evidence( + kind=EvidenceKind(payload["kind"]), + source=str(payload["source"]), + observed_in_version=str(payload["observed_in_version"]), + location=str(payload["location"]) + if payload.get("location") is not None + else None, + detail=str(payload["detail"]) if payload.get("detail") is not None else None, + ) + + +def _required_bool(payload: dict[str, Any], field: str) -> bool: + value = payload[field] + if not isinstance(value, bool): + raise ValueError(f"{field} must be a boolean") + return value + + +def _item(payload: dict[str, Any]) -> HistoryItem: + lifecycle_state_raw = payload.get("lifecycle_state") + return HistoryItem( + id=str(payload["id"]), + kind=str(payload["kind"]), + route=str(payload["route"]) if payload.get("route") is not None else None, + location=str(payload["location"]) + if payload.get("location") is not None + else None, + first_seen=str(payload["first_seen"]), + last_seen=str(payload["last_seen"]), + current_present=_required_bool(payload, "current_present"), + introduction_evidence=_evidence(payload["introduction_evidence"]), + observed_removal=( + str(payload["observed_removal"]) + if payload.get("observed_removal") is not None + else None + ), + removal_evidence=( + _evidence(payload["removal_evidence"]) + if payload.get("removal_evidence") is not None + else None + ), + last_changed=str(payload["last_changed"]) + if payload.get("last_changed") is not None + else None, + changes=tuple( + ChangeDetail( + version=str(change["version"]), + summary=str(change["summary"]), + evidence=tuple(_evidence(evidence) for evidence in change["evidence"]), + ) + for change in payload.get("changes", []) + ), + lifecycle_state=LifecycleState(lifecycle_state_raw) + if lifecycle_state_raw is not None + else None, + lifecycle_transitions=tuple( + LifecycleTransition( + state=LifecycleState(transition["state"]), + version=str(transition["version"]), + evidence=_evidence(transition["evidence"]), + ) + for transition in payload.get("lifecycle_transitions", []) + ), + remove_as_of=str(payload["remove_as_of"]) + if payload.get("remove_as_of") is not None + else None, + remove_as_of_evidence=( + _evidence(payload["remove_as_of_evidence"]) + if payload.get("remove_as_of_evidence") is not None + else None + ), + replacement_edges=tuple( + ReplacementEdge( + from_item_id=str(edge["from_item_id"]), + to_item_id=str(edge["to_item_id"]), + version=str(edge["version"]), + evidence=_evidence(edge["evidence"]), + ) + for edge in payload.get("replacement_edges", []) + ), + identity_confidence=IdentityConfidence( + payload.get("identity_confidence", "exact") + ), + identity_evidence=tuple( + _evidence(evidence) for evidence in payload.get("identity_evidence", []) + ), + ) + + +def history_report_from_dict(payload: dict[str, Any]) -> SurfaceHistoryReport: + return SurfaceHistoryReport( + surface_id=str(payload["surface_id"]), + title=str(payload["title"]), + format=ReferenceFormat(payload["format"]), + configured_scope=str(payload["configured_scope"]), + history_mode=HistoryMode(payload["history_mode"]), + publish_version=str(payload["publish_version"]), + comparison_versions=tuple( + str(version) for version in payload["comparison_versions"] + ), + source_artifacts=tuple( + SourceArtifact( + version=str(source["version"]), + source=str(source["source"]), + revision=str(source["revision"]) + if source.get("revision") is not None + else None, + path=str(source["path"]) if source.get("path") is not None else None, + ) + for source in payload.get("source_artifacts", []) + ), + version_policy=VersionSelectionPolicy(payload["version_policy"]), + items=tuple(_item(item) for item in payload.get("items", [])), + limitations=tuple( + str(limitation) for limitation in payload.get("limitations", []) + ), + ) + + +def load_history_report(path: Path) -> SurfaceHistoryReport: + payload = json.loads(path.read_text(encoding="utf-8")) + if not isinstance(payload, dict): + raise ValueError(f"History report must be a JSON object: {path}") + return history_report_from_dict(payload) + + +def history_report_to_dict(report: SurfaceHistoryReport) -> dict[str, Any]: + return asdict(report) diff --git a/src/x2mdx/history/models.py b/src/x2mdx/history/models.py new file mode 100644 index 000000000..28955c6ea --- /dev/null +++ b/src/x2mdx/history/models.py @@ -0,0 +1,147 @@ +from __future__ import annotations + +from dataclasses import dataclass +from enum import StrEnum + + +class HistoryMode(StrEnum): + SNAPSHOTS = "snapshots" + AUTHORED = "authored" + UNAVAILABLE = "unavailable" + + +class ReferenceFormat(StrEnum): + OPENAPI = "openapi" + ASYNCAPI = "asyncapi" + GRPC = "grpc" + PROTOBUF = "protobuf" + JVM_DOCS = "jvm_docs" + DAML_JSON = "daml_json" + OPENRPC = "openrpc" + TYPEDOC = "typedoc" + + +class VersionSelectionPolicy(StrEnum): + CONFIGURED_PUBLISH_VERSION = "configured_publish_version" + CONFIGURED_PUBLISH_VERSION_PER_PACKAGE = "configured_publish_version_per_package" + LATEST_CONFIGURED_VERSION_PER_ARTIFACT = "latest_configured_version_per_artifact" + LATEST_SELECTED_RELEASE = "latest_selected_release" + + +class EvidenceKind(StrEnum): + SNAPSHOT = "snapshot" + SNAPSHOT_DIFF = "snapshot_diff" + SOURCE_METADATA = "source_metadata" + SIDECAR = "sidecar" + + +class IdentityConfidence(StrEnum): + EXACT = "exact" + FALLBACK = "fallback" + + +class LifecycleState(StrEnum): + ALPHA = "alpha" + BETA = "beta" + STABLE = "stable" + DEPRECATED = "deprecated" + + +class HistoryEventKind(StrEnum): + REMOVE_AS_OF = "remove_as_of" + DEPRECATED = "deprecated" + CHANGED = "changed" + INTRODUCED = "introduced" + REPLACEMENT = "replacement" + + +@dataclass(frozen=True) +class Evidence: + kind: EvidenceKind + source: str + observed_in_version: str + location: str | None = None + detail: str | None = None + + +@dataclass(frozen=True) +class SourceArtifact: + version: str + source: str + revision: str | None = None + path: str | None = None + + +@dataclass(frozen=True) +class ChangeDetail: + version: str + summary: str + evidence: tuple[Evidence, ...] + + +@dataclass(frozen=True) +class LifecycleTransition: + state: LifecycleState + version: str + evidence: Evidence + + +@dataclass(frozen=True) +class ReplacementEdge: + from_item_id: str + to_item_id: str + version: str + evidence: Evidence + + +@dataclass(frozen=True) +class HistoryItem: + id: str + kind: str + route: str | None + location: str | None + first_seen: str + last_seen: str + current_present: bool + introduction_evidence: Evidence + observed_removal: str | None = None + removal_evidence: Evidence | None = None + last_changed: str | None = None + changes: tuple[ChangeDetail, ...] = () + lifecycle_state: LifecycleState | None = None + lifecycle_transitions: tuple[LifecycleTransition, ...] = () + remove_as_of: str | None = None + remove_as_of_evidence: Evidence | None = None + replacement_edges: tuple[ReplacementEdge, ...] = () + identity_confidence: IdentityConfidence = IdentityConfidence.EXACT + identity_evidence: tuple[Evidence, ...] = () + + +@dataclass(frozen=True) +class SurfaceHistoryReport: + surface_id: str + title: str + format: ReferenceFormat + configured_scope: str + history_mode: HistoryMode + publish_version: str + comparison_versions: tuple[str, ...] + source_artifacts: tuple[SourceArtifact, ...] + version_policy: VersionSelectionPolicy + items: tuple[HistoryItem, ...] + limitations: tuple[str, ...] = () + + def items_by_id(self) -> dict[str, HistoryItem]: + return {item.id: item for item in self.items} + + def current_items(self) -> tuple[HistoryItem, ...]: + return tuple(item for item in self.items if item.current_present) + + +@dataclass(frozen=True) +class HistoryEvent: + kind: HistoryEventKind + version: str + label: str + details: tuple[str, ...] + evidence: tuple[Evidence, ...] diff --git a/src/x2mdx/history/validation.py b/src/x2mdx/history/validation.py new file mode 100644 index 000000000..50e9788a0 --- /dev/null +++ b/src/x2mdx/history/validation.py @@ -0,0 +1,317 @@ +from __future__ import annotations + +from x2mdx.history.models import ( + Evidence, + EvidenceKind, + HistoryItem, + HistoryMode, + IdentityConfidence, + SurfaceHistoryReport, +) +from x2mdx.history.versioning import compare_versions + + +AUTHORED_EVIDENCE_KINDS = {EvidenceKind.SOURCE_METADATA, EvidenceKind.SIDECAR} +CHANGE_EVIDENCE_KINDS = {EvidenceKind.SNAPSHOT_DIFF, *AUTHORED_EVIDENCE_KINDS} + + +class HistoryValidationError(ValueError): + def __init__(self, problems: list[str]) -> None: + self.problems = tuple(problems) + super().__init__("Invalid history report:\n- " + "\n- ".join(problems)) + + +def _require_authored_evidence( + evidence: Evidence, *, field: str, item: HistoryItem, problems: list[str] +) -> None: + if evidence.kind not in AUTHORED_EVIDENCE_KINDS: + problems.append( + f"{item.id}.{field} must use source_metadata or sidecar evidence, got {evidence.kind.value}" + ) + + +def _validate_evidence( + evidence: Evidence, + *, + field: str, + item: HistoryItem, + report: SurfaceHistoryReport, + problems: list[str], +) -> None: + if not evidence.source.strip(): + problems.append(f"{item.id}.{field}.source must not be empty") + if evidence.observed_in_version not in report.comparison_versions: + problems.append( + f"{item.id}.{field}.observed_in_version is outside comparison_versions: " + f"{evidence.observed_in_version}" + ) + + +def _validate_item( + item: HistoryItem, + *, + report: SurfaceHistoryReport, + item_ids: set[str], + problems: list[str], +) -> None: + versions = report.comparison_versions + for field, version in ( + ("first_seen", item.first_seen), + ("last_seen", item.last_seen), + ): + if version not in versions: + problems.append( + f"{item.id}.{field} is outside comparison_versions: {version}" + ) + if compare_versions(item.first_seen, item.last_seen, known_order=versions) > 0: + problems.append(f"{item.id}.first_seen must not be after last_seen") + + if item.introduction_evidence.kind != EvidenceKind.SNAPSHOT: + problems.append(f"{item.id}.introduction_evidence must use snapshot evidence") + if item.introduction_evidence.observed_in_version != item.first_seen: + problems.append( + f"{item.id}.introduction_evidence must be observed in first_seen" + ) + _validate_evidence( + item.introduction_evidence, + field="introduction_evidence", + item=item, + report=report, + problems=problems, + ) + if item.current_present: + if not item.route: + problems.append(f"{item.id}.route is required for a current item") + if item.last_seen != report.publish_version: + problems.append( + f"{item.id}.last_seen must equal publish_version while current" + ) + if item.observed_removal is not None or item.removal_evidence is not None: + problems.append( + f"{item.id} is current and cannot have observed removal evidence" + ) + else: + if item.observed_removal is None or item.removal_evidence is None: + problems.append( + f"{item.id} is absent from the publish snapshot and requires observed removal evidence" + ) + else: + if item.observed_removal not in versions: + problems.append( + f"{item.id}.observed_removal is outside comparison_versions" + ) + if ( + compare_versions( + item.last_seen, item.observed_removal, known_order=versions + ) + >= 0 + ): + problems.append(f"{item.id}.observed_removal must be after last_seen") + if item.removal_evidence.kind != EvidenceKind.SNAPSHOT_DIFF: + problems.append( + f"{item.id}.removal_evidence must use snapshot_diff evidence" + ) + if item.removal_evidence.observed_in_version != item.observed_removal: + problems.append( + f"{item.id}.removal_evidence must be observed in observed_removal" + ) + _validate_evidence( + item.removal_evidence, + field="removal_evidence", + item=item, + report=report, + problems=problems, + ) + + change_versions = [change.version for change in item.changes] + if len(change_versions) != len(set(change_versions)): + problems.append(f"{item.id}.changes contains duplicate versions") + for change in item.changes: + if change.version not in versions: + problems.append( + f"{item.id}.changes contains a version outside comparison_versions: {change.version}" + ) + if not change.summary.strip(): + problems.append(f"{item.id}.changes contains an empty summary") + if not change.evidence: + problems.append(f"{item.id}.changes[{change.version}] requires evidence") + for evidence in change.evidence: + if evidence.kind not in CHANGE_EVIDENCE_KINDS: + problems.append( + f"{item.id}.changes[{change.version}] cannot use {evidence.kind.value} evidence" + ) + _validate_evidence( + evidence, + field=f"changes[{change.version}].evidence", + item=item, + report=report, + problems=problems, + ) + expected_last_changed = None + for version in versions: + if version in change_versions: + expected_last_changed = version + if item.last_changed != expected_last_changed: + problems.append( + f"{item.id}.last_changed must match the newest change version: {expected_last_changed}" + ) + + for transition in item.lifecycle_transitions: + if transition.version not in versions: + problems.append( + f"{item.id}.lifecycle_transitions[{transition.state.value}] is outside comparison_versions" + ) + _require_authored_evidence( + transition.evidence, + field=f"lifecycle_transitions[{transition.state.value}]", + item=item, + problems=problems, + ) + _validate_evidence( + transition.evidence, + field=f"lifecycle_transitions[{transition.state.value}].evidence", + item=item, + report=report, + problems=problems, + ) + if item.lifecycle_transitions: + latest_transition = item.lifecycle_transitions[0] + for transition in item.lifecycle_transitions[1:]: + if ( + compare_versions( + transition.version, + latest_transition.version, + known_order=versions, + ) + > 0 + ): + latest_transition = transition + if item.lifecycle_state != latest_transition.state: + problems.append( + f"{item.id}.lifecycle_state must match its latest authored transition" + ) + elif item.lifecycle_state is not None: + problems.append(f"{item.id}.lifecycle_state requires an authored transition") + + if (item.remove_as_of is None) != (item.remove_as_of_evidence is None): + problems.append( + f"{item.id}.remove_as_of and remove_as_of_evidence must be supplied together" + ) + if item.remove_as_of is not None and item.remove_as_of_evidence is not None: + _require_authored_evidence( + item.remove_as_of_evidence, + field="remove_as_of_evidence", + item=item, + problems=problems, + ) + _validate_evidence( + item.remove_as_of_evidence, + field="remove_as_of_evidence", + item=item, + report=report, + problems=problems, + ) + if item.current_present: + if ( + compare_versions( + report.publish_version, + item.remove_as_of, + known_order=versions, + ) + >= 0 + ): + problems.append( + f"{item.id} is still present at or after remove_as_of {item.remove_as_of}" + ) + elif item.observed_removal is not None: + removal_comparison = compare_versions( + item.observed_removal, + item.remove_as_of, + known_order=versions, + ) + if removal_comparison < 0: + problems.append( + f"{item.id} disappeared before remove_as_of {item.remove_as_of}" + ) + elif removal_comparison > 0: + problems.append( + f"{item.id} remained present after remove_as_of {item.remove_as_of}" + ) + + for edge in item.replacement_edges: + if edge.version not in versions: + problems.append( + f"{item.id}.replacement_edges version is outside comparison_versions: {edge.version}" + ) + if edge.from_item_id == edge.to_item_id: + problems.append( + f"{item.id}.replacement_edges cannot replace an item with itself" + ) + for endpoint in edge.from_item_id, edge.to_item_id: + if endpoint not in item_ids: + problems.append( + f"{item.id}.replacement_edges references unknown item: {endpoint}" + ) + _require_authored_evidence( + edge.evidence, + field="replacement_edges", + item=item, + problems=problems, + ) + _validate_evidence( + edge.evidence, + field="replacement_edges.evidence", + item=item, + report=report, + problems=problems, + ) + + if ( + item.identity_confidence == IdentityConfidence.FALLBACK + and not item.identity_evidence + ): + problems.append( + f"{item.id}.identity_evidence is required for fallback identity" + ) + for evidence in item.identity_evidence: + _validate_evidence( + evidence, + field="identity_evidence", + item=item, + report=report, + problems=problems, + ) + + +def validate_history_report(report: SurfaceHistoryReport) -> None: + problems: list[str] = [] + versions = report.comparison_versions + if not versions: + problems.append("comparison_versions must not be empty") + if len(versions) != len(set(versions)): + problems.append("comparison_versions must be unique") + if report.publish_version not in versions: + problems.append("publish_version must be present in comparison_versions") + if report.history_mode == HistoryMode.UNAVAILABLE and not report.limitations: + problems.append("history_mode=unavailable requires at least one limitation") + + source_versions = {source.version for source in report.source_artifacts} + if report.history_mode == HistoryMode.SNAPSHOTS: + missing_source_versions = [ + version for version in versions if version not in source_versions + ] + if missing_source_versions: + problems.append( + "snapshot history requires source artifacts for every comparison version: " + + ", ".join(missing_source_versions) + ) + + item_ids = [item.id for item in report.items] + if len(item_ids) != len(set(item_ids)): + problems.append("item IDs must be unique") + known_item_ids = set(item_ids) + for item in report.items: + _validate_item(item, report=report, item_ids=known_item_ids, problems=problems) + + if problems: + raise HistoryValidationError(problems) diff --git a/src/x2mdx/history/versioning.py b/src/x2mdx/history/versioning.py new file mode 100644 index 000000000..29d9222c4 --- /dev/null +++ b/src/x2mdx/history/versioning.py @@ -0,0 +1,70 @@ +from __future__ import annotations + +import re + + +PRERELEASE_RANK = { + "snapshot": 0, + "alpha": 1, + "beta": 2, + "rc": 3, +} + + +def _version_parts( + version: str, +) -> tuple[tuple[int, ...], tuple[int, tuple[tuple[int, int | str], ...]]]: + normalized = version.strip().removeprefix("v").split("+", 1)[0] + release_text, separator, prerelease_text = normalized.partition("-") + release_tokens = re.split(r"[._]", release_text) + release: list[int] = [] + for token in release_tokens: + if not token.isdigit(): + raise ValueError(f"Version is not comparable: {version}") + release.append(int(token)) + while len(release) < 3: + release.append(0) + + if not separator: + return tuple(release), (5, ()) + + prerelease_tokens = [ + token for token in re.split(r"[._-]", prerelease_text) if token + ] + label = prerelease_tokens[0].lower() if prerelease_tokens else "" + label_match = re.fullmatch(r"([a-z]+)(\d+)", label) + if label_match: + prerelease_tokens = [ + label_match.group(1), + label_match.group(2), + *prerelease_tokens[1:], + ] + label = prerelease_tokens[0] + rank = PRERELEASE_RANK.get(label, 4) + comparable_tokens: list[tuple[int, int | str]] = [] + for token in prerelease_tokens[1:]: + comparable_tokens.append( + (0, int(token)) if token.isdigit() else (1, token.lower()) + ) + return tuple(release), (rank, tuple(comparable_tokens)) + + +def compare_versions( + left: str, + right: str, + *, + known_order: tuple[str, ...] = (), +) -> int: + if left == right: + return 0 + known_indexes = {version: index for index, version in enumerate(known_order)} + if left in known_indexes and right in known_indexes: + return -1 if known_indexes[left] < known_indexes[right] else 1 + + left_parts = _version_parts(left) + right_parts = _version_parts(right) + if left_parts < right_parts: + return -1 + if left_parts > right_parts: + return 1 + return -1 if left < right else 1 diff --git a/tests/fixtures/history/conformance/report.json b/tests/fixtures/history/conformance/report.json new file mode 100644 index 000000000..cd06e934f --- /dev/null +++ b/tests/fixtures/history/conformance/report.json @@ -0,0 +1,188 @@ +{ + "surface_id": "payments-openapi", + "title": "Payments API", + "format": "openapi", + "configured_scope": "public operations", + "history_mode": "snapshots", + "publish_version": "2.0.0", + "comparison_versions": [ + "1.0.0", + "1.1.0", + "2.0.0" + ], + "source_artifacts": [ + { + "version": "1.0.0", + "source": "fixtures/payments-1.0.0.yaml", + "revision": "release-1.0.0" + }, + { + "version": "1.1.0", + "source": "fixtures/payments-1.1.0.yaml", + "revision": "release-1.1.0" + }, + { + "version": "2.0.0", + "source": "fixtures/payments-2.0.0.yaml", + "revision": "release-2.0.0" + } + ], + "version_policy": "configured_publish_version", + "limitations": [], + "items": [ + { + "id": "payments.create", + "kind": "operation", + "route": "/reference/payments/create", + "location": "POST /payments", + "first_seen": "1.0.0", + "last_seen": "2.0.0", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "fixtures/payments-1.0.0.yaml", + "observed_in_version": "1.0.0" + }, + "last_changed": "1.1.0", + "changes": [ + { + "version": "1.1.0", + "summary": "Added an optional idempotency key.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "payments.create semantic diff", + "observed_in_version": "1.1.0" + } + ] + } + ], + "lifecycle_state": "deprecated", + "lifecycle_transitions": [ + { + "state": "deprecated", + "version": "1.1.0", + "evidence": { + "kind": "source_metadata", + "source": "payments.create deprecated", + "observed_in_version": "1.1.0", + "location": "paths./payments.post.deprecated" + } + } + ], + "remove_as_of": "2.1.0", + "remove_as_of_evidence": { + "kind": "source_metadata", + "source": "payments.create x-remove-as-of", + "observed_in_version": "2.0.0", + "location": "paths./payments.post.x-remove-as-of" + }, + "replacement_edges": [ + { + "from_item_id": "payments.create", + "to_item_id": "payments.createV2", + "version": "2.0.0", + "evidence": { + "kind": "source_metadata", + "source": "payments.createV2 x-replaces", + "observed_in_version": "2.0.0" + } + } + ] + }, + { + "id": "payments.legacy", + "kind": "operation", + "route": null, + "location": "POST /legacy-payments", + "first_seen": "1.0.0", + "last_seen": "1.1.0", + "current_present": false, + "introduction_evidence": { + "kind": "snapshot", + "source": "fixtures/payments-1.0.0.yaml", + "observed_in_version": "1.0.0" + }, + "observed_removal": "2.0.0", + "removal_evidence": { + "kind": "snapshot_diff", + "source": "payments.legacy disappearance", + "observed_in_version": "2.0.0" + }, + "last_changed": null, + "changes": [], + "lifecycle_state": "deprecated", + "lifecycle_transitions": [ + { + "state": "deprecated", + "version": "1.1.0", + "evidence": { + "kind": "sidecar", + "source": "payments lifecycle overlay", + "observed_in_version": "1.1.0" + } + } + ], + "remove_as_of": "2.0.0", + "remove_as_of_evidence": { + "kind": "sidecar", + "source": "payments lifecycle overlay", + "observed_in_version": "1.1.0" + }, + "replacement_edges": [ + { + "from_item_id": "payments.legacy", + "to_item_id": "payments.createV2", + "version": "2.0.0", + "evidence": { + "kind": "sidecar", + "source": "payments lifecycle overlay", + "observed_in_version": "1.1.0" + } + } + ] + }, + { + "id": "payments.createV2", + "kind": "operation", + "route": "/reference/payments/create-v2", + "location": "POST /v2/payments", + "first_seen": "2.0.0", + "last_seen": "2.0.0", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "fixtures/payments-2.0.0.yaml", + "observed_in_version": "2.0.0" + }, + "last_changed": null, + "changes": [], + "lifecycle_state": "stable", + "lifecycle_transitions": [ + { + "state": "stable", + "version": "2.0.0", + "evidence": { + "kind": "source_metadata", + "source": "payments.createV2 x-state", + "observed_in_version": "2.0.0" + } + } + ], + "replacement_edges": [ + { + "from_item_id": "payments.legacy", + "to_item_id": "payments.createV2", + "version": "2.0.0", + "evidence": { + "kind": "sidecar", + "source": "payments lifecycle overlay", + "observed_in_version": "1.1.0" + } + } + ], + "identity_confidence": "exact", + "identity_evidence": [] + } + ] +} diff --git a/tests/test_history_contract.py b/tests/test_history_contract.py new file mode 100644 index 000000000..a46707a9c --- /dev/null +++ b/tests/test_history_contract.py @@ -0,0 +1,143 @@ +from __future__ import annotations + +import json +from dataclasses import replace +from pathlib import Path + +import pytest + +from x2mdx.history import ( + EvidenceKind, + HistoryEventKind, + HistoryValidationError, + IdentityConfidence, + history_events_for_item, + history_report_from_dict, + history_report_to_dict, + load_history_report, + validate_history_report, +) + + +FIXTURE = Path(__file__).parent / "fixtures" / "history" / "conformance" / "report.json" + + +def conformance_report(): + return load_history_report(FIXTURE) + + +def test_three_version_conformance_report_is_valid() -> None: + report = conformance_report() + + validate_history_report(report) + + assert report.comparison_versions == ("1.0.0", "1.1.0", "2.0.0") + assert {item.id for item in report.current_items()} == { + "payments.create", + "payments.createV2", + } + + +def test_history_events_are_newest_first_with_remove_as_of_at_the_top() -> None: + report = conformance_report() + item = report.items_by_id()["payments.create"] + + events = history_events_for_item( + item, comparison_versions=report.comparison_versions + ) + + assert [event.kind for event in events] == [ + HistoryEventKind.REMOVE_AS_OF, + HistoryEventKind.REPLACEMENT, + HistoryEventKind.DEPRECATED, + HistoryEventKind.CHANGED, + HistoryEventKind.INTRODUCED, + ] + assert events[0].label == "Remove as of 2.1.0" + + +def test_current_item_at_removal_deadline_fails() -> None: + report = conformance_report() + item = report.items_by_id()["payments.create"] + stale_item = replace(item, remove_as_of="2.0.0") + stale_report = replace( + report, + items=tuple( + stale_item if candidate.id == item.id else candidate + for candidate in report.items + ), + ) + + with pytest.raises( + HistoryValidationError, match="still present at or after remove_as_of" + ): + validate_history_report(stale_report) + + +def test_item_removed_before_advertised_version_fails() -> None: + report = conformance_report() + item = report.items_by_id()["payments.legacy"] + early_item = replace(item, remove_as_of="2.1.0") + early_report = replace( + report, + items=tuple( + early_item if candidate.id == item.id else candidate + for candidate in report.items + ), + ) + + with pytest.raises(HistoryValidationError, match="disappeared before remove_as_of"): + validate_history_report(early_report) + + +def test_lifecycle_state_cannot_be_invented_from_snapshot_diff() -> None: + report = conformance_report() + item = report.items_by_id()["payments.create"] + transition = item.lifecycle_transitions[0] + invalid_evidence = replace(transition.evidence, kind=EvidenceKind.SNAPSHOT_DIFF) + invalid_item = replace( + item, + lifecycle_transitions=(replace(transition, evidence=invalid_evidence),), + ) + invalid_report = replace( + report, + items=tuple( + invalid_item if candidate.id == item.id else candidate + for candidate in report.items + ), + ) + + with pytest.raises( + HistoryValidationError, match="must use source_metadata or sidecar evidence" + ): + validate_history_report(invalid_report) + + +def test_fallback_identity_requires_evidence() -> None: + report = conformance_report() + item = report.items_by_id()["payments.create"] + invalid_item = replace( + item, + identity_confidence=IdentityConfidence.FALLBACK, + identity_evidence=(), + ) + invalid_report = replace( + report, + items=tuple( + invalid_item if candidate.id == item.id else candidate + for candidate in report.items + ), + ) + + with pytest.raises(HistoryValidationError, match="identity_evidence is required"): + validate_history_report(invalid_report) + + +def test_report_round_trips_through_json_shape() -> None: + report = conformance_report() + payload = history_report_to_dict(report) + + round_tripped = history_report_from_dict(payload) + + assert round_tripped == report + json.dumps(payload) From 04d8917a97554e1b851a3ccc5c85cd93783f8b0b Mon Sep 17 00:00:00 2001 From: danielporterda Date: Mon, 24 Aug 2026 13:04:33 -0400 Subject: [PATCH 03/14] Add shared bottom-page history section Signed-off-by: danielporterda --- docs-main/styles.css | 82 ++++++++++ src/x2mdx/history/events.py | 2 +- src/x2mdx/reference_pages.py | 16 ++ src/x2mdx/templates/reference/operation.md.j2 | 3 +- .../templates/shared/reference_macros.md.j2 | 20 +++ tests/test_history_contract.py | 2 +- tests/test_reference_page_history.py | 140 ++++++++++++++++++ 7 files changed, 262 insertions(+), 3 deletions(-) create mode 100644 tests/test_reference_page_history.py diff --git a/docs-main/styles.css b/docs-main/styles.css index c340b1249..159ceefd9 100644 --- a/docs-main/styles.css +++ b/docs-main/styles.css @@ -905,6 +905,88 @@ body:has(.x2mdx-ref-page--operation) [aria-label="Table of contents"] { order: 3; } +.x2mdx-ref-history { + display: grid; + gap: 0.75rem; + margin: 0 0 2rem; +} + +.x2mdx-ref-history-event { + display: grid; + gap: 0.5rem; + padding: 0.9rem 1rem; + border: 1px solid rgba(15, 23, 42, 0.08); + border-left: 3px solid rgba(107, 114, 128, 0.55); + border-radius: 0.7rem; + background: rgba(255, 255, 255, 0.82); +} + +:root.dark .x2mdx-ref-history-event, +[data-theme="dark"] .x2mdx-ref-history-event { + border-color: rgba(255, 255, 255, 0.08); + border-left-color: rgba(156, 163, 175, 0.65); + background: rgba(17, 24, 39, 0.78); +} + +.x2mdx-ref-history-event--introduced { + border-left-color: rgba(22, 163, 74, 0.75); +} + +.x2mdx-ref-history-event--changed, +.x2mdx-ref-history-event--replacement { + border-left-color: rgba(37, 99, 235, 0.75); +} + +.x2mdx-ref-history-event--deprecated, +.x2mdx-ref-history-event--remove-as-of { + border-left-color: rgba(220, 38, 38, 0.72); +} + +.x2mdx-ref-history-event-head { + display: flex; + align-items: baseline; + justify-content: space-between; + gap: 1rem; +} + +.x2mdx-ref-history-event-label { + font-size: 0.92rem; + font-weight: 700; + line-height: 1.3; +} + +.x2mdx-ref-history-event-version { + flex: 0 0 auto; + background: transparent; + color: rgb(75, 85, 99); + font-size: 0.82rem; +} + +:root.dark .x2mdx-ref-history-event-version, +[data-theme="dark"] .x2mdx-ref-history-event-version { + color: rgb(209, 213, 219); +} + +.x2mdx-ref-history-event-detail { + margin: 0; + color: rgb(75, 85, 99); + font-size: 0.92rem; + line-height: 1.5; +} + +:root.dark .x2mdx-ref-history-event-detail, +[data-theme="dark"] .x2mdx-ref-history-event-detail { + color: rgb(209, 213, 219); +} + +@media (max-width: 640px) { + .x2mdx-ref-history-event-head { + align-items: flex-start; + flex-direction: column; + gap: 0.35rem; + } +} + :root.dark .x2mdx-ref-card-summary, [data-theme="dark"] .x2mdx-ref-card-summary { color: rgb(209, 213, 219); diff --git a/src/x2mdx/history/events.py b/src/x2mdx/history/events.py index 3e0825076..ac9c0eb4c 100644 --- a/src/x2mdx/history/events.py +++ b/src/x2mdx/history/events.py @@ -31,7 +31,7 @@ def history_events_for_item( HistoryEvent( kind=HistoryEventKind.REMOVE_AS_OF, version=item.remove_as_of, - label=f"Remove as of {item.remove_as_of}", + label="Remove as of", details=(), evidence=(item.remove_as_of_evidence,), ) diff --git a/src/x2mdx/reference_pages.py b/src/x2mdx/reference_pages.py index 53adbf2fb..8303ee9f7 100644 --- a/src/x2mdx/reference_pages.py +++ b/src/x2mdx/reference_pages.py @@ -8,6 +8,7 @@ from pathlib import Path from typing import Any +from x2mdx.history.models import HistoryEvent, HistoryItem from x2mdx.output import Page, RawMarkdown from x2mdx.templating import render_template @@ -132,6 +133,7 @@ class ReferenceOperationPage: examples: list[ReferenceExample] = field(default_factory=list) lifecycle_changes: list[ReferenceChange] = field(default_factory=list) related_schemas: list[ReferenceSchema] = field(default_factory=list) + history_events: list[HistoryEvent] = field(default_factory=list) def markdown_page_from_template( @@ -170,6 +172,20 @@ def render_operation_page(page: ReferenceOperationPage) -> Page: ) +def reference_badges_for_history_item( + item: HistoryItem, + *, + kind_label: str, +) -> list[ReferenceBadge]: + badges = [ReferenceBadge(kind_label, "protocol")] + badges.append(ReferenceBadge(f"Since {item.first_seen}", "added")) + if item.last_changed is not None: + badges.append(ReferenceBadge(f"Changed {item.last_changed}", "changed")) + if item.remove_as_of is not None: + badges.append(ReferenceBadge(f"Remove as of {item.remove_as_of}", "removed")) + return badges + + def compact_text(text: str, *, limit: int = 160) -> str: normalized = " ".join(str(text or "").split()) if not normalized: diff --git a/src/x2mdx/templates/reference/operation.md.j2 b/src/x2mdx/templates/reference/operation.md.j2 index 75a3a81a4..a4e6a9dd2 100644 --- a/src/x2mdx/templates/reference/operation.md.j2 +++ b/src/x2mdx/templates/reference/operation.md.j2 @@ -7,7 +7,8 @@ {{ ref.breadcrumbs(page.breadcrumbs) }} {{ ref.header(page.eyebrow, page.title, page.summary, None, None, page.badges, [], render_title=True, render_summary=False) }} {{ ref.operation_bar(page) }} -{{ ref.operation_sections(page, include_examples=False) }} +{{ ref.operation_sections(page, include_examples=False) }}{% if page.history_events %} +{{ ref.history_section(page.history_events) }}{% endif %} {{ ref.operation_right_rail(page) }} diff --git a/src/x2mdx/templates/shared/reference_macros.md.j2 b/src/x2mdx/templates/shared/reference_macros.md.j2 index ea188e6ea..e7515231a 100644 --- a/src/x2mdx/templates/shared/reference_macros.md.j2 +++ b/src/x2mdx/templates/shared/reference_macros.md.j2 @@ -270,3 +270,23 @@ {% endif %} {%- endmacro %} + +{% macro history_section(events, heading_prefix="##") -%} +{% if events %} +{{ heading_prefix }} History + +
+ {% for event in events %} +
+
+ {{ escape_mdx_html_text(inline_text(event.label)) }} + {{ escape_mdx_html_text(inline_text(event.version)) }} +
+ {% for detail in event.details %} +

{{ escape_mdx_html_text(inline_text(detail)) }}

+ {% endfor %} +
+ {% endfor %} +
+{% endif %} +{%- endmacro %} diff --git a/tests/test_history_contract.py b/tests/test_history_contract.py index a46707a9c..f65a7a4f5 100644 --- a/tests/test_history_contract.py +++ b/tests/test_history_contract.py @@ -53,7 +53,7 @@ def test_history_events_are_newest_first_with_remove_as_of_at_the_top() -> None: HistoryEventKind.CHANGED, HistoryEventKind.INTRODUCED, ] - assert events[0].label == "Remove as of 2.1.0" + assert events[0].label == "Remove as of" def test_current_item_at_removal_deadline_fails() -> None: diff --git a/tests/test_reference_page_history.py b/tests/test_reference_page_history.py new file mode 100644 index 000000000..cb27bd4fa --- /dev/null +++ b/tests/test_reference_page_history.py @@ -0,0 +1,140 @@ +from __future__ import annotations + +from pathlib import Path + +from x2mdx.history import history_events_for_item, load_history_report +from x2mdx.reference_pages import ( + ReferenceBreadcrumb, + ReferenceExample, + ReferenceField, + ReferenceMetaItem, + ReferenceOperationPage, + ReferencePanel, + ReferenceSchema, + reference_badges_for_history_item, + render_operation_page, +) +from x2mdx.render import render_page + + +REPORT_FIXTURE = ( + Path(__file__).parent / "fixtures" / "history" / "conformance" / "report.json" +) + + +def render_synthetic_operation() -> str: + report = load_history_report(REPORT_FIXTURE) + item = report.items_by_id()["payments.create"] + request_schema = ReferenceSchema( + name="CreatePaymentRequest", + fields=[ + ReferenceField("amount", "string", required=True), + ReferenceField("idempotencyKey", "string"), + ], + ) + response_schema = ReferenceSchema( + name="Payment", + fields=[ + ReferenceField("id", "string", required=True), + ReferenceField("status", "string", required=True), + ], + ) + page = ReferenceOperationPage( + path="reference/payments/create.mdx", + title="Create a payment", + eyebrow="Payments API", + breadcrumbs=[ + ReferenceBreadcrumb("Payments", "/reference/payments"), + ReferenceBreadcrumb("Create a payment"), + ], + badges=reference_badges_for_history_item(item, kind_label="REST"), + operation_method="POST", + operation_target="/payments", + protocol_items=[ + ReferenceMetaItem("Operation ID", item.id), + ReferenceMetaItem("Authentication", "Bearer token"), + ], + inputs=[ReferencePanel("Request body", schema=request_schema)], + outputs=[ReferencePanel("201 Created", schema=response_schema)], + examples=[ + ReferenceExample( + title="Request", + body='{\n "amount": "42.00"\n}', + kind="request", + ), + ReferenceExample( + title="201 response", + body='{\n "id": "payment-123",\n "status": "created"\n}', + kind="response", + media_type="application/json", + ), + ], + related_schemas=[response_schema], + history_events=list( + history_events_for_item( + item, + comparison_versions=report.comparison_versions, + ) + ), + ) + return render_page(render_operation_page(page)) + + +def test_standard_page_puts_contract_badges_near_the_title_in_order() -> None: + rendered = render_synthetic_operation() + + badge_labels = [ + "REST", + "Since 1.0.0", + "Changed 1.1.0", + "Remove as of 2.1.0", + ] + badge_positions = [rendered.index(label) for label in badge_labels] + + assert badge_positions == sorted(badge_positions) + assert badge_positions[-1] < rendered.index('
') + + +def test_history_is_the_final_main_column_section_without_a_count() -> None: + rendered = render_synthetic_operation() + + expected_headings = [ + "## Protocol Details", + "## Inputs", + "## Outputs", + "## Related Schemas", + "## History", + ] + heading_positions = [rendered.index(heading) for heading in expected_headings] + + assert heading_positions == sorted(heading_positions) + assert rendered.rfind("## History") > rendered.rfind("## Related Schemas") + assert "lifecycle events" not in rendered.lower() + assert "details and history" not in rendered.lower() + + +def test_history_renders_newest_first_with_text_bearing_event_labels() -> None: + rendered = render_synthetic_operation() + history = rendered[rendered.index("## History") :] + labels = [ + "Remove as of", + "Replacement", + "Deprecated", + "Changed", + "Introduced", + ] + positions = [history.index(label) for label in labels] + + assert positions == sorted(positions) + assert "Replaced by payments.createV2" in history + assert "Added an optional idempotency key." in history + + +def test_history_styles_cover_desktop_dark_mode_and_narrow_layouts() -> None: + styles = (Path(__file__).parents[1] / "docs-main" / "styles.css").read_text( + encoding="utf-8" + ) + + assert ".x2mdx-ref-history-event" in styles + assert '[data-theme="dark"] .x2mdx-ref-history-event' in styles + assert "@media (max-width: 640px)" in styles From dabd154f89fa6550b9d301225fe02f0532bc1889 Mon Sep 17 00:00:00 2001 From: danielporterda Date: Mon, 24 Aug 2026 13:37:16 -0400 Subject: [PATCH 04/14] Add manual OpenAPI renderer canary Signed-off-by: danielporterda --- config/x2mdx/ledger-api/source-artifacts.json | 8 + docs-main/docs.json | 2 +- .../post-v2updatesflats.mdx | 394 +++++++++++ docs-main/styles.css | 22 +- scripts/generate_json_api_reference.py | 244 +++++-- src/x2mdx/openapi/__init__.py | 11 + src/x2mdx/openapi/render.py | 648 ++++++++++++++++++ src/x2mdx/output.py | 6 +- src/x2mdx/reference_pages.py | 34 +- src/x2mdx/render.py | 15 + src/x2mdx/templates/reference/operation.md.j2 | 17 +- .../templates/shared/reference_macros.md.j2 | 66 +- tests/test_json_api_openapi.py | 87 ++- tests/test_openapi_manual_render.py | 169 +++++ tests/test_x2mdx_render.py | 29 + 15 files changed, 1683 insertions(+), 69 deletions(-) create mode 100644 docs-main/reference/json-api-reference/post-v2updatesflats.mdx create mode 100644 src/x2mdx/openapi/__init__.py create mode 100644 src/x2mdx/openapi/render.py create mode 100644 tests/test_openapi_manual_render.py diff --git a/config/x2mdx/ledger-api/source-artifacts.json b/config/x2mdx/ledger-api/source-artifacts.json index bb64d5285..0c8d79252 100644 --- a/config/x2mdx/ledger-api/source-artifacts.json +++ b/config/x2mdx/ledger-api/source-artifacts.json @@ -3,6 +3,14 @@ "release_url_template": "https://www.canton.io/releases/canton-open-source-{canton_version}.tar.gz", "bundle_spec_dir": "openapi/json-ledger-api", "source_path_prefix": "canton-release-bundle/json-ledger-api", + "manual_api_server": "http://localhost:7575", + "manual_operations": [ + { + "method": "POST", + "path": "/v2/updates/flats", + "page_ref": "reference/json-api-reference/post-v2updatesflats" + } + ], "publish_version": "3.5", "versions": [ { diff --git a/docs-main/docs.json b/docs-main/docs.json index d68c120c7..bf32378b1 100644 --- a/docs-main/docs.json +++ b/docs-main/docs.json @@ -957,7 +957,7 @@ "GET /v2/state/ledger-end", "GET /v2/state/latest-pruned-offsets", "POST /v2/updates", - "POST /v2/updates/flats", + "reference/json-api-reference/post-v2updatesflats", "POST /v2/updates/trees", "GET /v2/updates/transaction-tree-by-offset/{offset}", "POST /v2/updates/transaction-by-offset", diff --git a/docs-main/reference/json-api-reference/post-v2updatesflats.mdx b/docs-main/reference/json-api-reference/post-v2updatesflats.mdx new file mode 100644 index 000000000..7cc7f2c0c --- /dev/null +++ b/docs-main/reference/json-api-reference/post-v2updatesflats.mdx @@ -0,0 +1,394 @@ +--- +title: "Query flat transactions update list (blocking call)" +api: "POST http://localhost:7575/v2/updates/flats" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Query flat transactions update list (blocking call)

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + + Remove as of 3.5.0 + +
+ + +
+ +Query flat transactions update list (blocking call). Provided for backwards compatibility, it will be removed in the Canton version 3.5.0, use v2/updates instead. Notice: This endpoint should be used for small results set. When number of results exceeded node configuration limit (`http-list-max-elements-limit`) there will be an error (`413 Content Too Large`) returned. Increasing this limit may lead to performance issues and high memory consumption. Con... + +## Protocol Details + + +
+ +
+
Operation ID
+
postV2UpdatesFlats
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Query parameters + + + + + + + + +OpenAPI type: `integer (int64)`. + + +maximum number of elements to return, this param is ignored if is bigger than server setting + + + + + +OpenAPI type: `integer (int64)`. + + +timeout to complete and send result if no new elements are received (for open ended streams) + + + + + + + + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `integer (int64)`. + + +Exclusive lower bound offset of the requested ledger section (non-negative integer). The response will only contain transactions whose offset is strictly greater than this. If set to zero, the lower bound is set to the beginning of the ledger. If the participant has been pruned, this parameter must be greater or equal than the pruning offset. Required + + + + + +OpenAPI type: `integer (int64)`. + + +Inclusive higher bound offset of the requested ledger section. If specified the response will only contain transactions whose offset is less than or equal to this. If not specified, - the descending_order must not be selected, - the stream will not terminate. Optional + + + + + +OpenAPI type: `TransactionFilter`. + + +Provided for backwards compatibility, it will be removed in the Canton version 3.5.0. Used both for filtering create and archive events as well as for filtering transaction trees. + + + + + + +Provided for backwards compatibility, it will be removed in the Canton version 3.5.0. If enabled, values served over the API will contain more information than strictly necessary to interpret the data. In particular, setting the verbose flag to true triggers the ledger to include labels, record and variant type ids for record fields. Optional for backwards compatibility, if defined update_format must be unset + + + + + +OpenAPI type: `UpdateFormat`. + + +A format specifying what updates to include and how to render them. + + + + + + +If set, the stream will populate the elements in descending order. Optional + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +- + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Remove as of + 3.5.0 +
+ +
+ +
+
+ Changed + 3.5 +
+ +

The POST /v2/updates/flats operation changed in this snapshot.

+ +
+ +
+
+ Deprecated + 3.4 +
+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'http://localhost:7575/v2/updates/flats' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"beginExclusive":0,"endInclusive":0,"filter":{"filtersByParty":{},"filtersForAnyParty":{}},"verbose":false,"updateFormat":{"includeTransactions":{},"includeReassignments":{},"includeTopologyEvents":{}},"descendingOrder":false}' +``` + + + + + + +```json 200 response +[ + { + "update": {} + } +] +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/styles.css b/docs-main/styles.css index 159ceefd9..3e44597e6 100644 --- a/docs-main/styles.css +++ b/docs-main/styles.css @@ -523,6 +523,12 @@ div.todo { overflow-wrap: normal; } +#content-container:has(.x2mdx-ref-page--manual-api) .x2mdx-ref-title { + overflow: visible; + text-overflow: clip; + white-space: normal; +} + @media (max-width: 1023px) { #content-container:has(.x2mdx-ref-page--operation) .x2mdx-ref-title { white-space: normal; @@ -547,20 +553,20 @@ div.todo { display: none; } -#content-container:has(.x2mdx-ref-page--operation) { +#content-container:has(.x2mdx-ref-page--operation):not(:has(.x2mdx-ref-page--manual-api)) { max-width: 92rem !important; } -body:has(.x2mdx-ref-page--operation) #table-of-contents-content, -body:has(.x2mdx-ref-page--operation) #content-side-layout, -body:has(.x2mdx-ref-page--operation) #table-of-contents-layout, -body:has(.x2mdx-ref-page--operation) #table-of-contents, -body:has(.x2mdx-ref-page--operation) aside:has(#table-of-contents-content), -body:has(.x2mdx-ref-page--operation) [aria-label="Table of contents"] { +body:has(.x2mdx-ref-page--operation):not(:has(.x2mdx-ref-page--manual-api)) #table-of-contents-content, +body:has(.x2mdx-ref-page--operation):not(:has(.x2mdx-ref-page--manual-api)) #content-side-layout, +body:has(.x2mdx-ref-page--operation):not(:has(.x2mdx-ref-page--manual-api)) #table-of-contents-layout, +body:has(.x2mdx-ref-page--operation):not(:has(.x2mdx-ref-page--manual-api)) #table-of-contents, +body:has(.x2mdx-ref-page--operation):not(:has(.x2mdx-ref-page--manual-api)) aside:has(#table-of-contents-content), +body:has(.x2mdx-ref-page--operation):not(:has(.x2mdx-ref-page--manual-api)) [aria-label="Table of contents"] { display: none !important; } -#content-container:has(.x2mdx-ref-page--operation) #content-area { +#content-container:has(.x2mdx-ref-page--operation):not(:has(.x2mdx-ref-page--manual-api)) #content-area { width: 100% !important; } diff --git a/scripts/generate_json_api_reference.py b/scripts/generate_json_api_reference.py index ba374b613..afddd7b83 100755 --- a/scripts/generate_json_api_reference.py +++ b/scripts/generate_json_api_reference.py @@ -21,6 +21,11 @@ ) import reference_nav from x2mdx.output import Page, RawMarkdown +from x2mdx.openapi import ( + ManualOpenAPIRenderOptions, + operation_history_events, + render_manual_openapi_operation, +) from x2mdx.reference_pages import ( ReferenceBadge, ReferenceCard, @@ -35,10 +40,16 @@ REPO_ROOT = Path(__file__).resolve().parents[1] -DEFAULT_CACHE_ROOT = Path(os.environ.get("XDG_CACHE_HOME", "~/.cache")).expanduser() / "x2mdx" -DEFAULT_SOURCE_CONFIG = REPO_ROOT / "config" / "x2mdx" / "ledger-api" / "source-artifacts.json" +DEFAULT_CACHE_ROOT = ( + Path(os.environ.get("XDG_CACHE_HOME", "~/.cache")).expanduser() / "x2mdx" +) +DEFAULT_SOURCE_CONFIG = ( + REPO_ROOT / "config" / "x2mdx" / "ledger-api" / "source-artifacts.json" +) DEFAULT_CACHE_DIR = DEFAULT_CACHE_ROOT / "ledger-api-bundles" -DEFAULT_OUTPUT_SPEC = REPO_ROOT / "docs-main" / "openapi" / "json-ledger-api" / "openapi.yaml" +DEFAULT_OUTPUT_SPEC = ( + REPO_ROOT / "docs-main" / "openapi" / "json-ledger-api" / "openapi.yaml" +) DEFAULT_DOCS_JSON = REPO_ROOT / "docs-main" / "docs.json" DEFAULT_NAV_DROPDOWN = "API Reference" DEFAULT_PARENT_GROUP = "Ledger API" @@ -47,9 +58,7 @@ DEFAULT_DETAILS_PAGE_REF = "reference/json-api-reference/details" LEGACY_OUTPUT_FILE = REPO_ROOT / "docs-main" / "reference" / "json-api-reference.mdx" HTTP_METHODS = {"get", "put", "post", "delete", "options", "head", "patch", "trace"} -INTERNAL_TODO_LINE_RE = re.compile( - r"(?m)^[ \t]*TODO\([^\r\n)]+\)[^\r\n]*(?:\r?\n|$)" -) +INTERNAL_TODO_LINE_RE = re.compile(r"(?m)^[ \t]*TODO\([^\r\n)]+\)[^\r\n]*(?:\r?\n|$)") def parse_args() -> argparse.Namespace: @@ -68,7 +77,9 @@ def parse_args() -> argparse.Namespace: parser.add_argument("--group-label", default=DEFAULT_GROUP_LABEL) parser.add_argument("--openapi-directory", default=DEFAULT_OPENAPI_DIRECTORY) parser.add_argument("--details-page-ref", default=DEFAULT_DETAILS_PAGE_REF) - parser.add_argument("--publish-version", help="Explicit docs major version to publish.") + parser.add_argument( + "--publish-version", help="Explicit docs major version to publish." + ) parser.add_argument( "--version", action="append", @@ -108,10 +119,14 @@ def resolve_publish_version( if publish_version is None: return versions[-1] - selected = next((entry for entry in versions if entry["version"] == publish_version), None) + selected = next( + (entry for entry in versions if entry["version"] == publish_version), None + ) if selected is None: available = ", ".join(entry["version"] for entry in versions) - raise ValueError(f"Publish version '{publish_version}' not found in selected versions: {available}") + raise ValueError( + f"Publish version '{publish_version}' not found in selected versions: {available}" + ) return selected @@ -127,7 +142,9 @@ def update_docs_navigation( openapi_page_refs: list[str], ) -> None: payload = load_json(docs_json_path) - pages = reference_nav.navigation_pages(payload, label=dropdown_label, docs_json_path=docs_json_path) + pages = reference_nav.navigation_pages( + payload, label=dropdown_label, docs_json_path=docs_json_path + ) parent_group = _find_group(pages, parent_group_label) if parent_group is None: @@ -192,6 +209,51 @@ def openapi_operation_page_refs(spec: dict[str, Any]) -> list[str]: return refs +def configured_manual_operations(source_config: dict[str, Any]) -> list[dict[str, str]]: + configured = source_config.get("manual_operations") or [] + if not isinstance(configured, list): + raise ValueError("manual_operations must be an array") + operations: list[dict[str, str]] = [] + for index, value in enumerate(configured): + if not isinstance(value, dict): + raise ValueError(f"manual_operations[{index}] must be an object") + operation: dict[str, str] = {} + for key in ("method", "path", "page_ref"): + field = value.get(key) + if not isinstance(field, str) or not field.strip(): + raise ValueError( + f"manual_operations[{index}].{key} must be a non-empty string" + ) + operation[key] = field.strip() + operation["method"] = operation["method"].upper() + if operation["method"].lower() not in HTTP_METHODS: + raise ValueError( + f"manual_operations[{index}].method is not supported: {operation['method']}" + ) + operations.append(operation) + identities = [(operation["method"], operation["path"]) for operation in operations] + if len(identities) != len(set(identities)): + raise ValueError("manual_operations contains duplicate method/path identities") + page_refs = [operation["page_ref"] for operation in operations] + if len(page_refs) != len(set(page_refs)): + raise ValueError("manual_operations contains duplicate page_ref values") + return operations + + +def openapi_navigation_page_refs( + spec: dict[str, Any], *, manual_operations: list[dict[str, str]] +) -> list[str]: + manual_refs = { + (operation["method"], operation["path"]): operation["page_ref"] + for operation in manual_operations + } + page_refs: list[str] = [] + for page_ref in openapi_operation_page_refs(spec): + method, path = page_ref.split(" ", 1) + page_refs.append(manual_refs.get((method, path), page_ref)) + return page_refs + + def generated_operation_summary(path: str, method: str) -> str: mintlify_path = re.sub(r"\{([^{}]+)\}", r":\1", path) return f"{method.upper()} {mintlify_path}" @@ -233,7 +295,9 @@ def add_missing_operation_summaries(text: str) -> str: current_path_indent = None continue - path_match = re.fullmatch(rf"(?P{re.escape(paths_indent)}\s{{2}})(?P/.*):\s*", line) + path_match = re.fullmatch( + rf"(?P{re.escape(paths_indent)}\s{{2}})(?P/.*):\s*", line + ) if path_match: current_path = path_match.group("path") current_path_indent = path_match.group("indent") @@ -252,16 +316,24 @@ def add_missing_operation_summaries(text: str) -> str: method = method_match.group("method") if (current_path, method) in missing: summary_indent = f"{method_match.group('indent')} " - output_lines.append(f'{summary_indent}summary: "{generated_operation_summary(current_path, method)}"') + output_lines.append( + f'{summary_indent}summary: "{generated_operation_summary(current_path, method)}"' + ) rendered = "\n".join(output_lines).rstrip() + "\n" parsed = yaml.safe_load(rendered) if not isinstance(parsed, dict): - raise ValueError("Generated OpenAPI YAML stopped parsing after summary insertion") + raise ValueError( + "Generated OpenAPI YAML stopped parsing after summary insertion" + ) remaining = missing_operation_summaries(parsed) if remaining: - details = ", ".join(f"{method.upper()} {path}" for path, method in sorted(remaining)) - raise ValueError(f"Failed to insert generated summaries for OpenAPI operations: {details}") + details = ", ".join( + f"{method.upper()} {path}" for path, method in sorted(remaining) + ) + raise ValueError( + f"Failed to insert generated summaries for OpenAPI operations: {details}" + ) return rendered @@ -283,7 +355,9 @@ def normalize_mintlify_openapi(openapi_path: Path) -> None: def mintlify_openapi_page_refs(openapi_path: Path) -> list[str]: spec = yaml.safe_load(openapi_path.read_text(encoding="utf-8")) if not isinstance(spec, dict): - raise ValueError(f"Expected generated OpenAPI YAML to parse as an object: {openapi_path}") + raise ValueError( + f"Expected generated OpenAPI YAML to parse as an object: {openapi_path}" + ) return openapi_operation_page_refs(spec) @@ -300,7 +374,12 @@ def operation_summary(path: str, path_item: dict[str, Any]) -> str: for method, operation in operation_items(path_item): summary = str(operation.get("summary") or "").strip() description = str(operation.get("description") or "").strip() - label = summary if summary and summary not in {path, generated_operation_summary(path, method)} else description + label = ( + summary + if summary + and summary not in {path, generated_operation_summary(path, method)} + else description + ) if label: summaries.append(f"{method.upper()}: {label}") if summaries: @@ -313,7 +392,9 @@ def operation_methods(path_item: dict[str, Any]) -> list[str]: def path_item_fingerprint(path_item: Any) -> str: - return json.dumps(path_item, sort_keys=True, separators=(",", ":"), ensure_ascii=False) + return json.dumps( + path_item, sort_keys=True, separators=(",", ":"), ensure_ascii=False + ) def versioned_openapi_specs( @@ -342,11 +423,49 @@ def versioned_openapi_specs( ) ) if not isinstance(spec, dict): - raise ValueError(f"Expected OpenAPI spec for {entry['version']} to parse as an object") + raise ValueError( + f"Expected OpenAPI spec for {entry['version']} to parse as an object" + ) specs[entry["version"]] = spec return specs +def write_manual_operation_pages( + *, + docs_json_path: Path, + specs_by_version: dict[str, dict[str, Any]], + versions: list[str], + publish_version: str, + source_name: str, + server: str, + manual_operations: list[dict[str, str]], +) -> None: + published_spec = specs_by_version[publish_version] + for operation in manual_operations: + history_events = operation_history_events( + specs_by_version=specs_by_version, + versions=versions, + publish_version=publish_version, + method=operation["method"], + path=operation["path"], + source_name=source_name, + ) + page = render_manual_openapi_operation( + spec=published_spec, + options=ManualOpenAPIRenderOptions( + method=operation["method"], + path=operation["path"], + output_path=f"{operation['page_ref']}.mdx", + server=server, + ), + history_events=history_events, + publish_version=publish_version, + ) + output_path = docs_json_path.parent / f"{operation['page_ref']}.mdx" + write_page(page, output_path) + print(f"Generated manual OpenAPI page: {output_path}") + + def strip_raw_markdown_trailing_whitespace(page: Page) -> Page: return Page( path=page.path, @@ -402,12 +521,19 @@ def build_openapi_details_page( previous_fingerprint = fingerprint badges = [ - ReferenceBadge(", ".join(operation_methods(path_item)) or "Endpoint", tone="protocol"), + ReferenceBadge( + ", ".join(operation_methods(path_item)) or "Endpoint", tone="protocol" + ), ReferenceBadge(f"Since {introduced}", tone="added"), ] if changed_versions: - badges.append(ReferenceBadge(f"Changed {changed_versions[-1]}", tone="changed")) - if any(bool(operation.get("deprecated")) for _method, operation in operation_items(path_item)): + badges.append( + ReferenceBadge(f"Changed {changed_versions[-1]}", tone="changed") + ) + if any( + bool(operation.get("deprecated")) + for _method, operation in operation_items(path_item) + ): badges.append(ReferenceBadge("Deprecated", tone="removed")) endpoint_cards.append( ReferenceCard( @@ -415,7 +541,9 @@ def build_openapi_details_page( summary=operation_summary(path, path_item), badges=badges, meta_items=[ - ReferenceMetaItem("Operations", ", ".join(operation_methods(path_item)) or "-"), + ReferenceMetaItem( + "Operations", ", ".join(operation_methods(path_item)) or "-" + ), ReferenceMetaItem("Last seen", last_seen), ], ) @@ -424,22 +552,37 @@ def build_openapi_details_page( for version in versions: current_paths = version_path_items[version] previous_index = versions.index(version) - 1 - previous_paths = version_path_items[versions[previous_index]] if previous_index >= 0 else {} - current_keys = {key for key, value in current_paths.items() if isinstance(key, str) and isinstance(value, dict)} - previous_keys = {key for key, value in previous_paths.items() if isinstance(key, str) and isinstance(value, dict)} + previous_paths = ( + version_path_items[versions[previous_index]] if previous_index >= 0 else {} + ) + current_keys = { + key + for key, value in current_paths.items() + if isinstance(key, str) and isinstance(value, dict) + } + previous_keys = { + key + for key, value in previous_paths.items() + if isinstance(key, str) and isinstance(value, dict) + } changed = sum( 1 for key in current_keys & previous_keys - if path_item_fingerprint(current_paths[key]) != path_item_fingerprint(previous_paths[key]) + if path_item_fingerprint(current_paths[key]) + != path_item_fingerprint(previous_paths[key]) ) version_cards.append( ReferenceCard( title=version, summary="Endpoint changes included in this release snapshot.", badges=[ - ReferenceBadge(f"Added {len(current_keys - previous_keys)}", tone="added"), + ReferenceBadge( + f"Added {len(current_keys - previous_keys)}", tone="added" + ), ReferenceBadge(f"Changed {changed}", tone="changed"), - ReferenceBadge(f"Removed {len(previous_keys - current_keys)}", tone="removed"), + ReferenceBadge( + f"Removed {len(previous_keys - current_keys)}", tone="removed" + ), ], ) ) @@ -452,7 +595,10 @@ def build_openapi_details_page( description="JSON Ledger API OpenAPI endpoint details and version history.", eyebrow="OpenAPI Reference", summary="Endpoint overview for the JSON Ledger API OpenAPI surface, built from versioned release snapshots.", - badges=[ReferenceBadge("OpenAPI", tone="protocol"), ReferenceBadge(publish_version, tone="neutral")], + badges=[ + ReferenceBadge("OpenAPI", tone="protocol"), + ReferenceBadge(publish_version, tone="neutral"), + ], meta_items=[ ReferenceMetaItem("Publish version", publish_version), ReferenceMetaItem("Source", source_name), @@ -511,6 +657,28 @@ def main() -> int: print(f"Published Mintlify OpenAPI source: {output_spec}") docs_json_path = Path(args.docs_json).resolve() + version_labels = [entry["version"] for entry in versions] + source_name = str( + source_config.get("source") + or "Canton release bundle JSON Ledger API OpenAPI fixtures" + ) + specs_by_version = versioned_openapi_specs( + source_config=source_config, + cache_dir=cache_dir, + versions=versions, + spec_filename="openapi.yaml", + force_refresh=args.force_refresh, + ) + manual_operations = configured_manual_operations(source_config) + write_manual_operation_pages( + docs_json_path=docs_json_path, + specs_by_version=specs_by_version, + versions=version_labels, + publish_version=publish_entry["version"], + source_name=source_name, + server=str(source_config.get("manual_api_server") or "http://localhost:7575"), + manual_operations=manual_operations, + ) reference_nav.regroup_ledger_api_nav( docs_json_path=docs_json_path, dropdown_label=args.nav_dropdown, @@ -523,24 +691,20 @@ def main() -> int: openapi_source_ref=docs_relative_file_ref(output_spec, docs_json_path), openapi_directory=args.openapi_directory, details_page_ref=args.details_page_ref, - openapi_page_refs=mintlify_openapi_page_refs(output_spec), - ) - specs_by_version = versioned_openapi_specs( - source_config=source_config, - cache_dir=cache_dir, - versions=versions, - spec_filename="openapi.yaml", - force_refresh=args.force_refresh, + openapi_page_refs=openapi_navigation_page_refs( + specs_by_version[publish_entry["version"]], + manual_operations=manual_operations, + ), ) write_openapi_details_page( docs_json_path=docs_json_path, details_page_ref=args.details_page_ref, page=build_openapi_details_page( specs_by_version=specs_by_version, - versions=[entry["version"] for entry in versions], + versions=version_labels, publish_version=publish_entry["version"], details_page_ref=args.details_page_ref, - source_name=str(source_config.get("source") or "Canton release bundle JSON Ledger API OpenAPI fixtures"), + source_name=source_name, ), ) remove_legacy_output(output_file=LEGACY_OUTPUT_FILE.resolve()) diff --git a/src/x2mdx/openapi/__init__.py b/src/x2mdx/openapi/__init__.py new file mode 100644 index 000000000..fbf810882 --- /dev/null +++ b/src/x2mdx/openapi/__init__.py @@ -0,0 +1,11 @@ +from x2mdx.openapi.render import ( + ManualOpenAPIRenderOptions, + operation_history_events, + render_manual_openapi_operation, +) + +__all__ = [ + "ManualOpenAPIRenderOptions", + "operation_history_events", + "render_manual_openapi_operation", +] diff --git a/src/x2mdx/openapi/render.py b/src/x2mdx/openapi/render.py new file mode 100644 index 000000000..dcb72a4eb --- /dev/null +++ b/src/x2mdx/openapi/render.py @@ -0,0 +1,648 @@ +from __future__ import annotations + +import json +import re +from dataclasses import dataclass +from typing import Any + +from x2mdx.history.models import Evidence, EvidenceKind, HistoryEvent, HistoryEventKind +from x2mdx.reference_pages import ( + ReferenceBadge, + ReferenceBreadcrumb, + ReferenceExample, + ReferenceField, + ReferenceMetaItem, + ReferenceOperationPage, + ReferencePanel, + ReferenceSchema, + compact_text, + json_body, + render_operation_page, +) + + +REMOVE_AS_OF_RE = re.compile( + r"\b(?:will\s+be\s+)?removed\s+in\s+(?:the\s+)?(?:Canton\s+)?version\s+" + r"(?Pv?\d+(?:\.\d+){1,3}(?:[-+][0-9A-Za-z.-]+)?)", + re.IGNORECASE, +) + + +@dataclass(frozen=True) +class ManualOpenAPIRenderOptions: + method: str + path: str + output_path: str + server: str = "http://localhost:7575" + surface_label: str = "JSON Ledger API" + auth_method: str = "bearer" + playground: str = "interactive" + + +def _operation(spec: dict[str, Any], method: str, path: str) -> dict[str, Any]: + paths = spec.get("paths") + if not isinstance(paths, dict): + raise ValueError("OpenAPI specification must define paths") + path_item = paths.get(path) + if not isinstance(path_item, dict): + raise ValueError(f"OpenAPI path not found: {path}") + operation = path_item.get(method.lower()) + if not isinstance(operation, dict): + raise ValueError(f"OpenAPI operation not found: {method.upper()} {path}") + return operation + + +def _path_item(spec: dict[str, Any], path: str) -> dict[str, Any]: + paths = spec.get("paths") + path_item = paths.get(path) if isinstance(paths, dict) else None + return path_item if isinstance(path_item, dict) else {} + + +def _resolve_local_ref(spec: dict[str, Any], value: Any) -> Any: + if not isinstance(value, dict): + return value + reference = value.get("$ref") + if not isinstance(reference, str) or not reference.startswith("#/"): + return value + current: Any = spec + for token in reference[2:].split("/"): + token = token.replace("~1", "/").replace("~0", "~") + if not isinstance(current, dict) or token not in current: + raise ValueError(f"Unresolvable local OpenAPI reference: {reference}") + current = current[token] + return current + + +def _schema_name(schema: dict[str, Any], *, fallback: str) -> str: + reference = schema.get("$ref") + if isinstance(reference, str): + return reference.rsplit("/", 1)[-1] + title = schema.get("title") + return str(title).strip() if isinstance(title, str) and title.strip() else fallback + + +def _type_label(spec: dict[str, Any], schema: Any) -> str: + if not isinstance(schema, dict): + return "unknown" + reference = schema.get("$ref") + if isinstance(reference, str): + return reference.rsplit("/", 1)[-1] + if "oneOf" in schema: + return "oneOf" + if "anyOf" in schema: + return "anyOf" + schema_type = str(schema.get("type") or "object") + if schema_type == "array": + return f"{_type_label(spec, schema.get('items'))}[]" + schema_format = schema.get("format") + if isinstance(schema_format, str) and schema_format: + return f"{schema_type} ({schema_format})" + return schema_type + + +def _playground_type_label(spec: dict[str, Any], schema: Any) -> str: + if not isinstance(schema, dict): + return "object" + if isinstance(schema.get("$ref"), str): + return "object" + if any(key in schema for key in ("oneOf", "anyOf", "allOf")): + return "object" + schema_type = str(schema.get("type") or "object") + if schema_type == "array": + item_type = _playground_type_label(spec, schema.get("items")) + return f"{item_type}[]" + if schema_type in {"integer", "number"}: + return "number" + if schema_type in {"string", "boolean", "object"}: + return schema_type + return "object" + + +def _example_value( + spec: dict[str, Any], + schema: Any, + *, + depth: int = 0, + seen_refs: frozenset[str] = frozenset(), +) -> Any: + if not isinstance(schema, dict): + return None + for key in ("example", "default"): + if key in schema: + return schema[key] + enum = schema.get("enum") + if isinstance(enum, list) and enum: + return enum[0] + + reference = schema.get("$ref") + if isinstance(reference, str): + if reference in seen_refs or depth >= 4: + return {} + return _example_value( + spec, + _resolve_local_ref(spec, schema), + depth=depth + 1, + seen_refs=seen_refs | {reference}, + ) + for composition_key in ("oneOf", "anyOf", "allOf"): + variants = schema.get(composition_key) + if isinstance(variants, list) and variants: + if composition_key == "allOf": + merged: dict[str, Any] = {} + for variant in variants: + value = _example_value( + spec, + variant, + depth=depth + 1, + seen_refs=seen_refs, + ) + if isinstance(value, dict): + merged.update(value) + return merged + return _example_value( + spec, + variants[0], + depth=depth + 1, + seen_refs=seen_refs, + ) + + schema_type = schema.get("type") + properties = schema.get("properties") + if schema_type == "object" or isinstance(properties, dict): + if depth >= 4: + return {} + return { + str(name): _example_value( + spec, + child, + depth=depth + 1, + seen_refs=seen_refs, + ) + for name, child in (properties or {}).items() + } + if schema_type == "array": + return [ + _example_value( + spec, + schema.get("items"), + depth=depth + 1, + seen_refs=seen_refs, + ) + ] + if schema_type == "integer": + return 0 + if schema_type == "number": + return 0.0 + if schema_type == "boolean": + return False + if schema.get("format") == "date-time": + return "2026-01-01T00:00:00Z" + if schema.get("format") == "date": + return "2026-01-01" + return "string" + + +def _schema_fields( + spec: dict[str, Any], + schema: Any, + *, + location: str | None, +) -> list[ReferenceField]: + if not isinstance(schema, dict): + return [] + resolved = _resolve_local_ref(spec, schema) + if not isinstance(resolved, dict): + return [] + properties = resolved.get("properties") + if not isinstance(properties, dict): + return [ + ReferenceField( + name="value", + type_label=_type_label(spec, schema), + required=True, + description=str(resolved.get("description") or ""), + location=location, + api_type_label=( + _playground_type_label(spec, schema) if location else None + ), + ) + ] + required = set(resolved.get("required") or []) + return [ + ReferenceField( + name=str(name), + type_label=_type_label(spec, child), + required=name in required, + description=str( + ( + _resolve_local_ref(spec, child) if isinstance(child, dict) else {} + ).get("description", "") + ), + location=location, + default=( + str(child["default"]) + if isinstance(child, dict) and "default" in child + else None + ), + api_type_label=(_playground_type_label(spec, child) if location else None), + ) + for name, child in properties.items() + ] + + +def _media_schema(content: Any) -> tuple[str | None, dict[str, Any] | None]: + if not isinstance(content, dict) or not content: + return None, None + for preferred in ("application/json", "application/*+json"): + media = content.get(preferred) + if isinstance(media, dict) and isinstance(media.get("schema"), dict): + return preferred, media["schema"] + media_type, media = next(iter(content.items())) + if isinstance(media, dict) and isinstance(media.get("schema"), dict): + return str(media_type), media["schema"] + return str(media_type), None + + +def _parameter_panels( + spec: dict[str, Any], path_item: dict[str, Any], operation: dict[str, Any] +) -> list[ReferencePanel]: + parameters = [ + *(path_item.get("parameters") or []), + *(operation.get("parameters") or []), + ] + by_location: dict[str, list[ReferenceField]] = {} + for raw_parameter in parameters: + parameter = _resolve_local_ref(spec, raw_parameter) + if not isinstance(parameter, dict): + continue + location = str(parameter.get("in") or "query") + schema = parameter.get("schema") + field = ReferenceField( + name=str(parameter.get("name") or "parameter"), + type_label=_type_label(spec, schema), + required=bool(parameter.get("required")), + description=str(parameter.get("description") or ""), + location=location, + default=( + str(schema["default"]) + if isinstance(schema, dict) and "default" in schema + else None + ), + api_type_label=_playground_type_label(spec, schema), + ) + by_location.setdefault(location, []).append(field) + labels = { + "path": "Path parameters", + "query": "Query parameters", + "header": "Headers", + } + return [ + ReferencePanel( + title=labels.get(location, f"{location.title()} parameters"), + schema=ReferenceSchema( + name=labels.get(location, location.title()), fields=fields + ), + ) + for location, fields in by_location.items() + ] + + +def _request_panel( + spec: dict[str, Any], operation: dict[str, Any] +) -> tuple[ReferencePanel | None, Any, str | None]: + request_body = _resolve_local_ref(spec, operation.get("requestBody")) + if not isinstance(request_body, dict): + return None, None, None + media_type, schema = _media_schema(request_body.get("content")) + if schema is None: + return None, None, media_type + name = _schema_name(schema, fallback="RequestBody") + sample = _example_value(spec, schema) + panel = ReferencePanel( + title="Request body", + badges=[ReferenceBadge(media_type or "body", "neutral")], + schema=ReferenceSchema( + name=name, + summary=_type_label(spec, schema), + fields=_schema_fields(spec, schema, location="body"), + ), + ) + return panel, sample, media_type + + +def _response_panels( + spec: dict[str, Any], operation: dict[str, Any] +) -> tuple[list[ReferencePanel], list[ReferenceExample]]: + panels: list[ReferencePanel] = [] + examples: list[ReferenceExample] = [] + responses = operation.get("responses") + if not isinstance(responses, dict): + return panels, examples + for status, raw_response in responses.items(): + response = _resolve_local_ref(spec, raw_response) + if not isinstance(response, dict): + continue + media_type, schema = _media_schema(response.get("content")) + description = str(response.get("description") or "") + fields = ( + _schema_fields(spec, schema, location=None) if schema is not None else [] + ) + schema_name = ( + _schema_name(schema, fallback=f"Response{status}") + if schema + else f"Response{status}" + ) + panels.append( + ReferencePanel( + title=str(status), + summary=description, + badges=[ReferenceBadge(media_type, "neutral")] if media_type else [], + schema=ReferenceSchema( + name=schema_name, + summary=_type_label(spec, schema), + fields=fields, + ) + if schema is not None + else None, + ) + ) + if schema is not None and (str(status).startswith("2") or status == "default"): + examples.append( + ReferenceExample( + title=f"{status} response", + body=json_body(_example_value(spec, schema)), + kind="response", + media_type=media_type, + ) + ) + return panels, examples + + +def _operation_fingerprint(operation: dict[str, Any]) -> str: + return json.dumps( + operation, sort_keys=True, separators=(",", ":"), ensure_ascii=False + ) + + +def _remove_as_of(operation: dict[str, Any]) -> str | None: + text = " ".join(str(operation.get(key) or "") for key in ("summary", "description")) + match = REMOVE_AS_OF_RE.search(text) + return match.group("version").removeprefix("v") if match else None + + +def _operation_title(operation: dict[str, Any], *, method: str, path: str) -> str: + summary = str(operation.get("summary") or "").strip() + mintlify_path = re.sub(r"\{([^{}]+)\}", r":\1", path) + generated_summaries = { + path, + f"{method.upper()} {path}", + f"{method.upper()} {mintlify_path}", + } + if summary and summary not in generated_summaries: + return summary + description = " ".join(str(operation.get("description") or "").split()) + first_sentence = description.partition(".")[0].strip() + if first_sentence: + return first_sentence + return f"{method.upper()} {path}" + + +def operation_history_events( + *, + specs_by_version: dict[str, dict[str, Any]], + versions: list[str], + publish_version: str, + method: str, + path: str, + source_name: str, +) -> list[HistoryEvent]: + observed: list[tuple[str, dict[str, Any]]] = [] + for version in versions: + try: + observed.append( + (version, _operation(specs_by_version[version], method, path)) + ) + except ValueError: + continue + if not observed: + raise ValueError( + f"Operation is absent from all comparison versions: {method.upper()} {path}" + ) + + events: list[HistoryEvent] = [] + published = _operation(specs_by_version[publish_version], method, path) + remove_as_of = _remove_as_of(published) + if remove_as_of is not None: + evidence = Evidence( + kind=EvidenceKind.SOURCE_METADATA, + source=source_name, + observed_in_version=publish_version, + location=f"paths.{path}.{method.lower()}.description", + detail="Authored removal schedule in the OpenAPI operation description.", + ) + events.append( + HistoryEvent( + kind=HistoryEventKind.REMOVE_AS_OF, + version=remove_as_of, + label="Remove as of", + details=(), + evidence=(evidence,), + ) + ) + + deprecated_version = next( + ( + version + for version, operation in observed + if operation.get("deprecated") is True + ), + None, + ) + if deprecated_version is not None: + evidence = Evidence( + kind=EvidenceKind.SOURCE_METADATA, + source=source_name, + observed_in_version=deprecated_version, + location=f"paths.{path}.{method.lower()}.deprecated", + ) + events.append( + HistoryEvent( + kind=HistoryEventKind.DEPRECATED, + version=deprecated_version, + label="Deprecated", + details=(), + evidence=(evidence,), + ) + ) + + previous_fingerprint: str | None = None + for version, operation in observed: + fingerprint = _operation_fingerprint(operation) + if previous_fingerprint is not None and fingerprint != previous_fingerprint: + evidence = Evidence( + kind=EvidenceKind.SNAPSHOT_DIFF, + source=source_name, + observed_in_version=version, + location=f"paths.{path}.{method.lower()}", + ) + events.append( + HistoryEvent( + kind=HistoryEventKind.CHANGED, + version=version, + label="Changed", + details=( + f"The {method.upper()} {path} operation changed in this snapshot.", + ), + evidence=(evidence,), + ) + ) + previous_fingerprint = fingerprint + + first_version = observed[0][0] + introduction = Evidence( + kind=EvidenceKind.SNAPSHOT, + source=source_name, + observed_in_version=first_version, + location=f"paths.{path}.{method.lower()}", + ) + events.append( + HistoryEvent( + kind=HistoryEventKind.INTRODUCED, + version=first_version, + label="Introduced", + details=(), + evidence=(introduction,), + ) + ) + + version_order = {version: index for index, version in enumerate(versions)} + kind_order = { + HistoryEventKind.REMOVE_AS_OF: 0, + HistoryEventKind.DEPRECATED: 1, + HistoryEventKind.CHANGED: 2, + HistoryEventKind.INTRODUCED: 3, + HistoryEventKind.REPLACEMENT: 4, + } + + def sort_key(event: HistoryEvent) -> tuple[int, int, str]: + index = version_order.get(event.version, len(versions)) + return (-index, kind_order[event.kind], event.version) + + return sorted(events, key=sort_key) + + +def _request_example( + *, + method: str, + server: str, + path: str, + media_type: str | None, + sample: Any, +) -> ReferenceExample: + lines = [ + f"curl --request {method.upper()} \\", + f" --url '{server.rstrip('/')}{path}' \\", + ] + lines.append(" --header 'Authorization: Bearer $TOKEN' \\") + if sample is not None: + lines.append( + f" --header 'Content-Type: {media_type or 'application/json'}' \\" + ) + compact_sample = json.dumps(sample, ensure_ascii=False, separators=(",", ":")) + lines.append(f" --data '{compact_sample}'") + else: + lines[-1] = lines[-1].removesuffix(" \\") + return ReferenceExample( + title="Request", body="\n".join(lines), language="bash", kind="request" + ) + + +def render_manual_openapi_operation( + *, + spec: dict[str, Any], + options: ManualOpenAPIRenderOptions, + history_events: list[HistoryEvent], + publish_version: str, +) -> Any: + method = options.method.upper() + operation = _operation(spec, method, options.path) + path_item = _path_item(spec, options.path) + summary = _operation_title(operation, method=method, path=options.path) + description = compact_text(str(operation.get("description") or ""), limit=460) + + inputs = _parameter_panels(spec, path_item, operation) + request_panel, request_sample, request_media_type = _request_panel(spec, operation) + if request_panel is not None: + inputs.append(request_panel) + outputs, response_examples = _response_panels(spec, operation) + examples = [ + _request_example( + method=method, + server=options.server, + path=options.path, + media_type=request_media_type, + sample=request_sample, + ), + *response_examples, + ] + + introduced = next( + event.version + for event in history_events + if event.kind == HistoryEventKind.INTRODUCED + ) + badges = [ + ReferenceBadge("OpenAPI", "protocol"), + ReferenceBadge(f"Since {introduced}", "added"), + ] + changed = next( + ( + event.version + for event in history_events + if event.kind == HistoryEventKind.CHANGED + ), + None, + ) + if changed is not None: + badges.append(ReferenceBadge(f"Changed {changed}", "changed")) + remove_as_of = next( + ( + event.version + for event in history_events + if event.kind == HistoryEventKind.REMOVE_AS_OF + ), + None, + ) + if remove_as_of is not None: + badges.append(ReferenceBadge(f"Remove as of {remove_as_of}", "removed")) + + api_path = f"{method} {options.server.rstrip('/')}{options.path}" + return render_operation_page( + ReferenceOperationPage( + path=options.output_path, + title=summary, + eyebrow=options.surface_label, + breadcrumbs=[ + ReferenceBreadcrumb("Ledger API", "/api-reference"), + ReferenceBreadcrumb("OpenAPI"), + ], + badges=badges, + operation_method=method, + operation_target=options.path, + overview_markdown=description, + protocol_items=[ + ReferenceMetaItem( + "Operation ID", str(operation.get("operationId") or "-") + ), + ReferenceMetaItem("Authentication", "Bearer token"), + ReferenceMetaItem("Published", publish_version), + ], + inputs=inputs, + outputs=outputs, + examples=examples, + history_events=history_events, + api_frontmatter=api_path, + auth_method=options.auth_method, + playground=options.playground, + ) + ) diff --git a/src/x2mdx/output.py b/src/x2mdx/output.py index f1e45a6b1..686ea8b78 100644 --- a/src/x2mdx/output.py +++ b/src/x2mdx/output.py @@ -3,7 +3,10 @@ from __future__ import annotations from dataclasses import dataclass, field -from typing import Union +from typing import TypeAlias, Union + + +FrontmatterValue: TypeAlias = str | bool | int | float | list[str] @dataclass(frozen=True) @@ -41,4 +44,5 @@ class Page: path: str title: str description: str | None = None + frontmatter: dict[str, FrontmatterValue] = field(default_factory=dict) blocks: list[Block] = field(default_factory=list) diff --git a/src/x2mdx/reference_pages.py b/src/x2mdx/reference_pages.py index 8303ee9f7..dafc6abad 100644 --- a/src/x2mdx/reference_pages.py +++ b/src/x2mdx/reference_pages.py @@ -9,7 +9,7 @@ from typing import Any from x2mdx.history.models import HistoryEvent, HistoryItem -from x2mdx.output import Page, RawMarkdown +from x2mdx.output import FrontmatterValue, Page, RawMarkdown from x2mdx.templating import render_template @@ -38,6 +38,9 @@ class ReferenceField: type_label: str required: bool = False description: str = "" + location: str | None = None + default: str | None = None + api_type_label: str | None = None @dataclass(frozen=True) @@ -134,6 +137,9 @@ class ReferenceOperationPage: lifecycle_changes: list[ReferenceChange] = field(default_factory=list) related_schemas: list[ReferenceSchema] = field(default_factory=list) history_events: list[HistoryEvent] = field(default_factory=list) + api_frontmatter: str | None = None + auth_method: str | None = None + playground: str | None = None def markdown_page_from_template( @@ -142,13 +148,21 @@ def markdown_page_from_template( title: str, description: str | None, template_name: str, + frontmatter: dict[str, FrontmatterValue] | None = None, **context: Any, ) -> Page: return Page( path=path, title=title, - description=safe_markdown_text(description) if description is not None else None, - blocks=[RawMarkdown(render_template(template_name, collapse_blank_lines=False, **context))], + description=safe_markdown_text(description) + if description is not None + else None, + frontmatter=frontmatter or {}, + blocks=[ + RawMarkdown( + render_template(template_name, collapse_blank_lines=False, **context) + ) + ], ) @@ -163,11 +177,19 @@ def render_collection_page(page: ReferenceCollectionPage) -> Page: def render_operation_page(page: ReferenceOperationPage) -> Page: + frontmatter: dict[str, FrontmatterValue] = {} + if page.api_frontmatter is not None: + frontmatter["api"] = page.api_frontmatter + if page.auth_method is not None: + frontmatter["authMethod"] = page.auth_method + if page.playground is not None: + frontmatter["playground"] = page.playground return markdown_page_from_template( path=page.path, title=page.title, description=None, template_name="reference/operation.md.j2", + frontmatter=frontmatter, page=page, ) @@ -272,7 +294,11 @@ def schema_from_sample( ) ) - example = ReferenceExample(title=name, body=json_body(sample)) if sample is not None else None + example = ( + ReferenceExample(title=name, body=json_body(sample)) + if sample is not None + else None + ) return ReferenceSchema( name=name, summary=summary or infer_type_label(sample), diff --git a/src/x2mdx/render.py b/src/x2mdx/render.py index c4d4f3f4f..48e23217f 100644 --- a/src/x2mdx/render.py +++ b/src/x2mdx/render.py @@ -3,6 +3,7 @@ from __future__ import annotations from pathlib import Path +import json from x2mdx.output import Block, BulletList, Heading, Page, Paragraph, RawMarkdown, Table @@ -15,6 +16,16 @@ def frontmatter_escape(value: str) -> str: return value.replace("\\", "\\\\").replace('"', '\\"') +def render_frontmatter_value(value: str | bool | int | float | list[str]) -> str: + if isinstance(value, str): + return f'"{frontmatter_escape(value)}"' + if isinstance(value, bool): + return "true" if value else "false" + if isinstance(value, list): + return json.dumps(value, ensure_ascii=False) + return str(value) + + def render_block(block: Block) -> str: if isinstance(block, Heading): return f"{'#' * block.level} {block.text}\n" @@ -38,6 +49,10 @@ def render_page(page: Page) -> str: lines = ["---", f'title: "{frontmatter_escape(page.title)}"'] if page.description is not None: lines.append(f'description: "{frontmatter_escape(page.description)}"') + for key, value in page.frontmatter.items(): + if key in {"title", "description"}: + raise ValueError(f"Reserved frontmatter key: {key}") + lines.append(f"{key}: {render_frontmatter_value(value)}") lines.extend(["---", ""]) body_parts = [render_block(block).rstrip() for block in page.blocks] diff --git a/src/x2mdx/templates/reference/operation.md.j2 b/src/x2mdx/templates/reference/operation.md.j2 index a4e6a9dd2..7a5f012d5 100644 --- a/src/x2mdx/templates/reference/operation.md.j2 +++ b/src/x2mdx/templates/reference/operation.md.j2 @@ -1,15 +1,28 @@ {% import "shared/reference_macros.md.j2" as ref %} -
+
+{% if page.api_frontmatter %} +{{ ref.header(page.eyebrow, page.title, page.summary, None, None, page.badges, [], render_title=True, render_summary=False) }} +{% if page.overview_markdown %} +{{ page.overview_markdown }} +{% endif %} +{{ ref.operation_sections(page, include_examples=False, use_api_components=True) }}{% if page.history_events %} +{{ ref.history_section(page.history_events) }}{% endif %} +{{ ref.mintlify_operation_examples(page.examples) }} +{% else %}
{{ ref.breadcrumbs(page.breadcrumbs) }} {{ ref.header(page.eyebrow, page.title, page.summary, None, None, page.badges, [], render_title=True, render_summary=False) }} {{ ref.operation_bar(page) }} -{{ ref.operation_sections(page, include_examples=False) }}{% if page.history_events %} +{% if page.overview_markdown %} +{{ page.overview_markdown }} +{% endif %} +{{ ref.operation_sections(page, include_examples=False, use_api_components=page.api_frontmatter is not none) }}{% if page.history_events %} {{ ref.history_section(page.history_events) }}{% endif %}
{{ ref.operation_right_rail(page) }}
+{% endif %} diff --git a/src/x2mdx/templates/shared/reference_macros.md.j2 b/src/x2mdx/templates/shared/reference_macros.md.j2 index e7515231a..11151ef80 100644 --- a/src/x2mdx/templates/shared/reference_macros.md.j2 +++ b/src/x2mdx/templates/shared/reference_macros.md.j2 @@ -84,8 +84,24 @@ {% endif %} {%- endmacro %} -{% macro fields_table(fields) -%} +{% macro fields_table(fields, use_api_components=False, field_kind="parameter") -%} {% if fields %} +{% if use_api_components %} + {% for field in fields %} + {% if field_kind == "response" %} + +{{ escape_mdx_html_text(inline_text(field.description or "-")) }} + + {% elif field.location %} + +{% if field.api_type_label and field.api_type_label != field.type_label %}OpenAPI type: `{{ escape_mdx_html_text(inline_text(field.type_label)) }}`. + +{% endif %} +{{ escape_mdx_html_text(inline_text(field.description or "-")) }} + + {% endif %} + {% endfor %} +{% else %}
{% for field in fields %}
@@ -103,6 +119,7 @@ {% endfor %}
{% endif %} +{% endif %} {%- endmacro %} {% macro example_block(example) -%} @@ -173,7 +190,18 @@ {% endif %} {%- endmacro %} -{% macro panel_block(panel, render_text=True, render_schema_description=True) -%} +{% macro panel_block(panel, render_text=True, render_schema_description=True, use_api_components=False, field_kind="parameter") -%} +{% if use_api_components %} +### {{ escape_mdx_html_text(inline_text(panel.title)) }} + +{{ badge_row(panel.badges) }} +{% if panel.schema %} +{{ fields_table(panel.schema.fields, use_api_components=True, field_kind=field_kind) }} +{% endif %} +{% if panel.example %} +{{ example_block(panel.example) }} +{% endif %} +{% else %}

{{ escape_mdx_html_text(inline_text(panel.title)) }}

@@ -187,12 +215,40 @@ {% endif %} {{ meta_grid(panel.meta_items) }} {% if panel.schema %} + {% if use_api_components %} + {{ fields_table(panel.schema.fields, use_api_components=True, field_kind=field_kind) }} + {% else %} {{ schema_body(panel.schema, render_example=False, render_description=render_schema_description) }} {% endif %} + {% endif %} {% if panel.example %} {{ example_block(panel.example) }} {% endif %}
+{% endif %} +{%- endmacro %} + +{% macro mintlify_operation_examples(examples) -%} +{% set request_examples = examples|selectattr("kind", "equalto", "request")|list %} +{% set response_examples = examples|selectattr("kind", "equalto", "response")|list %} +{% if request_examples %} + +{% for example in request_examples %} +```{{ escape_html(inline_text(example.language or "text")) }} {{ escape_html(inline_text(example.title)) }} +{{ example.body }} +``` +{% endfor %} + +{% endif %} +{% if response_examples %} + +{% for example in response_examples %} +```{{ escape_html(inline_text(example.language or "text")) }} {{ escape_html(inline_text(example.title)) }} +{{ example.body }} +``` +{% endfor %} + +{% endif %} {%- endmacro %} {% macro operation_right_rail(operation) -%} @@ -218,7 +274,7 @@ {% endif %} {%- endmacro %} -{% macro operation_sections(operation, heading_prefix="##", include_examples=True) -%} +{% macro operation_sections(operation, heading_prefix="##", include_examples=True, use_api_components=False) -%} {{ heading_prefix }} Protocol Details {{ meta_grid(operation.protocol_items) }} @@ -226,13 +282,13 @@ {{ heading_prefix }} Inputs {% for panel in operation.inputs %} -{{ panel_block(panel, render_text=False, render_schema_description=False) }} +{{ panel_block(panel, render_text=False, render_schema_description=False, use_api_components=use_api_components, field_kind="parameter") }} {% endfor %} {{ heading_prefix }} Outputs {% for panel in operation.outputs %} -{{ panel_block(panel, render_text=False, render_schema_description=False) }} +{{ panel_block(panel, render_text=False, render_schema_description=False, use_api_components=use_api_components, field_kind="response") }} {% endfor %} {% if include_examples and operation.examples %} diff --git a/tests/test_json_api_openapi.py b/tests/test_json_api_openapi.py index 8ba4a36be..d129a4b53 100644 --- a/tests/test_json_api_openapi.py +++ b/tests/test_json_api_openapi.py @@ -25,7 +25,9 @@ def load_script_module(script_name: str) -> ModuleType: return module -def test_add_missing_operation_summaries_uses_method_path_labels_for_mintlify_nav() -> None: +def test_add_missing_operation_summaries_uses_method_path_labels_for_mintlify_nav() -> ( + None +): module = load_script_module("generate_json_api_reference.py") source = """ openapi: 3.0.3 paths: @@ -45,7 +47,7 @@ def test_add_missing_operation_summaries_uses_method_path_labels_for_mintlify_na assert ' summary: "POST /v2/commands/submit-and-wait"' in rendered assert "summary: Existing summary" in rendered - assert "summary: \"/v2/commands/submit-and-wait\"" not in rendered + assert 'summary: "/v2/commands/submit-and-wait"' not in rendered assert module.missing_operation_summaries(module.yaml.safe_load(rendered)) == set() @@ -75,7 +77,9 @@ def test_add_missing_operation_summaries_disambiguates_methods_on_same_path() -> assert operations["patch"]["summary"] == "PATCH /v2/users/:user-id" -def test_add_missing_operation_summaries_preserves_specs_that_already_have_summaries() -> None: +def test_add_missing_operation_summaries_preserves_specs_that_already_have_summaries() -> ( + None +): module = load_script_module("generate_json_api_reference.py") source = """openapi: 3.0.3 paths: @@ -106,7 +110,9 @@ def test_sanitize_internal_todos_removes_only_standalone_tracker_lines() -> None components: {} """ - assert module.sanitize_internal_todos(source) == """openapi: 3.0.3 + assert ( + module.sanitize_internal_todos(source) + == """openapi: 3.0.3 paths: /v2/parties: post: @@ -118,6 +124,7 @@ def test_sanitize_internal_todos_removes_only_standalone_tracker_lines() -> None example: TODO(#12345) remains because it is not a standalone line components: {} """ + ) def test_normalize_mintlify_openapi_text_sanitizes_todos_and_adds_summaries() -> None: @@ -161,6 +168,58 @@ def test_openapi_operation_page_refs_lists_endpoint_refs_in_source_order() -> No ] +def test_openapi_navigation_replaces_only_configured_manual_operations() -> None: + module = load_script_module("generate_json_api_reference.py") + spec = { + "paths": { + "/v2/updates": {"post": {"summary": "POST /v2/updates"}}, + "/v2/updates/flats": {"post": {"summary": "POST /v2/updates/flats"}}, + } + } + manual_operations = module.configured_manual_operations( + { + "manual_operations": [ + { + "method": "post", + "path": "/v2/updates/flats", + "page_ref": "reference/json-api-reference/post-v2updatesflats", + } + ] + } + ) + + assert manual_operations[0]["method"] == "POST" + assert module.openapi_navigation_page_refs( + spec, manual_operations=manual_operations + ) == [ + "POST /v2/updates", + "reference/json-api-reference/post-v2updatesflats", + ] + + +def test_manual_openapi_config_rejects_duplicate_operation_identity() -> None: + module = load_script_module("generate_json_api_reference.py") + operation = { + "method": "POST", + "path": "/v2/updates/flats", + "page_ref": "reference/json-api-reference/post-v2updatesflats", + } + + try: + module.configured_manual_operations( + { + "manual_operations": [ + operation, + {**operation, "page_ref": "reference/duplicate"}, + ] + } + ) + except ValueError as error: + assert "duplicate method/path" in str(error) + else: + raise AssertionError("Expected duplicate manual operation identity to fail") + + def test_update_docs_navigation_supports_product_navigation(tmp_path: Path) -> None: module = load_script_module("generate_json_api_reference.py") docs_json = tmp_path / "docs.json" @@ -184,7 +243,10 @@ def test_update_docs_navigation_supports_product_navigation(tmp_path: Path) -> N }, "pages": ["stale-page"], }, - {"group": "AsyncAPI", "pages": ["reference/asyncapi"]}, + { + "group": "AsyncAPI", + "pages": ["reference/asyncapi"], + }, ], }, ], @@ -219,13 +281,19 @@ def test_update_docs_navigation_supports_product_navigation(tmp_path: Path) -> N "source": "openapi/json-ledger-api/openapi.yaml", "directory": "reference/json-api-reference", }, - "pages": ["GET /v2/users", "POST /v2/users", "reference/json-api-reference/details"], + "pages": [ + "GET /v2/users", + "POST /v2/users", + "reference/json-api-reference/details", + ], }, {"group": "AsyncAPI", "pages": ["reference/asyncapi"]}, ] -def test_operation_summary_uses_descriptions_for_generated_method_path_summaries() -> None: +def test_operation_summary_uses_descriptions_for_generated_method_path_summaries() -> ( + None +): module = load_script_module("generate_json_api_reference.py") path_item = { "get": { @@ -238,7 +306,10 @@ def test_operation_summary_uses_descriptions_for_generated_method_path_summaries }, } - assert module.operation_summary("/v2/users/{user-id}", path_item) == "GET: Get user.; PATCH: Update user." + assert ( + module.operation_summary("/v2/users/{user-id}", path_item) + == "GET: Get user.; PATCH: Update user." + ) def test_build_openapi_details_page_uses_reference_overview_layout() -> None: diff --git a/tests/test_openapi_manual_render.py b/tests/test_openapi_manual_render.py new file mode 100644 index 000000000..92dc03037 --- /dev/null +++ b/tests/test_openapi_manual_render.py @@ -0,0 +1,169 @@ +from __future__ import annotations + +from x2mdx.history.models import HistoryEventKind +from x2mdx.openapi import ( + ManualOpenAPIRenderOptions, + operation_history_events, + render_manual_openapi_operation, +) +from x2mdx.render import render_page + + +def operation_spec(*, changed: bool) -> dict: + description = "Query flat transactions." + parameters = [ + { + "name": "limit", + "in": "query", + "required": False, + "description": "Maximum number of updates.", + "schema": {"type": "integer", "format": "int64"}, + } + ] + if changed: + description += ( + " Provided for backwards compatibility; it will be removed in the Canton " + "version 3.5.0." + ) + parameters.append( + { + "name": "stream_idle_timeout_ms", + "in": "query", + "required": False, + "schema": {"type": "integer", "format": "int64"}, + } + ) + return { + "openapi": "3.0.3", + "paths": { + "/v2/updates/flats": { + "post": { + "summary": "POST /v2/updates/flats", + "description": description, + "operationId": "postV2UpdatesFlats", + "deprecated": changed, + "security": [{"httpAuth": []}], + "parameters": parameters, + "requestBody": { + "required": True, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetUpdatesRequest" + } + } + }, + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Update" + }, + } + } + }, + }, + "400": { + "description": "Invalid request", + "content": {"text/plain": {"schema": {"type": "string"}}}, + }, + }, + } + } + }, + "components": { + "schemas": { + "GetUpdatesRequest": { + "type": "object", + "required": ["beginExclusive"], + "properties": { + "beginExclusive": { + "type": "integer", + "format": "int64", + "description": "First offset to read after.", + }, + "verbose": {"type": "boolean", "default": False}, + }, + }, + "Update": { + "type": "object", + "required": ["offset"], + "properties": {"offset": {"type": "integer", "format": "int64"}}, + }, + }, + "securitySchemes": { + "httpAuth": {"type": "http", "scheme": "bearer"}, + }, + }, + } + + +def test_operation_history_uses_authored_remove_as_of_and_snapshot_changes() -> None: + events = operation_history_events( + specs_by_version={ + "3.4": operation_spec(changed=False), + "3.5": operation_spec(changed=True), + }, + versions=["3.4", "3.5"], + publish_version="3.5", + method="post", + path="/v2/updates/flats", + source_name="release fixtures", + ) + + assert [(event.kind, event.version) for event in events] == [ + (HistoryEventKind.REMOVE_AS_OF, "3.5.0"), + (HistoryEventKind.DEPRECATED, "3.5"), + (HistoryEventKind.CHANGED, "3.5"), + (HistoryEventKind.INTRODUCED, "3.4"), + ] + assert events[0].evidence[0].kind.value == "source_metadata" + assert events[2].evidence[0].kind.value == "snapshot_diff" + + +def test_manual_openapi_page_preserves_playground_and_standard_history_layout() -> None: + specs = { + "3.4": operation_spec(changed=False), + "3.5": operation_spec(changed=True), + } + history = operation_history_events( + specs_by_version=specs, + versions=["3.4", "3.5"], + publish_version="3.5", + method="post", + path="/v2/updates/flats", + source_name="release fixtures", + ) + rendered = render_page( + render_manual_openapi_operation( + spec=specs["3.5"], + options=ManualOpenAPIRenderOptions( + method="post", + path="/v2/updates/flats", + output_path="reference/json-api-reference/post-v2updatesflats.mdx", + ), + history_events=history, + publish_version="3.5", + ) + ) + + assert 'api: "POST http://localhost:7575/v2/updates/flats"' in rendered + assert 'authMethod: "bearer"' in rendered + assert 'playground: "interactive"' in rendered + assert 'title: "Query flat transactions"' in rendered + assert '' in rendered + assert "OpenAPI type: `integer (int64)`." in rendered + assert '' in rendered + assert '' in rendered + assert "" in rendered + assert "" in rendered + assert "x2mdx-ref-operation-shell" not in rendered + assert "## History" in rendered + assert "Remove as of" in rendered + assert "3.5.0" in rendered + assert "details and history" not in rendered.lower() diff --git a/tests/test_x2mdx_render.py b/tests/test_x2mdx_render.py index 84b3339c7..ef06ef604 100644 --- a/tests/test_x2mdx_render.py +++ b/tests/test_x2mdx_render.py @@ -14,3 +14,32 @@ def test_render_page_strips_trailing_whitespace() -> None: assert "\n \n" not in rendered assert "

Text

" not in rendered assert rendered.endswith("
\n") + + +def test_render_page_supports_manual_api_frontmatter() -> None: + rendered = render_page( + Page( + path="create.mdx", + title="Create a payment", + frontmatter={ + "api": "POST http://localhost:7575/v2/payments", + "authMethod": "bearer", + "playground": "interactive", + }, + ) + ) + + assert 'api: "POST http://localhost:7575/v2/payments"' in rendered + assert 'authMethod: "bearer"' in rendered + assert 'playground: "interactive"' in rendered + + +def test_render_page_rejects_duplicate_reserved_frontmatter() -> None: + page = Page(path="example.mdx", title="Example", frontmatter={"title": "Duplicate"}) + + try: + render_page(page) + except ValueError as error: + assert str(error) == "Reserved frontmatter key: title" + else: + raise AssertionError("Expected duplicate title metadata to fail") From 2a608c06b38c8712b07e80af0fb04fe426d2691a Mon Sep 17 00:00:00 2001 From: danielporterda Date: Mon, 24 Aug 2026 13:58:41 -0400 Subject: [PATCH 05/14] Migrate JSON OpenAPI reference to manual pages Signed-off-by: danielporterda --- config/x2mdx/ledger-api/source-artifacts.json | 13 +- docs-main/docs.json | 142 +- .../delete-v2idps:idp-id.mdx | 289 +++ .../delete-v2users:user-id.mdx | 289 +++ .../reference/json-api-reference/details.mdx | 2236 ----------------- .../json-api-reference/get-livez.mdx | 234 ++ .../json-api-reference/get-readyz.mdx | 256 ++ .../get-v2authenticated-user.mdx | 298 +++ .../json-api-reference/get-v2idps.mdx | 272 ++ .../json-api-reference/get-v2idps:idp-id.mdx | 297 +++ ...ve-submissionpreferred-package-version.mdx | 325 +++ .../get-v2package-vetting.mdx | 343 +++ .../json-api-reference/get-v2packages.mdx | 272 ++ .../get-v2packages:package-id.mdx | 289 +++ .../get-v2packages:package-idstatus.mdx | 291 +++ .../json-api-reference/get-v2parties.mdx | 323 +++ .../get-v2parties:party.mdx | 321 +++ .../get-v2partiesparticipant-id.mdx | 270 ++ .../get-v2stateactive-contracts-page.mdx | 338 +++ .../get-v2stateconnected-synchronizers.mdx | 307 +++ .../get-v2statelatest-pruned-offsets.mdx | 277 ++ .../get-v2stateledger-end.mdx | 270 ++ ...pdatestransaction-tree-by-id:update-id.mdx | 340 +++ ...datestransaction-tree-by-offset:offset.mdx | 342 +++ .../json-api-reference/get-v2users.mdx | 309 +++ .../get-v2users:user-id.mdx | 319 +++ .../get-v2users:user-idrights.mdx | 293 +++ .../json-api-reference/get-v2version.mdx | 283 +++ .../reference/json-api-reference/overview.mdx | 46 + .../patch-v2idps:idp-id.mdx | 337 +++ .../patch-v2parties:party.mdx | 336 +++ .../patch-v2users:user-id.mdx | 338 +++ ...ch-v2users:user-ididentity-provider-id.mdx | 332 +++ .../patch-v2users:user-idrights.mdx | 338 +++ ...ost-v2commandsasyncsubmit-reassignment.mdx | 299 +++ .../post-v2commandsasyncsubmit.mdx | 407 +++ .../post-v2commandscommand-completions.mdx | 330 +++ .../post-v2commandscompletions.mdx | 349 +++ ...mmandssubmit-and-wait-for-reassignment.mdx | 322 +++ ...dssubmit-and-wait-for-transaction-tree.mdx | 437 ++++ ...ommandssubmit-and-wait-for-transaction.mdx | 324 +++ .../post-v2commandssubmit-and-wait.mdx | 416 +++ .../post-v2contractscontract-by-id.mdx | 331 +++ .../json-api-reference/post-v2dars.mdx | 327 +++ .../post-v2darsvalidate.mdx | 298 +++ .../post-v2eventsevents-by-contract-id.mdx | 321 +++ .../json-api-reference/post-v2idps.mdx | 307 +++ .../post-v2interactive-submissionexecute.mdx | 345 +++ ...v2interactive-submissionexecuteandwait.mdx | 354 +++ ...submissionexecuteandwaitfortransaction.mdx | 370 +++ ...teractive-submissionpreferred-packages.mdx | 324 +++ .../post-v2interactive-submissionprepare.mdx | 442 ++++ .../post-v2package-vetting.mdx | 360 +++ .../post-v2package-vettinglist.mdx | 335 +++ .../post-v2package-vettingupdate.mdx | 352 +++ .../json-api-reference/post-v2packages.mdx | 327 +++ .../json-api-reference/post-v2parties.mdx | 334 +++ .../post-v2partiesexternalallocate.mdx | 338 +++ ...ost-v2partiesexternalgenerate-topology.mdx | 368 +++ .../post-v2stateactive-contracts-page.mdx | 330 +++ .../post-v2stateactive-contracts.mdx | 369 +++ .../json-api-reference/post-v2updates.mdx | 376 +++ .../post-v2updatesget-updates-page.mdx | 353 +++ .../post-v2updatestransaction-by-id.mdx | 347 +++ .../post-v2updatestransaction-by-offset.mdx | 349 +++ .../post-v2updatestrees.mdx | 394 +++ .../post-v2updatesupdate-by-id.mdx | 308 +++ .../post-v2updatesupdate-by-offset.mdx | 310 +++ .../json-api-reference/post-v2users.mdx | 317 +++ .../post-v2users:user-idrights.mdx | 338 +++ scripts/generate_json_api_reference.py | 260 +- src/x2mdx/openapi/render.py | 158 +- tests/test_json_api_openapi.py | 243 ++ tests/test_openapi_manual_render.py | 137 + 74 files changed, 22514 insertions(+), 2357 deletions(-) create mode 100644 docs-main/reference/json-api-reference/delete-v2idps:idp-id.mdx create mode 100644 docs-main/reference/json-api-reference/delete-v2users:user-id.mdx delete mode 100644 docs-main/reference/json-api-reference/details.mdx create mode 100644 docs-main/reference/json-api-reference/get-livez.mdx create mode 100644 docs-main/reference/json-api-reference/get-readyz.mdx create mode 100644 docs-main/reference/json-api-reference/get-v2authenticated-user.mdx create mode 100644 docs-main/reference/json-api-reference/get-v2idps.mdx create mode 100644 docs-main/reference/json-api-reference/get-v2idps:idp-id.mdx create mode 100644 docs-main/reference/json-api-reference/get-v2interactive-submissionpreferred-package-version.mdx create mode 100644 docs-main/reference/json-api-reference/get-v2package-vetting.mdx create mode 100644 docs-main/reference/json-api-reference/get-v2packages.mdx create mode 100644 docs-main/reference/json-api-reference/get-v2packages:package-id.mdx create mode 100644 docs-main/reference/json-api-reference/get-v2packages:package-idstatus.mdx create mode 100644 docs-main/reference/json-api-reference/get-v2parties.mdx create mode 100644 docs-main/reference/json-api-reference/get-v2parties:party.mdx create mode 100644 docs-main/reference/json-api-reference/get-v2partiesparticipant-id.mdx create mode 100644 docs-main/reference/json-api-reference/get-v2stateactive-contracts-page.mdx create mode 100644 docs-main/reference/json-api-reference/get-v2stateconnected-synchronizers.mdx create mode 100644 docs-main/reference/json-api-reference/get-v2statelatest-pruned-offsets.mdx create mode 100644 docs-main/reference/json-api-reference/get-v2stateledger-end.mdx create mode 100644 docs-main/reference/json-api-reference/get-v2updatestransaction-tree-by-id:update-id.mdx create mode 100644 docs-main/reference/json-api-reference/get-v2updatestransaction-tree-by-offset:offset.mdx create mode 100644 docs-main/reference/json-api-reference/get-v2users.mdx create mode 100644 docs-main/reference/json-api-reference/get-v2users:user-id.mdx create mode 100644 docs-main/reference/json-api-reference/get-v2users:user-idrights.mdx create mode 100644 docs-main/reference/json-api-reference/get-v2version.mdx create mode 100644 docs-main/reference/json-api-reference/overview.mdx create mode 100644 docs-main/reference/json-api-reference/patch-v2idps:idp-id.mdx create mode 100644 docs-main/reference/json-api-reference/patch-v2parties:party.mdx create mode 100644 docs-main/reference/json-api-reference/patch-v2users:user-id.mdx create mode 100644 docs-main/reference/json-api-reference/patch-v2users:user-ididentity-provider-id.mdx create mode 100644 docs-main/reference/json-api-reference/patch-v2users:user-idrights.mdx create mode 100644 docs-main/reference/json-api-reference/post-v2commandsasyncsubmit-reassignment.mdx create mode 100644 docs-main/reference/json-api-reference/post-v2commandsasyncsubmit.mdx create mode 100644 docs-main/reference/json-api-reference/post-v2commandscommand-completions.mdx create mode 100644 docs-main/reference/json-api-reference/post-v2commandscompletions.mdx create mode 100644 docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait-for-reassignment.mdx create mode 100644 docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait-for-transaction-tree.mdx create mode 100644 docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait-for-transaction.mdx create mode 100644 docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait.mdx create mode 100644 docs-main/reference/json-api-reference/post-v2contractscontract-by-id.mdx create mode 100644 docs-main/reference/json-api-reference/post-v2dars.mdx create mode 100644 docs-main/reference/json-api-reference/post-v2darsvalidate.mdx create mode 100644 docs-main/reference/json-api-reference/post-v2eventsevents-by-contract-id.mdx create mode 100644 docs-main/reference/json-api-reference/post-v2idps.mdx create mode 100644 docs-main/reference/json-api-reference/post-v2interactive-submissionexecute.mdx create mode 100644 docs-main/reference/json-api-reference/post-v2interactive-submissionexecuteandwait.mdx create mode 100644 docs-main/reference/json-api-reference/post-v2interactive-submissionexecuteandwaitfortransaction.mdx create mode 100644 docs-main/reference/json-api-reference/post-v2interactive-submissionpreferred-packages.mdx create mode 100644 docs-main/reference/json-api-reference/post-v2interactive-submissionprepare.mdx create mode 100644 docs-main/reference/json-api-reference/post-v2package-vetting.mdx create mode 100644 docs-main/reference/json-api-reference/post-v2package-vettinglist.mdx create mode 100644 docs-main/reference/json-api-reference/post-v2package-vettingupdate.mdx create mode 100644 docs-main/reference/json-api-reference/post-v2packages.mdx create mode 100644 docs-main/reference/json-api-reference/post-v2parties.mdx create mode 100644 docs-main/reference/json-api-reference/post-v2partiesexternalallocate.mdx create mode 100644 docs-main/reference/json-api-reference/post-v2partiesexternalgenerate-topology.mdx create mode 100644 docs-main/reference/json-api-reference/post-v2stateactive-contracts-page.mdx create mode 100644 docs-main/reference/json-api-reference/post-v2stateactive-contracts.mdx create mode 100644 docs-main/reference/json-api-reference/post-v2updates.mdx create mode 100644 docs-main/reference/json-api-reference/post-v2updatesget-updates-page.mdx create mode 100644 docs-main/reference/json-api-reference/post-v2updatestransaction-by-id.mdx create mode 100644 docs-main/reference/json-api-reference/post-v2updatestransaction-by-offset.mdx create mode 100644 docs-main/reference/json-api-reference/post-v2updatestrees.mdx create mode 100644 docs-main/reference/json-api-reference/post-v2updatesupdate-by-id.mdx create mode 100644 docs-main/reference/json-api-reference/post-v2updatesupdate-by-offset.mdx create mode 100644 docs-main/reference/json-api-reference/post-v2users.mdx create mode 100644 docs-main/reference/json-api-reference/post-v2users:user-idrights.mdx diff --git a/config/x2mdx/ledger-api/source-artifacts.json b/config/x2mdx/ledger-api/source-artifacts.json index 0c8d79252..973309325 100644 --- a/config/x2mdx/ledger-api/source-artifacts.json +++ b/config/x2mdx/ledger-api/source-artifacts.json @@ -4,13 +4,12 @@ "bundle_spec_dir": "openapi/json-ledger-api", "source_path_prefix": "canton-release-bundle/json-ledger-api", "manual_api_server": "http://localhost:7575", - "manual_operations": [ - { - "method": "POST", - "path": "/v2/updates/flats", - "page_ref": "reference/json-api-reference/post-v2updatesflats" - } - ], + "manual_operations": "all", + "legacy_manual_route_baseline": { + "operation_count": 67, + "sha256": "8af28522f2ce85a9cb981ac1cd842260b52f0b024ff4e7574a19549d830fa31e", + "source": "Mintlify native OpenAPI sidebar routes captured before full manual-page migration on 2026-08-24" + }, "publish_version": "3.5", "versions": [ { diff --git a/docs-main/docs.json b/docs-main/docs.json index bf32378b1..d751aa5bc 100644 --- a/docs-main/docs.json +++ b/docs-main/docs.json @@ -918,79 +918,75 @@ "appdev/reference/pqs-sql-reference", { "group": "OpenAPI", - "openapi": { - "source": "openapi/json-ledger-api/openapi.yaml", - "directory": "reference/json-api-reference" - }, "pages": [ - "POST /v2/commands/submit-and-wait", - "POST /v2/commands/submit-and-wait-for-transaction", - "POST /v2/commands/submit-and-wait-for-reassignment", - "POST /v2/commands/submit-and-wait-for-transaction-tree", - "POST /v2/commands/async/submit", - "POST /v2/commands/async/submit-reassignment", - "POST /v2/commands/completions", - "POST /v2/commands/command-completions", - "POST /v2/events/events-by-contract-id", - "GET /v2/version", - "POST /v2/dars/validate", - "POST /v2/dars", - "GET /v2/packages", - "POST /v2/packages", - "GET /v2/packages/{package-id}", - "GET /v2/packages/{package-id}/status", - "GET /v2/package-vetting", - "POST /v2/package-vetting", - "POST /v2/package-vetting/list", - "POST /v2/package-vetting/update", - "GET /v2/parties", - "POST /v2/parties", - "POST /v2/parties/external/allocate", - "GET /v2/parties/participant-id", - "GET /v2/parties/{party}", - "PATCH /v2/parties/{party}", - "POST /v2/parties/external/generate-topology", - "POST /v2/state/active-contracts", - "GET /v2/state/active-contracts-page", - "POST /v2/state/active-contracts-page", - "GET /v2/state/connected-synchronizers", - "GET /v2/state/ledger-end", - "GET /v2/state/latest-pruned-offsets", - "POST /v2/updates", + "reference/json-api-reference/overview", + "reference/json-api-reference/post-v2commandssubmit-and-wait", + "reference/json-api-reference/post-v2commandssubmit-and-wait-for-transaction", + "reference/json-api-reference/post-v2commandssubmit-and-wait-for-reassignment", + "reference/json-api-reference/post-v2commandssubmit-and-wait-for-transaction-tree", + "reference/json-api-reference/post-v2commandsasyncsubmit", + "reference/json-api-reference/post-v2commandsasyncsubmit-reassignment", + "reference/json-api-reference/post-v2commandscompletions", + "reference/json-api-reference/post-v2commandscommand-completions", + "reference/json-api-reference/post-v2eventsevents-by-contract-id", + "reference/json-api-reference/get-v2version", + "reference/json-api-reference/post-v2darsvalidate", + "reference/json-api-reference/post-v2dars", + "reference/json-api-reference/get-v2packages", + "reference/json-api-reference/post-v2packages", + "reference/json-api-reference/get-v2packages:package-id", + "reference/json-api-reference/get-v2packages:package-idstatus", + "reference/json-api-reference/get-v2package-vetting", + "reference/json-api-reference/post-v2package-vetting", + "reference/json-api-reference/post-v2package-vettinglist", + "reference/json-api-reference/post-v2package-vettingupdate", + "reference/json-api-reference/get-v2parties", + "reference/json-api-reference/post-v2parties", + "reference/json-api-reference/post-v2partiesexternalallocate", + "reference/json-api-reference/get-v2partiesparticipant-id", + "reference/json-api-reference/get-v2parties:party", + "reference/json-api-reference/patch-v2parties:party", + "reference/json-api-reference/post-v2partiesexternalgenerate-topology", + "reference/json-api-reference/post-v2stateactive-contracts", + "reference/json-api-reference/get-v2stateactive-contracts-page", + "reference/json-api-reference/post-v2stateactive-contracts-page", + "reference/json-api-reference/get-v2stateconnected-synchronizers", + "reference/json-api-reference/get-v2stateledger-end", + "reference/json-api-reference/get-v2statelatest-pruned-offsets", + "reference/json-api-reference/post-v2updates", "reference/json-api-reference/post-v2updatesflats", - "POST /v2/updates/trees", - "GET /v2/updates/transaction-tree-by-offset/{offset}", - "POST /v2/updates/transaction-by-offset", - "POST /v2/updates/update-by-offset", - "POST /v2/updates/transaction-by-id", - "POST /v2/updates/update-by-id", - "GET /v2/updates/transaction-tree-by-id/{update-id}", - "POST /v2/updates/get-updates-page", - "GET /v2/users", - "POST /v2/users", - "GET /v2/users/{user-id}", - "DELETE /v2/users/{user-id}", - "PATCH /v2/users/{user-id}", - "GET /v2/authenticated-user", - "GET /v2/users/{user-id}/rights", - "POST /v2/users/{user-id}/rights", - "PATCH /v2/users/{user-id}/rights", - "PATCH /v2/users/{user-id}/identity-provider-id", - "GET /v2/idps", - "POST /v2/idps", - "GET /v2/idps/{idp-id}", - "DELETE /v2/idps/{idp-id}", - "PATCH /v2/idps/{idp-id}", - "POST /v2/interactive-submission/prepare", - "POST /v2/interactive-submission/execute", - "POST /v2/interactive-submission/executeAndWait", - "POST /v2/interactive-submission/executeAndWaitForTransaction", - "GET /v2/interactive-submission/preferred-package-version", - "POST /v2/interactive-submission/preferred-packages", - "GET /livez", - "GET /readyz", - "POST /v2/contracts/contract-by-id", - "reference/json-api-reference/details" + "reference/json-api-reference/post-v2updatestrees", + "reference/json-api-reference/get-v2updatestransaction-tree-by-offset:offset", + "reference/json-api-reference/post-v2updatestransaction-by-offset", + "reference/json-api-reference/post-v2updatesupdate-by-offset", + "reference/json-api-reference/post-v2updatestransaction-by-id", + "reference/json-api-reference/post-v2updatesupdate-by-id", + "reference/json-api-reference/get-v2updatestransaction-tree-by-id:update-id", + "reference/json-api-reference/post-v2updatesget-updates-page", + "reference/json-api-reference/get-v2users", + "reference/json-api-reference/post-v2users", + "reference/json-api-reference/get-v2users:user-id", + "reference/json-api-reference/delete-v2users:user-id", + "reference/json-api-reference/patch-v2users:user-id", + "reference/json-api-reference/get-v2authenticated-user", + "reference/json-api-reference/get-v2users:user-idrights", + "reference/json-api-reference/post-v2users:user-idrights", + "reference/json-api-reference/patch-v2users:user-idrights", + "reference/json-api-reference/patch-v2users:user-ididentity-provider-id", + "reference/json-api-reference/get-v2idps", + "reference/json-api-reference/post-v2idps", + "reference/json-api-reference/get-v2idps:idp-id", + "reference/json-api-reference/delete-v2idps:idp-id", + "reference/json-api-reference/patch-v2idps:idp-id", + "reference/json-api-reference/post-v2interactive-submissionprepare", + "reference/json-api-reference/post-v2interactive-submissionexecute", + "reference/json-api-reference/post-v2interactive-submissionexecuteandwait", + "reference/json-api-reference/post-v2interactive-submissionexecuteandwaitfortransaction", + "reference/json-api-reference/get-v2interactive-submissionpreferred-package-version", + "reference/json-api-reference/post-v2interactive-submissionpreferred-packages", + "reference/json-api-reference/get-livez", + "reference/json-api-reference/get-readyz", + "reference/json-api-reference/post-v2contractscontract-by-id" ] }, { @@ -3052,6 +3048,10 @@ { "source": "/sdks-tools/sdks/wallet-sdk", "destination": "/sdks-tools/sdks/wallet-sdk/overview" + }, + { + "source": "/reference/json-api-reference/details", + "destination": "/reference/json-api-reference/overview" } ], "footer": { diff --git a/docs-main/reference/json-api-reference/delete-v2idps:idp-id.mdx b/docs-main/reference/json-api-reference/delete-v2idps:idp-id.mdx new file mode 100644 index 000000000..af3042490 --- /dev/null +++ b/docs-main/reference/json-api-reference/delete-v2idps:idp-id.mdx @@ -0,0 +1,289 @@ +--- +title: "Delete an existing identity provider configuration" +api: "DELETE http://localhost:7575/v2/idps/{idp-id}" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Delete an existing identity provider configuration

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Delete an existing identity provider configuration. + +## Protocol Details + + +
+ +
+
Operation ID
+
deleteV2IdpsIdp-id
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Path parameters + + + + + + + + + +- + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +Does not (yet) contain any data. + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The DELETE /v2/idps/{idp-id} operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request DELETE \ + --url 'http://localhost:7575/v2/idps/{idp-id}' \ + --header 'Authorization: Bearer $TOKEN' +``` + + + + + + +```json 200 response +{} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/delete-v2users:user-id.mdx b/docs-main/reference/json-api-reference/delete-v2users:user-id.mdx new file mode 100644 index 000000000..6c2c6f114 --- /dev/null +++ b/docs-main/reference/json-api-reference/delete-v2users:user-id.mdx @@ -0,0 +1,289 @@ +--- +title: "Delete an existing user and all its rights" +api: "DELETE http://localhost:7575/v2/users/{user-id}" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Delete an existing user and all its rights

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Delete an existing user and all its rights. + +## Protocol Details + + +
+ +
+
Operation ID
+
deleteV2UsersUser-id
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Path parameters + + + + + + + + + +- + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +- + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The DELETE /v2/users/{user-id} operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request DELETE \ + --url 'http://localhost:7575/v2/users/{user-id}' \ + --header 'Authorization: Bearer $TOKEN' +``` + + + + + + +```json 200 response +{} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/details.mdx b/docs-main/reference/json-api-reference/details.mdx deleted file mode 100644 index 649dab1e6..000000000 --- a/docs-main/reference/json-api-reference/details.mdx +++ /dev/null @@ -1,2236 +0,0 @@ ---- -title: "Details and history" -description: "JSON Ledger API OpenAPI endpoint details and version history." ---- - -
- -

OpenAPI Reference

- - -

Details and history

- - -

Endpoint overview for the JSON Ledger API OpenAPI surface, built from versioned release snapshots.

- - -
- - OpenAPI - - 3.5 - -
- - -
- -
-
Publish version
-
3.5
-
- -
-
Source
-
Canton release bundle JSON Ledger API specifications
-
- -
-
Version filter
-
3.4, 3.5
-
- -
- -
- - -## Endpoints - - -Select an OpenAPI operation from the sidebar for request and response details. This page summarizes endpoint lifecycle changes across the configured Ledger API versions. - - - -
- - -
- -
- /v2/commands/submit-and-wait - -
- - POST - - Since 3.4 - - Changed 3.5 - -
- -
- -

POST: Submits a single composite command and waits for its result. Propagates the gRPC error of failed submissions including Daml interpretation errors.

- - -
- -
-
Operations
-
POST
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/commands/submit-and-wait-for-transaction - -
- - POST - - Since 3.4 - - Changed 3.5 - -
- -
- -

POST: Submits a single composite command, waits for its result, and returns the transaction. Propagates the gRPC error of failed submissions including Daml interpretation errors.

- - -
- -
-
Operations
-
POST
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/commands/submit-and-wait-for-reassignment - -
- - POST - - Since 3.4 - - Changed 3.5 - -
- -
- -

POST: Submits a single composite reassignment command, waits for its result, and returns the reassignment. Propagates the gRPC error of failed submission.

- - -
- -
-
Operations
-
POST
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/commands/submit-and-wait-for-transaction-tree - -
- - POST - - Since 3.4 - - Changed 3.5 - - Deprecated - -
- -
- -

POST: Submit a batch of commands and wait for the transaction trees response. Provided for backwards compatibility, it will be removed in the Canton version 3.5.0, use submit-and-wait-for...

- - -
- -
-
Operations
-
POST
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/commands/async/submit - -
- - POST - - Since 3.4 - - Changed 3.5 - -
- -
- -

POST: Submit a single composite command.

- - -
- -
-
Operations
-
POST
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/commands/async/submit-reassignment - -
- - POST - - Since 3.4 - - Changed 3.5 - -
- -
- -

POST: Submit a single reassignment.

- - -
- -
-
Operations
-
POST
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/commands/completions - -
- - POST - - Since 3.4 - - Changed 3.5 - -
- -
- -

POST: Query completions list (blocking call) Deprecated: please use ``GetCompletions`` instead. Subscribe to command completion events. Notice: This endpoint should be used for small resu...

- - -
- -
-
Operations
-
POST
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/commands/command-completions - -
- - POST - - Since 3.5 - -
- -
- -

POST: Query completions list (blocking call) Subscribe to command completion events. This streaming endpoint provides more flexibility in filtering than the predecessor ``CompletionStream...

- - -
- -
-
Operations
-
POST
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/events/events-by-contract-id - -
- - POST - - Since 3.4 - - Changed 3.5 - -
- -
- -

POST: Get the create and the consuming exercise event for the contract with the provided ID. No events will be returned for contracts that have been pruned because they have already been...

- - -
- -
-
Operations
-
POST
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/version - -
- - GET - - Since 3.4 - - Changed 3.5 - -
- -
- -

GET: Read the Ledger API version

- - -
- -
-
Operations
-
GET
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/dars/validate - -
- - POST - - Since 3.4 - - Changed 3.5 - -
- -
- -

POST: Validates the DAR and checks the upgrade compatibility of the DAR's packages with the set of the already vetted packages on the target vetting synchronizer. See ValidateDarFileReque...

- - -
- -
-
Operations
-
POST
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/dars - -
- - POST - - Since 3.4 - - Changed 3.5 - -
- -
- -

POST: Upload a DAR to the participant node

- - -
- -
-
Operations
-
POST
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/packages - -
- - GET, POST - - Since 3.4 - - Changed 3.5 - -
- -
- -

GET: Returns the identifiers of all supported packages.; POST: Behaves the same as /dars. This endpoint will be deprecated and removed in a future release. Upload a DAR file to the partic...

- - -
- -
-
Operations
-
GET, POST
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/packages/{package-id} - -
- - GET - - Since 3.4 - - Changed 3.5 - -
- -
- -

GET: Returns the contents of a single package.

- - -
- -
-
Operations
-
GET
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/packages/{package-id}/status - -
- - GET - - Since 3.4 - - Changed 3.5 - -
- -
- -

GET: Returns the status of a single package.

- - -
- -
-
Operations
-
GET
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/package-vetting - -
- - GET, POST - - Since 3.4 - - Changed 3.5 - - Deprecated - -
- -
- -

GET: Lists which participant node vetted what packages on which synchronizer. This endpoint (GET /package-vetting) is deprecated and will be removed in a future release. Please use POST /...

- - -
- -
-
Operations
-
GET, POST
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/package-vetting/list - -
- - POST - - Since 3.4 - - Changed 3.5 - -
- -
- -

POST: Lists which participant node vetted what packages on which synchronizer. Can be called by any authenticated user.

- - -
- -
-
Operations
-
POST
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/package-vetting/update - -
- - POST - - Since 3.4 - - Changed 3.5 - -
- -
- -

POST: Update the vetted packages of this participant

- - -
- -
-
Operations
-
POST
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/parties - -
- - GET, POST - - Since 3.4 - - Changed 3.5 - -
- -
- -

GET: List the parties known by the participant. The list returned contains parties whose ledger access is facilitated by the participant and the ones maintained elsewhere.; POST: Allocate...

- - -
- -
-
Operations
-
GET, POST
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/parties/external/allocate - -
- - POST - - Since 3.4 - - Changed 3.5 - -
- -
- -

POST: The external party must be hosted (at least) on this node with either confirmation or observation permissions It can optionally be hosted on other nodes (then called a multi-hosted...

- - -
- -
-
Operations
-
POST
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/parties/participant-id - -
- - GET - - Since 3.4 - - Changed 3.5 - -
- -
- -

GET: Return the identifier of the participant. All horizontally scaled replicas should return the same id. daml-on-kv-ledger: returns an identifier supplied on command line at launch time...

- - -
- -
-
Operations
-
GET
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/parties/{party} - -
- - GET, PATCH - - Since 3.4 - - Changed 3.5 - -
- -
- -

GET: Get the party details of the given parties. Only known parties will be returned in the list.; PATCH: Update selected modifiable participant-local attributes of a party details resour...

- - -
- -
-
Operations
-
GET, PATCH
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/parties/external/generate-topology - -
- - POST - - Since 3.4 - - Changed 3.5 - -
- -
- -

POST: You may use this endpoint to generate the common external topology transactions which can be signed externally and uploaded as part of the allocate party process Note that this requ...

- - -
- -
-
Operations
-
POST
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/state/active-contracts - -
- - POST - - Since 3.4 - - Changed 3.5 - -
- -
- -

POST: Query active contracts list (blocking call). Querying active contracts is an expensive operation and if possible should not be repeated often. Consider querying active contracts ini...

- - -
- -
-
Operations
-
POST
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/state/active-contracts-page - -
- - GET, POST - - Since 3.5 - - Deprecated - -
- -
- -

GET: Deprecated Use POST version of this endpoint; POST: Returns a page of the snapshot of the active contracts and incomplete (un)assignments at a ledger offset. Once all pages are fetch...

- - -
- -
-
Operations
-
GET, POST
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/state/connected-synchronizers - -
- - GET - - Since 3.4 - - Changed 3.5 - -
- -
- -

GET: Get the list of connected synchronizers at the time of the query.

- - -
- -
-
Operations
-
GET
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/state/ledger-end - -
- - GET - - Since 3.4 - - Changed 3.5 - -
- -
- -

GET: Get the current ledger end. Subscriptions started with the returned offset will serve events after this RPC was called.

- - -
- -
-
Operations
-
GET
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/state/latest-pruned-offsets - -
- - GET - - Since 3.4 - - Changed 3.5 - -
- -
- -

GET: Get the latest successfully pruned ledger offsets

- - -
- -
-
Operations
-
GET
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/updates - -
- - POST - - Since 3.4 - - Changed 3.5 - -
- -
- -

POST: Read the ledger's filtered update stream for the specified contents and filters. It returns the event types in accordance with the stream contents selected. Also the selection crite...

- - -
- -
-
Operations
-
POST
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/updates/flats - -
- - POST - - Since 3.4 - - Changed 3.5 - - Deprecated - -
- -
- -

POST: Query flat transactions update list (blocking call). Provided for backwards compatibility, it will be removed in the Canton version 3.5.0, use v2/updates instead. Notice: This endpo...

- - -
- -
-
Operations
-
POST
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/updates/trees - -
- - POST - - Since 3.4 - - Changed 3.5 - - Deprecated - -
- -
- -

POST: Query update transactions tree list (blocking call). Provided for backwards compatibility, it will be removed in the Canton version 3.5.0, use v2/updates instead. Notice: This endpo...

- - -
- -
-
Operations
-
POST
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/updates/transaction-tree-by-offset/{offset} - -
- - GET - - Since 3.4 - - Changed 3.5 - - Deprecated - -
- -
- -

GET: Get transaction tree by offset. Provided for backwards compatibility, it will be removed in the Canton version 3.5.0, use v2/updates/update-by-offset instead.

- - -
- -
-
Operations
-
GET
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/updates/transaction-by-offset - -
- - POST - - Since 3.4 - - Changed 3.5 - - Deprecated - -
- -
- -

POST: Get transaction by offset. Provided for backwards compatibility, it will be removed in the Canton version 3.5.0, use v2/updates/update-by-offset instead.

- - -
- -
-
Operations
-
POST
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/updates/update-by-offset - -
- - POST - - Since 3.4 - - Changed 3.5 - -
- -
- -

POST: Lookup an update by its offset. If there is no update with this offset, or all the events are filtered, an UPDATE_NOT_FOUND error will be raised.

- - -
- -
-
Operations
-
POST
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/updates/transaction-by-id - -
- - POST - - Since 3.4 - - Changed 3.5 - - Deprecated - -
- -
- -

POST: Get transaction by id. Provided for backwards compatibility, it will be removed in the Canton version 3.5.0, use v2/updates/update-by-id instead.

- - -
- -
-
Operations
-
POST
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/updates/update-by-id - -
- - POST - - Since 3.4 - - Changed 3.5 - -
- -
- -

POST: Lookup an update by its ID. If there is no update with this ID, or all the events are filtered, an UPDATE_NOT_FOUND error will be raised.

- - -
- -
-
Operations
-
POST
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/updates/transaction-tree-by-id/{update-id} - -
- - GET - - Since 3.4 - - Changed 3.5 - - Deprecated - -
- -
- -

GET: Get transaction tree by id. Provided for backwards compatibility, it will be removed in the Canton version 3.5.0, use v2/updates/update-by-id instead.

- - -
- -
-
Operations
-
GET
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/updates/get-updates-page - -
- - POST - - Since 3.5 - -
- -
- -

POST: Read a page of ledger's filtered updates. It returns the event types in accordance with the specified contents and filters. Additionally, the selection criteria for individual event...

- - -
- -
-
Operations
-
POST
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/users - -
- - GET, POST - - Since 3.4 - - Changed 3.5 - -
- -
- -

GET: List all existing users.; POST: Create a new user.

- - -
- -
-
Operations
-
GET, POST
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/users/{user-id} - -
- - GET, DELETE, PATCH - - Since 3.4 - - Changed 3.5 - -
- -
- -

GET: Get the user data of a specific user or the authenticated user.; DELETE: Delete an existing user and all its rights.; PATCH: Update selected modifiable attribute of a user resource d...

- - -
- -
-
Operations
-
GET, DELETE, PATCH
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/authenticated-user - -
- - GET - - Since 3.4 - - Changed 3.5 - -
- -
- -

GET: Get the user data of the current authenticated user.

- - -
- -
-
Operations
-
GET
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/users/{user-id}/rights - -
- - GET, POST, PATCH - - Since 3.4 - - Changed 3.5 - -
- -
- -

GET: List the set of all rights granted to a user.; POST: Grant rights to a user. Granting rights does not affect the resource version of the corresponding user.; PATCH: Revoke rights fro...

- - -
- -
-
Operations
-
GET, POST, PATCH
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/users/{user-id}/identity-provider-id - -
- - PATCH - - Since 3.4 - - Changed 3.5 - -
- -
- -

PATCH: Update the assignment of a user from one IDP to another.

- - -
- -
-
Operations
-
PATCH
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/idps - -
- - GET, POST - - Since 3.4 - - Changed 3.5 - -
- -
- -

GET: List all existing identity provider configurations.; POST: Create a new identity provider configuration. The request will fail if the maximum allowed number of separate configuration...

- - -
- -
-
Operations
-
GET, POST
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/idps/{idp-id} - -
- - GET, DELETE, PATCH - - Since 3.4 - - Changed 3.5 - -
- -
- -

GET: Get the identity provider configuration data by id.; DELETE: Delete an existing identity provider configuration.; PATCH: Update selected modifiable attribute of an identity provider...

- - -
- -
-
Operations
-
GET, DELETE, PATCH
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/interactive-submission/prepare - -
- - POST - - Since 3.4 - - Changed 3.5 - -
- -
- -

POST: Requires `readAs` scope for the submitting party when LAPI User authorization is enabled

- - -
- -
-
Operations
-
POST
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/interactive-submission/execute - -
- - POST - - Since 3.4 - - Changed 3.5 - -
- -
- -

POST: Execute a prepared submission _asynchronously_ on the ledger. Requires `actAs` or `executeAs` scope for the submitting party when LAPI User authorization is enabled Requires a signa...

- - -
- -
-
Operations
-
POST
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/interactive-submission/executeAndWait - -
- - POST - - Since 3.4 - - Changed 3.5 - -
- -
- -

POST: Similar to ExecuteSubmission but _synchronously_ wait for the completion of the transaction

- - -
- -
-
Operations
-
POST
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/interactive-submission/executeAndWaitForTransaction - -
- - POST - - Since 3.4 - - Changed 3.5 - -
- -
- -

POST: Similar to ExecuteSubmissionAndWait but additionally returns the transaction

- - -
- -
-
Operations
-
POST
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/interactive-submission/preferred-package-version - -
- - GET - - Since 3.4 - - Changed 3.5 - - Deprecated - -
- -
- -

GET: Get the preferred package version for constructing a command submission. This endpoint (GET /interactive-submission/preferred-package-version) is deprecated and will be removed in Ca...

- - -
- -
-
Operations
-
GET
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/interactive-submission/preferred-packages - -
- - POST - - Since 3.4 - - Changed 3.5 - -
- -
- -

POST: Compute the preferred packages for the vetting requirements in the request. A preferred package is the highest-versioned package for a provided package-name that is vetted by all th...

- - -
- -
-
Operations
-
POST
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /livez - -
- - GET - - Since 3.5 - -
- -
- -

GET: Checks if the service is alive

- - -
- -
-
Operations
-
GET
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /readyz - -
- - GET - - Since 3.5 - -
- -
- -

GET: Checks if the service is ready to serve requests

- - -
- -
-
Operations
-
GET
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - - -
- -
- /v2/contracts/contract-by-id - -
- - POST - - Since 3.4 - - Changed 3.5 - -
- -
- -

POST: Looking up contract data by contract ID. This endpoint is experimental / alpha, therefore no backwards compatibility is guaranteed. This endpoint must not be used to look up contrac...

- - -
- -
-
Operations
-
POST
-
- -
-
Last seen
-
3.5
-
- -
- - -
- - -
- - - - - -## Version Summary - - - - -
- - -
- -
- 3.4 - -
- - Added 49 - - Changed 0 - - Removed 0 - -
- -
- -

Endpoint changes included in this release snapshot.

- - - -
- - - -
- -
- 3.5 - -
- - Added 5 - - Changed 49 - - Removed 0 - -
- -
- -

Endpoint changes included in this release snapshot.

- - - -
- - -
diff --git a/docs-main/reference/json-api-reference/get-livez.mdx b/docs-main/reference/json-api-reference/get-livez.mdx new file mode 100644 index 000000000..86a34b7ca --- /dev/null +++ b/docs-main/reference/json-api-reference/get-livez.mdx @@ -0,0 +1,234 @@ +--- +title: "Checks if the service is alive" +api: "GET http://localhost:7575/livez" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Checks if the service is alive

+ + + +
+ + OpenAPI + + Since 3.5 + +
+ + +
+ +Checks if the service is alive + +## Protocol Details + + +
+ +
+
Operation ID
+
getLivez
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +## Outputs + + + +### 200 + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 3.5 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'http://localhost:7575/livez' \ + --header 'Authorization: Bearer $TOKEN' +``` + + + + + + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/get-readyz.mdx b/docs-main/reference/json-api-reference/get-readyz.mdx new file mode 100644 index 000000000..c5751daa6 --- /dev/null +++ b/docs-main/reference/json-api-reference/get-readyz.mdx @@ -0,0 +1,256 @@ +--- +title: "Checks if the service is ready to serve requests" +api: "GET http://localhost:7575/readyz" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Checks if the service is ready to serve requests

+ + + +
+ + OpenAPI + + Since 3.5 + +
+ + +
+ +Checks if the service is ready to serve requests + +## Protocol Details + + +
+ +
+
Operation ID
+
getReadyz
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +## Outputs + + + +### 200 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 3.5 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'http://localhost:7575/readyz' \ + --header 'Authorization: Bearer $TOKEN' +``` + + + + + + +```json 200 response +"string" +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/get-v2authenticated-user.mdx b/docs-main/reference/json-api-reference/get-v2authenticated-user.mdx new file mode 100644 index 000000000..9cdd5d5c6 --- /dev/null +++ b/docs-main/reference/json-api-reference/get-v2authenticated-user.mdx @@ -0,0 +1,298 @@ +--- +title: "Get the user data of the current authenticated user" +api: "GET http://localhost:7575/v2/authenticated-user" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Get the user data of the current authenticated user

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Get the user data of the current authenticated user. + +## Protocol Details + + +
+ +
+
Operation ID
+
getV2Authenticated-user
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Query parameters + + + + + + + + + +- + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +Users and rights ///////////////// Users are used to dynamically manage the rights given to Daml applications. They are stored and managed per participant node. + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The GET /v2/authenticated-user operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'http://localhost:7575/v2/authenticated-user' \ + --header 'Authorization: Bearer $TOKEN' +``` + + + + + + +```json 200 response +{ + "user": { + "id": "string", + "primaryParty": "string", + "isDeactivated": false, + "metadata": {}, + "identityProviderId": "string", + "primaryPartyAuthentication": false + } +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/get-v2idps.mdx b/docs-main/reference/json-api-reference/get-v2idps.mdx new file mode 100644 index 000000000..ade49cc3e --- /dev/null +++ b/docs-main/reference/json-api-reference/get-v2idps.mdx @@ -0,0 +1,272 @@ +--- +title: "List all existing identity provider configurations" +api: "GET http://localhost:7575/v2/idps" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

List all existing identity provider configurations

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +List all existing identity provider configurations. + +## Protocol Details + + +
+ +
+
Operation ID
+
getV2Idps
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The list of identity provider configs Required: must be non-empty + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The GET /v2/idps operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'http://localhost:7575/v2/idps' \ + --header 'Authorization: Bearer $TOKEN' +``` + + + + + + +```json 200 response +{ + "identityProviderConfigs": [ + {} + ] +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/get-v2idps:idp-id.mdx b/docs-main/reference/json-api-reference/get-v2idps:idp-id.mdx new file mode 100644 index 000000000..777e366af --- /dev/null +++ b/docs-main/reference/json-api-reference/get-v2idps:idp-id.mdx @@ -0,0 +1,297 @@ +--- +title: "Get the identity provider configuration data by id" +api: "GET http://localhost:7575/v2/idps/{idp-id}" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Get the identity provider configuration data by id

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Get the identity provider configuration data by id. + +## Protocol Details + + +
+ +
+
Operation ID
+
getV2IdpsIdp-id
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Path parameters + + + + + + + + + +- + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +- + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The GET /v2/idps/{idp-id} operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'http://localhost:7575/v2/idps/{idp-id}' \ + --header 'Authorization: Bearer $TOKEN' +``` + + + + + + +```json 200 response +{ + "identityProviderConfig": { + "identityProviderId": "string", + "isDeactivated": false, + "issuer": "string", + "jwksUrl": "string", + "audience": "string" + } +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/get-v2interactive-submissionpreferred-package-version.mdx b/docs-main/reference/json-api-reference/get-v2interactive-submissionpreferred-package-version.mdx new file mode 100644 index 000000000..5c6c018a5 --- /dev/null +++ b/docs-main/reference/json-api-reference/get-v2interactive-submissionpreferred-package-version.mdx @@ -0,0 +1,325 @@ +--- +title: "Get the preferred package version for constructing a command submission" +api: "GET http://localhost:7575/v2/interactive-submission/preferred-package-version" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Get the preferred package version for constructing a command submission

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Get the preferred package version for constructing a command submission. This endpoint (GET /interactive-submission/preferred-package-version) is deprecated and will be removed in Canton 3.6. Please use POST /interactive-submission/preferred-packages instead. + +## Protocol Details + + +
+ +
+
Operation ID
+
getV2Interactive-submissionPreferred-package-version
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Query parameters + + + + + + + + + +- + + + + + + +- + + + + + +OpenAPI type: `string (date-time)`. + + +- + + + + + + +- + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +- + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Deprecated + 3.5 +
+ +
+ +
+
+ Changed + 3.5 +
+ +

The GET /v2/interactive-submission/preferred-package-version operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'http://localhost:7575/v2/interactive-submission/preferred-package-version' \ + --header 'Authorization: Bearer $TOKEN' +``` + + + + + + +```json 200 response +{ + "packagePreference": { + "packageReference": {}, + "synchronizerId": "string" + } +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/get-v2package-vetting.mdx b/docs-main/reference/json-api-reference/get-v2package-vetting.mdx new file mode 100644 index 000000000..313f2ff46 --- /dev/null +++ b/docs-main/reference/json-api-reference/get-v2package-vetting.mdx @@ -0,0 +1,343 @@ +--- +title: "Lists which participant node vetted what packages on which synchronizer" +api: "GET http://localhost:7575/v2/package-vetting" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Lists which participant node vetted what packages on which synchronizer

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Lists which participant node vetted what packages on which synchronizer. This endpoint (GET /package-vetting) is deprecated and will be removed in a future release. Please use POST /package-vetting/list instead. + +## Protocol Details + + +
+ +
+
Operation ID
+
getV2Package-vetting
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `PackageMetadataFilter`. + + +Filter the VettedPackages by package metadata. A PackageMetadataFilter without package_ids and without package_name_prefixes matches any vetted package. Non-empty fields specify candidate values of which at least one must match. If both fields are set, then a candidate is returned if it matches one of the fields. + + + + + +OpenAPI type: `TopologyStateFilter`. + + +Filter the vetted packages by the participant and synchronizer that they are hosted on. Empty fields are ignored, such that a ``TopologyStateFilter`` without participant_ids and without synchronizer_ids matches a vetted package hosted on any participant and synchronizer. Non-empty fields specify candidate values of which at least one must match. If both fields are set then at least one candidate value must match from each field. + + + + + + +Pagination token to determine the specific page to fetch. Using the token guarantees that ``VettedPackages`` on a subsequent page are all greater (``VettedPackages`` are sorted by synchronizer ID then participant ID) than the last ``VettedPackages`` on a previous page. The server does not store intermediate results between calls chained by a series of page tokens. As a consequence, if new vetted packages are being added and a page is requested twice using the same token, more packages can be returned on the second call. Leave unspecified (i.e. as empty string) to fetch the first page. Optional + + + + + +OpenAPI type: `integer (int32)`. + + +Maximum number of ``VettedPackages`` results to return in a single page. If the page_size is unspecified (i.e. left as 0), the server will decide the number of results to be returned. If the page_size exceeds the maximum supported by the server, an error will be returned. To obtain the server's maximum consult the PackageService descriptor available in the VersionService. Optional + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +All ``VettedPackages`` that contain at least one ``VettedPackage`` matching both a ``PackageMetadataFilter`` and a ``TopologyStateFilter``. Sorted by synchronizer_id then participant_id. Optional: can be empty + + + + + +Pagination token to retrieve the next page. Empty string if there are no further results. Optional + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The GET /v2/package-vetting operation changed in this snapshot.

+ +
+ +
+
+ Deprecated + 3.4 +
+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'http://localhost:7575/v2/package-vetting' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"packageMetadataFilter":{"packageIds":["string"],"packageNamePrefixes":["string"]},"topologyStateFilter":{"participantIds":["string"],"synchronizerIds":["string"]},"pageToken":"string","pageSize":0}' +``` + + + + + + +```json 200 response +{ + "vettedPackages": [ + {} + ], + "nextPageToken": "string" +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/get-v2packages.mdx b/docs-main/reference/json-api-reference/get-v2packages.mdx new file mode 100644 index 000000000..6e9e201c0 --- /dev/null +++ b/docs-main/reference/json-api-reference/get-v2packages.mdx @@ -0,0 +1,272 @@ +--- +title: "Returns the identifiers of all supported packages" +api: "GET http://localhost:7575/v2/packages" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Returns the identifiers of all supported packages

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Returns the identifiers of all supported packages. + +## Protocol Details + + +
+ +
+
Operation ID
+
getV2Packages
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The IDs of all Daml-LF packages supported by the server. Each element must be a valid PackageIdString (as described in ``value.proto``). Required: must be non-empty + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The GET /v2/packages operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'http://localhost:7575/v2/packages' \ + --header 'Authorization: Bearer $TOKEN' +``` + + + + + + +```json 200 response +{ + "packageIds": [ + "string" + ] +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/get-v2packages:package-id.mdx b/docs-main/reference/json-api-reference/get-v2packages:package-id.mdx new file mode 100644 index 000000000..97ffa9ce4 --- /dev/null +++ b/docs-main/reference/json-api-reference/get-v2packages:package-id.mdx @@ -0,0 +1,289 @@ +--- +title: "Returns the contents of a single package" +api: "GET http://localhost:7575/v2/packages/{package-id}" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Returns the contents of a single package

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Returns the contents of a single package. + +## Protocol Details + + +
+ +
+
Operation ID
+
getV2PackagesPackage-id
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Path parameters + + + + + + + + + +- + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/octet-stream + +
+ + + + + + + +- + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The GET /v2/packages/{package-id} operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'http://localhost:7575/v2/packages/{package-id}' \ + --header 'Authorization: Bearer $TOKEN' +``` + + + + + + +```json 200 response +"string" +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/get-v2packages:package-idstatus.mdx b/docs-main/reference/json-api-reference/get-v2packages:package-idstatus.mdx new file mode 100644 index 000000000..b2de72476 --- /dev/null +++ b/docs-main/reference/json-api-reference/get-v2packages:package-idstatus.mdx @@ -0,0 +1,291 @@ +--- +title: "Returns the status of a single package" +api: "GET http://localhost:7575/v2/packages/{package-id}/status" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Returns the status of a single package

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Returns the status of a single package. + +## Protocol Details + + +
+ +
+
Operation ID
+
getV2PackagesPackage-idStatus
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Path parameters + + + + + + + + + +- + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The status of the package. Required + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The GET /v2/packages/{package-id}/status operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'http://localhost:7575/v2/packages/{package-id}/status' \ + --header 'Authorization: Bearer $TOKEN' +``` + + + + + + +```json 200 response +{ + "packageStatus": "PACKAGE_STATUS_UNSPECIFIED" +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/get-v2parties.mdx b/docs-main/reference/json-api-reference/get-v2parties.mdx new file mode 100644 index 000000000..385363b70 --- /dev/null +++ b/docs-main/reference/json-api-reference/get-v2parties.mdx @@ -0,0 +1,323 @@ +--- +title: "List the parties known by the participant" +api: "GET http://localhost:7575/v2/parties" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

List the parties known by the participant

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +List the parties known by the participant. The list returned contains parties whose ledger access is facilitated by the participant and the ones maintained elsewhere. + +## Protocol Details + + +
+ +
+
Operation ID
+
getV2Parties
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Query parameters + + + + + + + + + +- + + + + + + +- + + + + + +OpenAPI type: `integer (int32)`. + + +maximum number of elements in a returned page + + + + + + +token - to continue results from a given page, leave empty to start from the beginning of the list, obtain token from the result of previous page + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The details of all Daml parties known by the participant. Required: must be non-empty + + + + + +Pagination token to retrieve the next page. Empty, if there are no further results. Optional + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The GET /v2/parties operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'http://localhost:7575/v2/parties' \ + --header 'Authorization: Bearer $TOKEN' +``` + + + + + + +```json 200 response +{ + "partyDetails": [ + {} + ], + "nextPageToken": "string" +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/get-v2parties:party.mdx b/docs-main/reference/json-api-reference/get-v2parties:party.mdx new file mode 100644 index 000000000..4deabb103 --- /dev/null +++ b/docs-main/reference/json-api-reference/get-v2parties:party.mdx @@ -0,0 +1,321 @@ +--- +title: "Get the party details of the given parties" +api: "GET http://localhost:7575/v2/parties/{party}" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Get the party details of the given parties

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Get the party details of the given parties. Only known parties will be returned in the list. + +## Protocol Details + + +
+ +
+
Operation ID
+
getV2PartiesParty
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Path parameters + + + + + + + + + +- + + + + + + + + + + +### Query parameters + + + + + + + + + +- + + + + + + +- + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The details of the requested Daml parties by the participant, if known. The party details may not be in the same order as requested. Required: must be non-empty + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The GET /v2/parties/{party} operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'http://localhost:7575/v2/parties/{party}' \ + --header 'Authorization: Bearer $TOKEN' +``` + + + + + + +```json 200 response +{ + "partyDetails": [ + {} + ] +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/get-v2partiesparticipant-id.mdx b/docs-main/reference/json-api-reference/get-v2partiesparticipant-id.mdx new file mode 100644 index 000000000..b964ae222 --- /dev/null +++ b/docs-main/reference/json-api-reference/get-v2partiesparticipant-id.mdx @@ -0,0 +1,270 @@ +--- +title: "Return the identifier of the participant" +api: "GET http://localhost:7575/v2/parties/participant-id" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Return the identifier of the participant

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Return the identifier of the participant. All horizontally scaled replicas should return the same id. daml-on-kv-ledger: returns an identifier supplied on command line at launch time canton: returns globally unique identifier of the participant + +## Protocol Details + + +
+ +
+
Operation ID
+
getV2PartiesParticipant-id
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +Identifier of the participant, which SHOULD be globally unique. Must be a valid LedgerString (as describe in ``value.proto``). Required + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The GET /v2/parties/participant-id operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'http://localhost:7575/v2/parties/participant-id' \ + --header 'Authorization: Bearer $TOKEN' +``` + + + + + + +```json 200 response +{ + "participantId": "string" +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/get-v2stateactive-contracts-page.mdx b/docs-main/reference/json-api-reference/get-v2stateactive-contracts-page.mdx new file mode 100644 index 000000000..d4e2ad235 --- /dev/null +++ b/docs-main/reference/json-api-reference/get-v2stateactive-contracts-page.mdx @@ -0,0 +1,338 @@ +--- +title: "Deprecated Use POST version of this endpoint" +api: "GET http://localhost:7575/v2/state/active-contracts-page" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Deprecated Use POST version of this endpoint

+ + + +
+ + OpenAPI + + Since 3.5 + +
+ + +
+ +Deprecated Use POST version of this endpoint + +## Protocol Details + + +
+ +
+
Operation ID
+
getV2StateActive-contracts-page
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `integer (int64)`. + + +The offset at which the snapshot of the active contracts will be computed. Must be no greater than the current ledger end offset. Must be greater than or equal to the last pruning offset. Optional, if defined, it must be a valid absolute offset (positive integer) or ledger begin offset (zero). If zero, the empty set will be returned. If not defined, the current ledger end will be used and it will be populated in the response. Optional + + + + + +OpenAPI type: `EventFormat`. + + +A format for events which defines both which events should be included and what data should be computed and included for them. Note that some of the filtering behavior depends on the `TransactionShape`, which is expected to be specified alongside usages of `EventFormat`. + + + + + +OpenAPI type: `integer (int32)`. + + +The result page will contain at most max_page_size entries of the respective active contract snapshot. The server might reject max_page_size breaching the server-specified limit. Optional, if not defined, the default will be determined by the server. Optional + + + + + + +To get the next page of the active contracts snapshot, the ``page_token`` should be set to the ``next_page_token`` of the last ``GetActiveContractsPageResponse``. The page token only works if subsequent requests: - are executed on the same participant, - use the same active_at_offset and event_format, - and the participant's store was not pruned to after the active_at_offset. If not specified, the first page of the active contracts snapshot will be returned. Optional: can be empty + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The collection of active contracts for this page response. Required: must be non-empty + + + + + +The active_at_offset which was specified in the request, or the calculated active_at_offset from the actual ledger end from at the evaluation of the request. Required + + + + + +If not present this is the last page. If present, this token must be used to get the next page. Optional: can be empty + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Deprecated + 3.5 +
+ +
+ +
+
+ Introduced + 3.5 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'http://localhost:7575/v2/state/active-contracts-page' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"activeAtOffset":0,"eventFormat":{"filtersByParty":{},"filtersForAnyParty":{},"verbose":false},"maxPageSize":0,"pageToken":"string"}' +``` + + + + + + +```json 200 response +{ + "activeContracts": [ + {} + ], + "activeAtOffset": 0, + "nextPageToken": "string" +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/get-v2stateconnected-synchronizers.mdx b/docs-main/reference/json-api-reference/get-v2stateconnected-synchronizers.mdx new file mode 100644 index 000000000..571ce6f1a --- /dev/null +++ b/docs-main/reference/json-api-reference/get-v2stateconnected-synchronizers.mdx @@ -0,0 +1,307 @@ +--- +title: "Get the list of connected synchronizers at the time of the query" +api: "GET http://localhost:7575/v2/state/connected-synchronizers" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Get the list of connected synchronizers at the time of the query

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Get the list of connected synchronizers at the time of the query. + +## Protocol Details + + +
+ +
+
Operation ID
+
getV2StateConnected-synchronizers
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Query parameters + + + + + + + + + +- + + + + + + +- + + + + + + +- + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +Optional: can be empty + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The GET /v2/state/connected-synchronizers operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'http://localhost:7575/v2/state/connected-synchronizers' \ + --header 'Authorization: Bearer $TOKEN' +``` + + + + + + +```json 200 response +{ + "connectedSynchronizers": [ + {} + ] +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/get-v2statelatest-pruned-offsets.mdx b/docs-main/reference/json-api-reference/get-v2statelatest-pruned-offsets.mdx new file mode 100644 index 000000000..176b7dea9 --- /dev/null +++ b/docs-main/reference/json-api-reference/get-v2statelatest-pruned-offsets.mdx @@ -0,0 +1,277 @@ +--- +title: "Get the latest successfully pruned ledger offsets" +api: "GET http://localhost:7575/v2/state/latest-pruned-offsets" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Get the latest successfully pruned ledger offsets

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Get the latest successfully pruned ledger offsets + +## Protocol Details + + +
+ +
+
Operation ID
+
getV2StateLatest-pruned-offsets
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +It will always be a non-negative integer. If positive, the absolute offset up to which the ledger has been pruned, disregarding the state of all divulged contracts pruning. If zero, the ledger has not been pruned yet. Optional + + + + + +It will always be a non-negative integer. If positive, the absolute offset up to which all divulged events have been pruned on the ledger. It can be at or before the ``participant_pruned_up_to_inclusive`` offset. For more details about all divulged events pruning, see ``PruneRequest.prune_all_divulged_contracts`` in ``participant_pruning_service.proto``. If zero, the divulged events have not been pruned yet. Optional + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The GET /v2/state/latest-pruned-offsets operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'http://localhost:7575/v2/state/latest-pruned-offsets' \ + --header 'Authorization: Bearer $TOKEN' +``` + + + + + + +```json 200 response +{ + "participantPrunedUpToInclusive": 0, + "allDivulgedContractsPrunedUpToInclusive": 0 +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/get-v2stateledger-end.mdx b/docs-main/reference/json-api-reference/get-v2stateledger-end.mdx new file mode 100644 index 000000000..ec4053602 --- /dev/null +++ b/docs-main/reference/json-api-reference/get-v2stateledger-end.mdx @@ -0,0 +1,270 @@ +--- +title: "Get the current ledger end" +api: "GET http://localhost:7575/v2/state/ledger-end" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Get the current ledger end

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Get the current ledger end. Subscriptions started with the returned offset will serve events after this RPC was called. + +## Protocol Details + + +
+ +
+
Operation ID
+
getV2StateLedger-end
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +It will always be a non-negative integer. If zero, the participant view of the ledger is empty. If positive, the absolute offset of the ledger as viewed by the participant. Optional + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The GET /v2/state/ledger-end operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'http://localhost:7575/v2/state/ledger-end' \ + --header 'Authorization: Bearer $TOKEN' +``` + + + + + + +```json 200 response +{ + "offset": 0 +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/get-v2updatestransaction-tree-by-id:update-id.mdx b/docs-main/reference/json-api-reference/get-v2updatestransaction-tree-by-id:update-id.mdx new file mode 100644 index 000000000..890057d9f --- /dev/null +++ b/docs-main/reference/json-api-reference/get-v2updatestransaction-tree-by-id:update-id.mdx @@ -0,0 +1,340 @@ +--- +title: "Get transaction tree by id" +api: "GET http://localhost:7575/v2/updates/transaction-tree-by-id/{update-id}" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Get transaction tree by id

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + + Remove as of 3.5.0 + +
+ + +
+ +Get transaction tree by id. Provided for backwards compatibility, it will be removed in the Canton version 3.5.0, use v2/updates/update-by-id instead. + +## Protocol Details + + +
+ +
+
Operation ID
+
getV2UpdatesTransaction-tree-by-idUpdate-id
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Path parameters + + + + + + + + + +- + + + + + + + + + + +### Query parameters + + + + + + + + + +- + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +Provided for backwards compatibility, it will be removed in the Canton version 3.5.0. Complete view of an on-ledger transaction. + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Remove as of + 3.5.0 +
+ +
+ +
+
+ Changed + 3.5 +
+ +

The GET /v2/updates/transaction-tree-by-id/{update-id} operation changed in this snapshot.

+ +
+ +
+
+ Deprecated + 3.4 +
+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'http://localhost:7575/v2/updates/transaction-tree-by-id/{update-id}' \ + --header 'Authorization: Bearer $TOKEN' +``` + + + + + + +```json 200 response +{ + "transaction": { + "updateId": "string", + "commandId": "string", + "workflowId": "string", + "effectiveAt": "string", + "offset": 0, + "eventsById": {}, + "synchronizerId": "string", + "traceContext": {}, + "recordTime": "string" + } +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/get-v2updatestransaction-tree-by-offset:offset.mdx b/docs-main/reference/json-api-reference/get-v2updatestransaction-tree-by-offset:offset.mdx new file mode 100644 index 000000000..85eb4be31 --- /dev/null +++ b/docs-main/reference/json-api-reference/get-v2updatestransaction-tree-by-offset:offset.mdx @@ -0,0 +1,342 @@ +--- +title: "Get transaction tree by offset" +api: "GET http://localhost:7575/v2/updates/transaction-tree-by-offset/{offset}" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Get transaction tree by offset

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + + Remove as of 3.5.0 + +
+ + +
+ +Get transaction tree by offset. Provided for backwards compatibility, it will be removed in the Canton version 3.5.0, use v2/updates/update-by-offset instead. + +## Protocol Details + + +
+ +
+
Operation ID
+
getV2UpdatesTransaction-tree-by-offsetOffset
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Path parameters + + + + + + + + +OpenAPI type: `integer (int64)`. + + +- + + + + + + + + + + +### Query parameters + + + + + + + + + +- + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +Provided for backwards compatibility, it will be removed in the Canton version 3.5.0. Complete view of an on-ledger transaction. + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Remove as of + 3.5.0 +
+ +
+ +
+
+ Changed + 3.5 +
+ +

The GET /v2/updates/transaction-tree-by-offset/{offset} operation changed in this snapshot.

+ +
+ +
+
+ Deprecated + 3.4 +
+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'http://localhost:7575/v2/updates/transaction-tree-by-offset/{offset}' \ + --header 'Authorization: Bearer $TOKEN' +``` + + + + + + +```json 200 response +{ + "transaction": { + "updateId": "string", + "commandId": "string", + "workflowId": "string", + "effectiveAt": "string", + "offset": 0, + "eventsById": {}, + "synchronizerId": "string", + "traceContext": {}, + "recordTime": "string" + } +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/get-v2users.mdx b/docs-main/reference/json-api-reference/get-v2users.mdx new file mode 100644 index 000000000..2d82c1735 --- /dev/null +++ b/docs-main/reference/json-api-reference/get-v2users.mdx @@ -0,0 +1,309 @@ +--- +title: "List all existing users" +api: "GET http://localhost:7575/v2/users" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

List all existing users

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +List all existing users. + +## Protocol Details + + +
+ +
+
Operation ID
+
getV2Users
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Query parameters + + + + + + + + +OpenAPI type: `integer (int32)`. + + +maximum number of elements in a returned page + + + + + + +token - to continue results from a given page, leave empty to start from the beginning of the list, obtain token from the result of previous page + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +A subset of users of the participant node that fit into this page. Can be empty if no more users Optional: can be empty + + + + + +Pagination token to retrieve the next page. Empty, if there are no further results. Optional + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The GET /v2/users operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'http://localhost:7575/v2/users' \ + --header 'Authorization: Bearer $TOKEN' +``` + + + + + + +```json 200 response +{ + "users": [ + {} + ], + "nextPageToken": "string" +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/get-v2users:user-id.mdx b/docs-main/reference/json-api-reference/get-v2users:user-id.mdx new file mode 100644 index 000000000..1895bafdc --- /dev/null +++ b/docs-main/reference/json-api-reference/get-v2users:user-id.mdx @@ -0,0 +1,319 @@ +--- +title: "Get the user data of a specific user or the authenticated user" +api: "GET http://localhost:7575/v2/users/{user-id}" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Get the user data of a specific user or the authenticated user

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Get the user data of a specific user or the authenticated user. + +## Protocol Details + + +
+ +
+
Operation ID
+
getV2UsersUser-id
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Path parameters + + + + + + + + + +- + + + + + + + + + + +### Query parameters + + + + + + + + + +- + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +Users and rights ///////////////// Users are used to dynamically manage the rights given to Daml applications. They are stored and managed per participant node. + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The GET /v2/users/{user-id} operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'http://localhost:7575/v2/users/{user-id}' \ + --header 'Authorization: Bearer $TOKEN' +``` + + + + + + +```json 200 response +{ + "user": { + "id": "string", + "primaryParty": "string", + "isDeactivated": false, + "metadata": {}, + "identityProviderId": "string", + "primaryPartyAuthentication": false + } +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/get-v2users:user-idrights.mdx b/docs-main/reference/json-api-reference/get-v2users:user-idrights.mdx new file mode 100644 index 000000000..81ed9ec9e --- /dev/null +++ b/docs-main/reference/json-api-reference/get-v2users:user-idrights.mdx @@ -0,0 +1,293 @@ +--- +title: "List the set of all rights granted to a user" +api: "GET http://localhost:7575/v2/users/{user-id}/rights" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

List the set of all rights granted to a user

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +List the set of all rights granted to a user. + +## Protocol Details + + +
+ +
+
Operation ID
+
getV2UsersUser-idRights
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Path parameters + + + + + + + + + +- + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +All rights of the user. Optional: can be empty + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The GET /v2/users/{user-id}/rights operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'http://localhost:7575/v2/users/{user-id}/rights' \ + --header 'Authorization: Bearer $TOKEN' +``` + + + + + + +```json 200 response +{ + "rights": [ + {} + ] +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/get-v2version.mdx b/docs-main/reference/json-api-reference/get-v2version.mdx new file mode 100644 index 000000000..9a117e9ad --- /dev/null +++ b/docs-main/reference/json-api-reference/get-v2version.mdx @@ -0,0 +1,283 @@ +--- +title: "Read the Ledger API version" +api: "GET http://localhost:7575/v2/version" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Read the Ledger API version

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Read the Ledger API version + +## Protocol Details + + +
+ +
+
Operation ID
+
getV2Version
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The version of the ledger API. Required + + + + + +- + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The GET /v2/version operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'http://localhost:7575/v2/version' \ + --header 'Authorization: Bearer $TOKEN' +``` + + + + + + +```json 200 response +{ + "version": "string", + "features": { + "experimental": {}, + "userManagement": {}, + "partyManagement": {}, + "offsetCheckpoint": {}, + "packageFeature": {} + } +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/overview.mdx b/docs-main/reference/json-api-reference/overview.mdx new file mode 100644 index 000000000..14784124b --- /dev/null +++ b/docs-main/reference/json-api-reference/overview.mdx @@ -0,0 +1,46 @@ +--- +title: "JSON Ledger API OpenAPI" +description: "JSON Ledger API OpenAPI reference overview and raw specification download." +--- + +
+ +

Ledger API

+ + +

JSON Ledger API OpenAPI

+ + +

Generated operation reference for the JSON Ledger API, with lifecycle history embedded on each operation page.

+ + +
+ + OpenAPI + + 3.5 + +
+ + +
+ +
+
Operations
+
67
+
+ +
+
Source
+
Canton release bundle JSON Ledger API specifications
+
+ +
+ +
+ + +## Specification + + +[Download the published OpenAPI specification](/openapi/json-ledger-api/openapi.yaml). diff --git a/docs-main/reference/json-api-reference/patch-v2idps:idp-id.mdx b/docs-main/reference/json-api-reference/patch-v2idps:idp-id.mdx new file mode 100644 index 000000000..3aa82be5e --- /dev/null +++ b/docs-main/reference/json-api-reference/patch-v2idps:idp-id.mdx @@ -0,0 +1,337 @@ +--- +title: "Idps idp id" +api: "PATCH http://localhost:7575/v2/idps/{idp-id}" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Idps idp id

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Update selected modifiable attribute of an identity provider config resource described by the ``IdentityProviderConfig`` message. + +## Protocol Details + + +
+ +
+
Operation ID
+
patchV2IdpsIdp-id
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Path parameters + + + + + + + + + +- + + + + + + + + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `IdentityProviderConfig`. + + +- + + + + + +OpenAPI type: `FieldMask`. + + +- + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +- + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The PATCH /v2/idps/{idp-id} operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request PATCH \ + --url 'http://localhost:7575/v2/idps/{idp-id}' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"identityProviderConfig":{"identityProviderId":"string","isDeactivated":false,"issuer":"string","jwksUrl":"string","audience":"string"},"updateMask":{"paths":["string"],"unknownFields":{}}}' +``` + + + + + + +```json 200 response +{ + "identityProviderConfig": { + "identityProviderId": "string", + "isDeactivated": false, + "issuer": "string", + "jwksUrl": "string", + "audience": "string" + } +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/patch-v2parties:party.mdx b/docs-main/reference/json-api-reference/patch-v2parties:party.mdx new file mode 100644 index 000000000..0c37ced1a --- /dev/null +++ b/docs-main/reference/json-api-reference/patch-v2parties:party.mdx @@ -0,0 +1,336 @@ +--- +title: "Update selected modifiable participant-local attributes of a party details resource" +api: "PATCH http://localhost:7575/v2/parties/{party}" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Update selected modifiable participant-local attributes of a party details resource

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Update selected modifiable participant-local attributes of a party details resource. Can update the participant's local information for local parties. + +## Protocol Details + + +
+ +
+
Operation ID
+
patchV2PartiesParty
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Path parameters + + + + + + + + + +- + + + + + + + + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `PartyDetails`. + + +- + + + + + +OpenAPI type: `FieldMask`. + + +- + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +- + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The PATCH /v2/parties/{party} operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request PATCH \ + --url 'http://localhost:7575/v2/parties/{party}' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"partyDetails":{"party":"string","isLocal":false,"localMetadata":{},"identityProviderId":"string"},"updateMask":{"paths":["string"],"unknownFields":{}}}' +``` + + + + + + +```json 200 response +{ + "partyDetails": { + "party": "string", + "isLocal": false, + "localMetadata": {}, + "identityProviderId": "string" + } +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/patch-v2users:user-id.mdx b/docs-main/reference/json-api-reference/patch-v2users:user-id.mdx new file mode 100644 index 000000000..b27e80a96 --- /dev/null +++ b/docs-main/reference/json-api-reference/patch-v2users:user-id.mdx @@ -0,0 +1,338 @@ +--- +title: "Update selected modifiable attribute of a user resource described by the ``User`` message" +api: "PATCH http://localhost:7575/v2/users/{user-id}" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Update selected modifiable attribute of a user resource described by the ``User`` message

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Update selected modifiable attribute of a user resource described by the ``User`` message. + +## Protocol Details + + +
+ +
+
Operation ID
+
patchV2UsersUser-id
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Path parameters + + + + + + + + + +- + + + + + + + + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `User`. + + +Users and rights ///////////////// Users are used to dynamically manage the rights given to Daml applications. They are stored and managed per participant node. + + + + + +OpenAPI type: `FieldMask`. + + +- + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +Users and rights ///////////////// Users are used to dynamically manage the rights given to Daml applications. They are stored and managed per participant node. + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The PATCH /v2/users/{user-id} operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request PATCH \ + --url 'http://localhost:7575/v2/users/{user-id}' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"user":{"id":"string","primaryParty":"string","isDeactivated":false,"metadata":{},"identityProviderId":"string","primaryPartyAuthentication":false},"updateMask":{"paths":["string"],"unknownFields":{}}}' +``` + + + + + + +```json 200 response +{ + "user": { + "id": "string", + "primaryParty": "string", + "isDeactivated": false, + "metadata": {}, + "identityProviderId": "string", + "primaryPartyAuthentication": false + } +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/patch-v2users:user-ididentity-provider-id.mdx b/docs-main/reference/json-api-reference/patch-v2users:user-ididentity-provider-id.mdx new file mode 100644 index 000000000..223919000 --- /dev/null +++ b/docs-main/reference/json-api-reference/patch-v2users:user-ididentity-provider-id.mdx @@ -0,0 +1,332 @@ +--- +title: "Update the assignment of a user from one IDP to another" +api: "PATCH http://localhost:7575/v2/users/{user-id}/identity-provider-id" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Update the assignment of a user from one IDP to another

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Update the assignment of a user from one IDP to another. + +## Protocol Details + + +
+ +
+
Operation ID
+
patchV2UsersUser-idIdentity-provider-id
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Path parameters + + + + + + + + + +- + + + + + + + + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + +User to update Required + + + + + + +Current identity provider ID of the user If omitted, the default IDP is assumed Optional + + + + + + +Target identity provider ID of the user If omitted, the default IDP is assumed Optional + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +- + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The PATCH /v2/users/{user-id}/identity-provider-id operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request PATCH \ + --url 'http://localhost:7575/v2/users/{user-id}/identity-provider-id' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"userId":"string","sourceIdentityProviderId":"string","targetIdentityProviderId":"string"}' +``` + + + + + + +```json 200 response +{} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/patch-v2users:user-idrights.mdx b/docs-main/reference/json-api-reference/patch-v2users:user-idrights.mdx new file mode 100644 index 000000000..72e964e4e --- /dev/null +++ b/docs-main/reference/json-api-reference/patch-v2users:user-idrights.mdx @@ -0,0 +1,338 @@ +--- +title: "Revoke rights from a user" +api: "PATCH http://localhost:7575/v2/users/{user-id}/rights" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Revoke rights from a user

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Revoke rights from a user. Revoking rights does not affect the resource version of the corresponding user. + +## Protocol Details + + +
+ +
+
Operation ID
+
patchV2UsersUser-idRights
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Path parameters + + + + + + + + + +- + + + + + + + + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + +The user from whom to revoke rights. Required + + + + + +OpenAPI type: `Right[]`. + + +The rights to revoke. Optional: can be empty + + + + + + +The id of the ``Identity Provider`` If not set, assume the user is managed by the default identity provider. Optional + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The rights that were actually revoked by the request. Optional: can be empty + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The PATCH /v2/users/{user-id}/rights operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request PATCH \ + --url 'http://localhost:7575/v2/users/{user-id}/rights' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"userId":"string","rights":[{}],"identityProviderId":"string"}' +``` + + + + + + +```json 200 response +{ + "newlyRevokedRights": [ + {} + ] +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/post-v2commandsasyncsubmit-reassignment.mdx b/docs-main/reference/json-api-reference/post-v2commandsasyncsubmit-reassignment.mdx new file mode 100644 index 000000000..fcb958e55 --- /dev/null +++ b/docs-main/reference/json-api-reference/post-v2commandsasyncsubmit-reassignment.mdx @@ -0,0 +1,299 @@ +--- +title: "Submit a single reassignment" +api: "POST http://localhost:7575/v2/commands/async/submit-reassignment" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Submit a single reassignment

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Submit a single reassignment. + +## Protocol Details + + +
+ +
+
Operation ID
+
postV2CommandsAsyncSubmit-reassignment
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `ReassignmentCommands`. + + +- + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +- + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The POST /v2/commands/async/submit-reassignment operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'http://localhost:7575/v2/commands/async/submit-reassignment' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"reassignmentCommands":{"workflowId":"string","userId":"string","commandId":"string","submitter":"string","submissionId":"string","commands":[{}]}}' +``` + + + + + + +```json 200 response +{} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/post-v2commandsasyncsubmit.mdx b/docs-main/reference/json-api-reference/post-v2commandsasyncsubmit.mdx new file mode 100644 index 000000000..0890336c6 --- /dev/null +++ b/docs-main/reference/json-api-reference/post-v2commandsasyncsubmit.mdx @@ -0,0 +1,407 @@ +--- +title: "Submit a single composite command" +api: "POST http://localhost:7575/v2/commands/async/submit" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Submit a single composite command

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Submit a single composite command. + +## Protocol Details + + +
+ +
+
Operation ID
+
postV2CommandsAsyncSubmit
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `Command[]`. + + +Individual elements of this atomic command. Must be non-empty. Required: must be non-empty + + + + + + +Uniquely identifies the command. The triple (user_id, act_as, command_id) constitutes the change ID for the intended ledger change, where act_as is interpreted as a set of party names. The change ID can be used for matching the intended ledger changes with all their completions. Must be a valid LedgerString (as described in ``value.proto``). Required + + + + + + +Set of parties on whose behalf the command should be executed. If ledger API authorization is enabled, then the authorization metadata must authorize the sender of the request to act on behalf of each of the given parties. Each element must be a valid PartyIdString (as described in ``value.proto``). Required: must be non-empty + + + + + + +Uniquely identifies the participant user that issued the command. Must be a valid UserIdString (as described in ``value.proto``). Required unless authentication is used with a user token. In that case, the token's user-id will be used for the request's user_id. Optional + + + + + + +Set of parties on whose behalf (in addition to all parties listed in ``act_as``) contracts can be retrieved. This affects Daml operations such as ``fetch``, ``fetchByKey``, ``lookupByKey``, ``exercise``, and ``exerciseByKey``. Note: A participant node of a Daml network can host multiple parties. Each contract present on the participant node is only visible to a subset of these parties. A command can only use contracts that are visible to at least one of the parties in ``act_as`` or ``read_as``. This visibility check is independent from the Daml authorization rules for fetch operations. If ledger API authorization is enabled, then the authorization metadata must authorize the sender of the request to read contract data on behalf of each of the given parties. Optional: can be empty + + + + + + +Identifier of the on-ledger workflow that this command is a part of. Must be a valid LedgerString (as described in ``value.proto``). Optional + + + + + +OpenAPI type: `DeduplicationPeriod`. + + +Specifies the deduplication period for the change ID. If omitted, the participant will assume the configured maximum deduplication time. Optional + + + + + + +Lower bound for the ledger time assigned to the resulting transaction. Note: The ledger time of a transaction is assigned as part of command interpretation. Use this property if you expect that command interpretation will take a considerate amount of time, such that by the time the resulting transaction is sequenced, its assigned ledger time is not valid anymore. Must not be set at the same time as min_ledger_time_rel. Optional + + + + + +OpenAPI type: `Duration`. + + +- + + + + + + +A unique identifier to distinguish completions for different submissions with the same change ID. Typically a random UUID. Applications are expected to use a different UUID for each retry of a submission with the same change ID. Must be a valid LedgerString (as described in ``value.proto``). If omitted, the participant or the committer may set a value of their choice. Optional + + + + + +OpenAPI type: `DisclosedContract[]`. + + +Additional contracts used to resolve contract & contract key lookups. Optional: can be empty + + + + + + +Must be a valid synchronizer id Optional + + + + + + +The package-id selection preference of the client for resolving package names and interface instances in command submission and interpretation Optional: can be empty + + + + + +OpenAPI type: `PrefetchContractKey[]`. + + +Fetches the contract keys into the caches to speed up the command processing. Each entry specifies a key and a limit on how many contracts to prefetch for that key. The limit does not count disclosed contracts, and should reflect the number of additional contracts expected to be resolved during interpretation of the commands. If a key appears multiple times, the last entry's limit wins. Optional: can be empty + + + + + +OpenAPI type: `integer (int32)`. + + +The maximum number of passes for the Topology-Aware Package Selection (TAPS). Higher values can increase the chance of successful package selection for routing of interpreted transactions. If unset, this defaults to the value defined in the participant configuration. The provided value must not exceed the limit specified in the participant configuration. Optional + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +- + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The POST /v2/commands/async/submit operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'http://localhost:7575/v2/commands/async/submit' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"commands":[{}],"commandId":"string","actAs":["string"],"userId":"string","readAs":["string"],"workflowId":"string","deduplicationPeriod":{},"minLedgerTimeAbs":"string","minLedgerTimeRel":{"seconds":0,"nanos":0,"unknownFields":{}},"submissionId":"string","disclosedContracts":[{}],"synchronizerId":"string","packageIdSelectionPreference":["string"],"prefetchContractKeys":[{}],"tapsMaxPasses":0}' +``` + + + + + + +```json 200 response +{} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/post-v2commandscommand-completions.mdx b/docs-main/reference/json-api-reference/post-v2commandscommand-completions.mdx new file mode 100644 index 000000000..de8ddd444 --- /dev/null +++ b/docs-main/reference/json-api-reference/post-v2commandscommand-completions.mdx @@ -0,0 +1,330 @@ +--- +title: "Query completions list (blocking call) Subscribe to command completion events" +api: "POST http://localhost:7575/v2/commands/command-completions" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Query completions list (blocking call) Subscribe to command completion events

+ + + +
+ + OpenAPI + + Since 3.5 + +
+ + +
+ +Query completions list (blocking call) Subscribe to command completion events. This streaming endpoint provides more flexibility in filtering than the predecessor ``CompletionStream``. Notice: This endpoint should be used for small results set. When number of results exceeded node configuration limit (`http-list-max-elements-limit`) there will be an error (`413 Content Too Large`) returned. Increasing this limit may lead to performance issues and high m... + +## Protocol Details + + +
+ +
+
Operation ID
+
postV2CommandsCommand-completions
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Query parameters + + + + + + + + +OpenAPI type: `integer (int64)`. + + +maximum number of elements to return, this param is ignored if is bigger than server setting + + + + + +OpenAPI type: `integer (int64)`. + + +timeout to complete and send result if no new elements are received (for open ended streams) + + + + + + + + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + +If specified, only completions of commands are included, which have at least one of the ``act_as`` parties in the given set of parties. Only Ledger API users with CanReadAsAnyParty permission allowed to provide no ``parties``. Must be a valid PartyIdString (as described in ``value.proto``). Optional: can be empty + + + + + +OpenAPI type: `integer (int64)`. + + +This optional field indicates the minimum offset for completions. This can be used to resume an earlier completion stream. If not set the ledger uses the ledger begin offset instead. If specified, it must be a valid absolute offset (positive integer) or zero (ledger begin offset). If the ledger has been pruned, this parameter must be specified and greater than the pruning offset. (the pruning offset is accessible on the StateService.GetLatestPrunedOffsets endpoint) Optional + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +- + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 3.5 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'http://localhost:7575/v2/commands/command-completions' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"parties":["string"],"beginExclusive":0}' +``` + + + + + + +```json 200 response +[ + { + "completionResponse": {} + } +] +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/post-v2commandscompletions.mdx b/docs-main/reference/json-api-reference/post-v2commandscompletions.mdx new file mode 100644 index 000000000..1dcf1686a --- /dev/null +++ b/docs-main/reference/json-api-reference/post-v2commandscompletions.mdx @@ -0,0 +1,349 @@ +--- +title: "Query completions list (blocking call) Deprecated: please use ``GetCompletions`` instead" +api: "POST http://localhost:7575/v2/commands/completions" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Query completions list (blocking call) Deprecated: please use ``GetCompletions`` instead

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Query completions list (blocking call) Deprecated: please use ``GetCompletions`` instead. Subscribe to command completion events. Notice: This endpoint should be used for small results set. When number of results exceeded node configuration limit (`http-list-max-elements-limit`) there will be an error (`413 Content Too Large`) returned. Increasing this limit may lead to performance issues and high memory consumption. Consider using websockets (asyncapi)... + +## Protocol Details + + +
+ +
+
Operation ID
+
postV2CommandsCompletions
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Query parameters + + + + + + + + +OpenAPI type: `integer (int64)`. + + +maximum number of elements to return, this param is ignored if is bigger than server setting + + + + + +OpenAPI type: `integer (int64)`. + + +timeout to complete and send result if no new elements are received (for open ended streams) + + + + + + + + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + +Only completions of commands submitted with the same user_id will be visible in the stream. Must be a valid UserIdString (as described in ``value.proto``). Required unless authentication is used with a user token. In that case, the token's user-id will be used for the request's user_id. Optional + + + + + + +Non-empty list of parties whose data should be included. The stream shows only completions of commands for which at least one of the ``act_as`` parties is in the given set of parties. Must be a valid PartyIdString (as described in ``value.proto``). Required: must be non-empty + + + + + +OpenAPI type: `integer (int64)`. + + +This optional field indicates the minimum offset for completions. This can be used to resume an earlier completion stream. If not set the ledger uses the ledger begin offset instead. If specified, it must be a valid absolute offset (positive integer) or zero (ledger begin offset). If the ledger has been pruned, this parameter must be specified and greater than the pruning offset. Optional + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +- + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The POST /v2/commands/completions operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'http://localhost:7575/v2/commands/completions' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"userId":"string","parties":["string"],"beginExclusive":0}' +``` + + + + + + +```json 200 response +[ + { + "completionResponse": {} + } +] +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait-for-reassignment.mdx b/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait-for-reassignment.mdx new file mode 100644 index 000000000..1539bc500 --- /dev/null +++ b/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait-for-reassignment.mdx @@ -0,0 +1,322 @@ +--- +title: "Commands submit and wait for reassignment" +api: "POST http://localhost:7575/v2/commands/submit-and-wait-for-reassignment" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Commands submit and wait for reassignment

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Submits a single composite reassignment command, waits for its result, and returns the reassignment. Propagates the gRPC error of failed submission. + +## Protocol Details + + +
+ +
+
Operation ID
+
postV2CommandsSubmit-and-wait-for-reassignment
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `ReassignmentCommands`. + + +- + + + + + +OpenAPI type: `EventFormat`. + + +A format for events which defines both which events should be included and what data should be computed and included for them. Note that some of the filtering behavior depends on the `TransactionShape`, which is expected to be specified alongside usages of `EventFormat`. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +Complete view of an on-ledger reassignment. + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The POST /v2/commands/submit-and-wait-for-reassignment operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'http://localhost:7575/v2/commands/submit-and-wait-for-reassignment' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"reassignmentCommands":{"workflowId":"string","userId":"string","commandId":"string","submitter":"string","submissionId":"string","commands":[{}]},"eventFormat":{"filtersByParty":{},"filtersForAnyParty":{},"verbose":false}}' +``` + + + + + + +```json 200 response +{ + "reassignment": { + "updateId": "string", + "commandId": "string", + "workflowId": "string", + "offset": 0, + "events": [ + {} + ], + "traceContext": {}, + "recordTime": "string", + "synchronizerId": "string", + "paidTrafficCost": 0 + } +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait-for-transaction-tree.mdx b/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait-for-transaction-tree.mdx new file mode 100644 index 000000000..50c0eda3f --- /dev/null +++ b/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait-for-transaction-tree.mdx @@ -0,0 +1,437 @@ +--- +title: "Submit a batch of commands and wait for the transaction trees response" +api: "POST http://localhost:7575/v2/commands/submit-and-wait-for-transaction-tree" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Submit a batch of commands and wait for the transaction trees response

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + + Remove as of 3.5.0 + +
+ + +
+ +Submit a batch of commands and wait for the transaction trees response. Provided for backwards compatibility, it will be removed in the Canton version 3.5.0, use submit-and-wait-for-transaction instead. + +## Protocol Details + + +
+ +
+
Operation ID
+
postV2CommandsSubmit-and-wait-for-transaction-tree
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `Command[]`. + + +Individual elements of this atomic command. Must be non-empty. Required: must be non-empty + + + + + + +Uniquely identifies the command. The triple (user_id, act_as, command_id) constitutes the change ID for the intended ledger change, where act_as is interpreted as a set of party names. The change ID can be used for matching the intended ledger changes with all their completions. Must be a valid LedgerString (as described in ``value.proto``). Required + + + + + + +Set of parties on whose behalf the command should be executed. If ledger API authorization is enabled, then the authorization metadata must authorize the sender of the request to act on behalf of each of the given parties. Each element must be a valid PartyIdString (as described in ``value.proto``). Required: must be non-empty + + + + + + +Uniquely identifies the participant user that issued the command. Must be a valid UserIdString (as described in ``value.proto``). Required unless authentication is used with a user token. In that case, the token's user-id will be used for the request's user_id. Optional + + + + + + +Set of parties on whose behalf (in addition to all parties listed in ``act_as``) contracts can be retrieved. This affects Daml operations such as ``fetch``, ``fetchByKey``, ``lookupByKey``, ``exercise``, and ``exerciseByKey``. Note: A participant node of a Daml network can host multiple parties. Each contract present on the participant node is only visible to a subset of these parties. A command can only use contracts that are visible to at least one of the parties in ``act_as`` or ``read_as``. This visibility check is independent from the Daml authorization rules for fetch operations. If ledger API authorization is enabled, then the authorization metadata must authorize the sender of the request to read contract data on behalf of each of the given parties. Optional: can be empty + + + + + + +Identifier of the on-ledger workflow that this command is a part of. Must be a valid LedgerString (as described in ``value.proto``). Optional + + + + + +OpenAPI type: `DeduplicationPeriod`. + + +Specifies the deduplication period for the change ID. If omitted, the participant will assume the configured maximum deduplication time. Optional + + + + + + +Lower bound for the ledger time assigned to the resulting transaction. Note: The ledger time of a transaction is assigned as part of command interpretation. Use this property if you expect that command interpretation will take a considerate amount of time, such that by the time the resulting transaction is sequenced, its assigned ledger time is not valid anymore. Must not be set at the same time as min_ledger_time_rel. Optional + + + + + +OpenAPI type: `Duration`. + + +- + + + + + + +A unique identifier to distinguish completions for different submissions with the same change ID. Typically a random UUID. Applications are expected to use a different UUID for each retry of a submission with the same change ID. Must be a valid LedgerString (as described in ``value.proto``). If omitted, the participant or the committer may set a value of their choice. Optional + + + + + +OpenAPI type: `DisclosedContract[]`. + + +Additional contracts used to resolve contract & contract key lookups. Optional: can be empty + + + + + + +Must be a valid synchronizer id Optional + + + + + + +The package-id selection preference of the client for resolving package names and interface instances in command submission and interpretation Optional: can be empty + + + + + +OpenAPI type: `PrefetchContractKey[]`. + + +Fetches the contract keys into the caches to speed up the command processing. Each entry specifies a key and a limit on how many contracts to prefetch for that key. The limit does not count disclosed contracts, and should reflect the number of additional contracts expected to be resolved during interpretation of the commands. If a key appears multiple times, the last entry's limit wins. Optional: can be empty + + + + + +OpenAPI type: `integer (int32)`. + + +The maximum number of passes for the Topology-Aware Package Selection (TAPS). Higher values can increase the chance of successful package selection for routing of interpreted transactions. If unset, this defaults to the value defined in the participant configuration. The provided value must not exceed the limit specified in the participant configuration. Optional + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +Provided for backwards compatibility, it will be removed in the Canton version 3.5.0. Complete view of an on-ledger transaction. + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Remove as of + 3.5.0 +
+ +
+ +
+
+ Changed + 3.5 +
+ +

The POST /v2/commands/submit-and-wait-for-transaction-tree operation changed in this snapshot.

+ +
+ +
+
+ Deprecated + 3.4 +
+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'http://localhost:7575/v2/commands/submit-and-wait-for-transaction-tree' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"commands":[{}],"commandId":"string","actAs":["string"],"userId":"string","readAs":["string"],"workflowId":"string","deduplicationPeriod":{},"minLedgerTimeAbs":"string","minLedgerTimeRel":{"seconds":0,"nanos":0,"unknownFields":{}},"submissionId":"string","disclosedContracts":[{}],"synchronizerId":"string","packageIdSelectionPreference":["string"],"prefetchContractKeys":[{}],"tapsMaxPasses":0}' +``` + + + + + + +```json 200 response +{ + "transactionTree": { + "updateId": "string", + "commandId": "string", + "workflowId": "string", + "effectiveAt": "string", + "offset": 0, + "eventsById": {}, + "synchronizerId": "string", + "traceContext": {}, + "recordTime": "string" + } +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait-for-transaction.mdx b/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait-for-transaction.mdx new file mode 100644 index 000000000..a9b89ebf4 --- /dev/null +++ b/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait-for-transaction.mdx @@ -0,0 +1,324 @@ +--- +title: "Submits a single composite command, waits for its result, and returns the transaction" +api: "POST http://localhost:7575/v2/commands/submit-and-wait-for-transaction" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Submits a single composite command, waits for its result, and returns the transaction

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Submits a single composite command, waits for its result, and returns the transaction. Propagates the gRPC error of failed submissions including Daml interpretation errors. + +## Protocol Details + + +
+ +
+
Operation ID
+
postV2CommandsSubmit-and-wait-for-transaction
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `JsCommands`. + + +A composite command that groups multiple commands together. + + + + + +OpenAPI type: `TransactionFormat`. + + +A format that specifies what events to include in Daml transactions and what data to compute and include for them. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +Filtered view of an on-ledger transaction's create and archive events. + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The POST /v2/commands/submit-and-wait-for-transaction operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'http://localhost:7575/v2/commands/submit-and-wait-for-transaction' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"commands":{"commands":[{}],"commandId":"string","actAs":["string"],"userId":"string","readAs":["string"],"workflowId":"string","deduplicationPeriod":{},"minLedgerTimeAbs":"string","minLedgerTimeRel":{},"submissionId":"string","disclosedContracts":[{}],"synchronizerId":"string","packageIdSelectionPreference":["string"],"prefetchContractKeys":[{}],"tapsMaxPasses":0},"transactionFormat":{"eventFormat":{},"transactionShape":"TRANSACTION_SHAPE_UNSPECIFIED"}}' +``` + + + + + + +```json 200 response +{ + "transaction": { + "updateId": "string", + "commandId": "string", + "workflowId": "string", + "effectiveAt": "string", + "events": [ + {} + ], + "offset": 0, + "synchronizerId": "string", + "traceContext": {}, + "recordTime": "string", + "externalTransactionHash": "string", + "paidTrafficCost": 0 + } +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait.mdx b/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait.mdx new file mode 100644 index 000000000..9aed6b021 --- /dev/null +++ b/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait.mdx @@ -0,0 +1,416 @@ +--- +title: "Submits a single composite command and waits for its result" +api: "POST http://localhost:7575/v2/commands/submit-and-wait" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Submits a single composite command and waits for its result

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Submits a single composite command and waits for its result. Propagates the gRPC error of failed submissions including Daml interpretation errors. + +## Protocol Details + + +
+ +
+
Operation ID
+
postV2CommandsSubmit-and-wait
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `Command[]`. + + +Individual elements of this atomic command. Must be non-empty. Required: must be non-empty + + + + + + +Uniquely identifies the command. The triple (user_id, act_as, command_id) constitutes the change ID for the intended ledger change, where act_as is interpreted as a set of party names. The change ID can be used for matching the intended ledger changes with all their completions. Must be a valid LedgerString (as described in ``value.proto``). Required + + + + + + +Set of parties on whose behalf the command should be executed. If ledger API authorization is enabled, then the authorization metadata must authorize the sender of the request to act on behalf of each of the given parties. Each element must be a valid PartyIdString (as described in ``value.proto``). Required: must be non-empty + + + + + + +Uniquely identifies the participant user that issued the command. Must be a valid UserIdString (as described in ``value.proto``). Required unless authentication is used with a user token. In that case, the token's user-id will be used for the request's user_id. Optional + + + + + + +Set of parties on whose behalf (in addition to all parties listed in ``act_as``) contracts can be retrieved. This affects Daml operations such as ``fetch``, ``fetchByKey``, ``lookupByKey``, ``exercise``, and ``exerciseByKey``. Note: A participant node of a Daml network can host multiple parties. Each contract present on the participant node is only visible to a subset of these parties. A command can only use contracts that are visible to at least one of the parties in ``act_as`` or ``read_as``. This visibility check is independent from the Daml authorization rules for fetch operations. If ledger API authorization is enabled, then the authorization metadata must authorize the sender of the request to read contract data on behalf of each of the given parties. Optional: can be empty + + + + + + +Identifier of the on-ledger workflow that this command is a part of. Must be a valid LedgerString (as described in ``value.proto``). Optional + + + + + +OpenAPI type: `DeduplicationPeriod`. + + +Specifies the deduplication period for the change ID. If omitted, the participant will assume the configured maximum deduplication time. Optional + + + + + + +Lower bound for the ledger time assigned to the resulting transaction. Note: The ledger time of a transaction is assigned as part of command interpretation. Use this property if you expect that command interpretation will take a considerate amount of time, such that by the time the resulting transaction is sequenced, its assigned ledger time is not valid anymore. Must not be set at the same time as min_ledger_time_rel. Optional + + + + + +OpenAPI type: `Duration`. + + +- + + + + + + +A unique identifier to distinguish completions for different submissions with the same change ID. Typically a random UUID. Applications are expected to use a different UUID for each retry of a submission with the same change ID. Must be a valid LedgerString (as described in ``value.proto``). If omitted, the participant or the committer may set a value of their choice. Optional + + + + + +OpenAPI type: `DisclosedContract[]`. + + +Additional contracts used to resolve contract & contract key lookups. Optional: can be empty + + + + + + +Must be a valid synchronizer id Optional + + + + + + +The package-id selection preference of the client for resolving package names and interface instances in command submission and interpretation Optional: can be empty + + + + + +OpenAPI type: `PrefetchContractKey[]`. + + +Fetches the contract keys into the caches to speed up the command processing. Each entry specifies a key and a limit on how many contracts to prefetch for that key. The limit does not count disclosed contracts, and should reflect the number of additional contracts expected to be resolved during interpretation of the commands. If a key appears multiple times, the last entry's limit wins. Optional: can be empty + + + + + +OpenAPI type: `integer (int32)`. + + +The maximum number of passes for the Topology-Aware Package Selection (TAPS). Higher values can increase the chance of successful package selection for routing of interpreted transactions. If unset, this defaults to the value defined in the participant configuration. The provided value must not exceed the limit specified in the participant configuration. Optional + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The id of the transaction that resulted from the submitted command. Must be a valid LedgerString (as described in ``value.proto``). Required + + + + + +The details of the offset field are described in ``community/ledger-api/README.md``. Required + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The POST /v2/commands/submit-and-wait operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'http://localhost:7575/v2/commands/submit-and-wait' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"commands":[{}],"commandId":"string","actAs":["string"],"userId":"string","readAs":["string"],"workflowId":"string","deduplicationPeriod":{},"minLedgerTimeAbs":"string","minLedgerTimeRel":{"seconds":0,"nanos":0,"unknownFields":{}},"submissionId":"string","disclosedContracts":[{}],"synchronizerId":"string","packageIdSelectionPreference":["string"],"prefetchContractKeys":[{}],"tapsMaxPasses":0}' +``` + + + + + + +```json 200 response +{ + "updateId": "string", + "completionOffset": 0 +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/post-v2contractscontract-by-id.mdx b/docs-main/reference/json-api-reference/post-v2contractscontract-by-id.mdx new file mode 100644 index 000000000..b5aa22e8a --- /dev/null +++ b/docs-main/reference/json-api-reference/post-v2contractscontract-by-id.mdx @@ -0,0 +1,331 @@ +--- +title: "Looking up contract data by contract ID" +api: "POST http://localhost:7575/v2/contracts/contract-by-id" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Looking up contract data by contract ID

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Looking up contract data by contract ID. This endpoint is experimental / alpha, therefore no backwards compatibility is guaranteed. This endpoint must not be used to look up contracts which entered the participant via party replication or repair service. + +## Protocol Details + + +
+ +
+
Operation ID
+
postV2ContractsContract-by-id
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + +The ID of the contract. Must be a valid LedgerString (as described in ``value.proto``). Required + + + + + + +The list of querying parties The stakeholders of the referenced contract must have an intersection with any of these parties to return the result. If no querying_parties specified, all possible contracts could be returned. Optional: can be empty + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +Records that a contract has been created, and choices may now be exercised on it. + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The POST /v2/contracts/contract-by-id operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'http://localhost:7575/v2/contracts/contract-by-id' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"contractId":"string","queryingParties":["string"]}' +``` + + + + + + +```json 200 response +{ + "createdEvent": { + "offset": 0, + "nodeId": 0, + "contractId": "string", + "templateId": "string", + "contractKey": "string", + "contractKeyHash": "string", + "createArgument": "string", + "createdEventBlob": "string", + "interfaceViews": [ + {} + ], + "witnessParties": [ + "string" + ], + "signatories": [ + "string" + ], + "observers": [ + "string" + ], + "createdAt": "string", + "packageName": "string", + "representativePackageId": "string", + "acsDelta": false + } +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/post-v2dars.mdx b/docs-main/reference/json-api-reference/post-v2dars.mdx new file mode 100644 index 000000000..14024abd5 --- /dev/null +++ b/docs-main/reference/json-api-reference/post-v2dars.mdx @@ -0,0 +1,327 @@ +--- +title: "Upload a DAR to the participant node" +api: "POST http://localhost:7575/v2/dars" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Upload a DAR to the participant node

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Upload a DAR to the participant node + +## Protocol Details + + +
+ +
+
Operation ID
+
postV2Dars
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Query parameters + + + + + + + + + +- + + + + + + +- + + + + + + + + + + +### Request body + + +
+ + application/octet-stream + +
+ + + + + + + +OpenAPI type: `string (binary)`. + + +- + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +A message that is received when the upload operation succeeded. + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The POST /v2/dars operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'http://localhost:7575/v2/dars' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/octet-stream' \ + --data-binary '@request.bin' +``` + + + + + + +```json 200 response +{} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/post-v2darsvalidate.mdx b/docs-main/reference/json-api-reference/post-v2darsvalidate.mdx new file mode 100644 index 000000000..cc7248044 --- /dev/null +++ b/docs-main/reference/json-api-reference/post-v2darsvalidate.mdx @@ -0,0 +1,298 @@ +--- +title: "Dars validate" +api: "POST http://localhost:7575/v2/dars/validate" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Dars validate

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Validates the DAR and checks the upgrade compatibility of the DAR's packages with the set of the already vetted packages on the target vetting synchronizer. See ValidateDarFileRequest for details regarding the target vetting synchronizer. The operation has no effect on the state of the participant or the Canton ledger: the DAR payload and its packages are not persisted neither are the packages vetted. + +## Protocol Details + + +
+ +
+
Operation ID
+
postV2DarsValidate
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Query parameters + + + + + + + + + +- + + + + + + + + + + +### Request body + + +
+ + application/octet-stream + +
+ + + + + + + +OpenAPI type: `string (binary)`. + + +- + + + + + + + + + + +## Outputs + + + +### 200 + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The POST /v2/dars/validate operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'http://localhost:7575/v2/dars/validate' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/octet-stream' \ + --data-binary '@request.bin' +``` + + + + + + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/post-v2eventsevents-by-contract-id.mdx b/docs-main/reference/json-api-reference/post-v2eventsevents-by-contract-id.mdx new file mode 100644 index 000000000..b2d852ae5 --- /dev/null +++ b/docs-main/reference/json-api-reference/post-v2eventsevents-by-contract-id.mdx @@ -0,0 +1,321 @@ +--- +title: "Get the create and the consuming exercise event for the contract with the provided ID" +api: "POST http://localhost:7575/v2/events/events-by-contract-id" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Get the create and the consuming exercise event for the contract with the provided ID

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Get the create and the consuming exercise event for the contract with the provided ID. No events will be returned for contracts that have been pruned because they have already been archived before the latest pruning offset. If the contract cannot be found for the request, or all the contract-events are filtered, a CONTRACT_EVENTS_NOT_FOUND error will be raised. + +## Protocol Details + + +
+ +
+
Operation ID
+
postV2EventsEvents-by-contract-id
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + +The contract id being queried. Required + + + + + +OpenAPI type: `EventFormat`. + + +A format for events which defines both which events should be included and what data should be computed and included for them. Note that some of the filtering behavior depends on the `TransactionShape`, which is expected to be specified alongside usages of `EventFormat`. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The POST /v2/events/events-by-contract-id operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'http://localhost:7575/v2/events/events-by-contract-id' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"contractId":"string","eventFormat":{"filtersByParty":{},"filtersForAnyParty":{},"verbose":false}}' +``` + + + + + + +```json 200 response +{ + "created": { + "createdEvent": {}, + "synchronizerId": "string" + }, + "archived": { + "archivedEvent": {}, + "synchronizerId": "string" + } +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/post-v2idps.mdx b/docs-main/reference/json-api-reference/post-v2idps.mdx new file mode 100644 index 000000000..75ac6083e --- /dev/null +++ b/docs-main/reference/json-api-reference/post-v2idps.mdx @@ -0,0 +1,307 @@ +--- +title: "Create a new identity provider configuration" +api: "POST http://localhost:7575/v2/idps" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Create a new identity provider configuration

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Create a new identity provider configuration. The request will fail if the maximum allowed number of separate configurations is reached. + +## Protocol Details + + +
+ +
+
Operation ID
+
postV2Idps
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `IdentityProviderConfig`. + + +- + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +- + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The POST /v2/idps operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'http://localhost:7575/v2/idps' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"identityProviderConfig":{"identityProviderId":"string","isDeactivated":false,"issuer":"string","jwksUrl":"string","audience":"string"}}' +``` + + + + + + +```json 200 response +{ + "identityProviderConfig": { + "identityProviderId": "string", + "isDeactivated": false, + "issuer": "string", + "jwksUrl": "string", + "audience": "string" + } +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/post-v2interactive-submissionexecute.mdx b/docs-main/reference/json-api-reference/post-v2interactive-submissionexecute.mdx new file mode 100644 index 000000000..a0c540554 --- /dev/null +++ b/docs-main/reference/json-api-reference/post-v2interactive-submissionexecute.mdx @@ -0,0 +1,345 @@ +--- +title: "Execute a prepared submission _asynchronously_ on the ledger" +api: "POST http://localhost:7575/v2/interactive-submission/execute" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Execute a prepared submission _asynchronously_ on the ledger

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Execute a prepared submission _asynchronously_ on the ledger. Requires `actAs` or `executeAs` scope for the submitting party when LAPI User authorization is enabled Requires a signature of the transaction from the submitting external party. + +## Protocol Details + + +
+ +
+
Operation ID
+
postV2Interactive-submissionExecute
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + +the prepared transaction Typically this is the value of the `prepared_transaction` field in `PrepareSubmissionResponse` obtained from calling `prepareSubmission`. Required + + + + + +OpenAPI type: `PartySignatures`. + + +Additional signatures provided by the submitting parties + + + + + +OpenAPI type: `DeduplicationPeriod2`. + + +- + + + + + + +A unique identifier to distinguish completions for different submissions with the same change ID. Typically a random UUID. Applications are expected to use a different UUID for each retry of a submission with the same change ID. Must be a valid LedgerString (as described in ``value.proto``). Required + + + + + + +See [PrepareSubmissionRequest.user_id] Optional + + + + + + +The hashing scheme version used when building the hash Required + + + + + +OpenAPI type: `MinLedgerTime`. + + +- + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +- + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The POST /v2/interactive-submission/execute operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'http://localhost:7575/v2/interactive-submission/execute' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"preparedTransaction":"string","partySignatures":{"signatures":[{}]},"deduplicationPeriod":{},"submissionId":"string","userId":"string","hashingSchemeVersion":"HASHING_SCHEME_VERSION_UNSPECIFIED","minLedgerTime":{"time":{}}}' +``` + + + + + + +```json 200 response +{} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/post-v2interactive-submissionexecuteandwait.mdx b/docs-main/reference/json-api-reference/post-v2interactive-submissionexecuteandwait.mdx new file mode 100644 index 000000000..705c912e8 --- /dev/null +++ b/docs-main/reference/json-api-reference/post-v2interactive-submissionexecuteandwait.mdx @@ -0,0 +1,354 @@ +--- +title: "Similar to ExecuteSubmission but _synchronously_ wait for the completion of the transaction" +api: "POST http://localhost:7575/v2/interactive-submission/executeAndWait" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Similar to ExecuteSubmission but _synchronously_ wait for the completion of the transaction

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Similar to ExecuteSubmission but _synchronously_ wait for the completion of the transaction + +## Protocol Details + + +
+ +
+
Operation ID
+
postV2Interactive-submissionExecuteandwait
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + +the prepared transaction Typically this is the value of the `prepared_transaction` field in `PrepareSubmissionResponse` obtained from calling `prepareSubmission`. Required + + + + + +OpenAPI type: `PartySignatures`. + + +Additional signatures provided by the submitting parties + + + + + +OpenAPI type: `DeduplicationPeriod2`. + + +- + + + + + + +A unique identifier to distinguish completions for different submissions with the same change ID. Typically a random UUID. Applications are expected to use a different UUID for each retry of a submission with the same change ID. Must be a valid LedgerString (as described in ``value.proto``). Required + + + + + + +See [PrepareSubmissionRequest.user_id] Optional + + + + + + +The hashing scheme version used when building the hash Required + + + + + +OpenAPI type: `MinLedgerTime`. + + +- + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The id of the transaction that resulted from the submitted command. Must be a valid LedgerString (as described in ``value.proto``). Required + + + + + +The details of the offset field are described in ``community/ledger-api/README.md``. Required + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The POST /v2/interactive-submission/executeAndWait operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'http://localhost:7575/v2/interactive-submission/executeAndWait' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"preparedTransaction":"string","partySignatures":{"signatures":[{}]},"deduplicationPeriod":{},"submissionId":"string","userId":"string","hashingSchemeVersion":"HASHING_SCHEME_VERSION_UNSPECIFIED","minLedgerTime":{"time":{}}}' +``` + + + + + + +```json 200 response +{ + "updateId": "string", + "completionOffset": 0 +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/post-v2interactive-submissionexecuteandwaitfortransaction.mdx b/docs-main/reference/json-api-reference/post-v2interactive-submissionexecuteandwaitfortransaction.mdx new file mode 100644 index 000000000..5084f1992 --- /dev/null +++ b/docs-main/reference/json-api-reference/post-v2interactive-submissionexecuteandwaitfortransaction.mdx @@ -0,0 +1,370 @@ +--- +title: "Similar to ExecuteSubmissionAndWait but additionally returns the transaction" +api: "POST http://localhost:7575/v2/interactive-submission/executeAndWaitForTransaction" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Similar to ExecuteSubmissionAndWait but additionally returns the transaction

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Similar to ExecuteSubmissionAndWait but additionally returns the transaction + +## Protocol Details + + +
+ +
+
Operation ID
+
postV2Interactive-submissionExecuteandwaitfortransaction
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + +the prepared transaction Typically this is the value of the `prepared_transaction` field in `PrepareSubmissionResponse` obtained from calling `prepareSubmission`. Required + + + + + +OpenAPI type: `PartySignatures`. + + +Additional signatures provided by the submitting parties + + + + + +OpenAPI type: `DeduplicationPeriod2`. + + +- + + + + + + +A unique identifier to distinguish completions for different submissions with the same change ID. Typically a random UUID. Applications are expected to use a different UUID for each retry of a submission with the same change ID. Must be a valid LedgerString (as described in ``value.proto``). Required + + + + + + +See [PrepareSubmissionRequest.user_id] Optional + + + + + + +The hashing scheme version used when building the hash Required + + + + + +OpenAPI type: `MinLedgerTime`. + + +- + + + + + +OpenAPI type: `TransactionFormat`. + + +A format that specifies what events to include in Daml transactions and what data to compute and include for them. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +Filtered view of an on-ledger transaction's create and archive events. + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The POST /v2/interactive-submission/executeAndWaitForTransaction operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'http://localhost:7575/v2/interactive-submission/executeAndWaitForTransaction' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"preparedTransaction":"string","partySignatures":{"signatures":[{}]},"deduplicationPeriod":{},"submissionId":"string","userId":"string","hashingSchemeVersion":"HASHING_SCHEME_VERSION_UNSPECIFIED","minLedgerTime":{"time":{}},"transactionFormat":{"eventFormat":{},"transactionShape":"TRANSACTION_SHAPE_UNSPECIFIED"}}' +``` + + + + + + +```json 200 response +{ + "transaction": { + "updateId": "string", + "commandId": "string", + "workflowId": "string", + "effectiveAt": "string", + "events": [ + {} + ], + "offset": 0, + "synchronizerId": "string", + "traceContext": {}, + "recordTime": "string", + "externalTransactionHash": "string", + "paidTrafficCost": 0 + } +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/post-v2interactive-submissionpreferred-packages.mdx b/docs-main/reference/json-api-reference/post-v2interactive-submissionpreferred-packages.mdx new file mode 100644 index 000000000..ab9878467 --- /dev/null +++ b/docs-main/reference/json-api-reference/post-v2interactive-submissionpreferred-packages.mdx @@ -0,0 +1,324 @@ +--- +title: "Compute the preferred packages for the vetting requirements in the request" +api: "POST http://localhost:7575/v2/interactive-submission/preferred-packages" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Compute the preferred packages for the vetting requirements in the request

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Compute the preferred packages for the vetting requirements in the request. A preferred package is the highest-versioned package for a provided package-name that is vetted by all the participants hosting the provided parties. Ledger API clients should use this endpoint for constructing command submissions that are compatible with the provided preferred packages, by making informed decisions on: - which are the compatible packages that can be used to cre... + +## Protocol Details + + +
+ +
+
Operation ID
+
postV2Interactive-submissionPreferred-packages
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `PackageVettingRequirement[]`. + + +The package-name vetting requirements for which the preferred packages should be resolved. Generally it is enough to provide the requirements for the intended command's root package-names. Additional package-name requirements can be provided when additional Daml transaction informees need to use package dependencies of the command's root packages. Required: must be non-empty + + + + + + +The synchronizer whose vetting state should be used for resolving this query. If not specified, the vetting states of all synchronizers to which the participant is connected are used. Optional + + + + + + +The timestamp at which the package vetting validity should be computed on the latest topology snapshot as seen by the participant. If not provided, the participant's current clock time is used. Optional + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The package references of the preferred packages. Must contain one package reference for each requested package-name. If you build command submissions whose content depends on the returned preferred packages, then we recommend submitting the preferred package-ids in the ``package_id_selection_preference`` of the command submission to avoid race conditions with concurrent changes of the on-ledger package vetting state. Required: must be non-empty + + + + + +The synchronizer for which the package preferences are computed. If the synchronizer_id was specified in the request, then it matches the request synchronizer_id. Required + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The POST /v2/interactive-submission/preferred-packages operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'http://localhost:7575/v2/interactive-submission/preferred-packages' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"packageVettingRequirements":[{}],"synchronizerId":"string","vettingValidAt":"string"}' +``` + + + + + + +```json 200 response +{ + "packageReferences": [ + {} + ], + "synchronizerId": "string" +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/post-v2interactive-submissionprepare.mdx b/docs-main/reference/json-api-reference/post-v2interactive-submissionprepare.mdx new file mode 100644 index 000000000..66a1250de --- /dev/null +++ b/docs-main/reference/json-api-reference/post-v2interactive-submissionprepare.mdx @@ -0,0 +1,442 @@ +--- +title: "Requires `readAs` scope for the submitting party when LAPI User authorization is enabled" +api: "POST http://localhost:7575/v2/interactive-submission/prepare" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Requires `readAs` scope for the submitting party when LAPI User authorization is enabled

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Requires `readAs` scope for the submitting party when LAPI User authorization is enabled + +## Protocol Details + + +
+ +
+
Operation ID
+
postV2Interactive-submissionPrepare
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + +Uniquely identifies the participant user that prepares the transaction. Must be a valid UserIdString (as described in ``value.proto``). Required unless authentication is used with a user token. In that case, the token's user-id will be used for the request's user_id. Optional + + + + + + +Uniquely identifies the command. The triple (user_id, act_as, command_id) constitutes the change ID for the intended ledger change, where act_as is interpreted as a set of party names. The change ID can be used for matching the intended ledger changes with all their completions. Must be a valid LedgerString (as described in ``value.proto``). Required + + + + + +OpenAPI type: `Command[]`. + + +Individual elements of this atomic command. Must be non-empty. Limitation: Only single command transaction are currently supported by the API. The field is marked as repeated in preparation for future support of multiple commands. Required: must be non-empty + + + + + +OpenAPI type: `MinLedgerTime`. + + +- + + + + + + +Set of parties on whose behalf the command should be executed, if submitted. If ledger API authorization is enabled, then the authorization metadata must authorize the sender of the request to **read** (not act) on behalf of each of the given parties. This is because this RPC merely prepares a transaction and does not execute it. Therefore read authorization is sufficient even for actAs parties. Note: This may change, and more specific authorization scope may be introduced in the future. Each element must be a valid PartyIdString (as described in ``value.proto``). Required: must be non-empty + + + + + + +Set of parties on whose behalf (in addition to all parties listed in ``act_as``) contracts can be retrieved. This affects Daml operations such as ``fetch``, ``fetchByKey``, ``lookupByKey``, ``exercise``, and ``exerciseByKey``. Note: A command can only use contracts that are visible to at least one of the parties in ``act_as`` or ``read_as``. This visibility check is independent from the Daml authorization rules for fetch operations. If ledger API authorization is enabled, then the authorization metadata must authorize the sender of the request to read contract data on behalf of each of the given parties. Optional: can be empty + + + + + +OpenAPI type: `DisclosedContract[]`. + + +Additional contracts used to resolve contract & contract key lookups. Optional: can be empty + + + + + + +Must be a valid synchronizer id If not set, a suitable synchronizer that this node is connected to will be chosen Optional + + + + + + +The package-id selection preference of the client for resolving package names and interface instances in command submission and interpretation Optional: can be empty + + + + + + +When true, the response will contain additional details on how the transaction was encoded and hashed This can be useful for troubleshooting of hash mismatches. Should only be used for debugging. Defaults to false Optional + + + + + +OpenAPI type: `PrefetchContractKey[]`. + + +Fetches the contract keys into the caches to speed up the command processing. Should only contain contract keys that are expected to be resolved during interpretation of the commands. Keys of disclosed contracts do not need prefetching. Optional: can be empty + + + + + + +Maximum timestamp at which the transaction can be recorded onto the ledger via the synchronizer specified in the `PrepareSubmissionResponse`. If submitted after it will be rejected even if otherwise valid, in which case it needs to be prepared and signed again with a new valid max_record_time. Use this to limit the time-to-life of a prepared transaction, which is useful to know when it can definitely not be accepted anymore and resorting to preparing another transaction for the same intent is safe again. Optional + + + + + +OpenAPI type: `CostEstimationHints`. + + +Hints to improve cost estimation precision of a prepared transaction + + + + + +OpenAPI type: `integer (int32)`. + + +The maximum number of passes for the Topology-Aware Package Selection (TAPS). Higher values can increase the chance of successful package selection for routing of interpreted transactions. If unset, this defaults to the value defined in the participant configuration. The provided value must not exceed the limit specified in the participant configuration. Optional + + + + + + +The hashing scheme version to be used when building the hash. Defaults to HASHING_SCHEME_VERSION_V2. Optional + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The interpreted transaction, it represents the ledger changes necessary to execute the commands specified in the request. Clients MUST display the content of the transaction to the user for them to validate before signing the hash if the preparing participant is not trusted. Required + + + + + +Hash of the transaction, this is what needs to be signed by the party to authorize the transaction. Only provided for convenience, clients MUST recompute the hash from the raw transaction if the preparing participant is not trusted. May be removed in future versions Required: must be non-empty + + + + + +The hashing scheme version used when building the hash Required + + + + + +Optional additional details on how the transaction was encoded and hashed. Only set if verbose_hashing = true in the request Note that there are no guarantees on the stability of the format or content of this field. Its content should NOT be parsed and should only be used for troubleshooting purposes. Optional + + + + + +Estimation of the cost of submitting the prepared transaction The estimation is done against the synchronizer chosen during preparation of the transaction (or the one explicitly requested). The cost of re-assigning contracts to another synchronizer when necessary is not included in the estimation. + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The POST /v2/interactive-submission/prepare operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'http://localhost:7575/v2/interactive-submission/prepare' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"userId":"string","commandId":"string","commands":[{}],"minLedgerTime":{"time":{}},"actAs":["string"],"readAs":["string"],"disclosedContracts":[{}],"synchronizerId":"string","packageIdSelectionPreference":["string"],"verboseHashing":false,"prefetchContractKeys":[{}],"maxRecordTime":"string","estimateTrafficCost":{"disabled":false,"expectedSignatures":["SIGNING_ALGORITHM_SPEC_UNSPECIFIED"]},"tapsMaxPasses":0,"hashingSchemeVersion":"HASHING_SCHEME_VERSION_UNSPECIFIED"}' +``` + + + + + + +```json 200 response +{ + "preparedTransaction": "string", + "preparedTransactionHash": "string", + "hashingSchemeVersion": "HASHING_SCHEME_VERSION_UNSPECIFIED", + "hashingDetails": "string", + "costEstimation": { + "estimationTimestamp": "string", + "confirmationRequestTrafficCostEstimation": 0, + "confirmationResponseTrafficCostEstimation": 0, + "totalTrafficCostEstimation": 0 + } +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/post-v2package-vetting.mdx b/docs-main/reference/json-api-reference/post-v2package-vetting.mdx new file mode 100644 index 000000000..5ab5feaa7 --- /dev/null +++ b/docs-main/reference/json-api-reference/post-v2package-vetting.mdx @@ -0,0 +1,360 @@ +--- +title: "Package vetting" +api: "POST http://localhost:7575/v2/package-vetting" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Package vetting

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Update the vetted packages of this participant This endpoint (POST /package-vetting) is deprecated and will be removed in a future release. Please use POST /package-vetting/update instead. + +## Protocol Details + + +
+ +
+
Operation ID
+
postV2Package-vetting
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `VettedPackagesChange[]`. + + +Changes to apply to the current vetting state of the participant on the specified synchronizer. The changes are applied in order. Any package not changed will keep their previous vetting state. Required: must be non-empty + + + + + + +If dry_run is true, then the changes are only prepared, but not applied. If a request would trigger an error when run (e.g. TOPOLOGY_DEPENDENCIES_NOT_VETTED), it will also trigger an error when dry_run. Use this flag to preview a change before applying it. Defaults to false. Optional + + + + + + +If set, the requested changes will take place on the specified synchronizer. If synchronizer_id is unset and the participant is only connected to a single synchronizer, that synchronizer will be used by default. If synchronizer_id is unset and the participant is connected to multiple synchronizers, the request will error out with PACKAGE_SERVICE_CANNOT_AUTODETECT_SYNCHRONIZER. Optional + + + + + +OpenAPI type: `PriorTopologySerial`. + + +The serial of last ``VettedPackages`` topology transaction on a given participant and synchronizer. + + + + + + +Controls whether potentially unsafe vetting updates are allowed. Optional: can be empty + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The list of packages vetted on a given participant and synchronizer, modelled after ``VettedPackages`` in `topology.proto <https://github.com/digital-asset/canton/blob/main/community/base/src/main/protobuf/com/digitalasset/canton/protocol/v30/topology.proto#L206>`_. The list only contains packages that matched a filter in the query that originated it. + + + + + +The list of packages vetted on a given participant and synchronizer, modelled after ``VettedPackages`` in `topology.proto <https://github.com/digital-asset/canton/blob/main/community/base/src/main/protobuf/com/digitalasset/canton/protocol/v30/topology.proto#L206>`_. The list only contains packages that matched a filter in the query that originated it. + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The POST /v2/package-vetting operation changed in this snapshot.

+ +
+ +
+
+ Deprecated + 3.4 +
+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'http://localhost:7575/v2/package-vetting' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"changes":[{}],"dryRun":false,"synchronizerId":"string","expectedTopologySerial":{"serial":{}},"updateVettedPackagesForceFlags":["UPDATE_VETTED_PACKAGES_FORCE_FLAG_UNSPECIFIED"]}' +``` + + + + + + +```json 200 response +{ + "pastVettedPackages": { + "packages": [ + {} + ], + "participantId": "string", + "synchronizerId": "string", + "topologySerial": 0 + }, + "newVettedPackages": { + "packages": [ + {} + ], + "participantId": "string", + "synchronizerId": "string", + "topologySerial": 0 + } +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/post-v2package-vettinglist.mdx b/docs-main/reference/json-api-reference/post-v2package-vettinglist.mdx new file mode 100644 index 000000000..55839eb16 --- /dev/null +++ b/docs-main/reference/json-api-reference/post-v2package-vettinglist.mdx @@ -0,0 +1,335 @@ +--- +title: "Lists which participant node vetted what packages on which synchronizer" +api: "POST http://localhost:7575/v2/package-vetting/list" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Lists which participant node vetted what packages on which synchronizer

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Lists which participant node vetted what packages on which synchronizer. Can be called by any authenticated user. + +## Protocol Details + + +
+ +
+
Operation ID
+
postV2Package-vettingList
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `PackageMetadataFilter`. + + +Filter the VettedPackages by package metadata. A PackageMetadataFilter without package_ids and without package_name_prefixes matches any vetted package. Non-empty fields specify candidate values of which at least one must match. If both fields are set, then a candidate is returned if it matches one of the fields. + + + + + +OpenAPI type: `TopologyStateFilter`. + + +Filter the vetted packages by the participant and synchronizer that they are hosted on. Empty fields are ignored, such that a ``TopologyStateFilter`` without participant_ids and without synchronizer_ids matches a vetted package hosted on any participant and synchronizer. Non-empty fields specify candidate values of which at least one must match. If both fields are set then at least one candidate value must match from each field. + + + + + + +Pagination token to determine the specific page to fetch. Using the token guarantees that ``VettedPackages`` on a subsequent page are all greater (``VettedPackages`` are sorted by synchronizer ID then participant ID) than the last ``VettedPackages`` on a previous page. The server does not store intermediate results between calls chained by a series of page tokens. As a consequence, if new vetted packages are being added and a page is requested twice using the same token, more packages can be returned on the second call. Leave unspecified (i.e. as empty string) to fetch the first page. Optional + + + + + +OpenAPI type: `integer (int32)`. + + +Maximum number of ``VettedPackages`` results to return in a single page. If the page_size is unspecified (i.e. left as 0), the server will decide the number of results to be returned. If the page_size exceeds the maximum supported by the server, an error will be returned. To obtain the server's maximum consult the PackageService descriptor available in the VersionService. Optional + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +All ``VettedPackages`` that contain at least one ``VettedPackage`` matching both a ``PackageMetadataFilter`` and a ``TopologyStateFilter``. Sorted by synchronizer_id then participant_id. Optional: can be empty + + + + + +Pagination token to retrieve the next page. Empty string if there are no further results. Optional + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The POST /v2/package-vetting/list operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'http://localhost:7575/v2/package-vetting/list' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"packageMetadataFilter":{"packageIds":["string"],"packageNamePrefixes":["string"]},"topologyStateFilter":{"participantIds":["string"],"synchronizerIds":["string"]},"pageToken":"string","pageSize":0}' +``` + + + + + + +```json 200 response +{ + "vettedPackages": [ + {} + ], + "nextPageToken": "string" +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/post-v2package-vettingupdate.mdx b/docs-main/reference/json-api-reference/post-v2package-vettingupdate.mdx new file mode 100644 index 000000000..48f9bcc4b --- /dev/null +++ b/docs-main/reference/json-api-reference/post-v2package-vettingupdate.mdx @@ -0,0 +1,352 @@ +--- +title: "Update the vetted packages of this participant" +api: "POST http://localhost:7575/v2/package-vetting/update" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Update the vetted packages of this participant

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Update the vetted packages of this participant + +## Protocol Details + + +
+ +
+
Operation ID
+
postV2Package-vettingUpdate
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `VettedPackagesChange[]`. + + +Changes to apply to the current vetting state of the participant on the specified synchronizer. The changes are applied in order. Any package not changed will keep their previous vetting state. Required: must be non-empty + + + + + + +If dry_run is true, then the changes are only prepared, but not applied. If a request would trigger an error when run (e.g. TOPOLOGY_DEPENDENCIES_NOT_VETTED), it will also trigger an error when dry_run. Use this flag to preview a change before applying it. Defaults to false. Optional + + + + + + +If set, the requested changes will take place on the specified synchronizer. If synchronizer_id is unset and the participant is only connected to a single synchronizer, that synchronizer will be used by default. If synchronizer_id is unset and the participant is connected to multiple synchronizers, the request will error out with PACKAGE_SERVICE_CANNOT_AUTODETECT_SYNCHRONIZER. Optional + + + + + +OpenAPI type: `PriorTopologySerial`. + + +The serial of last ``VettedPackages`` topology transaction on a given participant and synchronizer. + + + + + + +Controls whether potentially unsafe vetting updates are allowed. Optional: can be empty + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The list of packages vetted on a given participant and synchronizer, modelled after ``VettedPackages`` in `topology.proto <https://github.com/digital-asset/canton/blob/main/community/base/src/main/protobuf/com/digitalasset/canton/protocol/v30/topology.proto#L206>`_. The list only contains packages that matched a filter in the query that originated it. + + + + + +The list of packages vetted on a given participant and synchronizer, modelled after ``VettedPackages`` in `topology.proto <https://github.com/digital-asset/canton/blob/main/community/base/src/main/protobuf/com/digitalasset/canton/protocol/v30/topology.proto#L206>`_. The list only contains packages that matched a filter in the query that originated it. + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The POST /v2/package-vetting/update operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'http://localhost:7575/v2/package-vetting/update' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"changes":[{}],"dryRun":false,"synchronizerId":"string","expectedTopologySerial":{"serial":{}},"updateVettedPackagesForceFlags":["UPDATE_VETTED_PACKAGES_FORCE_FLAG_UNSPECIFIED"]}' +``` + + + + + + +```json 200 response +{ + "pastVettedPackages": { + "packages": [ + {} + ], + "participantId": "string", + "synchronizerId": "string", + "topologySerial": 0 + }, + "newVettedPackages": { + "packages": [ + {} + ], + "participantId": "string", + "synchronizerId": "string", + "topologySerial": 0 + } +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/post-v2packages.mdx b/docs-main/reference/json-api-reference/post-v2packages.mdx new file mode 100644 index 000000000..d2dbb0418 --- /dev/null +++ b/docs-main/reference/json-api-reference/post-v2packages.mdx @@ -0,0 +1,327 @@ +--- +title: "Behaves the same as /dars" +api: "POST http://localhost:7575/v2/packages" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Behaves the same as /dars

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Behaves the same as /dars. This endpoint will be deprecated and removed in a future release. Upload a DAR file to the participant. If vetting is enabled in the request, the DAR is checked for upgrade compatibility with the set of the already vetted packages on the target vetting synchronizer See UploadDarFileRequest for details regarding vetting and the target vetting synchronizer. + +## Protocol Details + + +
+ +
+
Operation ID
+
postV2Packages
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Query parameters + + + + + + + + + +- + + + + + + +- + + + + + + + + + + +### Request body + + +
+ + application/octet-stream + +
+ + + + + + + +OpenAPI type: `string (binary)`. + + +- + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +A message that is received when the upload operation succeeded. + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The POST /v2/packages operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'http://localhost:7575/v2/packages' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/octet-stream' \ + --data-binary '@request.bin' +``` + + + + + + +```json 200 response +{} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/post-v2parties.mdx b/docs-main/reference/json-api-reference/post-v2parties.mdx new file mode 100644 index 000000000..ee06fbc33 --- /dev/null +++ b/docs-main/reference/json-api-reference/post-v2parties.mdx @@ -0,0 +1,334 @@ +--- +title: "Allocates a new party on a ledger and adds it to the set managed by the participant" +api: "POST http://localhost:7575/v2/parties" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Allocates a new party on a ledger and adds it to the set managed by the participant

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Allocates a new party on a ledger and adds it to the set managed by the participant. Caller specifies a party identifier suggestion, the actual identifier allocated might be different and is implementation specific. Caller can specify party metadata that is stored locally on the participant. This call may: - Succeed, in which case the actual allocated identifier is visible in the response. - Respond with a gRPC error daml-on-kv-ledger: suggestion's uniq... + +## Protocol Details + + +
+ +
+
Operation ID
+
postV2Parties
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + +A hint to the participant which party ID to allocate. It can be ignored. Must be a valid PartyIdString (as described in ``value.proto``). Optional + + + + + +OpenAPI type: `ObjectMeta`. + + +Represents metadata corresponding to a participant resource (e.g. a participant user or participant local information about a party). Based on ``ObjectMeta`` meta used in Kubernetes API. See https://github.com/kubernetes/apimachinery/blob/master/pkg/apis/meta/v1/generated.proto#L640 + + + + + + +The id of the ``Identity Provider`` If not set, assume the party is managed by the default identity provider or party is not hosted by the participant. Optional + + + + + + +The synchronizer, on which the party should be allocated. For backwards compatibility, this field may be omitted, if the participant is connected to only one synchronizer. Otherwise a synchronizer must be specified. Optional + + + + + + +The user who will get the act_as rights to the newly allocated party. If set to an empty string (the default), no user will get rights to the party. Optional + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +- + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The POST /v2/parties operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'http://localhost:7575/v2/parties' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"partyIdHint":"string","localMetadata":{"resourceVersion":"string","annotations":{}},"identityProviderId":"string","synchronizerId":"string","userId":"string"}' +``` + + + + + + +```json 200 response +{ + "partyDetails": { + "party": "string", + "isLocal": false, + "localMetadata": {}, + "identityProviderId": "string" + } +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/post-v2partiesexternalallocate.mdx b/docs-main/reference/json-api-reference/post-v2partiesexternalallocate.mdx new file mode 100644 index 000000000..eb379d9a7 --- /dev/null +++ b/docs-main/reference/json-api-reference/post-v2partiesexternalallocate.mdx @@ -0,0 +1,338 @@ +--- +title: "Parties external allocate" +api: "POST http://localhost:7575/v2/parties/external/allocate" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Parties external allocate

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +The external party must be hosted (at least) on this node with either confirmation or observation permissions It can optionally be hosted on other nodes (then called a multi-hosted party). If hosted on additional nodes, explicit authorization of the hosting relationship must be performed on those nodes before the party can be used. Decentralized namespaces are supported but must be provided fully authorized by their owners. The individual owner namespac... + +## Protocol Details + + +
+ +
+
Operation ID
+
postV2PartiesExternalAllocate
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + +Synchronizer ID on which to onboard the party Required + + + + + +OpenAPI type: `SignedTransaction[]`. + + +TopologyTransactions to onboard the external party Can contain: - A namespace for the party. This can be either a single NamespaceDelegation, or DecentralizedNamespaceDefinition along with its authorized namespace owners in the form of NamespaceDelegations. May be provided, if so it must be fully authorized by the signatures in this request combined with the existing topology state. - A PartyToParticipant to register the hosting relationship of the party, and the party's signing keys and threshold. Must be provided. Required: must be non-empty + + + + + +OpenAPI type: `Signature[]`. + + +Optional signatures of the combined hash of all onboarding_transactions This may be used instead of providing signatures on each individual transaction Optional: can be empty + + + + + + +The id of the ``Identity Provider`` If not set, assume the party is managed by the default identity provider. Optional + + + + + + +When true, this RPC will attempt to wait for the party to be allocated on the synchronizer before returning. When false, the allocation will happen asynchronously. This is a best effort only as this synchronization is only possible for non decentralized parties (single hosting node). For decentralized parties, this flag is ignored. Defaults to true. Optional + + + + + + +The user who will get the act_as rights to the newly allocated party. If set to an empty string (the default), no user will get rights to the party. Optional + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The allocated party id Required + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The POST /v2/parties/external/allocate operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'http://localhost:7575/v2/parties/external/allocate' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"synchronizer":"string","onboardingTransactions":[{}],"multiHashSignatures":[{}],"identityProviderId":"string","waitForAllocation":false,"userId":"string"}' +``` + + + + + + +```json 200 response +{ + "partyId": "string" +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/post-v2partiesexternalgenerate-topology.mdx b/docs-main/reference/json-api-reference/post-v2partiesexternalgenerate-topology.mdx new file mode 100644 index 000000000..cf3fecede --- /dev/null +++ b/docs-main/reference/json-api-reference/post-v2partiesexternalgenerate-topology.mdx @@ -0,0 +1,368 @@ +--- +title: "Parties external generate topology" +api: "POST http://localhost:7575/v2/parties/external/generate-topology" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Parties external generate topology

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +You may use this endpoint to generate the common external topology transactions which can be signed externally and uploaded as part of the allocate party process Note that this request will create a normal namespace using the same key for the identity as for signing. More elaborate schemes such as multi-signature or decentralized parties require you to construct the topology transactions yourself. + +## Protocol Details + + +
+ +
+
Operation ID
+
postV2PartiesExternalGenerate-topology
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + +Synchronizer-id for which we are building this request. Required + + + + + + +The actual party id will be constructed from this hint and a fingerprint of the public key Required + + + + + +OpenAPI type: `SigningPublicKey`. + + +- + + + + + + +If true, then the local participant will only be observing, not confirming. Default false. Optional + + + + + + +Other participant ids which should be confirming for this party Optional: can be empty + + + + + +OpenAPI type: `integer (int32)`. + + +Confirmation threshold >= 1 for the party. Defaults to all available confirmers (or if set to 0). Optional + + + + + + +Other observing participant ids for this party Optional: can be empty + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The generated party id Required + + + + + +The fingerprint of the supplied public key Required + + + + + +The serialized topology transactions which need to be signed and submitted as part of the allocate party process Note that the serialization includes the versioning information. Therefore, the transaction here is serialized as an `UntypedVersionedMessage` which in turn contains the serialized `TopologyTransaction` in the version supported by the synchronizer. Required: must be non-empty + + + + + +the multi-hash which may be signed instead of each individual transaction Required: must be non-empty + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The POST /v2/parties/external/generate-topology operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'http://localhost:7575/v2/parties/external/generate-topology' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"synchronizer":"string","partyHint":"string","publicKey":{"format":"CRYPTO_KEY_FORMAT_DER_X509_SUBJECT_PUBLIC_KEY_INFO","keyData":"string","keySpec":"SIGNING_KEY_SPEC_EC_CURVE25519"},"localParticipantObservationOnly":false,"otherConfirmingParticipantUids":["string"],"confirmationThreshold":0,"observingParticipantUids":["string"]}' +``` + + + + + + +```json 200 response +{ + "partyId": "string", + "publicKeyFingerprint": "string", + "topologyTransactions": [ + "string" + ], + "multiHash": "string" +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/post-v2stateactive-contracts-page.mdx b/docs-main/reference/json-api-reference/post-v2stateactive-contracts-page.mdx new file mode 100644 index 000000000..94af60672 --- /dev/null +++ b/docs-main/reference/json-api-reference/post-v2stateactive-contracts-page.mdx @@ -0,0 +1,330 @@ +--- +title: "State active contracts page" +api: "POST http://localhost:7575/v2/state/active-contracts-page" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

State active contracts page

+ + + +
+ + OpenAPI + + Since 3.5 + +
+ + +
+ +Returns a page of the snapshot of the active contracts and incomplete (un)assignments at a ledger offset. Once all pages are fetched by repeated calls to ``GetActiveContractsPage``, the client SHOULD begin retrieving updates from the update service, starting at the ``GetActiveContractsPageResponse``.``active_at_offset`` specified in this request. Clients SHOULD NOT assume that the set of active contracts they receive reflects the state at the ledger end. + +## Protocol Details + + +
+ +
+
Operation ID
+
postV2StateActive-contracts-page
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `integer (int64)`. + + +The offset at which the snapshot of the active contracts will be computed. Must be no greater than the current ledger end offset. Must be greater than or equal to the last pruning offset. Optional, if defined, it must be a valid absolute offset (positive integer) or ledger begin offset (zero). If zero, the empty set will be returned. If not defined, the current ledger end will be used and it will be populated in the response. Optional + + + + + +OpenAPI type: `EventFormat`. + + +A format for events which defines both which events should be included and what data should be computed and included for them. Note that some of the filtering behavior depends on the `TransactionShape`, which is expected to be specified alongside usages of `EventFormat`. + + + + + +OpenAPI type: `integer (int32)`. + + +The result page will contain at most max_page_size entries of the respective active contract snapshot. The server might reject max_page_size breaching the server-specified limit. Optional, if not defined, the default will be determined by the server. Optional + + + + + + +To get the next page of the active contracts snapshot, the ``page_token`` should be set to the ``next_page_token`` of the last ``GetActiveContractsPageResponse``. The page token only works if subsequent requests: - are executed on the same participant, - use the same active_at_offset and event_format, - and the participant's store was not pruned to after the active_at_offset. If not specified, the first page of the active contracts snapshot will be returned. Optional: can be empty + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The collection of active contracts for this page response. Required: must be non-empty + + + + + +The active_at_offset which was specified in the request, or the calculated active_at_offset from the actual ledger end from at the evaluation of the request. Required + + + + + +If not present this is the last page. If present, this token must be used to get the next page. Optional: can be empty + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 3.5 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'http://localhost:7575/v2/state/active-contracts-page' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"activeAtOffset":0,"eventFormat":{"filtersByParty":{},"filtersForAnyParty":{},"verbose":false},"maxPageSize":0,"pageToken":"string"}' +``` + + + + + + +```json 200 response +{ + "activeContracts": [ + {} + ], + "activeAtOffset": 0, + "nextPageToken": "string" +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/post-v2stateactive-contracts.mdx b/docs-main/reference/json-api-reference/post-v2stateactive-contracts.mdx new file mode 100644 index 000000000..b110c0925 --- /dev/null +++ b/docs-main/reference/json-api-reference/post-v2stateactive-contracts.mdx @@ -0,0 +1,369 @@ +--- +title: "Query active contracts list (blocking call)" +api: "POST http://localhost:7575/v2/state/active-contracts" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Query active contracts list (blocking call)

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Query active contracts list (blocking call). Querying active contracts is an expensive operation and if possible should not be repeated often. Consider querying active contracts initially (for a given offset) and then repeatedly call one of `/v2/updates/...`endpoints to get subsequent modifications. You can also use websockets to get updates with better performance. Returns a stream of the snapshot of the active contracts and incomplete (un)assignments... + +## Protocol Details + + +
+ +
+
Operation ID
+
postV2StateActive-contracts
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Query parameters + + + + + + + + +OpenAPI type: `integer (int64)`. + + +maximum number of elements to return, this param is ignored if is bigger than server setting + + + + + +OpenAPI type: `integer (int64)`. + + +timeout to complete and send result if no new elements are received (for open ended streams) + + + + + + + + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `TransactionFilter`. + + +Provided for backwards compatibility, it will be removed in the Canton version 3.5.0. Used both for filtering create and archive events as well as for filtering transaction trees. + + + + + + +Provided for backwards compatibility, it will be removed in the Canton version 3.5.0. If enabled, values served over the API will contain more information than strictly necessary to interpret the data. In particular, setting the verbose flag to true triggers the ledger to include labels for record fields. Optional, if specified event_format must be unset. + + + + + +OpenAPI type: `integer (int64)`. + + +The offset at which the snapshot of the active contracts will be computed. Must be no greater than the current ledger end offset. Must be greater than or equal to the last pruning offset. Must be a valid absolute offset (positive integer) or ledger begin offset (zero). If zero, the empty set will be returned. Required + + + + + +OpenAPI type: `EventFormat`. + + +A format for events which defines both which events should be included and what data should be computed and included for them. Note that some of the filtering behavior depends on the `TransactionShape`, which is expected to be specified alongside usages of `EventFormat`. + + + + + + +Opaque representation of a continuation token defining a position in the active contracts snapshot. The prefix of the active contracts snapshot will be omitted up to and including the element from which the continuation token was read. To reuse the continuation token from a `GetActiveContractsPageResponse`: - subsequent request must be executed on the same participant with the same version of canton, - subsequent request must have the same active_at_offset, - subsequent request must have the same event_format - and the participant must not have been pruned after the active_at_offset. If not specified, the whole active contracts snapshot will be returned. Optional: can be empty + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +- + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The POST /v2/state/active-contracts operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'http://localhost:7575/v2/state/active-contracts' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"filter":{"filtersByParty":{},"filtersForAnyParty":{}},"verbose":false,"activeAtOffset":0,"eventFormat":{"filtersByParty":{},"filtersForAnyParty":{},"verbose":false},"streamContinuationToken":"string"}' +``` + + + + + + +```json 200 response +[ + { + "workflowId": "string", + "contractEntry": {}, + "streamContinuationToken": "string" + } +] +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/post-v2updates.mdx b/docs-main/reference/json-api-reference/post-v2updates.mdx new file mode 100644 index 000000000..7e6d6d081 --- /dev/null +++ b/docs-main/reference/json-api-reference/post-v2updates.mdx @@ -0,0 +1,376 @@ +--- +title: "Read the ledger's filtered update stream for the specified contents and filters" +api: "POST http://localhost:7575/v2/updates" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Read the ledger's filtered update stream for the specified contents and filters

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Read the ledger's filtered update stream for the specified contents and filters. It returns the event types in accordance with the stream contents selected. Also the selection criteria for individual events depends on the transaction shape chosen. - ACS delta: a requesting party must be a stakeholder of an event for it to be included. - ledger effects: a requesting party must be a witness of an event for it to be included. Notice: This endpoint should b... + +## Protocol Details + + +
+ +
+
Operation ID
+
postV2Updates
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Query parameters + + + + + + + + +OpenAPI type: `integer (int64)`. + + +maximum number of elements to return, this param is ignored if is bigger than server setting + + + + + +OpenAPI type: `integer (int64)`. + + +timeout to complete and send result if no new elements are received (for open ended streams) + + + + + + + + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `integer (int64)`. + + +Exclusive lower bound offset of the requested ledger section (non-negative integer). The response will only contain transactions whose offset is strictly greater than this. If set to zero, the lower bound is set to the beginning of the ledger. If the participant has been pruned, this parameter must be greater or equal than the pruning offset. Required + + + + + +OpenAPI type: `integer (int64)`. + + +Inclusive higher bound offset of the requested ledger section. If specified the response will only contain transactions whose offset is less than or equal to this. If not specified, - the descending_order must not be selected, - the stream will not terminate. Optional + + + + + +OpenAPI type: `TransactionFilter`. + + +Provided for backwards compatibility, it will be removed in the Canton version 3.5.0. Used both for filtering create and archive events as well as for filtering transaction trees. + + + + + + +Provided for backwards compatibility, it will be removed in the Canton version 3.5.0. If enabled, values served over the API will contain more information than strictly necessary to interpret the data. In particular, setting the verbose flag to true triggers the ledger to include labels, record and variant type ids for record fields. Optional for backwards compatibility, if defined update_format must be unset + + + + + +OpenAPI type: `UpdateFormat`. + + +A format specifying what updates to include and how to render them. + + + + + + +If set, the stream will populate the elements in descending order. Optional + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +- + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The POST /v2/updates operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'http://localhost:7575/v2/updates' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"beginExclusive":0,"endInclusive":0,"filter":{"filtersByParty":{},"filtersForAnyParty":{}},"verbose":false,"updateFormat":{"includeTransactions":{},"includeReassignments":{},"includeTopologyEvents":{}},"descendingOrder":false}' +``` + + + + + + +```json 200 response +[ + { + "update": {} + } +] +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/post-v2updatesget-updates-page.mdx b/docs-main/reference/json-api-reference/post-v2updatesget-updates-page.mdx new file mode 100644 index 000000000..af19362e7 --- /dev/null +++ b/docs-main/reference/json-api-reference/post-v2updatesget-updates-page.mdx @@ -0,0 +1,353 @@ +--- +title: "Read a page of ledger's filtered updates" +api: "POST http://localhost:7575/v2/updates/get-updates-page" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Read a page of ledger's filtered updates

+ + + +
+ + OpenAPI + + Since 3.5 + +
+ + +
+ +Read a page of ledger's filtered updates. It returns the event types in accordance with the specified contents and filters. Additionally, the selection criteria for individual events depends on the transaction shape chosen. - ACS delta: an event is included only if the requesting party is a stakeholder. - ledger effects: an event is included if the requesting party is a witness. + +## Protocol Details + + +
+ +
+
Operation ID
+
postV2UpdatesGet-updates-page
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `integer (int64)`. + + +Exclusive lower bound offset of the requested ledger section (non-negative integer). The response page will only contain updates whose offset is strictly greater than this. If set to zero or not defined, the lower bound is set to the actual pruning offset or to the beginning of the ledger if the participant was not pruned yet. If set to positive and the ledger has been pruned, this parameter must be greater or equal than the pruning offset. Optional + + + + + +OpenAPI type: `integer (int64)`. + + +Inclusive upper bound offset of the requested ledger section. If specified the response will only contain updates whose offset is less than or equal to this. If not specified response will only contain updates whose offset is less than the current ledger-end. Optional + + + + + +OpenAPI type: `integer (int32)`. + + +The result page will contain the first max_page_size Updates of all matching updates. The server may reject queries with max_page_size above server specified limits. If not specified, the default max_page_size is determined by the server. Optional + + + + + +OpenAPI type: `UpdateFormat`. + + +A format specifying what updates to include and how to render them. + + + + + + +If set, the page will populate the elements in descending order starting from the end_offset_inclusive. Optional + + + + + + +To get the next page of updates, the ``page_token`` should be set to the ``next_page_token`` of the last ``GetUpdatesPageResponse``. To achieve correct paging: subsequent requests must - be executed on the same participant, - have the same begin_offset_exclusive, - have the same end_offset_inclusive, - have the same update_format and - have the same descending_order. If not specified, the first page of updates will be returned. Optional: can be empty + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The first max_page_size updates that match the filter in the request. In case descending_order was selected, the order of the updates is in reversed offset order. Optional: can be empty + + + + + +Represents the lower bound of this page. Required + + + + + +Represents the upper bound of the page. Required + + + + + +If the value is not populated, this is the last page. If the value is populated, this token can be used to get the next page. If the original ``GetFirstUpdatePageRequest`` end_offset_inclusive was not specified and the request uses ascending order, then this token will always be populated, so you can use it to "tail" the ledger by repeatedly polling with the new page token returned. Optional: can be empty + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 3.5 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'http://localhost:7575/v2/updates/get-updates-page' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"beginOffsetExclusive":0,"endOffsetInclusive":0,"maxPageSize":0,"updateFormat":{"includeTransactions":{},"includeReassignments":{},"includeTopologyEvents":{}},"descendingOrder":false,"pageToken":"string"}' +``` + + + + + + +```json 200 response +{ + "updates": [ + {} + ], + "lowestPageOffsetExclusive": 0, + "highestPageOffsetInclusive": 0, + "nextPageToken": "string" +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/post-v2updatestransaction-by-id.mdx b/docs-main/reference/json-api-reference/post-v2updatestransaction-by-id.mdx new file mode 100644 index 000000000..7d2bcc660 --- /dev/null +++ b/docs-main/reference/json-api-reference/post-v2updatestransaction-by-id.mdx @@ -0,0 +1,347 @@ +--- +title: "Get transaction by id" +api: "POST http://localhost:7575/v2/updates/transaction-by-id" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Get transaction by id

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + + Remove as of 3.5.0 + +
+ + +
+ +Get transaction by id. Provided for backwards compatibility, it will be removed in the Canton version 3.5.0, use v2/updates/update-by-id instead. + +## Protocol Details + + +
+ +
+
Operation ID
+
postV2UpdatesTransaction-by-id
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + +The ID of a particular transaction. Must be a valid LedgerString (as described in ``value.proto``). Required + + + + + + +Provided for backwards compatibility, it will be removed in the Canton version 3.5.0. The parties whose events the client expects to see. Events that are not visible for the parties in this collection will not be present in the response. Each element must be a valid PartyIdString (as described in ``value.proto``). Optional for backwards compatibility for GetTransactionById request: if defined transaction_format must be unset (falling back to defaults). + + + + + +OpenAPI type: `TransactionFormat`. + + +A format that specifies what events to include in Daml transactions and what data to compute and include for them. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +Filtered view of an on-ledger transaction's create and archive events. + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Remove as of + 3.5.0 +
+ +
+ +
+
+ Changed + 3.5 +
+ +

The POST /v2/updates/transaction-by-id operation changed in this snapshot.

+ +
+ +
+
+ Deprecated + 3.4 +
+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'http://localhost:7575/v2/updates/transaction-by-id' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"updateId":"string","requestingParties":["string"],"transactionFormat":{"eventFormat":{},"transactionShape":"TRANSACTION_SHAPE_UNSPECIFIED"}}' +``` + + + + + + +```json 200 response +{ + "transaction": { + "updateId": "string", + "commandId": "string", + "workflowId": "string", + "effectiveAt": "string", + "events": [ + {} + ], + "offset": 0, + "synchronizerId": "string", + "traceContext": {}, + "recordTime": "string", + "externalTransactionHash": "string", + "paidTrafficCost": 0 + } +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/post-v2updatestransaction-by-offset.mdx b/docs-main/reference/json-api-reference/post-v2updatestransaction-by-offset.mdx new file mode 100644 index 000000000..c5a00e3b0 --- /dev/null +++ b/docs-main/reference/json-api-reference/post-v2updatestransaction-by-offset.mdx @@ -0,0 +1,349 @@ +--- +title: "Get transaction by offset" +api: "POST http://localhost:7575/v2/updates/transaction-by-offset" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Get transaction by offset

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + + Remove as of 3.5.0 + +
+ + +
+ +Get transaction by offset. Provided for backwards compatibility, it will be removed in the Canton version 3.5.0, use v2/updates/update-by-offset instead. + +## Protocol Details + + +
+ +
+
Operation ID
+
postV2UpdatesTransaction-by-offset
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `integer (int64)`. + + +The offset of the transaction being looked up. Must be a valid absolute offset (positive integer). Required + + + + + + +Provided for backwards compatibility, it will be removed in the Canton version 3.5.0. The parties whose events the client expects to see. Events that are not visible for the parties in this collection will not be present in the response. Each element must be a valid PartyIdString (as described in ``value.proto``). Optional for backwards compatibility for GetTransactionByOffset request: if defined transaction_format must be unset (falling back to defaults). + + + + + +OpenAPI type: `TransactionFormat`. + + +A format that specifies what events to include in Daml transactions and what data to compute and include for them. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +Filtered view of an on-ledger transaction's create and archive events. + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Remove as of + 3.5.0 +
+ +
+ +
+
+ Changed + 3.5 +
+ +

The POST /v2/updates/transaction-by-offset operation changed in this snapshot.

+ +
+ +
+
+ Deprecated + 3.4 +
+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'http://localhost:7575/v2/updates/transaction-by-offset' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"offset":0,"requestingParties":["string"],"transactionFormat":{"eventFormat":{},"transactionShape":"TRANSACTION_SHAPE_UNSPECIFIED"}}' +``` + + + + + + +```json 200 response +{ + "transaction": { + "updateId": "string", + "commandId": "string", + "workflowId": "string", + "effectiveAt": "string", + "events": [ + {} + ], + "offset": 0, + "synchronizerId": "string", + "traceContext": {}, + "recordTime": "string", + "externalTransactionHash": "string", + "paidTrafficCost": 0 + } +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/post-v2updatestrees.mdx b/docs-main/reference/json-api-reference/post-v2updatestrees.mdx new file mode 100644 index 000000000..f734ca079 --- /dev/null +++ b/docs-main/reference/json-api-reference/post-v2updatestrees.mdx @@ -0,0 +1,394 @@ +--- +title: "Query update transactions tree list (blocking call)" +api: "POST http://localhost:7575/v2/updates/trees" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Query update transactions tree list (blocking call)

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + + Remove as of 3.5.0 + +
+ + +
+ +Query update transactions tree list (blocking call). Provided for backwards compatibility, it will be removed in the Canton version 3.5.0, use v2/updates instead. Notice: This endpoint should be used for small results set. When number of results exceeded node configuration limit (`http-list-max-elements-limit`) there will be an error (`413 Content Too Large`) returned. Increasing this limit may lead to performance issues and high memory consumption. Con... + +## Protocol Details + + +
+ +
+
Operation ID
+
postV2UpdatesTrees
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Query parameters + + + + + + + + +OpenAPI type: `integer (int64)`. + + +maximum number of elements to return, this param is ignored if is bigger than server setting + + + + + +OpenAPI type: `integer (int64)`. + + +timeout to complete and send result if no new elements are received (for open ended streams) + + + + + + + + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `integer (int64)`. + + +Exclusive lower bound offset of the requested ledger section (non-negative integer). The response will only contain transactions whose offset is strictly greater than this. If set to zero, the lower bound is set to the beginning of the ledger. If the participant has been pruned, this parameter must be greater or equal than the pruning offset. Required + + + + + +OpenAPI type: `integer (int64)`. + + +Inclusive higher bound offset of the requested ledger section. If specified the response will only contain transactions whose offset is less than or equal to this. If not specified, - the descending_order must not be selected, - the stream will not terminate. Optional + + + + + +OpenAPI type: `TransactionFilter`. + + +Provided for backwards compatibility, it will be removed in the Canton version 3.5.0. Used both for filtering create and archive events as well as for filtering transaction trees. + + + + + + +Provided for backwards compatibility, it will be removed in the Canton version 3.5.0. If enabled, values served over the API will contain more information than strictly necessary to interpret the data. In particular, setting the verbose flag to true triggers the ledger to include labels, record and variant type ids for record fields. Optional for backwards compatibility, if defined update_format must be unset + + + + + +OpenAPI type: `UpdateFormat`. + + +A format specifying what updates to include and how to render them. + + + + + + +If set, the stream will populate the elements in descending order. Optional + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +- + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Remove as of + 3.5.0 +
+ +
+ +
+
+ Changed + 3.5 +
+ +

The POST /v2/updates/trees operation changed in this snapshot.

+ +
+ +
+
+ Deprecated + 3.4 +
+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'http://localhost:7575/v2/updates/trees' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"beginExclusive":0,"endInclusive":0,"filter":{"filtersByParty":{},"filtersForAnyParty":{}},"verbose":false,"updateFormat":{"includeTransactions":{},"includeReassignments":{},"includeTopologyEvents":{}},"descendingOrder":false}' +``` + + + + + + +```json 200 response +[ + { + "update": {} + } +] +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/post-v2updatesupdate-by-id.mdx b/docs-main/reference/json-api-reference/post-v2updatesupdate-by-id.mdx new file mode 100644 index 000000000..0765228c3 --- /dev/null +++ b/docs-main/reference/json-api-reference/post-v2updatesupdate-by-id.mdx @@ -0,0 +1,308 @@ +--- +title: "Lookup an update by its ID" +api: "POST http://localhost:7575/v2/updates/update-by-id" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Lookup an update by its ID

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Lookup an update by its ID. If there is no update with this ID, or all the events are filtered, an UPDATE_NOT_FOUND error will be raised. + +## Protocol Details + + +
+ +
+
Operation ID
+
postV2UpdatesUpdate-by-id
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + +The ID of a particular update. Must be a valid LedgerString (as described in ``value.proto``). Required + + + + + +OpenAPI type: `UpdateFormat`. + + +A format specifying what updates to include and how to render them. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +- + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The POST /v2/updates/update-by-id operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'http://localhost:7575/v2/updates/update-by-id' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"updateId":"string","updateFormat":{"includeTransactions":{},"includeReassignments":{},"includeTopologyEvents":{}}}' +``` + + + + + + +```json 200 response +{ + "update": {} +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/post-v2updatesupdate-by-offset.mdx b/docs-main/reference/json-api-reference/post-v2updatesupdate-by-offset.mdx new file mode 100644 index 000000000..2c4717382 --- /dev/null +++ b/docs-main/reference/json-api-reference/post-v2updatesupdate-by-offset.mdx @@ -0,0 +1,310 @@ +--- +title: "Lookup an update by its offset" +api: "POST http://localhost:7575/v2/updates/update-by-offset" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Lookup an update by its offset

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Lookup an update by its offset. If there is no update with this offset, or all the events are filtered, an UPDATE_NOT_FOUND error will be raised. + +## Protocol Details + + +
+ +
+
Operation ID
+
postV2UpdatesUpdate-by-offset
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `integer (int64)`. + + +The offset of the update being looked up. Must be a valid absolute offset (positive integer). Required + + + + + +OpenAPI type: `UpdateFormat`. + + +A format specifying what updates to include and how to render them. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +- + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The POST /v2/updates/update-by-offset operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'http://localhost:7575/v2/updates/update-by-offset' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"offset":0,"updateFormat":{"includeTransactions":{},"includeReassignments":{},"includeTopologyEvents":{}}}' +``` + + + + + + +```json 200 response +{ + "update": {} +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/post-v2users.mdx b/docs-main/reference/json-api-reference/post-v2users.mdx new file mode 100644 index 000000000..dcfd809c0 --- /dev/null +++ b/docs-main/reference/json-api-reference/post-v2users.mdx @@ -0,0 +1,317 @@ +--- +title: "Create a new user" +api: "POST http://localhost:7575/v2/users" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Create a new user

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Create a new user. + +## Protocol Details + + +
+ +
+
Operation ID
+
postV2Users
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `User`. + + +Users and rights ///////////////// Users are used to dynamically manage the rights given to Daml applications. They are stored and managed per participant node. + + + + + +OpenAPI type: `Right[]`. + + +The rights to be assigned to the user upon creation, which SHOULD include appropriate rights for the ``user.primary_party``. Optional: can be empty + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +Users and rights ///////////////// Users are used to dynamically manage the rights given to Daml applications. They are stored and managed per participant node. + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The POST /v2/users operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'http://localhost:7575/v2/users' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"user":{"id":"string","primaryParty":"string","isDeactivated":false,"metadata":{},"identityProviderId":"string","primaryPartyAuthentication":false},"rights":[{}]}' +``` + + + + + + +```json 200 response +{ + "user": { + "id": "string", + "primaryParty": "string", + "isDeactivated": false, + "metadata": {}, + "identityProviderId": "string", + "primaryPartyAuthentication": false + } +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/docs-main/reference/json-api-reference/post-v2users:user-idrights.mdx b/docs-main/reference/json-api-reference/post-v2users:user-idrights.mdx new file mode 100644 index 000000000..151176d6e --- /dev/null +++ b/docs-main/reference/json-api-reference/post-v2users:user-idrights.mdx @@ -0,0 +1,338 @@ +--- +title: "Grant rights to a user" +api: "POST http://localhost:7575/v2/users/{user-id}/rights" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

JSON Ledger API

+ + +

Grant rights to a user

+ + + +
+ + OpenAPI + + Since 3.4 + + Changed 3.5 + +
+ + +
+ +Grant rights to a user. Granting rights does not affect the resource version of the corresponding user. + +## Protocol Details + + +
+ +
+
Operation ID
+
postV2UsersUser-idRights
+
+ +
+
Authentication
+
Bearer token
+
+ +
+
Published
+
3.5
+
+ +
+ + +## Inputs + + + +### Path parameters + + + + + + + + + +- + + + + + + + + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + +The user to whom to grant rights. Required + + + + + +OpenAPI type: `Right[]`. + + +The rights to grant. Optional: can be empty + + + + + + +The id of the ``Identity Provider`` If not set, assume the user is managed by the default identity provider. Optional + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The rights that were newly granted by the request. Optional: can be empty + + + + + + + + + + +### 400 + + +
+ + text/plain + +
+ + + + + + + +- + + + + + + + + + + +### default + + +
+ + application/json + +
+ + + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + +- + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 3.5 +
+ +

The POST /v2/users/{user-id}/rights operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 3.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'http://localhost:7575/v2/users/{user-id}/rights' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"userId":"string","rights":[{}],"identityProviderId":"string"}' +``` + + + + + + +```json 200 response +{ + "newlyGrantedRights": [ + {} + ] +} +``` + +```json default response +{ + "code": "string", + "cause": "string", + "correlationId": "string", + "traceId": "string", + "context": {}, + "resources": [ + [ + "string" + ] + ], + "errorCategory": 0, + "grpcCodeValue": 0, + "retryInfo": "string", + "definiteAnswer": false +} +``` + + diff --git a/scripts/generate_json_api_reference.py b/scripts/generate_json_api_reference.py index afddd7b83..de1b48645 100755 --- a/scripts/generate_json_api_reference.py +++ b/scripts/generate_json_api_reference.py @@ -3,6 +3,7 @@ from __future__ import annotations import argparse +import hashlib import json import os import re @@ -55,6 +56,7 @@ DEFAULT_PARENT_GROUP = "Ledger API" DEFAULT_GROUP_LABEL = "OpenAPI" DEFAULT_OPENAPI_DIRECTORY = "reference/json-api-reference" +DEFAULT_OVERVIEW_PAGE_REF = "reference/json-api-reference/overview" DEFAULT_DETAILS_PAGE_REF = "reference/json-api-reference/details" LEGACY_OUTPUT_FILE = REPO_ROOT / "docs-main" / "reference" / "json-api-reference.mdx" HTTP_METHODS = {"get", "put", "post", "delete", "options", "head", "patch", "trace"} @@ -76,6 +78,7 @@ def parse_args() -> argparse.Namespace: parser.add_argument("--parent-group", default=DEFAULT_PARENT_GROUP) parser.add_argument("--group-label", default=DEFAULT_GROUP_LABEL) parser.add_argument("--openapi-directory", default=DEFAULT_OPENAPI_DIRECTORY) + parser.add_argument("--overview-page-ref", default=DEFAULT_OVERVIEW_PAGE_REF) parser.add_argument("--details-page-ref", default=DEFAULT_DETAILS_PAGE_REF) parser.add_argument( "--publish-version", help="Explicit docs major version to publish." @@ -138,6 +141,7 @@ def update_docs_navigation( group_label: str, openapi_source_ref: str, openapi_directory: str, + overview_page_ref: str, details_page_ref: str, openapi_page_refs: list[str], ) -> None: @@ -161,14 +165,23 @@ def update_docs_navigation( group.clear() group["group"] = group_label - group["openapi"] = { - "source": openapi_source_ref, - "directory": openapi_directory, - } - group["pages"] = [*openapi_page_refs, details_page_ref] + has_native_pages = any(is_native_openapi_page_ref(ref) for ref in openapi_page_refs) + if has_native_pages: + group["openapi"] = { + "source": openapi_source_ref, + "directory": openapi_directory, + } + group["pages"] = [*openapi_page_refs, details_page_ref] + else: + group["pages"] = [overview_page_ref, *openapi_page_refs] docs_json_path.write_text(json.dumps(payload, indent=2) + "\n", encoding="utf-8") +def is_native_openapi_page_ref(page_ref: str) -> bool: + method, separator, path = page_ref.partition(" ") + return bool(separator and method.lower() in HTTP_METHODS and path.startswith("/")) + + def remove_legacy_output(*, output_file: Path) -> None: if output_file.exists(): output_file.unlink() @@ -209,10 +222,38 @@ def openapi_operation_page_refs(spec: dict[str, Any]) -> list[str]: return refs -def configured_manual_operations(source_config: dict[str, Any]) -> list[dict[str, str]]: +def legacy_openapi_operation_page_ref(*, method: str, path: str, directory: str) -> str: + mintlify_path = re.sub(r"\{([^{}]+)\}", r":\1", path) + slug = mintlify_path.removeprefix("/").replace("/", "").lower() + return f"{directory.rstrip('/')}/{method.lower()}-{slug}" + + +def configured_manual_operations( + source_config: dict[str, Any], + *, + spec: dict[str, Any] | None = None, + directory: str = DEFAULT_OPENAPI_DIRECTORY, +) -> list[dict[str, str]]: configured = source_config.get("manual_operations") or [] + if configured == "all": + if spec is None: + raise ValueError( + "manual_operations 'all' requires the published OpenAPI spec" + ) + return [ + { + "method": method, + "path": path, + "page_ref": legacy_openapi_operation_page_ref( + method=method, + path=path, + directory=directory, + ), + } + for method, path in openapi_operation_identities(spec) + ] if not isinstance(configured, list): - raise ValueError("manual_operations must be an array") + raise ValueError("manual_operations must be an array or 'all'") operations: list[dict[str, str]] = [] for index, value in enumerate(configured): if not isinstance(value, dict): @@ -240,6 +281,14 @@ def configured_manual_operations(source_config: dict[str, Any]) -> list[dict[str return operations +def openapi_operation_identities(spec: dict[str, Any]) -> list[tuple[str, str]]: + identities: list[tuple[str, str]] = [] + for page_ref in openapi_operation_page_refs(spec): + method, path = page_ref.split(" ", 1) + identities.append((method, path)) + return identities + + def openapi_navigation_page_refs( spec: dict[str, Any], *, manual_operations: list[dict[str, str]] ) -> list[str]: @@ -254,6 +303,38 @@ def openapi_navigation_page_refs( return page_refs +def validate_manual_route_baseline( + source_config: dict[str, Any], *, manual_operations: list[dict[str, str]] +) -> None: + baseline = source_config.get("legacy_manual_route_baseline") + if baseline is None: + return + if not isinstance(baseline, dict): + raise ValueError("legacy_manual_route_baseline must be an object") + expected_count = baseline.get("operation_count") + expected_sha256 = baseline.get("sha256") + if not isinstance(expected_count, int) or expected_count < 0: + raise ValueError( + "legacy_manual_route_baseline.operation_count must be a non-negative integer" + ) + if not isinstance(expected_sha256, str) or not re.fullmatch( + r"[0-9a-f]{64}", expected_sha256 + ): + raise ValueError( + "legacy_manual_route_baseline.sha256 must be a lowercase SHA-256 digest" + ) + routes = sorted(f"/{operation['page_ref']}" for operation in manual_operations) + actual_sha256 = hashlib.sha256( + ("\n".join(routes) + "\n").encode("utf-8") + ).hexdigest() + if len(routes) != expected_count or actual_sha256 != expected_sha256: + raise ValueError( + "Manual OpenAPI routes do not match the captured native-route baseline: " + f"expected {expected_count} routes/{expected_sha256}, got " + f"{len(routes)} routes/{actual_sha256}" + ) + + def generated_operation_summary(path: str, method: str) -> str: mintlify_path = re.sub(r"\{([^{}]+)\}", r":\1", path) return f"{method.upper()} {mintlify_path}" @@ -439,8 +520,9 @@ def write_manual_operation_pages( source_name: str, server: str, manual_operations: list[dict[str, str]], -) -> None: +) -> set[Path]: published_spec = specs_by_version[publish_version] + written_paths: set[Path] = set() for operation in manual_operations: history_events = operation_history_events( specs_by_version=specs_by_version, @@ -463,7 +545,26 @@ def write_manual_operation_pages( ) output_path = docs_json_path.parent / f"{operation['page_ref']}.mdx" write_page(page, output_path) + written_paths.add(output_path.resolve()) print(f"Generated manual OpenAPI page: {output_path}") + return written_paths + + +def remove_stale_manual_operation_pages( + *, + docs_json_path: Path, + openapi_directory: str, + current_pages: set[Path], + preserved_pages: set[Path], +) -> None: + output_directory = docs_json_path.parent / openapi_directory + if not output_directory.exists(): + return + keep = {path.resolve() for path in current_pages | preserved_pages} + for output_path in output_directory.glob("*.mdx"): + if output_path.resolve() not in keep: + output_path.unlink() + print(f"Removed stale manual OpenAPI page: {output_path}") def strip_raw_markdown_trailing_whitespace(page: Page) -> Page: @@ -632,6 +733,83 @@ def write_openapi_details_page( write_page(page, docs_json_path.parent / f"{details_page_ref}.mdx") +def build_openapi_overview_page( + *, + overview_page_ref: str, + publish_version: str, + source_name: str, + raw_spec_ref: str, + operation_count: int, +) -> Page: + return strip_raw_markdown_trailing_whitespace( + render_collection_page( + ReferenceCollectionPage( + path=f"{overview_page_ref}.mdx", + title="JSON Ledger API OpenAPI", + description="JSON Ledger API OpenAPI reference overview and raw specification download.", + eyebrow="Ledger API", + summary=( + "Generated operation reference for the JSON Ledger API, with lifecycle " + "history embedded on each operation page." + ), + badges=[ + ReferenceBadge("OpenAPI", tone="protocol"), + ReferenceBadge(publish_version, tone="neutral"), + ], + meta_items=[ + ReferenceMetaItem("Operations", str(operation_count)), + ReferenceMetaItem("Source", source_name), + ], + sections=[ + ReferenceSection( + heading="Specification", + body_markdown=( + "[Download the published OpenAPI specification]" + f"(/{raw_spec_ref})." + ), + ) + ], + ) + ) + ) + + +def write_openapi_overview_page( + *, docs_json_path: Path, overview_page_ref: str, page: Page +) -> Path: + output_path = docs_json_path.parent / f"{overview_page_ref}.mdx" + write_page(page, output_path) + return output_path + + +def remove_openapi_details_page(*, docs_json_path: Path, details_page_ref: str) -> None: + output_path = docs_json_path.parent / f"{details_page_ref}.mdx" + if output_path.exists(): + output_path.unlink() + print(f"Removed OpenAPI details/history page: {output_path}") + + +def ensure_redirect(*, docs_json_path: Path, source: str, destination: str) -> None: + payload = load_json(docs_json_path) + redirects = payload.setdefault("redirects", []) + if not isinstance(redirects, list): + raise ValueError("docs.json redirects must be an array") + matches = [ + redirect + for redirect in redirects + if isinstance(redirect, dict) and redirect.get("source") == source + ] + if len(matches) > 1: + raise ValueError(f"Duplicate redirect source in docs.json: {source}") + redirect = {"source": source, "destination": destination} + if matches: + matches[0].clear() + matches[0].update(redirect) + else: + redirects.append(redirect) + docs_json_path.write_text(json.dumps(payload, indent=2) + "\n", encoding="utf-8") + + def main() -> int: args = parse_args() source_config = load_json(Path(args.source_config).resolve()) @@ -669,8 +847,13 @@ def main() -> int: spec_filename="openapi.yaml", force_refresh=args.force_refresh, ) - manual_operations = configured_manual_operations(source_config) - write_manual_operation_pages( + manual_operations = configured_manual_operations( + source_config, + spec=specs_by_version[publish_entry["version"]], + directory=args.openapi_directory, + ) + validate_manual_route_baseline(source_config, manual_operations=manual_operations) + manual_page_paths = write_manual_operation_pages( docs_json_path=docs_json_path, specs_by_version=specs_by_version, versions=version_labels, @@ -690,23 +873,60 @@ def main() -> int: group_label=args.group_label, openapi_source_ref=docs_relative_file_ref(output_spec, docs_json_path), openapi_directory=args.openapi_directory, + overview_page_ref=args.overview_page_ref, details_page_ref=args.details_page_ref, openapi_page_refs=openapi_navigation_page_refs( specs_by_version[publish_entry["version"]], manual_operations=manual_operations, ), ) - write_openapi_details_page( - docs_json_path=docs_json_path, - details_page_ref=args.details_page_ref, - page=build_openapi_details_page( - specs_by_version=specs_by_version, - versions=version_labels, - publish_version=publish_entry["version"], - details_page_ref=args.details_page_ref, - source_name=source_name, - ), + has_native_pages = any( + is_native_openapi_page_ref(page_ref) + for page_ref in openapi_navigation_page_refs( + specs_by_version[publish_entry["version"]], + manual_operations=manual_operations, + ) ) + if has_native_pages: + write_openapi_details_page( + docs_json_path=docs_json_path, + details_page_ref=args.details_page_ref, + page=build_openapi_details_page( + specs_by_version=specs_by_version, + versions=version_labels, + publish_version=publish_entry["version"], + details_page_ref=args.details_page_ref, + source_name=source_name, + ), + ) + else: + raw_spec_ref = docs_relative_file_ref(output_spec, docs_json_path) + overview_path = write_openapi_overview_page( + docs_json_path=docs_json_path, + overview_page_ref=args.overview_page_ref, + page=build_openapi_overview_page( + overview_page_ref=args.overview_page_ref, + publish_version=publish_entry["version"], + source_name=source_name, + raw_spec_ref=raw_spec_ref, + operation_count=len(manual_operations), + ), + ) + remove_openapi_details_page( + docs_json_path=docs_json_path, + details_page_ref=args.details_page_ref, + ) + ensure_redirect( + docs_json_path=docs_json_path, + source=f"/{args.details_page_ref}", + destination=f"/{args.overview_page_ref}", + ) + remove_stale_manual_operation_pages( + docs_json_path=docs_json_path, + openapi_directory=args.openapi_directory, + current_pages=manual_page_paths, + preserved_pages={overview_path}, + ) remove_legacy_output(output_file=LEGACY_OUTPUT_FILE.resolve()) return 0 diff --git a/src/x2mdx/openapi/render.py b/src/x2mdx/openapi/render.py index dcb72a4eb..bb4d8f6e6 100644 --- a/src/x2mdx/openapi/render.py +++ b/src/x2mdx/openapi/render.py @@ -385,11 +385,55 @@ def _operation_fingerprint(operation: dict[str, Any]) -> str: def _remove_as_of(operation: dict[str, Any]) -> str | None: + extension = operation.get("x-remove-as-of") + if isinstance(extension, str) and extension.strip(): + return extension.strip().removeprefix("v") text = " ".join(str(operation.get(key) or "") for key in ("summary", "description")) match = REMOVE_AS_OF_RE.search(text) return match.group("version").removeprefix("v") if match else None +def _operation_id(operation: dict[str, Any]) -> str | None: + value = operation.get("operationId") + return value.strip() if isinstance(value, str) and value.strip() else None + + +def _operations_by_id( + spec: dict[str, Any], +) -> dict[str, tuple[str, str, dict[str, Any]]]: + paths = spec.get("paths") + if not isinstance(paths, dict): + raise ValueError("OpenAPI specification must define paths") + indexed: dict[str, tuple[str, str, dict[str, Any]]] = {} + for path, path_item in paths.items(): + if not isinstance(path, str) or not isinstance(path_item, dict): + continue + for method, operation in path_item.items(): + if method.lower() not in { + "get", + "put", + "post", + "delete", + "options", + "head", + "patch", + "trace", + } or not isinstance(operation, dict): + continue + operation_id = _operation_id(operation) + if operation_id is None: + continue + if operation_id in indexed: + previous_method, previous_path, _previous = indexed[operation_id] + raise ValueError( + "Duplicate OpenAPI operationId " + f"'{operation_id}': {previous_method.upper()} {previous_path} and " + f"{method.upper()} {path}" + ) + indexed[operation_id] = (method.lower(), path, operation) + return indexed + + def _operation_title(operation: dict[str, Any], *, method: str, path: str) -> str: summary = str(operation.get("summary") or "").strip() mintlify_path = re.sub(r"\{([^{}]+)\}", r":\1", path) @@ -402,8 +446,22 @@ def _operation_title(operation: dict[str, Any], *, method: str, path: str) -> st return summary description = " ".join(str(operation.get("description") or "").split()) first_sentence = description.partition(".")[0].strip() - if first_sentence: + if first_sentence and len(first_sentence) <= 96: return first_sentence + operation_id = _operation_id(operation) + if operation_id is not None: + title = re.sub( + rf"^(?:{'|'.join(('get', 'put', 'post', 'delete', 'options', 'head', 'patch', 'trace'))})", + "", + operation_id, + flags=re.IGNORECASE, + ) + title = re.sub(r"^V\d+", "", title) + title = re.sub(r"(?<=[a-z0-9])(?=[A-Z])", " ", title) + title = re.sub(r"[-_]+", " ", title) + title = " ".join(title.split()) + if title: + return title[0].upper() + title[1:].lower() return f"{method.upper()} {path}" @@ -416,21 +474,37 @@ def operation_history_events( path: str, source_name: str, ) -> list[HistoryEvent]: - observed: list[tuple[str, dict[str, Any]]] = [] + published = _operation(specs_by_version[publish_version], method, path) + published_operation_id = _operation_id(published) + observed: list[tuple[str, str, str, dict[str, Any]]] = [] for version in versions: - try: - observed.append( - (version, _operation(specs_by_version[version], method, path)) + if published_operation_id is not None: + located = _operations_by_id(specs_by_version[version]).get( + published_operation_id ) - except ValueError: - continue + if located is not None: + observed_method, observed_path, observed_operation = located + observed.append( + (version, observed_method, observed_path, observed_operation) + ) + else: + try: + observed.append( + ( + version, + method.lower(), + path, + _operation(specs_by_version[version], method, path), + ) + ) + except ValueError: + continue if not observed: raise ValueError( f"Operation is absent from all comparison versions: {method.upper()} {path}" ) events: list[HistoryEvent] = [] - published = _operation(specs_by_version[publish_version], method, path) remove_as_of = _remove_as_of(published) if remove_as_of is not None: evidence = Evidence( @@ -450,20 +524,21 @@ def operation_history_events( ) ) - deprecated_version = next( + deprecated_observation = next( ( - version - for version, operation in observed + (version, observed_method, observed_path) + for version, observed_method, observed_path, operation in observed if operation.get("deprecated") is True ), None, ) - if deprecated_version is not None: + if deprecated_observation is not None: + deprecated_version, deprecated_method, deprecated_path = deprecated_observation evidence = Evidence( kind=EvidenceKind.SOURCE_METADATA, source=source_name, observed_in_version=deprecated_version, - location=f"paths.{path}.{method.lower()}.deprecated", + location=f"paths.{deprecated_path}.{deprecated_method}.deprecated", ) events.append( HistoryEvent( @@ -476,34 +551,48 @@ def operation_history_events( ) previous_fingerprint: str | None = None - for version, operation in observed: + previous_location: tuple[str, str] | None = None + for version, observed_method, observed_path, operation in observed: fingerprint = _operation_fingerprint(operation) - if previous_fingerprint is not None and fingerprint != previous_fingerprint: + location = (observed_method, observed_path) + if previous_fingerprint is not None and ( + fingerprint != previous_fingerprint or location != previous_location + ): + if previous_location is not None and location != previous_location: + prior_method, prior_path = previous_location + details = ( + f"The operation moved from {prior_method.upper()} {prior_path} " + f"to {observed_method.upper()} {observed_path}.", + ) + else: + details = ( + f"The {observed_method.upper()} {observed_path} operation changed " + "in this snapshot.", + ) evidence = Evidence( kind=EvidenceKind.SNAPSHOT_DIFF, source=source_name, observed_in_version=version, - location=f"paths.{path}.{method.lower()}", + location=f"paths.{observed_path}.{observed_method}", ) events.append( HistoryEvent( kind=HistoryEventKind.CHANGED, version=version, label="Changed", - details=( - f"The {method.upper()} {path} operation changed in this snapshot.", - ), + details=details, evidence=(evidence,), ) ) previous_fingerprint = fingerprint + previous_location = location - first_version = observed[0][0] + first_version, first_method, first_path, _first_operation = observed[0] introduction = Evidence( kind=EvidenceKind.SNAPSHOT, source=source_name, observed_in_version=first_version, - location=f"paths.{path}.{method.lower()}", + location=f"paths.{first_path}.{first_method}", ) events.append( HistoryEvent( @@ -515,6 +604,24 @@ def operation_history_events( ) ) + replacement = published.get("x-replaces") + if isinstance(replacement, str) and replacement.strip(): + evidence = Evidence( + kind=EvidenceKind.SOURCE_METADATA, + source=source_name, + observed_in_version=publish_version, + location=f"paths.{path}.{method.lower()}.x-replaces", + ) + events.append( + HistoryEvent( + kind=HistoryEventKind.REPLACEMENT, + version=first_version, + label="Replacement", + details=(f"Replaces {replacement.strip()}.",), + evidence=(evidence,), + ) + ) + version_order = {version: index for index, version in enumerate(versions)} kind_order = { HistoryEventKind.REMOVE_AS_OF: 0, @@ -548,8 +655,13 @@ def _request_example( lines.append( f" --header 'Content-Type: {media_type or 'application/json'}' \\" ) - compact_sample = json.dumps(sample, ensure_ascii=False, separators=(",", ":")) - lines.append(f" --data '{compact_sample}'") + if media_type == "application/octet-stream": + lines.append(" --data-binary '@request.bin'") + else: + compact_sample = json.dumps( + sample, ensure_ascii=False, separators=(",", ":") + ) + lines.append(f" --data '{compact_sample}'") else: lines[-1] = lines[-1].removesuffix(" \\") return ReferenceExample( diff --git a/tests/test_json_api_openapi.py b/tests/test_json_api_openapi.py index d129a4b53..1774c6c97 100644 --- a/tests/test_json_api_openapi.py +++ b/tests/test_json_api_openapi.py @@ -197,6 +197,94 @@ def test_openapi_navigation_replaces_only_configured_manual_operations() -> None ] +def test_all_manual_operations_preserve_native_mintlify_routes() -> None: + module = load_script_module("generate_json_api_reference.py") + spec = { + "paths": { + "/v2/packages/{package-id}/status": { + "get": {"operationId": "getPackageStatus"} + }, + "/v2/interactive-submission/executeAndWait": { + "post": {"operationId": "executeAndWait"} + }, + } + } + + operations = module.configured_manual_operations( + {"manual_operations": "all"}, + spec=spec, + directory="reference/json-api-reference", + ) + + assert operations == [ + { + "method": "GET", + "path": "/v2/packages/{package-id}/status", + "page_ref": "reference/json-api-reference/get-v2packages:package-idstatus", + }, + { + "method": "POST", + "path": "/v2/interactive-submission/executeAndWait", + "page_ref": "reference/json-api-reference/post-v2interactive-submissionexecuteandwait", + }, + ] + assert all( + not module.is_native_openapi_page_ref(page_ref) + for page_ref in module.openapi_navigation_page_refs( + spec, manual_operations=operations + ) + ) + + +def test_all_manual_operations_require_published_spec() -> None: + module = load_script_module("generate_json_api_reference.py") + + try: + module.configured_manual_operations({"manual_operations": "all"}) + except ValueError as error: + assert "requires the published OpenAPI spec" in str(error) + else: + raise AssertionError("Expected all-operation mode without a spec to fail") + + +def test_manual_route_baseline_detects_public_route_drift() -> None: + module = load_script_module("generate_json_api_reference.py") + operations = [ + { + "method": "GET", + "path": "/v2/users", + "page_ref": "reference/json-api-reference/get-v2users", + } + ] + route_hash = module.hashlib.sha256( + b"/reference/json-api-reference/get-v2users\n" + ).hexdigest() + module.validate_manual_route_baseline( + { + "legacy_manual_route_baseline": { + "operation_count": 1, + "sha256": route_hash, + } + }, + manual_operations=operations, + ) + + try: + module.validate_manual_route_baseline( + { + "legacy_manual_route_baseline": { + "operation_count": 1, + "sha256": "0" * 64, + } + }, + manual_operations=operations, + ) + except ValueError as error: + assert "do not match the captured native-route baseline" in str(error) + else: + raise AssertionError("Expected public route drift to fail") + + def test_manual_openapi_config_rejects_duplicate_operation_identity() -> None: module = load_script_module("generate_json_api_reference.py") operation = { @@ -267,6 +355,7 @@ def test_update_docs_navigation_supports_product_navigation(tmp_path: Path) -> N group_label="OpenAPI", openapi_source_ref="openapi/json-ledger-api/openapi.yaml", openapi_directory="reference/json-api-reference", + overview_page_ref="reference/json-api-reference/overview", details_page_ref="reference/json-api-reference/details", openapi_page_refs=["GET /v2/users", "POST /v2/users"], ) @@ -291,6 +380,65 @@ def test_update_docs_navigation_supports_product_navigation(tmp_path: Path) -> N ] +def test_update_docs_navigation_removes_native_openapi_and_history_page( + tmp_path: Path, +) -> None: + module = load_script_module("generate_json_api_reference.py") + docs_json = tmp_path / "docs.json" + docs_json.write_text( + json.dumps( + { + "navigation": { + "products": [ + { + "product": "API Reference", + "pages": [ + { + "group": "Ledger API", + "pages": [ + { + "group": "OpenAPI", + "openapi": {"source": "stale.yaml"}, + "pages": [ + "GET /v2/users", + "reference/json-api-reference/details", + ], + } + ], + } + ], + } + ] + } + } + ) + + "\n", + encoding="utf-8", + ) + + module.update_docs_navigation( + docs_json_path=docs_json, + dropdown_label="API Reference", + parent_group_label="Ledger API", + group_label="OpenAPI", + openapi_source_ref="openapi/json-ledger-api/openapi.yaml", + openapi_directory="reference/json-api-reference", + overview_page_ref="reference/json-api-reference/overview", + details_page_ref="reference/json-api-reference/details", + openapi_page_refs=["reference/json-api-reference/get-v2users"], + ) + + docs = json.loads(docs_json.read_text(encoding="utf-8")) + group = docs["navigation"]["products"][0]["pages"][0]["pages"][0] + assert group == { + "group": "OpenAPI", + "pages": [ + "reference/json-api-reference/overview", + "reference/json-api-reference/get-v2users", + ], + } + + def test_operation_summary_uses_descriptions_for_generated_method_path_summaries() -> ( None ): @@ -359,3 +507,98 @@ def test_build_openapi_details_page_uses_reference_overview_layout() -> None: assert '
' in rendered assert "Changed 3.5" in rendered assert "## Endpoint Reference (Latest)" not in rendered + + +def test_openapi_overview_links_raw_spec_without_history_label() -> None: + module = load_script_module("generate_json_api_reference.py") + + rendered = render_page( + module.build_openapi_overview_page( + overview_page_ref="reference/json-api-reference/overview", + publish_version="3.5", + source_name="release fixtures", + raw_spec_ref="openapi/json-ledger-api/openapi.yaml", + operation_count=67, + ) + ) + + assert 'title: "JSON Ledger API OpenAPI"' in rendered + assert "Operations" in rendered + assert "67" in rendered + assert "(/openapi/json-ledger-api/openapi.yaml)" in rendered + assert "Details and history" not in rendered + + +def test_ensure_redirect_is_idempotent(tmp_path: Path) -> None: + module = load_script_module("generate_json_api_reference.py") + docs_json = tmp_path / "docs.json" + docs_json.write_text('{"redirects": []}\n', encoding="utf-8") + + for _ in range(2): + module.ensure_redirect( + docs_json_path=docs_json, + source="/reference/json-api-reference/details", + destination="/reference/json-api-reference/overview", + ) + + assert json.loads(docs_json.read_text(encoding="utf-8"))["redirects"] == [ + { + "source": "/reference/json-api-reference/details", + "destination": "/reference/json-api-reference/overview", + } + ] + + +def test_checked_in_json_openapi_target_is_fully_manual_and_conformant() -> None: + module = load_script_module("generate_json_api_reference.py") + source_config = json.loads( + (REPO_ROOT / "config/x2mdx/ledger-api/source-artifacts.json").read_text( + encoding="utf-8" + ) + ) + spec = module.yaml.safe_load( + (REPO_ROOT / "docs-main/openapi/json-ledger-api/openapi.yaml").read_text( + encoding="utf-8" + ) + ) + operations = module.configured_manual_operations( + source_config, + spec=spec, + directory="reference/json-api-reference", + ) + module.validate_manual_route_baseline(source_config, manual_operations=operations) + + assert len(operations) == 67 + expected_page_refs = [operation["page_ref"] for operation in operations] + output_directory = REPO_ROOT / "docs-main/reference/json-api-reference" + expected_files = { + REPO_ROOT / f"docs-main/{page_ref}.mdx" for page_ref in expected_page_refs + } | {output_directory / "overview.mdx"} + assert set(output_directory.glob("*.mdx")) == expected_files + + docs_json = json.loads( + (REPO_ROOT / "docs-main/docs.json").read_text(encoding="utf-8") + ) + pages = module.reference_nav.navigation_pages( + docs_json, + label="API Reference", + docs_json_path=REPO_ROOT / "docs-main/docs.json", + ) + ledger_group = module._find_group(pages, "Ledger API") + assert ledger_group is not None + openapi_group = module._find_group(ledger_group["pages"], "OpenAPI") + assert openapi_group == { + "group": "OpenAPI", + "pages": ["reference/json-api-reference/overview", *expected_page_refs], + } + assert { + "source": "/reference/json-api-reference/details", + "destination": "/reference/json-api-reference/overview", + } in docs_json["redirects"] + + for output_path in expected_files - {output_directory / "overview.mdx"}: + rendered = output_path.read_text(encoding="utf-8") + assert '\napi: "' in rendered + assert "\n## History\n" in rendered + assert "lifecycle events" not in rendered.lower() + assert "details and history" not in rendered.lower() diff --git a/tests/test_openapi_manual_render.py b/tests/test_openapi_manual_render.py index 92dc03037..3713bbc9c 100644 --- a/tests/test_openapi_manual_render.py +++ b/tests/test_openapi_manual_render.py @@ -126,6 +126,74 @@ def test_operation_history_uses_authored_remove_as_of_and_snapshot_changes() -> assert events[2].evidence[0].kind.value == "snapshot_diff" +def test_operation_history_tracks_operation_id_across_route_move() -> None: + original = operation_spec(changed=False) + moved = operation_spec(changed=False) + operation = moved["paths"].pop("/v2/updates/flats")["post"] + moved["paths"]["/v2/updates/flat-transactions"] = {"post": operation} + + events = operation_history_events( + specs_by_version={"3.4": original, "3.5": moved}, + versions=["3.4", "3.5"], + publish_version="3.5", + method="post", + path="/v2/updates/flat-transactions", + source_name="release fixtures", + ) + + assert [(event.kind, event.version) for event in events] == [ + (HistoryEventKind.CHANGED, "3.5"), + (HistoryEventKind.INTRODUCED, "3.4"), + ] + assert "moved from POST /v2/updates/flats" in events[0].details[0] + + +def test_operation_history_rejects_duplicate_operation_ids() -> None: + duplicate = operation_spec(changed=False) + duplicate["paths"]["/duplicate"] = { + "get": { + "operationId": "postV2UpdatesFlats", + "responses": {}, + } + } + + try: + operation_history_events( + specs_by_version={"3.5": duplicate}, + versions=["3.5"], + publish_version="3.5", + method="post", + path="/v2/updates/flats", + source_name="release fixtures", + ) + except ValueError as error: + assert "Duplicate OpenAPI operationId" in str(error) + else: + raise AssertionError("Expected duplicate operation IDs to fail") + + +def test_operation_history_reads_lifecycle_extensions() -> None: + spec = operation_spec(changed=False) + operation = spec["paths"]["/v2/updates/flats"]["post"] + operation["x-remove-as-of"] = "v4.0.0" + operation["x-replaces"] = "legacyFlatUpdates" + + events = operation_history_events( + specs_by_version={"3.5": spec}, + versions=["3.5"], + publish_version="3.5", + method="post", + path="/v2/updates/flats", + source_name="release fixtures", + ) + + assert [(event.kind, event.version) for event in events] == [ + (HistoryEventKind.REMOVE_AS_OF, "4.0.0"), + (HistoryEventKind.INTRODUCED, "3.5"), + (HistoryEventKind.REPLACEMENT, "3.5"), + ] + + def test_manual_openapi_page_preserves_playground_and_standard_history_layout() -> None: specs = { "3.4": operation_spec(changed=False), @@ -167,3 +235,72 @@ def test_manual_openapi_page_preserves_playground_and_standard_history_layout() assert "Remove as of" in rendered assert "3.5.0" in rendered assert "details and history" not in rendered.lower() + + +def test_binary_request_example_uses_file_upload_curl() -> None: + spec = operation_spec(changed=False) + operation = spec["paths"]["/v2/updates/flats"]["post"] + operation["requestBody"] = { + "content": { + "application/octet-stream": { + "schema": {"type": "string", "format": "binary"} + } + } + } + history = operation_history_events( + specs_by_version={"3.5": spec}, + versions=["3.5"], + publish_version="3.5", + method="post", + path="/v2/updates/flats", + source_name="release fixtures", + ) + + rendered = render_page( + render_manual_openapi_operation( + spec=spec, + options=ManualOpenAPIRenderOptions( + method="post", + path="/v2/updates/flats", + output_path="reference/json-api-reference/post-v2updatesflats.mdx", + ), + history_events=history, + publish_version="3.5", + ) + ) + + assert "--header 'Content-Type: application/octet-stream'" in rendered + assert "--data-binary '@request.bin'" in rendered + + +def test_long_generated_title_falls_back_to_humanized_operation_id() -> None: + spec = operation_spec(changed=False) + operation = spec["paths"]["/v2/updates/flats"]["post"] + operation["description"] = ( + "You may use this endpoint to generate a result that requires a very long " + "explanation before the source reaches its first sentence boundary and that " + "explanation does not belong in the page title." + ) + history = operation_history_events( + specs_by_version={"3.5": spec}, + versions=["3.5"], + publish_version="3.5", + method="post", + path="/v2/updates/flats", + source_name="release fixtures", + ) + + rendered = render_page( + render_manual_openapi_operation( + spec=spec, + options=ManualOpenAPIRenderOptions( + method="post", + path="/v2/updates/flats", + output_path="reference/json-api-reference/post-v2updatesflats.mdx", + ), + history_events=history, + publish_version="3.5", + ) + ) + + assert 'title: "Updates flats"' in rendered From dfb79d0f86222531f1cfb1edfb9b345e92912fc7 Mon Sep 17 00:00:00 2001 From: danielporterda Date: Tue, 25 Aug 2026 17:39:13 -0400 Subject: [PATCH 06/14] Recover stalled JSON API navigation Signed-off-by: danielporterda --- docs-main/nav-transition.js | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/docs-main/nav-transition.js b/docs-main/nav-transition.js index 0c6428f2a..28cc50827 100644 --- a/docs-main/nav-transition.js +++ b/docs-main/nav-transition.js @@ -7,10 +7,13 @@ var FADE_MS = 120; var SPINNER_FADE_IN_MS = 150; + var NAVIGATION_FALLBACK_MS = 1000; + var JSON_API_REFERENCE_PREFIX = "/reference/json-api-reference/"; var TARGET_SELECTOR = "#content-area"; var fadedOutFromClick = false; var spinnerElement = null; var contentCleanupTimer = null; + var navigationFallbackTimer = null; var style = document.createElement("style"); style.textContent = @@ -102,6 +105,37 @@ return getPagePath(fromUrl) !== getPagePath(toUrl); } + function isJsonApiReferenceTransition(fromUrl, toUrl) { + return ( + getPagePath(fromUrl).startsWith(JSON_API_REFERENCE_PREFIX) && + getPagePath(toUrl).startsWith(JSON_API_REFERENCE_PREFIX) + ); + } + + function scheduleNavigationFallback(fromUrl, toUrl) { + if (!isJsonApiReferenceTransition(fromUrl, toUrl)) { + return; + } + + if (navigationFallbackTimer) { + window.clearTimeout(navigationFallbackTimer); + } + + var fromPath = getPagePath(fromUrl); + navigationFallbackTimer = window.setTimeout(function () { + navigationFallbackTimer = null; + + // Mintlify can suppress the client-side transition from the overview to + // a manual API page at narrow breakpoints. Fall back to native navigation + // only when the click has left the browser on the original route. + if (window.location.pathname !== fromPath) { + return; + } + + window.location.assign(toUrl); + }, NAVIGATION_FALLBACK_MS); + } + function prepareTransition(element) { element.style.transition = "opacity " + FADE_MS + "ms ease-out"; element.style.position = "relative"; @@ -242,6 +276,7 @@ } fadedOutFromClick = fadeOut(); + scheduleNavigationFallback(window.location.href, url.href); }, true ); From 1b17e828ed6a1b468df9f19766d7ca03655ccaf8 Mon Sep 17 00:00:00 2001 From: danielporterda Date: Tue, 25 Aug 2026 18:22:41 -0400 Subject: [PATCH 07/14] Harden manual OpenAPI reference rendering Signed-off-by: danielporterda --- .../delete-v2idps:idp-id.mdx | 67 +++------ .../delete-v2users:user-id.mdx | 71 ++++------ .../json-api-reference/get-livez.mdx | 62 +++------ .../json-api-reference/get-readyz.mdx | 66 +++------ .../get-v2authenticated-user.mdx | 67 +++------ .../json-api-reference/get-v2idps.mdx | 62 +++------ .../json-api-reference/get-v2idps:idp-id.mdx | 71 ++++------ ...ve-submissionpreferred-package-version.mdx | 83 ++++-------- .../get-v2package-vetting.mdx | 62 +++------ .../json-api-reference/get-v2packages.mdx | 62 +++------ .../get-v2packages:package-id.mdx | 71 ++++------ .../get-v2packages:package-idstatus.mdx | 67 +++------ .../json-api-reference/get-v2parties.mdx | 72 ++++------ .../get-v2parties:party.mdx | 77 ++++------- .../get-v2partiesparticipant-id.mdx | 62 +++------ .../get-v2stateactive-contracts-page.mdx | 62 +++------ .../get-v2stateconnected-synchronizers.mdx | 77 ++++------- .../get-v2statelatest-pruned-offsets.mdx | 62 +++------ .../get-v2stateledger-end.mdx | 62 +++------ ...pdatestransaction-tree-by-id:update-id.mdx | 72 ++++------ ...datestransaction-tree-by-offset:offset.mdx | 69 ++++------ .../json-api-reference/get-v2users.mdx | 62 +++------ .../get-v2users:user-id.mdx | 72 ++++------ .../get-v2users:user-idrights.mdx | 67 +++------ .../json-api-reference/get-v2version.mdx | 66 +++------ .../patch-v2idps:idp-id.mdx | 75 ++++------ .../patch-v2parties:party.mdx | 75 ++++------ .../patch-v2users:user-id.mdx | 69 ++++------ ...ch-v2users:user-ididentity-provider-id.mdx | 71 ++++------ .../patch-v2users:user-idrights.mdx | 67 +++------ ...ost-v2commandsasyncsubmit-reassignment.mdx | 68 ++++------ .../post-v2commandsasyncsubmit.mdx | 68 ++++------ .../post-v2commandscommand-completions.mdx | 68 ++++------ .../post-v2commandscompletions.mdx | 68 ++++------ ...mmandssubmit-and-wait-for-reassignment.mdx | 64 +++------ ...dssubmit-and-wait-for-transaction-tree.mdx | 64 +++------ ...ommandssubmit-and-wait-for-transaction.mdx | 62 +++------ .../post-v2commandssubmit-and-wait.mdx | 64 +++------ .../post-v2contractscontract-by-id.mdx | 62 +++------ .../json-api-reference/post-v2dars.mdx | 74 ++++------ .../post-v2darsvalidate.mdx | 69 ++++------ .../post-v2eventsevents-by-contract-id.mdx | 70 ++++------ .../json-api-reference/post-v2idps.mdx | 68 ++++------ .../post-v2interactive-submissionexecute.mdx | 70 ++++------ ...v2interactive-submissionexecuteandwait.mdx | 66 ++++----- ...submissionexecuteandwaitfortransaction.mdx | 66 ++++----- ...teractive-submissionpreferred-packages.mdx | 64 +++------ .../post-v2interactive-submissionprepare.mdx | 64 +++------ .../post-v2package-vetting.mdx | 62 +++------ .../post-v2package-vettinglist.mdx | 62 +++------ .../post-v2package-vettingupdate.mdx | 62 +++------ .../json-api-reference/post-v2packages.mdx | 74 ++++------ .../json-api-reference/post-v2parties.mdx | 68 ++++------ .../post-v2partiesexternalallocate.mdx | 64 +++------ ...ost-v2partiesexternalgenerate-topology.mdx | 64 +++------ .../post-v2stateactive-contracts-page.mdx | 62 +++------ .../post-v2stateactive-contracts.mdx | 68 ++++------ .../json-api-reference/post-v2updates.mdx | 68 ++++------ .../post-v2updatesflats.mdx | 68 ++++------ .../post-v2updatesget-updates-page.mdx | 62 +++------ .../post-v2updatestransaction-by-id.mdx | 62 +++------ .../post-v2updatestransaction-by-offset.mdx | 62 +++------ .../post-v2updatestrees.mdx | 68 ++++------ .../post-v2updatesupdate-by-id.mdx | 66 +++------ .../post-v2updatesupdate-by-offset.mdx | 66 +++------ .../json-api-reference/post-v2users.mdx | 62 +++------ .../post-v2users:user-idrights.mdx | 67 +++------ docs-main/styles.css | 15 +- src/x2mdx/openapi/render.py | 122 ++++++++++++++--- src/x2mdx/templates/reference/operation.md.j2 | 3 + .../templates/shared/reference_macros.md.j2 | 29 +++- tests/test_openapi_manual_render.py | 128 +++++++++++++++++- 72 files changed, 1765 insertions(+), 3018 deletions(-) diff --git a/docs-main/reference/json-api-reference/delete-v2idps:idp-id.mdx b/docs-main/reference/json-api-reference/delete-v2idps:idp-id.mdx index af3042490..1ee29b07b 100644 --- a/docs-main/reference/json-api-reference/delete-v2idps:idp-id.mdx +++ b/docs-main/reference/json-api-reference/delete-v2idps:idp-id.mdx @@ -36,24 +36,26 @@ Delete an existing identity provider configuration. ## Protocol Details -
+ +
-
Operation ID
-
deleteV2IdpsIdp-id
+ Operation ID + deleteV2IdpsIdp-id
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+
+ ## Inputs @@ -68,10 +70,7 @@ Delete an existing identity provider configuration. - - -- - + @@ -125,9 +124,7 @@ Does not (yet) contain any data. - -- - + @@ -151,63 +148,43 @@ Does not (yet) contain any data. - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/delete-v2users:user-id.mdx b/docs-main/reference/json-api-reference/delete-v2users:user-id.mdx index 6c2c6f114..d0fe8bb6f 100644 --- a/docs-main/reference/json-api-reference/delete-v2users:user-id.mdx +++ b/docs-main/reference/json-api-reference/delete-v2users:user-id.mdx @@ -36,24 +36,26 @@ Delete an existing user and all its rights. ## Protocol Details -
+ +
-
Operation ID
-
deleteV2UsersUser-id
+ Operation ID + deleteV2UsersUser-id
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+
+ ## Inputs @@ -68,10 +70,7 @@ Delete an existing user and all its rights. - - -- - + @@ -99,9 +98,7 @@ Delete an existing user and all its rights. - -- - + @@ -125,9 +122,7 @@ Delete an existing user and all its rights. - -- - + @@ -151,63 +146,43 @@ Delete an existing user and all its rights. - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/get-livez.mdx b/docs-main/reference/json-api-reference/get-livez.mdx index 86a34b7ca..bfb3362e5 100644 --- a/docs-main/reference/json-api-reference/get-livez.mdx +++ b/docs-main/reference/json-api-reference/get-livez.mdx @@ -34,24 +34,26 @@ Checks if the service is alive ## Protocol Details -
+ +
-
Operation ID
-
getLivez
+ Operation ID + getLivez
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+
+ ## Inputs @@ -84,9 +86,7 @@ Checks if the service is alive - -- - + @@ -110,63 +110,43 @@ Checks if the service is alive - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/get-readyz.mdx b/docs-main/reference/json-api-reference/get-readyz.mdx index c5751daa6..0f2b881b2 100644 --- a/docs-main/reference/json-api-reference/get-readyz.mdx +++ b/docs-main/reference/json-api-reference/get-readyz.mdx @@ -34,24 +34,26 @@ Checks if the service is ready to serve requests ## Protocol Details -
+ +
-
Operation ID
-
getReadyz
+ Operation ID + getReadyz
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -76,9 +78,7 @@ Checks if the service is ready to serve requests - -- - + @@ -102,9 +102,7 @@ Checks if the service is ready to serve requests - -- - + @@ -128,63 +126,43 @@ Checks if the service is ready to serve requests - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/get-v2authenticated-user.mdx b/docs-main/reference/json-api-reference/get-v2authenticated-user.mdx index 9cdd5d5c6..d6fefc1df 100644 --- a/docs-main/reference/json-api-reference/get-v2authenticated-user.mdx +++ b/docs-main/reference/json-api-reference/get-v2authenticated-user.mdx @@ -36,24 +36,26 @@ Get the user data of the current authenticated user. ## Protocol Details -
+ +
-
Operation ID
-
getV2Authenticated-user
+ Operation ID + getV2Authenticated-user
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -68,10 +70,7 @@ Get the user data of the current authenticated user. - - -- - + @@ -125,9 +124,7 @@ Users and rights ///////////////// Users are used to dynamically manage the righ - -- - + @@ -151,63 +148,43 @@ Users and rights ///////////////// Users are used to dynamically manage the righ - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/get-v2idps.mdx b/docs-main/reference/json-api-reference/get-v2idps.mdx index ade49cc3e..a2f9429b1 100644 --- a/docs-main/reference/json-api-reference/get-v2idps.mdx +++ b/docs-main/reference/json-api-reference/get-v2idps.mdx @@ -36,24 +36,26 @@ List all existing identity provider configurations. ## Protocol Details -
+ +
-
Operation ID
-
getV2Idps
+ Operation ID + getV2Idps
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -104,9 +106,7 @@ The list of identity provider configs Required: must be non-empty - -- - + @@ -130,63 +130,43 @@ The list of identity provider configs Required: must be non-empty - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/get-v2idps:idp-id.mdx b/docs-main/reference/json-api-reference/get-v2idps:idp-id.mdx index 777e366af..6b99e59c1 100644 --- a/docs-main/reference/json-api-reference/get-v2idps:idp-id.mdx +++ b/docs-main/reference/json-api-reference/get-v2idps:idp-id.mdx @@ -36,24 +36,26 @@ Get the identity provider configuration data by id. ## Protocol Details -
+ +
-
Operation ID
-
getV2IdpsIdp-id
+ Operation ID + getV2IdpsIdp-id
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -68,10 +70,7 @@ Get the identity provider configuration data by id. - - -- - + @@ -99,9 +98,7 @@ Get the identity provider configuration data by id. - -- - + @@ -125,9 +122,7 @@ Get the identity provider configuration data by id. - -- - + @@ -151,63 +146,43 @@ Get the identity provider configuration data by id. - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/get-v2interactive-submissionpreferred-package-version.mdx b/docs-main/reference/json-api-reference/get-v2interactive-submissionpreferred-package-version.mdx index 5c6c018a5..e3d50228f 100644 --- a/docs-main/reference/json-api-reference/get-v2interactive-submissionpreferred-package-version.mdx +++ b/docs-main/reference/json-api-reference/get-v2interactive-submissionpreferred-package-version.mdx @@ -36,24 +36,26 @@ Get the preferred package version for constructing a command submission. This en ## Protocol Details -
+ +
-
Operation ID
-
getV2Interactive-submissionPreferred-package-version
+ Operation ID + getV2Interactive-submissionPreferred-package-version
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -68,17 +70,11 @@ Get the preferred package version for constructing a command submission. This en - - -- - - + - -- - + @@ -86,15 +82,12 @@ Get the preferred package version for constructing a command submission. This en OpenAPI type: `string (date-time)`. -- - + - -- - + @@ -122,9 +115,7 @@ OpenAPI type: `string (date-time)`. - -- - + @@ -148,9 +139,7 @@ OpenAPI type: `string (date-time)`. - -- - + @@ -174,63 +163,43 @@ OpenAPI type: `string (date-time)`. - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/get-v2package-vetting.mdx b/docs-main/reference/json-api-reference/get-v2package-vetting.mdx index 313f2ff46..c9d01d3eb 100644 --- a/docs-main/reference/json-api-reference/get-v2package-vetting.mdx +++ b/docs-main/reference/json-api-reference/get-v2package-vetting.mdx @@ -36,24 +36,26 @@ Lists which participant node vetted what packages on which synchronizer. This en ## Protocol Details -
+ +
-
Operation ID
-
getV2Package-vetting
+ Operation ID + getV2Package-vetting
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -164,9 +166,7 @@ Pagination token to retrieve the next page. Empty string if there are no further - -- - + @@ -190,63 +190,43 @@ Pagination token to retrieve the next page. Empty string if there are no further - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/get-v2packages.mdx b/docs-main/reference/json-api-reference/get-v2packages.mdx index 6e9e201c0..8bffef001 100644 --- a/docs-main/reference/json-api-reference/get-v2packages.mdx +++ b/docs-main/reference/json-api-reference/get-v2packages.mdx @@ -36,24 +36,26 @@ Returns the identifiers of all supported packages. ## Protocol Details -
+ +
-
Operation ID
-
getV2Packages
+ Operation ID + getV2Packages
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -104,9 +106,7 @@ The IDs of all Daml-LF packages supported by the server. Each element must be a - -- - + @@ -130,63 +130,43 @@ The IDs of all Daml-LF packages supported by the server. Each element must be a - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/get-v2packages:package-id.mdx b/docs-main/reference/json-api-reference/get-v2packages:package-id.mdx index 97ffa9ce4..8c02b7d7c 100644 --- a/docs-main/reference/json-api-reference/get-v2packages:package-id.mdx +++ b/docs-main/reference/json-api-reference/get-v2packages:package-id.mdx @@ -36,24 +36,26 @@ Returns the contents of a single package. ## Protocol Details -
+ +
-
Operation ID
-
getV2PackagesPackage-id
+ Operation ID + getV2PackagesPackage-id
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -68,10 +70,7 @@ Returns the contents of a single package. - - -- - + @@ -99,9 +98,7 @@ Returns the contents of a single package. - -- - + @@ -125,9 +122,7 @@ Returns the contents of a single package. - -- - + @@ -151,63 +146,43 @@ Returns the contents of a single package. - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/get-v2packages:package-idstatus.mdx b/docs-main/reference/json-api-reference/get-v2packages:package-idstatus.mdx index b2de72476..4b187d10c 100644 --- a/docs-main/reference/json-api-reference/get-v2packages:package-idstatus.mdx +++ b/docs-main/reference/json-api-reference/get-v2packages:package-idstatus.mdx @@ -36,24 +36,26 @@ Returns the status of a single package. ## Protocol Details -
+ +
-
Operation ID
-
getV2PackagesPackage-idStatus
+ Operation ID + getV2PackagesPackage-idStatus
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -68,10 +70,7 @@ Returns the status of a single package. - - -- - + @@ -125,9 +124,7 @@ The status of the package. Required - -- - + @@ -151,63 +148,43 @@ The status of the package. Required - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/get-v2parties.mdx b/docs-main/reference/json-api-reference/get-v2parties.mdx index 385363b70..86e5b2e86 100644 --- a/docs-main/reference/json-api-reference/get-v2parties.mdx +++ b/docs-main/reference/json-api-reference/get-v2parties.mdx @@ -36,24 +36,26 @@ List the parties known by the participant. The list returned contains parties wh ## Protocol Details -
+ +
-
Operation ID
-
getV2Parties
+ Operation ID + getV2Parties
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -68,17 +70,11 @@ List the parties known by the participant. The list returned contains parties wh - + -- - - - - -- - + @@ -154,9 +150,7 @@ Pagination token to retrieve the next page. Empty, if there are no further resul - -- - + @@ -180,63 +174,43 @@ Pagination token to retrieve the next page. Empty, if there are no further resul - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/get-v2parties:party.mdx b/docs-main/reference/json-api-reference/get-v2parties:party.mdx index 4deabb103..9b1cbd547 100644 --- a/docs-main/reference/json-api-reference/get-v2parties:party.mdx +++ b/docs-main/reference/json-api-reference/get-v2parties:party.mdx @@ -36,24 +36,26 @@ Get the party details of the given parties. Only known parties will be returned ## Protocol Details -
+ +
-
Operation ID
-
getV2PartiesParty
+ Operation ID + getV2PartiesParty
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -68,10 +70,7 @@ Get the party details of the given parties. Only known parties will be returned - - -- - + @@ -89,17 +88,11 @@ Get the party details of the given parties. Only known parties will be returned - - -- - + - - -- - + @@ -153,9 +146,7 @@ The details of the requested Daml parties by the participant, if known. The part - -- - + @@ -179,63 +170,43 @@ The details of the requested Daml parties by the participant, if known. The part - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/get-v2partiesparticipant-id.mdx b/docs-main/reference/json-api-reference/get-v2partiesparticipant-id.mdx index b964ae222..a5b9c1a45 100644 --- a/docs-main/reference/json-api-reference/get-v2partiesparticipant-id.mdx +++ b/docs-main/reference/json-api-reference/get-v2partiesparticipant-id.mdx @@ -36,24 +36,26 @@ Return the identifier of the participant. All horizontally scaled replicas shoul ## Protocol Details -
+ +
-
Operation ID
-
getV2PartiesParticipant-id
+ Operation ID + getV2PartiesParticipant-id
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -104,9 +106,7 @@ Identifier of the participant, which SHOULD be globally unique. Must be a valid - -- - + @@ -130,63 +130,43 @@ Identifier of the participant, which SHOULD be globally unique. Must be a valid - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/get-v2stateactive-contracts-page.mdx b/docs-main/reference/json-api-reference/get-v2stateactive-contracts-page.mdx index d4e2ad235..c8780f477 100644 --- a/docs-main/reference/json-api-reference/get-v2stateactive-contracts-page.mdx +++ b/docs-main/reference/json-api-reference/get-v2stateactive-contracts-page.mdx @@ -34,24 +34,26 @@ Deprecated Use POST version of this endpoint ## Protocol Details -
+ +
-
Operation ID
-
getV2StateActive-contracts-page
+ Operation ID + getV2StateActive-contracts-page
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -168,9 +170,7 @@ If not present this is the last page. If present, this token must be used to get - -- - + @@ -194,63 +194,43 @@ If not present this is the last page. If present, this token must be used to get - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/get-v2stateconnected-synchronizers.mdx b/docs-main/reference/json-api-reference/get-v2stateconnected-synchronizers.mdx index 571ce6f1a..fc6ea4e1d 100644 --- a/docs-main/reference/json-api-reference/get-v2stateconnected-synchronizers.mdx +++ b/docs-main/reference/json-api-reference/get-v2stateconnected-synchronizers.mdx @@ -36,24 +36,26 @@ Get the list of connected synchronizers at the time of the query. ## Protocol Details -
+ +
-
Operation ID
-
getV2StateConnected-synchronizers
+ Operation ID + getV2StateConnected-synchronizers
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -68,24 +70,15 @@ Get the list of connected synchronizers at the time of the query. - - -- - - + - -- - + - - -- - + @@ -139,9 +132,7 @@ Optional: can be empty - -- - + @@ -165,63 +156,43 @@ Optional: can be empty - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/get-v2statelatest-pruned-offsets.mdx b/docs-main/reference/json-api-reference/get-v2statelatest-pruned-offsets.mdx index 176b7dea9..5cf58b04e 100644 --- a/docs-main/reference/json-api-reference/get-v2statelatest-pruned-offsets.mdx +++ b/docs-main/reference/json-api-reference/get-v2statelatest-pruned-offsets.mdx @@ -36,24 +36,26 @@ Get the latest successfully pruned ledger offsets ## Protocol Details -
+ +
-
Operation ID
-
getV2StateLatest-pruned-offsets
+ Operation ID + getV2StateLatest-pruned-offsets
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -110,9 +112,7 @@ It will always be a non-negative integer. If positive, the absolute offset up to - -- - + @@ -136,63 +136,43 @@ It will always be a non-negative integer. If positive, the absolute offset up to - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/get-v2stateledger-end.mdx b/docs-main/reference/json-api-reference/get-v2stateledger-end.mdx index ec4053602..191a0b1f7 100644 --- a/docs-main/reference/json-api-reference/get-v2stateledger-end.mdx +++ b/docs-main/reference/json-api-reference/get-v2stateledger-end.mdx @@ -36,24 +36,26 @@ Get the current ledger end. Subscriptions started with the returned offset will ## Protocol Details -
+ +
-
Operation ID
-
getV2StateLedger-end
+ Operation ID + getV2StateLedger-end
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -104,9 +106,7 @@ It will always be a non-negative integer. If zero, the participant view of the l - -- - + @@ -130,63 +130,43 @@ It will always be a non-negative integer. If zero, the participant view of the l - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/get-v2updatestransaction-tree-by-id:update-id.mdx b/docs-main/reference/json-api-reference/get-v2updatestransaction-tree-by-id:update-id.mdx index 890057d9f..2a5355d90 100644 --- a/docs-main/reference/json-api-reference/get-v2updatestransaction-tree-by-id:update-id.mdx +++ b/docs-main/reference/json-api-reference/get-v2updatestransaction-tree-by-id:update-id.mdx @@ -38,24 +38,26 @@ Get transaction tree by id. Provided for backwards compatibility, it will be rem ## Protocol Details -
+ +
-
Operation ID
-
getV2UpdatesTransaction-tree-by-idUpdate-id
+ Operation ID + getV2UpdatesTransaction-tree-by-idUpdate-id
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -70,10 +72,7 @@ Get transaction tree by id. Provided for backwards compatibility, it will be rem - - -- - + @@ -91,10 +90,7 @@ Get transaction tree by id. Provided for backwards compatibility, it will be rem - - -- - + @@ -148,9 +144,7 @@ Provided for backwards compatibility, it will be removed in the Canton version 3 - -- - + @@ -174,63 +168,43 @@ Provided for backwards compatibility, it will be removed in the Canton version 3 - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/get-v2updatestransaction-tree-by-offset:offset.mdx b/docs-main/reference/json-api-reference/get-v2updatestransaction-tree-by-offset:offset.mdx index 85eb4be31..35140b03c 100644 --- a/docs-main/reference/json-api-reference/get-v2updatestransaction-tree-by-offset:offset.mdx +++ b/docs-main/reference/json-api-reference/get-v2updatestransaction-tree-by-offset:offset.mdx @@ -38,24 +38,26 @@ Get transaction tree by offset. Provided for backwards compatibility, it will be ## Protocol Details -
+ +
-
Operation ID
-
getV2UpdatesTransaction-tree-by-offsetOffset
+ Operation ID + getV2UpdatesTransaction-tree-by-offsetOffset
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -74,7 +76,7 @@ Get transaction tree by offset. Provided for backwards compatibility, it will be OpenAPI type: `integer (int64)`. -- +
@@ -93,10 +95,7 @@ OpenAPI type: `integer (int64)`. - - -- - + @@ -150,9 +149,7 @@ Provided for backwards compatibility, it will be removed in the Canton version 3 - -- - + @@ -176,63 +173,43 @@ Provided for backwards compatibility, it will be removed in the Canton version 3 - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/get-v2users.mdx b/docs-main/reference/json-api-reference/get-v2users.mdx index 2d82c1735..3eb50fafb 100644 --- a/docs-main/reference/json-api-reference/get-v2users.mdx +++ b/docs-main/reference/json-api-reference/get-v2users.mdx @@ -36,24 +36,26 @@ List all existing users. ## Protocol Details -
+ +
-
Operation ID
-
getV2Users
+ Operation ID + getV2Users
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -140,9 +142,7 @@ Pagination token to retrieve the next page. Empty, if there are no further resul - -- - + @@ -166,63 +166,43 @@ Pagination token to retrieve the next page. Empty, if there are no further resul - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/get-v2users:user-id.mdx b/docs-main/reference/json-api-reference/get-v2users:user-id.mdx index 1895bafdc..e770abc25 100644 --- a/docs-main/reference/json-api-reference/get-v2users:user-id.mdx +++ b/docs-main/reference/json-api-reference/get-v2users:user-id.mdx @@ -36,24 +36,26 @@ Get the user data of a specific user or the authenticated user. ## Protocol Details -
+ +
-
Operation ID
-
getV2UsersUser-id
+ Operation ID + getV2UsersUser-id
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -68,10 +70,7 @@ Get the user data of a specific user or the authenticated user. - - -- - + @@ -89,10 +88,7 @@ Get the user data of a specific user or the authenticated user. - - -- - + @@ -146,9 +142,7 @@ Users and rights ///////////////// Users are used to dynamically manage the righ - -- - + @@ -172,63 +166,43 @@ Users and rights ///////////////// Users are used to dynamically manage the righ - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/get-v2users:user-idrights.mdx b/docs-main/reference/json-api-reference/get-v2users:user-idrights.mdx index 81ed9ec9e..df2b3d83e 100644 --- a/docs-main/reference/json-api-reference/get-v2users:user-idrights.mdx +++ b/docs-main/reference/json-api-reference/get-v2users:user-idrights.mdx @@ -36,24 +36,26 @@ List the set of all rights granted to a user. ## Protocol Details -
+ +
-
Operation ID
-
getV2UsersUser-idRights
+ Operation ID + getV2UsersUser-idRights
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -68,10 +70,7 @@ List the set of all rights granted to a user. - - -- - + @@ -125,9 +124,7 @@ All rights of the user. Optional: can be empty - -- - + @@ -151,63 +148,43 @@ All rights of the user. Optional: can be empty - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/get-v2version.mdx b/docs-main/reference/json-api-reference/get-v2version.mdx index 9a117e9ad..340412fc7 100644 --- a/docs-main/reference/json-api-reference/get-v2version.mdx +++ b/docs-main/reference/json-api-reference/get-v2version.mdx @@ -36,24 +36,26 @@ Read the Ledger API version ## Protocol Details -
+ +
-
Operation ID
-
getV2Version
+ Operation ID + getV2Version
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -84,9 +86,7 @@ The version of the ledger API. Required - -- - + @@ -110,9 +110,7 @@ The version of the ledger API. Required - -- - + @@ -136,63 +134,43 @@ The version of the ledger API. Required - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/patch-v2idps:idp-id.mdx b/docs-main/reference/json-api-reference/patch-v2idps:idp-id.mdx index 3aa82be5e..5970b00e9 100644 --- a/docs-main/reference/json-api-reference/patch-v2idps:idp-id.mdx +++ b/docs-main/reference/json-api-reference/patch-v2idps:idp-id.mdx @@ -36,24 +36,26 @@ Update selected modifiable attribute of an identity provider config resource des ## Protocol Details -
+ +
-
Operation ID
-
patchV2IdpsIdp-id
+ Operation ID + patchV2IdpsIdp-id
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -68,10 +70,7 @@ Update selected modifiable attribute of an identity provider config resource des - - -- - + @@ -99,7 +98,7 @@ Update selected modifiable attribute of an identity provider config resource des OpenAPI type: `IdentityProviderConfig`. -- + @@ -108,7 +107,7 @@ OpenAPI type: `IdentityProviderConfig`. OpenAPI type: `FieldMask`. -- +
@@ -137,9 +136,7 @@ OpenAPI type: `FieldMask`. - -- - + @@ -163,9 +160,7 @@ OpenAPI type: `FieldMask`. - -- - + @@ -189,63 +184,43 @@ OpenAPI type: `FieldMask`. - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/patch-v2parties:party.mdx b/docs-main/reference/json-api-reference/patch-v2parties:party.mdx index 0c37ced1a..81c07094a 100644 --- a/docs-main/reference/json-api-reference/patch-v2parties:party.mdx +++ b/docs-main/reference/json-api-reference/patch-v2parties:party.mdx @@ -36,24 +36,26 @@ Update selected modifiable participant-local attributes of a party details resou ## Protocol Details -
+ +
-
Operation ID
-
patchV2PartiesParty
+ Operation ID + patchV2PartiesParty
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -68,10 +70,7 @@ Update selected modifiable participant-local attributes of a party details resou - - -- - + @@ -99,7 +98,7 @@ Update selected modifiable participant-local attributes of a party details resou OpenAPI type: `PartyDetails`. -- + @@ -108,7 +107,7 @@ OpenAPI type: `PartyDetails`. OpenAPI type: `FieldMask`. -- +
@@ -137,9 +136,7 @@ OpenAPI type: `FieldMask`. - -- - + @@ -163,9 +160,7 @@ OpenAPI type: `FieldMask`. - -- - + @@ -189,63 +184,43 @@ OpenAPI type: `FieldMask`. - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/patch-v2users:user-id.mdx b/docs-main/reference/json-api-reference/patch-v2users:user-id.mdx index b27e80a96..1c3223e47 100644 --- a/docs-main/reference/json-api-reference/patch-v2users:user-id.mdx +++ b/docs-main/reference/json-api-reference/patch-v2users:user-id.mdx @@ -36,24 +36,26 @@ Update selected modifiable attribute of a user resource described by the ``User` ## Protocol Details -
+ +
-
Operation ID
-
patchV2UsersUser-id
+ Operation ID + patchV2UsersUser-id
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -68,10 +70,7 @@ Update selected modifiable attribute of a user resource described by the ``User` - - -- - + @@ -108,7 +107,7 @@ Users and rights ///////////////// Users are used to dynamically manage the righ OpenAPI type: `FieldMask`. -- + @@ -163,9 +162,7 @@ Users and rights ///////////////// Users are used to dynamically manage the righ - -- - + @@ -189,63 +186,43 @@ Users and rights ///////////////// Users are used to dynamically manage the righ - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/patch-v2users:user-ididentity-provider-id.mdx b/docs-main/reference/json-api-reference/patch-v2users:user-ididentity-provider-id.mdx index 223919000..929af2a0a 100644 --- a/docs-main/reference/json-api-reference/patch-v2users:user-ididentity-provider-id.mdx +++ b/docs-main/reference/json-api-reference/patch-v2users:user-ididentity-provider-id.mdx @@ -36,24 +36,26 @@ Update the assignment of a user from one IDP to another. ## Protocol Details -
+ +
-
Operation ID
-
patchV2UsersUser-idIdentity-provider-id
+ Operation ID + patchV2UsersUser-idIdentity-provider-id
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -68,10 +70,7 @@ Update the assignment of a user from one IDP to another. - - -- - + @@ -140,9 +139,7 @@ Target identity provider ID of the user If omitted, the default IDP is assumed O - -- - + @@ -166,9 +163,7 @@ Target identity provider ID of the user If omitted, the default IDP is assumed O - -- - + @@ -192,63 +187,43 @@ Target identity provider ID of the user If omitted, the default IDP is assumed O - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/patch-v2users:user-idrights.mdx b/docs-main/reference/json-api-reference/patch-v2users:user-idrights.mdx index 72e964e4e..51f7df75f 100644 --- a/docs-main/reference/json-api-reference/patch-v2users:user-idrights.mdx +++ b/docs-main/reference/json-api-reference/patch-v2users:user-idrights.mdx @@ -36,24 +36,26 @@ Revoke rights from a user. Revoking rights does not affect the resource version ## Protocol Details -
+ +
-
Operation ID
-
patchV2UsersUser-idRights
+ Operation ID + patchV2UsersUser-idRights
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -68,10 +70,7 @@ Revoke rights from a user. Revoking rights does not affect the resource version - - -- - + @@ -168,9 +167,7 @@ The rights that were actually revoked by the request. Optional: can be empty - -- - + @@ -194,63 +191,43 @@ The rights that were actually revoked by the request. Optional: can be empty - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/post-v2commandsasyncsubmit-reassignment.mdx b/docs-main/reference/json-api-reference/post-v2commandsasyncsubmit-reassignment.mdx index fcb958e55..15f09162d 100644 --- a/docs-main/reference/json-api-reference/post-v2commandsasyncsubmit-reassignment.mdx +++ b/docs-main/reference/json-api-reference/post-v2commandsasyncsubmit-reassignment.mdx @@ -36,24 +36,26 @@ Submit a single reassignment. ## Protocol Details -
+ +
-
Operation ID
-
postV2CommandsAsyncSubmit-reassignment
+ Operation ID + postV2CommandsAsyncSubmit-reassignment
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -78,7 +80,7 @@ Submit a single reassignment. OpenAPI type: `ReassignmentCommands`. -- +
@@ -107,9 +109,7 @@ OpenAPI type: `ReassignmentCommands`. - -- - + @@ -133,9 +133,7 @@ OpenAPI type: `ReassignmentCommands`. - -- - + @@ -159,63 +157,43 @@ OpenAPI type: `ReassignmentCommands`. - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/post-v2commandsasyncsubmit.mdx b/docs-main/reference/json-api-reference/post-v2commandsasyncsubmit.mdx index 0890336c6..b31db2d54 100644 --- a/docs-main/reference/json-api-reference/post-v2commandsasyncsubmit.mdx +++ b/docs-main/reference/json-api-reference/post-v2commandsasyncsubmit.mdx @@ -36,24 +36,26 @@ Submit a single composite command. ## Protocol Details -
+ +
-
Operation ID
-
postV2CommandsAsyncSubmit
+ Operation ID + postV2CommandsAsyncSubmit
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -138,7 +140,7 @@ Lower bound for the ledger time assigned to the resulting transaction. Note: The OpenAPI type: `Duration`. -- +
@@ -215,9 +217,7 @@ The maximum number of passes for the Topology-Aware Package Selection (TAPS). Hi - -- - + @@ -241,9 +241,7 @@ The maximum number of passes for the Topology-Aware Package Selection (TAPS). Hi - -- - + @@ -267,63 +265,43 @@ The maximum number of passes for the Topology-Aware Package Selection (TAPS). Hi - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/post-v2commandscommand-completions.mdx b/docs-main/reference/json-api-reference/post-v2commandscommand-completions.mdx index de8ddd444..e82636dff 100644 --- a/docs-main/reference/json-api-reference/post-v2commandscommand-completions.mdx +++ b/docs-main/reference/json-api-reference/post-v2commandscommand-completions.mdx @@ -29,29 +29,31 @@ playground: "interactive" -Query completions list (blocking call) Subscribe to command completion events. This streaming endpoint provides more flexibility in filtering than the predecessor ``CompletionStream``. Notice: This endpoint should be used for small results set. When number of results exceeded node configuration limit (`http-list-max-elements-limit`) there will be an error (`413 Content Too Large`) returned. Increasing this limit may lead to performance issues and high m... +Query completions list (blocking call) Subscribe to command completion events. This streaming endpoint provides more flexibility in filtering than the predecessor ``CompletionStream``. Notice: This endpoint should be used for small results set. When number of results exceeded node configuration limit (`http-list-max-elements-limit`) there will be an error (`413 Content Too Large`) returned. ## Protocol Details -
+ +
-
Operation ID
-
postV2CommandsCommand-completions
+ Operation ID + postV2CommandsCommand-completions
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -144,9 +146,7 @@ This optional field indicates the minimum offset for completions. This can be us - -- - + @@ -170,9 +170,7 @@ This optional field indicates the minimum offset for completions. This can be us - -- - + @@ -196,63 +194,43 @@ This optional field indicates the minimum offset for completions. This can be us - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/post-v2commandscompletions.mdx b/docs-main/reference/json-api-reference/post-v2commandscompletions.mdx index 1dcf1686a..9fba3b26e 100644 --- a/docs-main/reference/json-api-reference/post-v2commandscompletions.mdx +++ b/docs-main/reference/json-api-reference/post-v2commandscompletions.mdx @@ -31,29 +31,31 @@ playground: "interactive" -Query completions list (blocking call) Deprecated: please use ``GetCompletions`` instead. Subscribe to command completion events. Notice: This endpoint should be used for small results set. When number of results exceeded node configuration limit (`http-list-max-elements-limit`) there will be an error (`413 Content Too Large`) returned. Increasing this limit may lead to performance issues and high memory consumption. Consider using websockets (asyncapi)... +Query completions list (blocking call) Deprecated: please use ``GetCompletions`` instead. Subscribe to command completion events. Notice: This endpoint should be used for small results set. When number of results exceeded node configuration limit (`http-list-max-elements-limit`) there will be an error (`413 Content Too Large`) returned. Increasing this limit may lead to performance issues and high memory consumption. ## Protocol Details -
+ +
-
Operation ID
-
postV2CommandsCompletions
+ Operation ID + postV2CommandsCompletions
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -153,9 +155,7 @@ This optional field indicates the minimum offset for completions. This can be us - -- - + @@ -179,9 +179,7 @@ This optional field indicates the minimum offset for completions. This can be us - -- - + @@ -205,63 +203,43 @@ This optional field indicates the minimum offset for completions. This can be us - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait-for-reassignment.mdx b/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait-for-reassignment.mdx index 1539bc500..08d7ea889 100644 --- a/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait-for-reassignment.mdx +++ b/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait-for-reassignment.mdx @@ -36,24 +36,26 @@ Submits a single composite reassignment command, waits for its result, and retur ## Protocol Details -
+ +
-
Operation ID
-
postV2CommandsSubmit-and-wait-for-reassignment
+ Operation ID + postV2CommandsSubmit-and-wait-for-reassignment
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -78,7 +80,7 @@ Submits a single composite reassignment command, waits for its result, and retur OpenAPI type: `ReassignmentCommands`. -- +
@@ -142,9 +144,7 @@ Complete view of an on-ledger reassignment. - -- - + @@ -168,63 +168,43 @@ Complete view of an on-ledger reassignment. - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait-for-transaction-tree.mdx b/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait-for-transaction-tree.mdx index 50c0eda3f..8d02d8f32 100644 --- a/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait-for-transaction-tree.mdx +++ b/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait-for-transaction-tree.mdx @@ -38,24 +38,26 @@ Submit a batch of commands and wait for the transaction trees response. Provided ## Protocol Details -
+ +
-
Operation ID
-
postV2CommandsSubmit-and-wait-for-transaction-tree
+ Operation ID + postV2CommandsSubmit-and-wait-for-transaction-tree
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -140,7 +142,7 @@ Lower bound for the ledger time assigned to the resulting transaction. Note: The OpenAPI type: `Duration`. -- +
@@ -243,9 +245,7 @@ Provided for backwards compatibility, it will be removed in the Canton version 3 - -- - + @@ -269,63 +269,43 @@ Provided for backwards compatibility, it will be removed in the Canton version 3 - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait-for-transaction.mdx b/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait-for-transaction.mdx index a9b89ebf4..78714caca 100644 --- a/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait-for-transaction.mdx +++ b/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait-for-transaction.mdx @@ -36,24 +36,26 @@ Submits a single composite command, waits for its result, and returns the transa ## Protocol Details -
+ +
-
Operation ID
-
postV2CommandsSubmit-and-wait-for-transaction
+ Operation ID + postV2CommandsSubmit-and-wait-for-transaction
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -142,9 +144,7 @@ Filtered view of an on-ledger transaction's create and archive events. - -- - + @@ -168,63 +168,43 @@ Filtered view of an on-ledger transaction's create and archive events. - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait.mdx b/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait.mdx index 9aed6b021..1d7218ed5 100644 --- a/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait.mdx +++ b/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait.mdx @@ -36,24 +36,26 @@ Submits a single composite command and waits for its result. Propagates the gRPC ## Protocol Details -
+ +
-
Operation ID
-
postV2CommandsSubmit-and-wait
+ Operation ID + postV2CommandsSubmit-and-wait
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -138,7 +140,7 @@ Lower bound for the ledger time assigned to the resulting transaction. Note: The OpenAPI type: `Duration`. -- +
@@ -247,9 +249,7 @@ The details of the offset field are described in ``community/ledger-api/README.m - -- - + @@ -273,63 +273,43 @@ The details of the offset field are described in ``community/ledger-api/README.m - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/post-v2contractscontract-by-id.mdx b/docs-main/reference/json-api-reference/post-v2contractscontract-by-id.mdx index b5aa22e8a..cffe1fbda 100644 --- a/docs-main/reference/json-api-reference/post-v2contractscontract-by-id.mdx +++ b/docs-main/reference/json-api-reference/post-v2contractscontract-by-id.mdx @@ -36,24 +36,26 @@ Looking up contract data by contract ID. This endpoint is experimental / alpha, ## Protocol Details -
+ +
-
Operation ID
-
postV2ContractsContract-by-id
+ Operation ID + postV2ContractsContract-by-id
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -138,9 +140,7 @@ Records that a contract has been created, and choices may now be exercised on it - -- - + @@ -164,63 +164,43 @@ Records that a contract has been created, and choices may now be exercised on it - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/post-v2dars.mdx b/docs-main/reference/json-api-reference/post-v2dars.mdx index 14024abd5..ab3be3b4d 100644 --- a/docs-main/reference/json-api-reference/post-v2dars.mdx +++ b/docs-main/reference/json-api-reference/post-v2dars.mdx @@ -36,24 +36,26 @@ Upload a DAR to the participant node ## Protocol Details -
+ +
-
Operation ID
-
postV2Dars
+ Operation ID + postV2Dars
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -68,17 +70,11 @@ Upload a DAR to the participant node - - -- - - + - -- - + @@ -106,7 +102,7 @@ Upload a DAR to the participant node OpenAPI type: `string (binary)`. -- + @@ -161,9 +157,7 @@ A message that is received when the upload operation succeeded. - -- - + @@ -187,63 +181,43 @@ A message that is received when the upload operation succeeded. - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/post-v2darsvalidate.mdx b/docs-main/reference/json-api-reference/post-v2darsvalidate.mdx index cc7248044..de02a2af6 100644 --- a/docs-main/reference/json-api-reference/post-v2darsvalidate.mdx +++ b/docs-main/reference/json-api-reference/post-v2darsvalidate.mdx @@ -36,24 +36,26 @@ Validates the DAR and checks the upgrade compatibility of the DAR's packages wit ## Protocol Details -
+ +
-
Operation ID
-
postV2DarsValidate
+ Operation ID + postV2DarsValidate
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -68,10 +70,7 @@ Validates the DAR and checks the upgrade compatibility of the DAR's packages wit - - -- - + @@ -99,7 +98,7 @@ Validates the DAR and checks the upgrade compatibility of the DAR's packages wit OpenAPI type: `string (binary)`. -- + @@ -136,9 +135,7 @@ OpenAPI type: `string (binary)`. - -- - + @@ -162,63 +159,43 @@ OpenAPI type: `string (binary)`. - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/post-v2eventsevents-by-contract-id.mdx b/docs-main/reference/json-api-reference/post-v2eventsevents-by-contract-id.mdx index b2d852ae5..6b9cef995 100644 --- a/docs-main/reference/json-api-reference/post-v2eventsevents-by-contract-id.mdx +++ b/docs-main/reference/json-api-reference/post-v2eventsevents-by-contract-id.mdx @@ -36,24 +36,26 @@ Get the create and the consuming exercise event for the contract with the provid ## Protocol Details -
+ +
-
Operation ID
-
postV2EventsEvents-by-contract-id
+ Operation ID + postV2EventsEvents-by-contract-id
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -114,15 +116,11 @@ A format for events which defines both which events should be included and what - -- - + - -- - + @@ -146,9 +144,7 @@ A format for events which defines both which events should be included and what - -- - + @@ -172,63 +168,43 @@ A format for events which defines both which events should be included and what - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/post-v2idps.mdx b/docs-main/reference/json-api-reference/post-v2idps.mdx index 75ac6083e..fe8ce2637 100644 --- a/docs-main/reference/json-api-reference/post-v2idps.mdx +++ b/docs-main/reference/json-api-reference/post-v2idps.mdx @@ -36,24 +36,26 @@ Create a new identity provider configuration. The request will fail if the maxim ## Protocol Details -
+ +
-
Operation ID
-
postV2Idps
+ Operation ID + postV2Idps
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -78,7 +80,7 @@ Create a new identity provider configuration. The request will fail if the maxim OpenAPI type: `IdentityProviderConfig`. -- +
@@ -107,9 +109,7 @@ OpenAPI type: `IdentityProviderConfig`. - -- - + @@ -133,9 +133,7 @@ OpenAPI type: `IdentityProviderConfig`. - -- - + @@ -159,63 +157,43 @@ OpenAPI type: `IdentityProviderConfig`. - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/post-v2interactive-submissionexecute.mdx b/docs-main/reference/json-api-reference/post-v2interactive-submissionexecute.mdx index a0c540554..de2c27c6a 100644 --- a/docs-main/reference/json-api-reference/post-v2interactive-submissionexecute.mdx +++ b/docs-main/reference/json-api-reference/post-v2interactive-submissionexecute.mdx @@ -36,24 +36,26 @@ Execute a prepared submission _asynchronously_ on the ledger. Requires `actAs` o ## Protocol Details -
+ +
-
Operation ID
-
postV2Interactive-submissionExecute
+ Operation ID + postV2Interactive-submissionExecute
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -94,7 +96,7 @@ Additional signatures provided by the submitting parties OpenAPI type: `DeduplicationPeriod2`. -- +
@@ -124,7 +126,7 @@ The hashing scheme version used when building the hash Required OpenAPI type: `MinLedgerTime`. -- +
@@ -153,9 +155,7 @@ OpenAPI type: `MinLedgerTime`. - -- - + @@ -179,9 +179,7 @@ OpenAPI type: `MinLedgerTime`. - -- - + @@ -205,63 +203,43 @@ OpenAPI type: `MinLedgerTime`. - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/post-v2interactive-submissionexecuteandwait.mdx b/docs-main/reference/json-api-reference/post-v2interactive-submissionexecuteandwait.mdx index 705c912e8..5fb856a80 100644 --- a/docs-main/reference/json-api-reference/post-v2interactive-submissionexecuteandwait.mdx +++ b/docs-main/reference/json-api-reference/post-v2interactive-submissionexecuteandwait.mdx @@ -36,24 +36,26 @@ Similar to ExecuteSubmission but _synchronously_ wait for the completion of the ## Protocol Details -
+ +
-
Operation ID
-
postV2Interactive-submissionExecuteandwait
+ Operation ID + postV2Interactive-submissionExecuteandwait
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -94,7 +96,7 @@ Additional signatures provided by the submitting parties OpenAPI type: `DeduplicationPeriod2`. -- +
@@ -124,7 +126,7 @@ The hashing scheme version used when building the hash Required OpenAPI type: `MinLedgerTime`. -- +
@@ -185,9 +187,7 @@ The details of the offset field are described in ``community/ledger-api/README.m - -- - + @@ -211,63 +211,43 @@ The details of the offset field are described in ``community/ledger-api/README.m - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/post-v2interactive-submissionexecuteandwaitfortransaction.mdx b/docs-main/reference/json-api-reference/post-v2interactive-submissionexecuteandwaitfortransaction.mdx index 5084f1992..038f74b23 100644 --- a/docs-main/reference/json-api-reference/post-v2interactive-submissionexecuteandwaitfortransaction.mdx +++ b/docs-main/reference/json-api-reference/post-v2interactive-submissionexecuteandwaitfortransaction.mdx @@ -36,24 +36,26 @@ Similar to ExecuteSubmissionAndWait but additionally returns the transaction ## Protocol Details -
+ +
-
Operation ID
-
postV2Interactive-submissionExecuteandwaitfortransaction
+ Operation ID + postV2Interactive-submissionExecuteandwaitfortransaction
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -94,7 +96,7 @@ Additional signatures provided by the submitting parties OpenAPI type: `DeduplicationPeriod2`. -- +
@@ -124,7 +126,7 @@ The hashing scheme version used when building the hash Required OpenAPI type: `MinLedgerTime`. -- +
@@ -188,9 +190,7 @@ Filtered view of an on-ledger transaction's create and archive events. - -- - + @@ -214,63 +214,43 @@ Filtered view of an on-ledger transaction's create and archive events. - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/post-v2interactive-submissionpreferred-packages.mdx b/docs-main/reference/json-api-reference/post-v2interactive-submissionpreferred-packages.mdx index ab9878467..6399d7373 100644 --- a/docs-main/reference/json-api-reference/post-v2interactive-submissionpreferred-packages.mdx +++ b/docs-main/reference/json-api-reference/post-v2interactive-submissionpreferred-packages.mdx @@ -31,29 +31,31 @@ playground: "interactive" -Compute the preferred packages for the vetting requirements in the request. A preferred package is the highest-versioned package for a provided package-name that is vetted by all the participants hosting the provided parties. Ledger API clients should use this endpoint for constructing command submissions that are compatible with the provided preferred packages, by making informed decisions on: - which are the compatible packages that can be used to cre... +Compute the preferred packages for the vetting requirements in the request. A preferred package is the highest-versioned package for a provided package-name that is vetted by all the participants hosting the provided parties. ## Protocol Details -
+ +
-
Operation ID
-
postV2Interactive-submissionPreferred-packages
+ Operation ID + postV2Interactive-submissionPreferred-packages
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -153,9 +155,7 @@ The synchronizer for which the package preferences are computed. If the synchron - -- - + @@ -179,63 +179,43 @@ The synchronizer for which the package preferences are computed. If the synchron - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/post-v2interactive-submissionprepare.mdx b/docs-main/reference/json-api-reference/post-v2interactive-submissionprepare.mdx index 66a1250de..f901ab177 100644 --- a/docs-main/reference/json-api-reference/post-v2interactive-submissionprepare.mdx +++ b/docs-main/reference/json-api-reference/post-v2interactive-submissionprepare.mdx @@ -36,24 +36,26 @@ Requires `readAs` scope for the submitting party when LAPI User authorization is ## Protocol Details -
+ +
-
Operation ID
-
postV2Interactive-submissionPrepare
+ Operation ID + postV2Interactive-submissionPrepare
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -101,7 +103,7 @@ Individual elements of this atomic command. Must be non-empty. Limitation: Only OpenAPI type: `MinLedgerTime`. -- +
@@ -265,9 +267,7 @@ Estimation of the cost of submitting the prepared transaction The estimation is - -- - + @@ -291,63 +291,43 @@ Estimation of the cost of submitting the prepared transaction The estimation is - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/post-v2package-vetting.mdx b/docs-main/reference/json-api-reference/post-v2package-vetting.mdx index 5ab5feaa7..9ec5878d2 100644 --- a/docs-main/reference/json-api-reference/post-v2package-vetting.mdx +++ b/docs-main/reference/json-api-reference/post-v2package-vetting.mdx @@ -36,24 +36,26 @@ Update the vetted packages of this participant This endpoint (POST /package-vett ## Protocol Details -
+ +
-
Operation ID
-
postV2Package-vetting
+ Operation ID + postV2Package-vetting
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -169,9 +171,7 @@ The list of packages vetted on a given participant and synchronizer, modelled af - -- - + @@ -195,63 +195,43 @@ The list of packages vetted on a given participant and synchronizer, modelled af - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/post-v2package-vettinglist.mdx b/docs-main/reference/json-api-reference/post-v2package-vettinglist.mdx index 55839eb16..3774cae85 100644 --- a/docs-main/reference/json-api-reference/post-v2package-vettinglist.mdx +++ b/docs-main/reference/json-api-reference/post-v2package-vettinglist.mdx @@ -36,24 +36,26 @@ Lists which participant node vetted what packages on which synchronizer. Can be ## Protocol Details -
+ +
-
Operation ID
-
postV2Package-vettingList
+ Operation ID + postV2Package-vettingList
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -164,9 +166,7 @@ Pagination token to retrieve the next page. Empty string if there are no further - -- - + @@ -190,63 +190,43 @@ Pagination token to retrieve the next page. Empty string if there are no further - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/post-v2package-vettingupdate.mdx b/docs-main/reference/json-api-reference/post-v2package-vettingupdate.mdx index 48f9bcc4b..ceb189bef 100644 --- a/docs-main/reference/json-api-reference/post-v2package-vettingupdate.mdx +++ b/docs-main/reference/json-api-reference/post-v2package-vettingupdate.mdx @@ -36,24 +36,26 @@ Update the vetted packages of this participant ## Protocol Details -
+ +
-
Operation ID
-
postV2Package-vettingUpdate
+ Operation ID + postV2Package-vettingUpdate
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -169,9 +171,7 @@ The list of packages vetted on a given participant and synchronizer, modelled af - -- - + @@ -195,63 +195,43 @@ The list of packages vetted on a given participant and synchronizer, modelled af - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/post-v2packages.mdx b/docs-main/reference/json-api-reference/post-v2packages.mdx index d2dbb0418..055ddd785 100644 --- a/docs-main/reference/json-api-reference/post-v2packages.mdx +++ b/docs-main/reference/json-api-reference/post-v2packages.mdx @@ -36,24 +36,26 @@ Behaves the same as /dars. This endpoint will be deprecated and removed in a fut ## Protocol Details -
+ +
-
Operation ID
-
postV2Packages
+ Operation ID + postV2Packages
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -68,17 +70,11 @@ Behaves the same as /dars. This endpoint will be deprecated and removed in a fut - - -- - - + - -- - + @@ -106,7 +102,7 @@ Behaves the same as /dars. This endpoint will be deprecated and removed in a fut OpenAPI type: `string (binary)`. -- + @@ -161,9 +157,7 @@ A message that is received when the upload operation succeeded. - -- - + @@ -187,63 +181,43 @@ A message that is received when the upload operation succeeded. - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/post-v2parties.mdx b/docs-main/reference/json-api-reference/post-v2parties.mdx index ee06fbc33..1d6b177fd 100644 --- a/docs-main/reference/json-api-reference/post-v2parties.mdx +++ b/docs-main/reference/json-api-reference/post-v2parties.mdx @@ -31,29 +31,31 @@ playground: "interactive" -Allocates a new party on a ledger and adds it to the set managed by the participant. Caller specifies a party identifier suggestion, the actual identifier allocated might be different and is implementation specific. Caller can specify party metadata that is stored locally on the participant. This call may: - Succeed, in which case the actual allocated identifier is visible in the response. - Respond with a gRPC error daml-on-kv-ledger: suggestion's uniq... +Allocates a new party on a ledger and adds it to the set managed by the participant. Caller specifies a party identifier suggestion, the actual identifier allocated might be different and is implementation specific. Caller can specify party metadata that is stored locally on the participant. This call may: - Succeed, in which case the actual allocated identifier is visible in the response. ## Protocol Details -
+ +
-
Operation ID
-
postV2Parties
+ Operation ID + postV2Parties
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -135,9 +137,7 @@ The user who will get the act_as rights to the newly allocated party. If set to - -- - + @@ -161,9 +161,7 @@ The user who will get the act_as rights to the newly allocated party. If set to - -- - + @@ -187,63 +185,43 @@ The user who will get the act_as rights to the newly allocated party. If set to - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/post-v2partiesexternalallocate.mdx b/docs-main/reference/json-api-reference/post-v2partiesexternalallocate.mdx index eb379d9a7..3d3ca6eb3 100644 --- a/docs-main/reference/json-api-reference/post-v2partiesexternalallocate.mdx +++ b/docs-main/reference/json-api-reference/post-v2partiesexternalallocate.mdx @@ -31,29 +31,31 @@ playground: "interactive" -The external party must be hosted (at least) on this node with either confirmation or observation permissions It can optionally be hosted on other nodes (then called a multi-hosted party). If hosted on additional nodes, explicit authorization of the hosting relationship must be performed on those nodes before the party can be used. Decentralized namespaces are supported but must be provided fully authorized by their owners. The individual owner namespac... +The external party must be hosted (at least) on this node with either confirmation or observation permissions It can optionally be hosted on other nodes (then called a multi-hosted party). If hosted on additional nodes, explicit authorization of the hosting relationship must be performed on those nodes before the party can be used. Decentralized namespaces are supported but must be provided fully authorized by their owners. ## Protocol Details -
+ +
-
Operation ID
-
postV2PartiesExternalAllocate
+ Operation ID + postV2PartiesExternalAllocate
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -170,9 +172,7 @@ The allocated party id Required - -- - + @@ -196,63 +196,43 @@ The allocated party id Required - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/post-v2partiesexternalgenerate-topology.mdx b/docs-main/reference/json-api-reference/post-v2partiesexternalgenerate-topology.mdx index cf3fecede..354b5b277 100644 --- a/docs-main/reference/json-api-reference/post-v2partiesexternalgenerate-topology.mdx +++ b/docs-main/reference/json-api-reference/post-v2partiesexternalgenerate-topology.mdx @@ -36,24 +36,26 @@ You may use this endpoint to generate the common external topology transactions ## Protocol Details -
+ +
-
Operation ID
-
postV2PartiesExternalGenerate-topology
+ Operation ID + postV2PartiesExternalGenerate-topology
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -92,7 +94,7 @@ The actual party id will be constructed from this hint and a fingerprint of the OpenAPI type: `SigningPublicKey`. -- +
@@ -195,9 +197,7 @@ the multi-hash which may be signed instead of each individual transaction Requir - -- - + @@ -221,63 +221,43 @@ the multi-hash which may be signed instead of each individual transaction Requir - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/post-v2stateactive-contracts-page.mdx b/docs-main/reference/json-api-reference/post-v2stateactive-contracts-page.mdx index 94af60672..35042b83f 100644 --- a/docs-main/reference/json-api-reference/post-v2stateactive-contracts-page.mdx +++ b/docs-main/reference/json-api-reference/post-v2stateactive-contracts-page.mdx @@ -34,24 +34,26 @@ Returns a page of the snapshot of the active contracts and incomplete (un)assign ## Protocol Details -
+ +
-
Operation ID
-
postV2StateActive-contracts-page
+ Operation ID + postV2StateActive-contracts-page
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -168,9 +170,7 @@ If not present this is the last page. If present, this token must be used to get - -- - + @@ -194,63 +194,43 @@ If not present this is the last page. If present, this token must be used to get - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/post-v2stateactive-contracts.mdx b/docs-main/reference/json-api-reference/post-v2stateactive-contracts.mdx index b110c0925..f39e35ff3 100644 --- a/docs-main/reference/json-api-reference/post-v2stateactive-contracts.mdx +++ b/docs-main/reference/json-api-reference/post-v2stateactive-contracts.mdx @@ -31,29 +31,31 @@ playground: "interactive" -Query active contracts list (blocking call). Querying active contracts is an expensive operation and if possible should not be repeated often. Consider querying active contracts initially (for a given offset) and then repeatedly call one of `/v2/updates/...`endpoints to get subsequent modifications. You can also use websockets to get updates with better performance. Returns a stream of the snapshot of the active contracts and incomplete (un)assignments... +Query active contracts list (blocking call). Querying active contracts is an expensive operation and if possible should not be repeated often. Consider querying active contracts initially (for a given offset) and then repeatedly call one of `/v2/updates/...`endpoints to get subsequent modifications. You can also use websockets to get updates with better performance. ## Protocol Details -
+ +
-
Operation ID
-
postV2StateActive-contracts
+ Operation ID + postV2StateActive-contracts
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -171,9 +173,7 @@ Opaque representation of a continuation token defining a position in the active - -- - + @@ -197,9 +197,7 @@ Opaque representation of a continuation token defining a position in the active - -- - + @@ -223,63 +221,43 @@ Opaque representation of a continuation token defining a position in the active - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/post-v2updates.mdx b/docs-main/reference/json-api-reference/post-v2updates.mdx index 7e6d6d081..3d109a835 100644 --- a/docs-main/reference/json-api-reference/post-v2updates.mdx +++ b/docs-main/reference/json-api-reference/post-v2updates.mdx @@ -31,29 +31,31 @@ playground: "interactive" -Read the ledger's filtered update stream for the specified contents and filters. It returns the event types in accordance with the stream contents selected. Also the selection criteria for individual events depends on the transaction shape chosen. - ACS delta: a requesting party must be a stakeholder of an event for it to be included. - ledger effects: a requesting party must be a witness of an event for it to be included. Notice: This endpoint should b... +Read the ledger's filtered update stream for the specified contents and filters. It returns the event types in accordance with the stream contents selected. Also the selection criteria for individual events depends on the transaction shape chosen. - ACS delta: a requesting party must be a stakeholder of an event for it to be included. - ledger effects: a requesting party must be a witness of an event for it to be included. ## Protocol Details -
+ +
-
Operation ID
-
postV2Updates
+ Operation ID + postV2Updates
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -180,9 +182,7 @@ If set, the stream will populate the elements in descending order. Optional - -- - + @@ -206,9 +206,7 @@ If set, the stream will populate the elements in descending order. Optional - -- - + @@ -232,63 +230,43 @@ If set, the stream will populate the elements in descending order. Optional - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/post-v2updatesflats.mdx b/docs-main/reference/json-api-reference/post-v2updatesflats.mdx index 7cc7f2c0c..0e2097450 100644 --- a/docs-main/reference/json-api-reference/post-v2updatesflats.mdx +++ b/docs-main/reference/json-api-reference/post-v2updatesflats.mdx @@ -33,29 +33,31 @@ playground: "interactive" -Query flat transactions update list (blocking call). Provided for backwards compatibility, it will be removed in the Canton version 3.5.0, use v2/updates instead. Notice: This endpoint should be used for small results set. When number of results exceeded node configuration limit (`http-list-max-elements-limit`) there will be an error (`413 Content Too Large`) returned. Increasing this limit may lead to performance issues and high memory consumption. Con... +Query flat transactions update list (blocking call). Provided for backwards compatibility, it will be removed in the Canton version 3.5.0, use v2/updates instead. Notice: This endpoint should be used for small results set. When number of results exceeded node configuration limit (`http-list-max-elements-limit`) there will be an error (`413 Content Too Large`) returned. Increasing this limit may lead to performance issues and high memory consumption. ## Protocol Details -
+ +
-
Operation ID
-
postV2UpdatesFlats
+ Operation ID + postV2UpdatesFlats
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -182,9 +184,7 @@ If set, the stream will populate the elements in descending order. Optional - -- - + @@ -208,9 +208,7 @@ If set, the stream will populate the elements in descending order. Optional - -- - + @@ -234,63 +232,43 @@ If set, the stream will populate the elements in descending order. Optional - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/post-v2updatesget-updates-page.mdx b/docs-main/reference/json-api-reference/post-v2updatesget-updates-page.mdx index af19362e7..a111a1ef4 100644 --- a/docs-main/reference/json-api-reference/post-v2updatesget-updates-page.mdx +++ b/docs-main/reference/json-api-reference/post-v2updatesget-updates-page.mdx @@ -34,24 +34,26 @@ Read a page of ledger's filtered updates. It returns the event types in accordan ## Protocol Details -
+ +
-
Operation ID
-
postV2UpdatesGet-updates-page
+ Operation ID + postV2UpdatesGet-updates-page
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -190,9 +192,7 @@ If the value is not populated, this is the last page. If the value is populated, - -- - + @@ -216,63 +216,43 @@ If the value is not populated, this is the last page. If the value is populated, - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/post-v2updatestransaction-by-id.mdx b/docs-main/reference/json-api-reference/post-v2updatestransaction-by-id.mdx index 7d2bcc660..a738f4abd 100644 --- a/docs-main/reference/json-api-reference/post-v2updatestransaction-by-id.mdx +++ b/docs-main/reference/json-api-reference/post-v2updatestransaction-by-id.mdx @@ -38,24 +38,26 @@ Get transaction by id. Provided for backwards compatibility, it will be removed ## Protocol Details -
+ +
-
Operation ID
-
postV2UpdatesTransaction-by-id
+ Operation ID + postV2UpdatesTransaction-by-id
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -149,9 +151,7 @@ Filtered view of an on-ledger transaction's create and archive events. - -- - + @@ -175,63 +175,43 @@ Filtered view of an on-ledger transaction's create and archive events. - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/post-v2updatestransaction-by-offset.mdx b/docs-main/reference/json-api-reference/post-v2updatestransaction-by-offset.mdx index c5a00e3b0..c8ef07216 100644 --- a/docs-main/reference/json-api-reference/post-v2updatestransaction-by-offset.mdx +++ b/docs-main/reference/json-api-reference/post-v2updatestransaction-by-offset.mdx @@ -38,24 +38,26 @@ Get transaction by offset. Provided for backwards compatibility, it will be remo ## Protocol Details -
+ +
-
Operation ID
-
postV2UpdatesTransaction-by-offset
+ Operation ID + postV2UpdatesTransaction-by-offset
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -151,9 +153,7 @@ Filtered view of an on-ledger transaction's create and archive events. - -- - + @@ -177,63 +177,43 @@ Filtered view of an on-ledger transaction's create and archive events. - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/post-v2updatestrees.mdx b/docs-main/reference/json-api-reference/post-v2updatestrees.mdx index f734ca079..417447284 100644 --- a/docs-main/reference/json-api-reference/post-v2updatestrees.mdx +++ b/docs-main/reference/json-api-reference/post-v2updatestrees.mdx @@ -33,29 +33,31 @@ playground: "interactive" -Query update transactions tree list (blocking call). Provided for backwards compatibility, it will be removed in the Canton version 3.5.0, use v2/updates instead. Notice: This endpoint should be used for small results set. When number of results exceeded node configuration limit (`http-list-max-elements-limit`) there will be an error (`413 Content Too Large`) returned. Increasing this limit may lead to performance issues and high memory consumption. Con... +Query update transactions tree list (blocking call). Provided for backwards compatibility, it will be removed in the Canton version 3.5.0, use v2/updates instead. Notice: This endpoint should be used for small results set. When number of results exceeded node configuration limit (`http-list-max-elements-limit`) there will be an error (`413 Content Too Large`) returned. Increasing this limit may lead to performance issues and high memory consumption. ## Protocol Details -
+ +
-
Operation ID
-
postV2UpdatesTrees
+ Operation ID + postV2UpdatesTrees
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -182,9 +184,7 @@ If set, the stream will populate the elements in descending order. Optional - -- - + @@ -208,9 +208,7 @@ If set, the stream will populate the elements in descending order. Optional - -- - + @@ -234,63 +232,43 @@ If set, the stream will populate the elements in descending order. Optional - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/post-v2updatesupdate-by-id.mdx b/docs-main/reference/json-api-reference/post-v2updatesupdate-by-id.mdx index 0765228c3..d9918a991 100644 --- a/docs-main/reference/json-api-reference/post-v2updatesupdate-by-id.mdx +++ b/docs-main/reference/json-api-reference/post-v2updatesupdate-by-id.mdx @@ -36,24 +36,26 @@ Lookup an update by its ID. If there is no update with this ID, or all the event ## Protocol Details -
+ +
-
Operation ID
-
postV2UpdatesUpdate-by-id
+ Operation ID + postV2UpdatesUpdate-by-id
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -114,9 +116,7 @@ A format specifying what updates to include and how to render them. - -- - + @@ -140,9 +140,7 @@ A format specifying what updates to include and how to render them. - -- - + @@ -166,63 +164,43 @@ A format specifying what updates to include and how to render them. - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/post-v2updatesupdate-by-offset.mdx b/docs-main/reference/json-api-reference/post-v2updatesupdate-by-offset.mdx index 2c4717382..97ae17937 100644 --- a/docs-main/reference/json-api-reference/post-v2updatesupdate-by-offset.mdx +++ b/docs-main/reference/json-api-reference/post-v2updatesupdate-by-offset.mdx @@ -36,24 +36,26 @@ Lookup an update by its offset. If there is no update with this offset, or all t ## Protocol Details -
+ +
-
Operation ID
-
postV2UpdatesUpdate-by-offset
+ Operation ID + postV2UpdatesUpdate-by-offset
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -116,9 +118,7 @@ A format specifying what updates to include and how to render them. - -- - + @@ -142,9 +142,7 @@ A format specifying what updates to include and how to render them. - -- - + @@ -168,63 +166,43 @@ A format specifying what updates to include and how to render them. - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/post-v2users.mdx b/docs-main/reference/json-api-reference/post-v2users.mdx index dcfd809c0..45828b137 100644 --- a/docs-main/reference/json-api-reference/post-v2users.mdx +++ b/docs-main/reference/json-api-reference/post-v2users.mdx @@ -36,24 +36,26 @@ Create a new user. ## Protocol Details -
+ +
-
Operation ID
-
postV2Users
+ Operation ID + postV2Users
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -142,9 +144,7 @@ Users and rights ///////////////// Users are used to dynamically manage the righ - -- - + @@ -168,63 +168,43 @@ Users and rights ///////////////// Users are used to dynamically manage the righ - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/reference/json-api-reference/post-v2users:user-idrights.mdx b/docs-main/reference/json-api-reference/post-v2users:user-idrights.mdx index 151176d6e..d6790a4c9 100644 --- a/docs-main/reference/json-api-reference/post-v2users:user-idrights.mdx +++ b/docs-main/reference/json-api-reference/post-v2users:user-idrights.mdx @@ -36,24 +36,26 @@ Grant rights to a user. Granting rights does not affect the resource version of ## Protocol Details -
+ +
-
Operation ID
-
postV2UsersUser-idRights
+ Operation ID + postV2UsersUser-idRights
-
Authentication
-
Bearer token
+ Authentication + Bearer token
-
Published
-
3.5
+ Published + 3.5
-
+ + ## Inputs @@ -68,10 +70,7 @@ Grant rights to a user. Granting rights does not affect the resource version of - - -- - + @@ -168,9 +167,7 @@ The rights that were newly granted by the request. Optional: can be empty - -- - + @@ -194,63 +191,43 @@ The rights that were newly granted by the request. Optional: can be empty - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + - -- - + diff --git a/docs-main/styles.css b/docs-main/styles.css index 3e44597e6..a07599469 100644 --- a/docs-main/styles.css +++ b/docs-main/styles.css @@ -827,7 +827,8 @@ body:has(.x2mdx-ref-page--operation):not(:has(.x2mdx-ref-page--manual-api)) [ari background: rgba(17, 24, 39, 0.7); } -.x2mdx-ref-meta-item dt { +.x2mdx-ref-meta-item dt, +.x2mdx-ref-meta-label { margin: 0 0 0.3rem; font-size: 0.77rem; font-weight: 600; @@ -835,7 +836,8 @@ body:has(.x2mdx-ref-page--operation):not(:has(.x2mdx-ref-page--manual-api)) [ari color: rgb(107, 114, 128); } -.x2mdx-ref-meta-item dd { +.x2mdx-ref-meta-item dd, +.x2mdx-ref-meta-value { margin: 0; overflow-wrap: anywhere; font-size: 0.96rem; @@ -1041,18 +1043,21 @@ body:has(.x2mdx-ref-page--operation):not(:has(.x2mdx-ref-page--manual-api)) [ari background: transparent; } -#content-container:has(.x2mdx-ref-page--operation) .x2mdx-ref-meta-item dt { +#content-container:has(.x2mdx-ref-page--operation) .x2mdx-ref-meta-item dt, +#content-container:has(.x2mdx-ref-page--operation) .x2mdx-ref-meta-label { margin: 0; font-size: 0.72rem; letter-spacing: 0; text-transform: none; } -#content-container:has(.x2mdx-ref-page--operation) .x2mdx-ref-meta-item dt::after { +#content-container:has(.x2mdx-ref-page--operation) .x2mdx-ref-meta-item dt::after, +#content-container:has(.x2mdx-ref-page--operation) .x2mdx-ref-meta-label::after { content: ":"; } -#content-container:has(.x2mdx-ref-page--operation) .x2mdx-ref-meta-item dd { +#content-container:has(.x2mdx-ref-page--operation) .x2mdx-ref-meta-item dd, +#content-container:has(.x2mdx-ref-page--operation) .x2mdx-ref-meta-value { max-width: 32rem; font-size: 0.86rem; font-weight: 500; diff --git a/src/x2mdx/openapi/render.py b/src/x2mdx/openapi/render.py index bb4d8f6e6..1343d7c2e 100644 --- a/src/x2mdx/openapi/render.py +++ b/src/x2mdx/openapi/render.py @@ -15,7 +15,6 @@ ReferenceOperationPage, ReferencePanel, ReferenceSchema, - compact_text, json_body, render_operation_page, ) @@ -35,7 +34,10 @@ class ManualOpenAPIRenderOptions: output_path: str server: str = "http://localhost:7575" surface_label: str = "JSON Ledger API" - auth_method: str = "bearer" + breadcrumbs: tuple[ReferenceBreadcrumb, ...] = () + auth_method: str | None = "bearer" + authentication_label: str | None = "Bearer token" + raw_spec_href: str | None = None playground: str = "interactive" @@ -378,9 +380,53 @@ def _response_panels( return panels, examples -def _operation_fingerprint(operation: dict[str, Any]) -> str: +def _expand_local_refs( + spec: dict[str, Any], + value: Any, + *, + seen_refs: frozenset[str] = frozenset(), +) -> Any: + if isinstance(value, list): + return [_expand_local_refs(spec, item, seen_refs=seen_refs) for item in value] + if not isinstance(value, dict): + return value + reference = value.get("$ref") + if isinstance(reference, str) and reference.startswith("#/"): + if reference in seen_refs: + return {"$ref": reference} + resolved = _resolve_local_ref(spec, value) + return { + "$ref": reference, + "$resolved": _expand_local_refs( + spec, + resolved, + seen_refs=seen_refs | {reference}, + ), + } + return { + str(key): _expand_local_refs(spec, child, seen_refs=seen_refs) + for key, child in value.items() + } + + +def _operation_fingerprint( + spec: dict[str, Any], + operation: dict[str, Any], + *, + method: str, + path: str, +) -> str: + path_parameters = _path_item(spec, path).get("parameters") or [] + contract = { + "method": method.lower(), + "operation": operation, + "path_parameters": path_parameters, + } return json.dumps( - operation, sort_keys=True, separators=(",", ":"), ensure_ascii=False + _expand_local_refs(spec, contract), + sort_keys=True, + separators=(",", ":"), + ensure_ascii=False, ) @@ -465,6 +511,16 @@ def _operation_title(operation: dict[str, Any], *, method: str, path: str) -> st return f"{method.upper()} {path}" +def _operation_overview(operation: dict[str, Any], *, limit: int = 460) -> str: + description = " ".join(str(operation.get("description") or "").split()) + if len(description) <= limit: + return description + sentence_end = description.rfind(". ", 0, limit) + if sentence_end >= 0: + return description[: sentence_end + 1] + return description + + def operation_history_events( *, specs_by_version: dict[str, dict[str, Any]], @@ -487,6 +543,18 @@ def operation_history_events( observed.append( (version, observed_method, observed_path, observed_operation) ) + continue + try: + observed.append( + ( + version, + method.lower(), + path, + _operation(specs_by_version[version], method, path), + ) + ) + except ValueError: + continue else: try: observed.append( @@ -553,7 +621,12 @@ def operation_history_events( previous_fingerprint: str | None = None previous_location: tuple[str, str] | None = None for version, observed_method, observed_path, operation in observed: - fingerprint = _operation_fingerprint(operation) + fingerprint = _operation_fingerprint( + specs_by_version[version], + operation, + method=observed_method, + path=observed_path, + ) location = (observed_method, observed_path) if previous_fingerprint is not None and ( fingerprint != previous_fingerprint or location != previous_location @@ -645,12 +718,18 @@ def _request_example( path: str, media_type: str | None, sample: Any, + auth_method: str | None, ) -> ReferenceExample: lines = [ f"curl --request {method.upper()} \\", f" --url '{server.rstrip('/')}{path}' \\", ] - lines.append(" --header 'Authorization: Bearer $TOKEN' \\") + if auth_method == "bearer": + lines.append(" --header 'Authorization: Bearer $TOKEN' \\") + elif auth_method is not None: + raise ValueError( + f"Unsupported manual OpenAPI authentication method: {auth_method}" + ) if sample is not None: lines.append( f" --header 'Content-Type: {media_type or 'application/json'}' \\" @@ -680,7 +759,7 @@ def render_manual_openapi_operation( operation = _operation(spec, method, options.path) path_item = _path_item(spec, options.path) summary = _operation_title(operation, method=method, path=options.path) - description = compact_text(str(operation.get("description") or ""), limit=460) + description = _operation_overview(operation) inputs = _parameter_panels(spec, path_item, operation) request_panel, request_sample, request_media_type = _request_panel(spec, operation) @@ -694,6 +773,7 @@ def render_manual_openapi_operation( path=options.path, media_type=request_media_type, sample=request_sample, + auth_method=options.auth_method, ), *response_examples, ] @@ -729,26 +809,32 @@ def render_manual_openapi_operation( badges.append(ReferenceBadge(f"Remove as of {remove_as_of}", "removed")) api_path = f"{method} {options.server.rstrip('/')}{options.path}" + protocol_items = [ + ReferenceMetaItem("Operation ID", str(operation.get("operationId") or "-")), + ] + if options.authentication_label is not None: + protocol_items.append( + ReferenceMetaItem("Authentication", options.authentication_label) + ) + protocol_items.append(ReferenceMetaItem("Published", publish_version)) + if options.raw_spec_href is not None: + protocol_items.append( + ReferenceMetaItem( + "Specification", "Download OpenAPI", href=options.raw_spec_href + ) + ) + return render_operation_page( ReferenceOperationPage( path=options.output_path, title=summary, eyebrow=options.surface_label, - breadcrumbs=[ - ReferenceBreadcrumb("Ledger API", "/api-reference"), - ReferenceBreadcrumb("OpenAPI"), - ], + breadcrumbs=list(options.breadcrumbs), badges=badges, operation_method=method, operation_target=options.path, overview_markdown=description, - protocol_items=[ - ReferenceMetaItem( - "Operation ID", str(operation.get("operationId") or "-") - ), - ReferenceMetaItem("Authentication", "Bearer token"), - ReferenceMetaItem("Published", publish_version), - ], + protocol_items=protocol_items, inputs=inputs, outputs=outputs, examples=examples, diff --git a/src/x2mdx/templates/reference/operation.md.j2 b/src/x2mdx/templates/reference/operation.md.j2 index 7a5f012d5..95a2da575 100644 --- a/src/x2mdx/templates/reference/operation.md.j2 +++ b/src/x2mdx/templates/reference/operation.md.j2 @@ -2,6 +2,9 @@
{% if page.api_frontmatter %} +{% if page.breadcrumbs %} +{{ ref.breadcrumbs(page.breadcrumbs) }} +{% endif -%} {{ ref.header(page.eyebrow, page.title, page.summary, None, None, page.badges, [], render_title=True, render_summary=False) }} {% if page.overview_markdown %} {{ page.overview_markdown }} diff --git a/src/x2mdx/templates/shared/reference_macros.md.j2 b/src/x2mdx/templates/shared/reference_macros.md.j2 index 11151ef80..ea539b647 100644 --- a/src/x2mdx/templates/shared/reference_macros.md.j2 +++ b/src/x2mdx/templates/shared/reference_macros.md.j2 @@ -57,6 +57,19 @@ {% endif %} {%- endmacro %} +{% macro api_meta_grid(meta_items) -%} +{% if meta_items %} +
+ {% for item in meta_items %} +
+ {{ escape_mdx_html_text(inline_text(item.label)) }} + {% if item.href %}{{ escape_mdx_html_text(inline_text(item.value)) }}{% else %}{{ escape_mdx_html_text(inline_text(item.value)) }}{% endif %} +
+ {% endfor %} +
+{% endif %} +{%- endmacro %} + {% macro card_grid(cards) -%} {% if cards %}
@@ -89,16 +102,16 @@ {% if use_api_components %} {% for field in fields %} {% if field_kind == "response" %} - -{{ escape_mdx_html_text(inline_text(field.description or "-")) }} - +{% if field.description %} +{{ escape_mdx_html_text(inline_text(field.description)) }} +{% endif %} {% elif field.location %} - +{% if field.description or (field.api_type_label and field.api_type_label != field.type_label) %} {% if field.api_type_label and field.api_type_label != field.type_label %}OpenAPI type: `{{ escape_mdx_html_text(inline_text(field.type_label)) }}`. {% endif %} -{{ escape_mdx_html_text(inline_text(field.description or "-")) }} - +{% if field.description %}{{ escape_mdx_html_text(inline_text(field.description)) }}{% endif %} +{% endif %} {% endif %} {% endfor %} {% else %} @@ -277,7 +290,11 @@ {% macro operation_sections(operation, heading_prefix="##", include_examples=True, use_api_components=False) -%} {{ heading_prefix }} Protocol Details +{% if use_api_components %} +{{ api_meta_grid(operation.protocol_items) }} +{% else %} {{ meta_grid(operation.protocol_items) }} +{% endif %} {{ heading_prefix }} Inputs diff --git a/tests/test_openapi_manual_render.py b/tests/test_openapi_manual_render.py index 3713bbc9c..87dab2bc3 100644 --- a/tests/test_openapi_manual_render.py +++ b/tests/test_openapi_manual_render.py @@ -6,6 +6,7 @@ operation_history_events, render_manual_openapi_operation, ) +from x2mdx.reference_pages import ReferenceBreadcrumb from x2mdx.render import render_page @@ -148,6 +149,50 @@ def test_operation_history_tracks_operation_id_across_route_move() -> None: assert "moved from POST /v2/updates/flats" in events[0].details[0] +def test_operation_history_falls_back_to_method_and_path_when_older_id_is_missing() -> ( + None +): + original = operation_spec(changed=False) + del original["paths"]["/v2/updates/flats"]["post"]["operationId"] + current = operation_spec(changed=False) + + events = operation_history_events( + specs_by_version={"3.4": original, "3.5": current}, + versions=["3.4", "3.5"], + publish_version="3.5", + method="post", + path="/v2/updates/flats", + source_name="release fixtures", + ) + + assert [(event.kind, event.version) for event in events] == [ + (HistoryEventKind.CHANGED, "3.5"), + (HistoryEventKind.INTRODUCED, "3.4"), + ] + + +def test_operation_history_detects_changes_in_referenced_schemas() -> None: + original = operation_spec(changed=False) + current = operation_spec(changed=False) + current["components"]["schemas"]["GetUpdatesRequest"]["properties"]["newField"] = { + "type": "string" + } + + events = operation_history_events( + specs_by_version={"3.4": original, "3.5": current}, + versions=["3.4", "3.5"], + publish_version="3.5", + method="post", + path="/v2/updates/flats", + source_name="release fixtures", + ) + + assert [(event.kind, event.version) for event in events] == [ + (HistoryEventKind.CHANGED, "3.5"), + (HistoryEventKind.INTRODUCED, "3.4"), + ] + + def test_operation_history_rejects_duplicate_operation_ids() -> None: duplicate = operation_spec(changed=False) duplicate["paths"]["/duplicate"] = { @@ -227,7 +272,7 @@ def test_manual_openapi_page_preserves_playground_and_standard_history_layout() assert '' in rendered assert "OpenAPI type: `integer (int64)`." in rendered assert '' in rendered - assert '' in rendered + assert '' in rendered assert "" in rendered assert "" in rendered assert "x2mdx-ref-operation-shell" not in rendered @@ -237,6 +282,53 @@ def test_manual_openapi_page_preserves_playground_and_standard_history_layout() assert "details and history" not in rendered.lower() +def test_manual_openapi_page_supports_public_operation_without_authentication() -> None: + spec = operation_spec(changed=False) + operation = spec["paths"]["/v2/updates/flats"]["post"] + operation.pop("security") + history = operation_history_events( + specs_by_version={"0.7.4": spec}, + versions=["0.7.4"], + publish_version="0.7.4", + method="post", + path="/v2/updates/flats", + source_name="Splice release fixtures", + ) + + rendered = render_page( + render_manual_openapi_operation( + spec=spec, + options=ManualOpenAPIRenderOptions( + method="post", + path="/v2/updates/flats", + output_path="reference/splice-scan-api/post-v2updatesflats.mdx", + server="https://scan.example.com/api/scan", + surface_label="Scan API", + breadcrumbs=( + ReferenceBreadcrumb("Splice APIs", "/api-reference"), + ReferenceBreadcrumb("Scan APIs"), + ReferenceBreadcrumb("Scan API"), + ), + auth_method=None, + authentication_label=None, + raw_spec_href="/openapi/splice/scan/scan.yaml", + ), + history_events=history, + publish_version="0.7.4", + ) + ) + + assert "authMethod:" not in rendered + assert "Authorization: Bearer" not in rendered + assert "Splice APIs" in rendered + assert "Scan APIs" in rendered + assert '
' in rendered + assert 'Operation ID' in rendered + assert "Download OpenAPI" in rendered + assert "/openapi/splice/scan/scan.yaml" in rendered + assert "\n-\n" not in rendered + + def test_binary_request_example_uses_file_upload_curl() -> None: spec = operation_spec(changed=False) operation = spec["paths"]["/v2/updates/flats"]["post"] @@ -304,3 +396,37 @@ def test_long_generated_title_falls_back_to_humanized_operation_id() -> None: ) assert 'title: "Updates flats"' in rendered + + +def test_long_operation_overview_does_not_truncate_inside_mdx_path_token() -> None: + spec = operation_spec(changed=False) + operation = spec["paths"]["/v2/updates/flats"]["post"] + operation["description"] = ( + "Returns the matching update. " + + "This explanation is deliberately long. " * 20 + + "Compare `v2/updates/{update_id}` for exact lookup behavior." + ) + history = operation_history_events( + specs_by_version={"3.5": spec}, + versions=["3.5"], + publish_version="3.5", + method="post", + path="/v2/updates/flats", + source_name="release fixtures", + ) + + rendered = render_page( + render_manual_openapi_operation( + spec=spec, + options=ManualOpenAPIRenderOptions( + method="post", + path="/v2/updates/flats", + output_path="reference/json-api-reference/post-v2updatesflats.mdx", + ), + history_events=history, + publish_version="3.5", + ) + ) + + assert "Returns the matching update." in rendered + assert "`v2/updates/{..." not in rendered From 83501f836177fc4aa04015aeb90df5740d9f3330 Mon Sep 17 00:00:00 2001 From: danielporterda Date: Tue, 25 Aug 2026 18:22:51 -0400 Subject: [PATCH 08/14] Replace native Splice OpenAPI reference pages Signed-off-by: danielporterda --- .../splice-openapi/source-artifacts.json | 15 + docs-main/docs.json | 290 ++++------ ...nsv1:allocationidchoice-contextscancel.mdx | 247 ++++++++ ...ationidchoice-contextsexecute-transfer.mdx | 247 ++++++++ ...v1:allocationidchoice-contextswithdraw.mdx | 247 ++++++++ ...cation-instructionv1allocation-factory.mdx | 229 ++++++++ ...tioninstructionidchoice-contextsaccept.mdx | 271 +++++++++ ...oninstructionidchoice-contextswithdraw.mdx | 271 +++++++++ ...cation-instructionv2allocation-factory.mdx | 253 +++++++++ ...nsv2:allocationidchoice-contextscancel.mdx | 271 +++++++++ ...v2:allocationidchoice-contextswithdraw.mdx | 271 +++++++++ ...registryallocationv2settlement-factory.mdx | 253 +++++++++ .../splice-ans-api/get-v0entryall.mdx | 188 +++++++ .../splice-ans-api/post-v0entrycreate.mdx | 255 +++++++++ .../reference/splice-scan-api/get-livez.mdx | 110 ++++ .../reference/splice-scan-api/get-readyz.mdx | 110 ++++ .../reference/splice-scan-api/get-status.mdx | 129 +++++ .../splice-scan-api/get-v0acs:party.mdx | 177 ++++++ .../get-v0active-synchronizer-serial.mdx | 181 ++++++ .../get-v0adminsvvoterequests.mdx | 133 +++++ .../get-v0adminvalidatorlicenses.mdx | 174 ++++++ .../get-v0amulet-config-for-round.mdx | 206 +++++++ .../get-v0amulet-pricevotes.mdx | 133 +++++ .../splice-scan-api/get-v0ans-entries.mdx | 163 ++++++ .../get-v0ans-entriesby-name:name.mdx | 180 ++++++ .../get-v0ans-entriesby-party:party.mdx | 183 ++++++ .../get-v0backfillingstatus.mdx | 133 +++++ .../splice-scan-api/get-v0closed-rounds.mdx | 135 +++++ ...main_idmembers:member_idtraffic-status.mdx | 234 ++++++++ ...omain_idparties:party_idparticipant-id.mdx | 209 +++++++ .../splice-scan-api/get-v0dso-party-id.mdx | 131 +++++ .../splice-scan-api/get-v0dso-sequencers.mdx | 145 +++++ .../reference/splice-scan-api/get-v0dso.mdx | 192 +++++++ .../get-v0events:update_id.mdx | 330 +++++++++++ .../splice-scan-api/get-v0feature-support.mdx | 165 ++++++ .../splice-scan-api/get-v0featured-apps.mdx | 133 +++++ .../get-v0featured-apps:provider_party_id.mdx | 155 ++++++ ...eatured-appsby-contract-id:contract_id.mdx | 155 ++++++ ...ured-appsby-provider:provider_party_id.mdx | 151 +++++ .../splice-scan-api/get-v0historybulkacs.mdx | 213 +++++++ ...cessrounds:round_numberactivity-totals.mdx | 184 ++++++ ...srounds:round_numberbatches:batch_hash.mdx | 192 +++++++ ...ng-processrounds:round_numberroot-hash.mdx | 168 ++++++ ...unting-processroundsearliest-available.mdx | 167 ++++++ .../reference/splice-scan-api/get-v0lsu.mdx | 135 +++++ .../splice-scan-api/get-v0migrationslast.mdx | 131 +++++ .../get-v0migrationsschedule.mdx | 144 +++++ .../get-v0roll-forward-lsu.mdx | 135 +++++ .../reference/splice-scan-api/get-v0scans.mdx | 133 +++++ .../get-v0splice-instance-names.mdx | 192 +++++++ ...get-v0stateacssnapshot-timestamp-after.mdx | 237 ++++++++ .../get-v0stateacssnapshot-timestamp.mdx | 237 ++++++++ .../get-v0sv-bft-sequencers.mdx | 145 +++++ ...trapping-transactions:domain_id_prefix.mdx | 181 ++++++ ...nchronizer-identities:domain_id_prefix.mdx | 190 +++++++ .../get-v0transfer-command-counter:party.mdx | 176 ++++++ .../get-v0transfer-commandstatus.mdx | 182 ++++++ ...-v0transfer-preapprovalsby-party:party.mdx | 176 ++++++ ...t-v0unclaimed-development-fund-coupons.mdx | 159 ++++++ .../get-v0updates:update_id.mdx | 285 ++++++++++ .../get-v0validatorsvalidator-faucets.mdx | 204 +++++++ ...0voterequests:vote_request_contract_id.mdx | 179 ++++++ ...omain_idparties:party_idparticipant-id.mdx | 211 +++++++ .../get-v1updates:update_id.mdx | 287 ++++++++++ .../get-v2updates:update_id.mdx | 266 +++++++++ .../get-v2updateshash:hash.mdx | 244 ++++++++ .../reference/splice-scan-api/get-version.mdx | 134 +++++ ...ost-v0adminsvprevious-sv-reward-weight.mdx | 164 ++++++ .../post-v0adminsvvoteresults.mdx | 240 ++++++++ .../post-v0adminsvvoteresultscount.mdx | 175 ++++++ .../splice-scan-api/post-v0amulet-rules.mdx | 167 ++++++ .../splice-scan-api/post-v0ans-rules.mdx | 167 ++++++ .../post-v0backfillingimport-updates.mdx | 224 ++++++++ .../post-v0backfillingmigration-info.mdx | 218 ++++++++ .../post-v0backfillingupdates-before.mdx | 241 ++++++++ .../splice-scan-api/post-v0events.mdx | 272 +++++++++ .../post-v0external-party-amulet-rules.mdx | 167 ++++++ .../post-v0historybulkchecksums.mdx | 190 +++++++ .../post-v0historybulkupdates.mdx | 270 +++++++++ .../splice-scan-api/post-v0holdingsstate.mdx | 312 +++++++++++ .../post-v0holdingssummary.mdx | 309 ++++++++++ .../post-v0open-and-issuing-mining-rounds.mdx | 187 +++++++ .../splice-scan-api/post-v0stateacs.mdx | 327 +++++++++++ .../splice-scan-api/post-v0stateacsforce.mdx | 188 +++++++ .../splice-scan-api/post-v0updates.mdx | 258 +++++++++ .../splice-scan-api/post-v0voterequest.mdx | 164 ++++++ .../splice-scan-api/post-v1holdingsstate.mdx | 300 ++++++++++ .../post-v1holdingssummary.mdx | 273 +++++++++ .../splice-scan-api/post-v1stateacs.mdx | 307 ++++++++++ .../splice-scan-api/post-v1updates.mdx | 260 +++++++++ .../splice-scan-api/post-v2updates.mdx | 252 +++++++++ .../get-v0scan-proxyamulet-rules.mdx | 132 +++++ .../get-v0scan-proxyans-entries.mdx | 158 ++++++ ...et-v0scan-proxyans-entriesby-name:name.mdx | 178 ++++++ ...-v0scan-proxyans-entriesby-party:party.mdx | 178 ++++++ .../get-v0scan-proxydso-party-id.mdx | 129 +++++ .../get-v0scan-proxydso.mdx | 192 +++++++ ...n-proxyfeatured-apps:provider_party_id.mdx | 153 +++++ ...an-proxyopen-and-issuing-mining-rounds.mdx | 138 +++++ ...an-proxytransfer-command-counter:party.mdx | 174 ++++++ ...get-v0scan-proxytransfer-commandstatus.mdx | 182 ++++++ ...oxytransfer-preapprovalsby-party:party.mdx | 174 ++++++ ...roxyunclaimed-development-fund-coupons.mdx | 135 +++++ .../post-v0scan-proxyans-rules.mdx | 167 ++++++ .../post-v0scan-proxyholdingssummary.mdx | 309 ++++++++++ .../post-v1scan-proxyholdingssummary.mdx | 273 +++++++++ .../get-v0historybulkdownload:object_key.mdx | 183 ++++++ .../get-registrymetadatav1info.mdx | 188 +++++++ .../get-registrymetadatav1instruments.mdx | 240 ++++++++ ...strymetadatav1instruments:instrumentid.mdx | 296 ++++++++++ ...sferinstructionidchoice-contextsaccept.mdx | 247 ++++++++ ...sferinstructionidchoice-contextsreject.mdx | 247 ++++++++ ...erinstructionidchoice-contextswithdraw.mdx | 247 ++++++++ ...transfer-instructionv1transfer-factory.mdx | 236 ++++++++ ...sferinstructionidchoice-contextsaccept.mdx | 271 +++++++++ ...sferinstructionidchoice-contextsreject.mdx | 271 +++++++++ ...erinstructionidchoice-contextswithdraw.mdx | 271 +++++++++ ...transfer-instructionv2transfer-factory.mdx | 260 +++++++++ .../get-v0wallettransfer-offers.mdx | 188 +++++++ .../post-v0walletbuy-traffic-requests.mdx | 295 ++++++++++ ...buy-traffic-requests:tracking_idstatus.mdx | 178 ++++++ .../post-v0wallettransfer-offers.mdx | 317 +++++++++++ ...allettransfer-offers:tracking_idstatus.mdx | 178 ++++++ scripts/generate_splice_mintlify_openapi.py | 526 ++++++++++++++++-- .../validate_splice_mintlify_openapi_nav.py | 151 ++++- tests/test_splice_mintlify_openapi.py | 170 +++++- 126 files changed, 25753 insertions(+), 253 deletions(-) create mode 100644 docs-main/reference/splice-allocation-api/post-registryallocationsv1:allocationidchoice-contextscancel.mdx create mode 100644 docs-main/reference/splice-allocation-api/post-registryallocationsv1:allocationidchoice-contextsexecute-transfer.mdx create mode 100644 docs-main/reference/splice-allocation-api/post-registryallocationsv1:allocationidchoice-contextswithdraw.mdx create mode 100644 docs-main/reference/splice-allocation-instruction-api/post-registryallocation-instructionv1allocation-factory.mdx create mode 100644 docs-main/reference/splice-allocation-instruction-v2-api/post-registryallocation-instructionv2:allocationinstructionidchoice-contextsaccept.mdx create mode 100644 docs-main/reference/splice-allocation-instruction-v2-api/post-registryallocation-instructionv2:allocationinstructionidchoice-contextswithdraw.mdx create mode 100644 docs-main/reference/splice-allocation-instruction-v2-api/post-registryallocation-instructionv2allocation-factory.mdx create mode 100644 docs-main/reference/splice-allocation-v2-api/post-registryallocationsv2:allocationidchoice-contextscancel.mdx create mode 100644 docs-main/reference/splice-allocation-v2-api/post-registryallocationsv2:allocationidchoice-contextswithdraw.mdx create mode 100644 docs-main/reference/splice-allocation-v2-api/post-registryallocationv2settlement-factory.mdx create mode 100644 docs-main/reference/splice-ans-api/get-v0entryall.mdx create mode 100644 docs-main/reference/splice-ans-api/post-v0entrycreate.mdx create mode 100644 docs-main/reference/splice-scan-api/get-livez.mdx create mode 100644 docs-main/reference/splice-scan-api/get-readyz.mdx create mode 100644 docs-main/reference/splice-scan-api/get-status.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0acs:party.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0active-synchronizer-serial.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0adminsvvoterequests.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0adminvalidatorlicenses.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0amulet-config-for-round.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0amulet-pricevotes.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0ans-entries.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0ans-entriesby-name:name.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0ans-entriesby-party:party.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0backfillingstatus.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0closed-rounds.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0domains:domain_idmembers:member_idtraffic-status.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0domains:domain_idparties:party_idparticipant-id.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0dso-party-id.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0dso-sequencers.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0dso.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0events:update_id.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0feature-support.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0featured-apps.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0featured-apps:provider_party_id.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0featured-appsby-contract-id:contract_id.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0featured-appsby-provider:provider_party_id.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0historybulkacs.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0internalreward-accounting-processrounds:round_numberactivity-totals.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0internalreward-accounting-processrounds:round_numberbatches:batch_hash.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0internalreward-accounting-processrounds:round_numberroot-hash.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0internalreward-accounting-processroundsearliest-available.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0lsu.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0migrationslast.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0migrationsschedule.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0roll-forward-lsu.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0scans.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0splice-instance-names.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0stateacssnapshot-timestamp-after.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0stateacssnapshot-timestamp.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0sv-bft-sequencers.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0synchronizer-bootstrapping-transactions:domain_id_prefix.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0synchronizer-identities:domain_id_prefix.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0transfer-command-counter:party.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0transfer-commandstatus.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0transfer-preapprovalsby-party:party.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0unclaimed-development-fund-coupons.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0updates:update_id.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0validatorsvalidator-faucets.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v0voterequests:vote_request_contract_id.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v1domains:domain_idparties:party_idparticipant-id.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v1updates:update_id.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v2updates:update_id.mdx create mode 100644 docs-main/reference/splice-scan-api/get-v2updateshash:hash.mdx create mode 100644 docs-main/reference/splice-scan-api/get-version.mdx create mode 100644 docs-main/reference/splice-scan-api/post-v0adminsvprevious-sv-reward-weight.mdx create mode 100644 docs-main/reference/splice-scan-api/post-v0adminsvvoteresults.mdx create mode 100644 docs-main/reference/splice-scan-api/post-v0adminsvvoteresultscount.mdx create mode 100644 docs-main/reference/splice-scan-api/post-v0amulet-rules.mdx create mode 100644 docs-main/reference/splice-scan-api/post-v0ans-rules.mdx create mode 100644 docs-main/reference/splice-scan-api/post-v0backfillingimport-updates.mdx create mode 100644 docs-main/reference/splice-scan-api/post-v0backfillingmigration-info.mdx create mode 100644 docs-main/reference/splice-scan-api/post-v0backfillingupdates-before.mdx create mode 100644 docs-main/reference/splice-scan-api/post-v0events.mdx create mode 100644 docs-main/reference/splice-scan-api/post-v0external-party-amulet-rules.mdx create mode 100644 docs-main/reference/splice-scan-api/post-v0historybulkchecksums.mdx create mode 100644 docs-main/reference/splice-scan-api/post-v0historybulkupdates.mdx create mode 100644 docs-main/reference/splice-scan-api/post-v0holdingsstate.mdx create mode 100644 docs-main/reference/splice-scan-api/post-v0holdingssummary.mdx create mode 100644 docs-main/reference/splice-scan-api/post-v0open-and-issuing-mining-rounds.mdx create mode 100644 docs-main/reference/splice-scan-api/post-v0stateacs.mdx create mode 100644 docs-main/reference/splice-scan-api/post-v0stateacsforce.mdx create mode 100644 docs-main/reference/splice-scan-api/post-v0updates.mdx create mode 100644 docs-main/reference/splice-scan-api/post-v0voterequest.mdx create mode 100644 docs-main/reference/splice-scan-api/post-v1holdingsstate.mdx create mode 100644 docs-main/reference/splice-scan-api/post-v1holdingssummary.mdx create mode 100644 docs-main/reference/splice-scan-api/post-v1stateacs.mdx create mode 100644 docs-main/reference/splice-scan-api/post-v1updates.mdx create mode 100644 docs-main/reference/splice-scan-api/post-v2updates.mdx create mode 100644 docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyamulet-rules.mdx create mode 100644 docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyans-entries.mdx create mode 100644 docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyans-entriesby-name:name.mdx create mode 100644 docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyans-entriesby-party:party.mdx create mode 100644 docs-main/reference/splice-scan-proxy-api/get-v0scan-proxydso-party-id.mdx create mode 100644 docs-main/reference/splice-scan-proxy-api/get-v0scan-proxydso.mdx create mode 100644 docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyfeatured-apps:provider_party_id.mdx create mode 100644 docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyopen-and-issuing-mining-rounds.mdx create mode 100644 docs-main/reference/splice-scan-proxy-api/get-v0scan-proxytransfer-command-counter:party.mdx create mode 100644 docs-main/reference/splice-scan-proxy-api/get-v0scan-proxytransfer-commandstatus.mdx create mode 100644 docs-main/reference/splice-scan-proxy-api/get-v0scan-proxytransfer-preapprovalsby-party:party.mdx create mode 100644 docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyunclaimed-development-fund-coupons.mdx create mode 100644 docs-main/reference/splice-scan-proxy-api/post-v0scan-proxyans-rules.mdx create mode 100644 docs-main/reference/splice-scan-proxy-api/post-v0scan-proxyholdingssummary.mdx create mode 100644 docs-main/reference/splice-scan-proxy-api/post-v1scan-proxyholdingssummary.mdx create mode 100644 docs-main/reference/splice-scan-streaming-api/get-v0historybulkdownload:object_key.mdx create mode 100644 docs-main/reference/splice-token-metadata-service/get-registrymetadatav1info.mdx create mode 100644 docs-main/reference/splice-token-metadata-service/get-registrymetadatav1instruments.mdx create mode 100644 docs-main/reference/splice-token-metadata-service/get-registrymetadatav1instruments:instrumentid.mdx create mode 100644 docs-main/reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1:transferinstructionidchoice-contextsaccept.mdx create mode 100644 docs-main/reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1:transferinstructionidchoice-contextsreject.mdx create mode 100644 docs-main/reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1:transferinstructionidchoice-contextswithdraw.mdx create mode 100644 docs-main/reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1transfer-factory.mdx create mode 100644 docs-main/reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2:transferinstructionidchoice-contextsaccept.mdx create mode 100644 docs-main/reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2:transferinstructionidchoice-contextsreject.mdx create mode 100644 docs-main/reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2:transferinstructionidchoice-contextswithdraw.mdx create mode 100644 docs-main/reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2transfer-factory.mdx create mode 100644 docs-main/reference/splice-wallet-api-external/get-v0wallettransfer-offers.mdx create mode 100644 docs-main/reference/splice-wallet-api-external/post-v0walletbuy-traffic-requests.mdx create mode 100644 docs-main/reference/splice-wallet-api-external/post-v0walletbuy-traffic-requests:tracking_idstatus.mdx create mode 100644 docs-main/reference/splice-wallet-api-external/post-v0wallettransfer-offers.mdx create mode 100644 docs-main/reference/splice-wallet-api-external/post-v0wallettransfer-offers:tracking_idstatus.mdx diff --git a/config/mintlify-openapi/splice-openapi/source-artifacts.json b/config/mintlify-openapi/splice-openapi/source-artifacts.json index da129b129..7c4036990 100644 --- a/config/mintlify-openapi/splice-openapi/source-artifacts.json +++ b/config/mintlify-openapi/splice-openapi/source-artifacts.json @@ -23,6 +23,21 @@ "allocation-instruction-v1.yaml", "allocation-instruction-v2.yaml" ], + "excluded_specs": [ + { + "filename": "wallet-internal.yaml", + "reason": "Internal validator API; excluded from the reader-facing Splice API reference." + }, + { + "filename": "validator-internal.yaml", + "reason": "Internal validator API; excluded from the reader-facing Splice API reference." + } + ], + "legacy_manual_route_baseline": { + "operation_count": 121, + "sha256": "e6b65e1f5e63a55574f95226c7a717c70dfdbe4af524cbad679986c4bff59cc5", + "source": "Mintlify native Splice OpenAPI routes captured before manual-page migration on 2026-08-25" + }, "legacy_cleanup_paths": [ "reference/splice-scan-openapi" ], diff --git a/docs-main/docs.json b/docs-main/docs.json index d751aa5bc..9bdb10093 100644 --- a/docs-main/docs.json +++ b/docs-main/docs.json @@ -2094,98 +2094,90 @@ "pages": [ { "group": "Scan API", - "openapi": { - "source": "openapi/splice/scan/scan.yaml", - "directory": "reference/splice-scan-api" - }, "pages": [ - "GET /readyz", - "GET /livez", - "GET /status", - "GET /version", - "GET /v0/dso", - "GET /v0/validators/validator-faucets", - "GET /v0/scans", - "GET /v0/admin/validator/licenses", - "GET /v0/dso-sequencers", - "GET /v0/sv-bft-sequencers", - "GET /v0/roll-forward-lsu", - "GET /v0/lsu", - "GET /v0/active-synchronizer-serial", - "GET /v0/domains/{domain_id}/parties/{party_id}/participant-id", - "GET /v1/domains/{domain_id}/parties/{party_id}/participant-id", - "GET /v0/domains/{domain_id}/members/{member_id}/traffic-status", - "GET /v0/closed-rounds", - "POST /v0/open-and-issuing-mining-rounds", - "POST /v2/updates", - "GET /v2/updates/{update_id}", - "POST /v1/updates", - "GET /v1/updates/{update_id}", - "GET /v2/updates/hash/{hash}", - "GET /v0/state/acs/snapshot-timestamp", - "GET /v0/state/acs/snapshot-timestamp-after", - "POST /v0/state/acs", - "POST /v1/state/acs", - "POST /v0/state/acs/force", - "POST /v0/holdings/state", - "POST /v1/holdings/state", - "POST /v0/holdings/summary", - "POST /v1/holdings/summary", - "GET /v0/ans-entries", - "GET /v0/ans-entries/by-party/{party}", - "GET /v0/ans-entries/by-name/{name}", - "GET /v0/dso-party-id", - "POST /v0/amulet-rules", - "POST /v0/external-party-amulet-rules", - "POST /v0/ans-rules", - "GET /v0/featured-apps", - "GET /v0/featured-apps/{provider_party_id}", - "GET /v0/featured-apps/by-provider/{provider_party_id}", - "GET /v0/featured-apps/by-contract-id/{contract_id}", - "GET /v0/transfer-preapprovals/by-party/{party}", - "GET /v0/transfer-command-counter/{party}", - "GET /v0/transfer-command/status", - "GET /v0/migrations/schedule", - "GET /v0/migrations/last", - "GET /v0/synchronizer-identities/{domain_id_prefix}", - "GET /v0/synchronizer-bootstrapping-transactions/{domain_id_prefix}", - "GET /v0/splice-instance-names", - "GET /v0/amulet-price/votes", - "POST /v0/voterequest", - "GET /v0/voterequests/{vote_request_contract_id}", - "GET /v0/admin/sv/voterequests", - "POST /v0/admin/sv/voteresults", - "POST /v0/admin/sv/voteresults/count", - "POST /v0/admin/sv/previous-sv-reward-weight", - "POST /v0/backfilling/migration-info", - "POST /v0/backfilling/updates-before", - "GET /v0/backfilling/status", - "GET /v0/acs/{party}", - "GET /v0/amulet-config-for-round", - "POST /v0/updates", - "GET /v0/updates/{update_id}", - "GET /v0/feature-support", - "POST /v0/backfilling/import-updates", - "POST /v0/events", - "GET /v0/events/{update_id}", - "GET /v0/unclaimed-development-fund-coupons", - "GET /v0/internal/reward-accounting-process/rounds/earliest-available", - "GET /v0/internal/reward-accounting-process/rounds/{round_number}/activity-totals", - "GET /v0/internal/reward-accounting-process/rounds/{round_number}/root-hash", - "GET /v0/internal/reward-accounting-process/rounds/{round_number}/batches/{batch_hash}", - "GET /v0/history/bulk/acs", - "POST /v0/history/bulk/updates", - "POST /v0/history/bulk/checksums" + "reference/splice-scan-api/get-readyz", + "reference/splice-scan-api/get-livez", + "reference/splice-scan-api/get-status", + "reference/splice-scan-api/get-version", + "reference/splice-scan-api/get-v0dso", + "reference/splice-scan-api/get-v0validatorsvalidator-faucets", + "reference/splice-scan-api/get-v0scans", + "reference/splice-scan-api/get-v0adminvalidatorlicenses", + "reference/splice-scan-api/get-v0dso-sequencers", + "reference/splice-scan-api/get-v0sv-bft-sequencers", + "reference/splice-scan-api/get-v0roll-forward-lsu", + "reference/splice-scan-api/get-v0lsu", + "reference/splice-scan-api/get-v0active-synchronizer-serial", + "reference/splice-scan-api/get-v0domains:domain_idparties:party_idparticipant-id", + "reference/splice-scan-api/get-v1domains:domain_idparties:party_idparticipant-id", + "reference/splice-scan-api/get-v0domains:domain_idmembers:member_idtraffic-status", + "reference/splice-scan-api/get-v0closed-rounds", + "reference/splice-scan-api/post-v0open-and-issuing-mining-rounds", + "reference/splice-scan-api/post-v2updates", + "reference/splice-scan-api/get-v2updates:update_id", + "reference/splice-scan-api/post-v1updates", + "reference/splice-scan-api/get-v1updates:update_id", + "reference/splice-scan-api/get-v2updateshash:hash", + "reference/splice-scan-api/get-v0stateacssnapshot-timestamp", + "reference/splice-scan-api/get-v0stateacssnapshot-timestamp-after", + "reference/splice-scan-api/post-v0stateacs", + "reference/splice-scan-api/post-v1stateacs", + "reference/splice-scan-api/post-v0stateacsforce", + "reference/splice-scan-api/post-v0holdingsstate", + "reference/splice-scan-api/post-v1holdingsstate", + "reference/splice-scan-api/post-v0holdingssummary", + "reference/splice-scan-api/post-v1holdingssummary", + "reference/splice-scan-api/get-v0ans-entries", + "reference/splice-scan-api/get-v0ans-entriesby-party:party", + "reference/splice-scan-api/get-v0ans-entriesby-name:name", + "reference/splice-scan-api/get-v0dso-party-id", + "reference/splice-scan-api/post-v0amulet-rules", + "reference/splice-scan-api/post-v0external-party-amulet-rules", + "reference/splice-scan-api/post-v0ans-rules", + "reference/splice-scan-api/get-v0featured-apps", + "reference/splice-scan-api/get-v0featured-apps:provider_party_id", + "reference/splice-scan-api/get-v0featured-appsby-provider:provider_party_id", + "reference/splice-scan-api/get-v0featured-appsby-contract-id:contract_id", + "reference/splice-scan-api/get-v0transfer-preapprovalsby-party:party", + "reference/splice-scan-api/get-v0transfer-command-counter:party", + "reference/splice-scan-api/get-v0transfer-commandstatus", + "reference/splice-scan-api/get-v0migrationsschedule", + "reference/splice-scan-api/get-v0migrationslast", + "reference/splice-scan-api/get-v0synchronizer-identities:domain_id_prefix", + "reference/splice-scan-api/get-v0synchronizer-bootstrapping-transactions:domain_id_prefix", + "reference/splice-scan-api/get-v0splice-instance-names", + "reference/splice-scan-api/get-v0amulet-pricevotes", + "reference/splice-scan-api/post-v0voterequest", + "reference/splice-scan-api/get-v0voterequests:vote_request_contract_id", + "reference/splice-scan-api/get-v0adminsvvoterequests", + "reference/splice-scan-api/post-v0adminsvvoteresults", + "reference/splice-scan-api/post-v0adminsvvoteresultscount", + "reference/splice-scan-api/post-v0adminsvprevious-sv-reward-weight", + "reference/splice-scan-api/post-v0backfillingmigration-info", + "reference/splice-scan-api/post-v0backfillingupdates-before", + "reference/splice-scan-api/get-v0backfillingstatus", + "reference/splice-scan-api/get-v0acs:party", + "reference/splice-scan-api/get-v0amulet-config-for-round", + "reference/splice-scan-api/post-v0updates", + "reference/splice-scan-api/get-v0updates:update_id", + "reference/splice-scan-api/get-v0feature-support", + "reference/splice-scan-api/post-v0backfillingimport-updates", + "reference/splice-scan-api/post-v0events", + "reference/splice-scan-api/get-v0events:update_id", + "reference/splice-scan-api/get-v0unclaimed-development-fund-coupons", + "reference/splice-scan-api/get-v0internalreward-accounting-processroundsearliest-available", + "reference/splice-scan-api/get-v0internalreward-accounting-processrounds:round_numberactivity-totals", + "reference/splice-scan-api/get-v0internalreward-accounting-processrounds:round_numberroot-hash", + "reference/splice-scan-api/get-v0internalreward-accounting-processrounds:round_numberbatches:batch_hash", + "reference/splice-scan-api/get-v0historybulkacs", + "reference/splice-scan-api/post-v0historybulkupdates", + "reference/splice-scan-api/post-v0historybulkchecksums" ] }, { "group": "Scan Streaming API", - "openapi": { - "source": "openapi/splice/scan/scan-stream-server.yaml", - "directory": "reference/splice-scan-streaming-api" - }, "pages": [ - "GET /v0/history/bulk/download/{object_key}" + "reference/splice-scan-streaming-api/get-v0historybulkdownload:object_key" ] } ] @@ -2195,51 +2187,39 @@ "pages": [ { "group": "Wallet API (External)", - "openapi": { - "source": "openapi/splice/validator/wallet-external.yaml", - "directory": "reference/splice-wallet-api-external" - }, "pages": [ - "POST /v0/wallet/transfer-offers", - "GET /v0/wallet/transfer-offers", - "POST /v0/wallet/transfer-offers/{tracking_id}/status", - "POST /v0/wallet/buy-traffic-requests", - "POST /v0/wallet/buy-traffic-requests/{tracking_id}/status" + "reference/splice-wallet-api-external/post-v0wallettransfer-offers", + "reference/splice-wallet-api-external/get-v0wallettransfer-offers", + "reference/splice-wallet-api-external/post-v0wallettransfer-offers:tracking_idstatus", + "reference/splice-wallet-api-external/post-v0walletbuy-traffic-requests", + "reference/splice-wallet-api-external/post-v0walletbuy-traffic-requests:tracking_idstatus" ] }, { "group": "ANS API", - "openapi": { - "source": "openapi/splice/validator/ans-external.yaml", - "directory": "reference/splice-ans-api" - }, "pages": [ - "POST /v0/entry/create", - "GET /v0/entry/all" + "reference/splice-ans-api/post-v0entrycreate", + "reference/splice-ans-api/get-v0entryall" ] }, { "group": "Scan Proxy API", - "openapi": { - "source": "openapi/splice/validator/scan-proxy.yaml", - "directory": "reference/splice-scan-proxy-api" - }, "pages": [ - "GET /v0/scan-proxy/dso-party-id", - "GET /v0/scan-proxy/dso", - "GET /v0/scan-proxy/featured-apps/{provider_party_id}", - "GET /v0/scan-proxy/open-and-issuing-mining-rounds", - "GET /v0/scan-proxy/amulet-rules", - "GET /v0/scan-proxy/ans-entries/by-party/{party}", - "GET /v0/scan-proxy/ans-entries", - "GET /v0/scan-proxy/ans-entries/by-name/{name}", - "POST /v0/scan-proxy/ans-rules", - "GET /v0/scan-proxy/transfer-preapprovals/by-party/{party}", - "GET /v0/scan-proxy/transfer-command-counter/{party}", - "GET /v0/scan-proxy/transfer-command/status", - "POST /v0/scan-proxy/holdings/summary", - "POST /v1/scan-proxy/holdings/summary", - "GET /v0/scan-proxy/unclaimed-development-fund-coupons" + "reference/splice-scan-proxy-api/get-v0scan-proxydso-party-id", + "reference/splice-scan-proxy-api/get-v0scan-proxydso", + "reference/splice-scan-proxy-api/get-v0scan-proxyfeatured-apps:provider_party_id", + "reference/splice-scan-proxy-api/get-v0scan-proxyopen-and-issuing-mining-rounds", + "reference/splice-scan-proxy-api/get-v0scan-proxyamulet-rules", + "reference/splice-scan-proxy-api/get-v0scan-proxyans-entriesby-party:party", + "reference/splice-scan-proxy-api/get-v0scan-proxyans-entries", + "reference/splice-scan-proxy-api/get-v0scan-proxyans-entriesby-name:name", + "reference/splice-scan-proxy-api/post-v0scan-proxyans-rules", + "reference/splice-scan-proxy-api/get-v0scan-proxytransfer-preapprovalsby-party:party", + "reference/splice-scan-proxy-api/get-v0scan-proxytransfer-command-counter:party", + "reference/splice-scan-proxy-api/get-v0scan-proxytransfer-commandstatus", + "reference/splice-scan-proxy-api/post-v0scan-proxyholdingssummary", + "reference/splice-scan-proxy-api/post-v1scan-proxyholdingssummary", + "reference/splice-scan-proxy-api/get-v0scan-proxyunclaimed-development-fund-coupons" ] } ] @@ -2249,86 +2229,58 @@ "pages": [ { "group": "Token Metadata Service", - "openapi": { - "source": "openapi/splice/token-standard/token-metadata-v1.yaml", - "directory": "reference/splice-token-metadata-service" - }, "pages": [ - "GET /registry/metadata/v1/info", - "GET /registry/metadata/v1/instruments", - "GET /registry/metadata/v1/instruments/{instrumentId}" + "reference/splice-token-metadata-service/get-registrymetadatav1info", + "reference/splice-token-metadata-service/get-registrymetadatav1instruments", + "reference/splice-token-metadata-service/get-registrymetadatav1instruments:instrumentid" ] }, { "group": "Transfer Instruction API", - "openapi": { - "source": "openapi/splice/token-standard/transfer-instruction-v1.yaml", - "directory": "reference/splice-transfer-instruction-api" - }, "pages": [ - "POST /registry/transfer-instruction/v1/transfer-factory", - "POST /registry/transfer-instruction/v1/{transferInstructionId}/choice-contexts/accept", - "POST /registry/transfer-instruction/v1/{transferInstructionId}/choice-contexts/reject", - "POST /registry/transfer-instruction/v1/{transferInstructionId}/choice-contexts/withdraw" + "reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1transfer-factory", + "reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1:transferinstructionidchoice-contextsaccept", + "reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1:transferinstructionidchoice-contextsreject", + "reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1:transferinstructionidchoice-contextswithdraw" ] }, { "group": "Transfer Instruction V2 API", - "openapi": { - "source": "openapi/splice/token-standard/transfer-instruction-v2.yaml", - "directory": "reference/splice-transfer-instruction-v2-api" - }, "pages": [ - "POST /registry/transfer-instruction/v2/transfer-factory", - "POST /registry/transfer-instruction/v2/{transferInstructionId}/choice-contexts/accept", - "POST /registry/transfer-instruction/v2/{transferInstructionId}/choice-contexts/reject", - "POST /registry/transfer-instruction/v2/{transferInstructionId}/choice-contexts/withdraw" + "reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2transfer-factory", + "reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2:transferinstructionidchoice-contextsaccept", + "reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2:transferinstructionidchoice-contextsreject", + "reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2:transferinstructionidchoice-contextswithdraw" ] }, { "group": "Allocation API", - "openapi": { - "source": "openapi/splice/token-standard/allocation-v1.yaml", - "directory": "reference/splice-allocation-api" - }, "pages": [ - "POST /registry/allocations/v1/{allocationId}/choice-contexts/execute-transfer", - "POST /registry/allocations/v1/{allocationId}/choice-contexts/withdraw", - "POST /registry/allocations/v1/{allocationId}/choice-contexts/cancel" + "reference/splice-allocation-api/post-registryallocationsv1:allocationidchoice-contextsexecute-transfer", + "reference/splice-allocation-api/post-registryallocationsv1:allocationidchoice-contextswithdraw", + "reference/splice-allocation-api/post-registryallocationsv1:allocationidchoice-contextscancel" ] }, { "group": "Allocation V2 API", - "openapi": { - "source": "openapi/splice/token-standard/allocation-v2.yaml", - "directory": "reference/splice-allocation-v2-api" - }, "pages": [ - "POST /registry/allocation/v2/settlement-factory", - "POST /registry/allocations/v2/{allocationId}/choice-contexts/withdraw", - "POST /registry/allocations/v2/{allocationId}/choice-contexts/cancel" + "reference/splice-allocation-v2-api/post-registryallocationv2settlement-factory", + "reference/splice-allocation-v2-api/post-registryallocationsv2:allocationidchoice-contextswithdraw", + "reference/splice-allocation-v2-api/post-registryallocationsv2:allocationidchoice-contextscancel" ] }, { "group": "Allocation Instruction API", - "openapi": { - "source": "openapi/splice/token-standard/allocation-instruction-v1.yaml", - "directory": "reference/splice-allocation-instruction-api" - }, "pages": [ - "POST /registry/allocation-instruction/v1/allocation-factory" + "reference/splice-allocation-instruction-api/post-registryallocation-instructionv1allocation-factory" ] }, { "group": "Allocation Instruction V2 API", - "openapi": { - "source": "openapi/splice/token-standard/allocation-instruction-v2.yaml", - "directory": "reference/splice-allocation-instruction-v2-api" - }, "pages": [ - "POST /registry/allocation-instruction/v2/allocation-factory", - "POST /registry/allocation-instruction/v2/{allocationInstructionId}/choice-contexts/accept", - "POST /registry/allocation-instruction/v2/{allocationInstructionId}/choice-contexts/withdraw" + "reference/splice-allocation-instruction-v2-api/post-registryallocation-instructionv2allocation-factory", + "reference/splice-allocation-instruction-v2-api/post-registryallocation-instructionv2:allocationinstructionidchoice-contextsaccept", + "reference/splice-allocation-instruction-v2-api/post-registryallocation-instructionv2:allocationinstructionidchoice-contextswithdraw" ] } ] diff --git a/docs-main/reference/splice-allocation-api/post-registryallocationsv1:allocationidchoice-contextscancel.mdx b/docs-main/reference/splice-allocation-api/post-registryallocationsv1:allocationidchoice-contextscancel.mdx new file mode 100644 index 000000000..2f61db3b3 --- /dev/null +++ b/docs-main/reference/splice-allocation-api/post-registryallocationsv1:allocationidchoice-contextscancel.mdx @@ -0,0 +1,247 @@ +--- +title: "Get the choice context to cancel an allocation" +api: "POST https://example.com/registry/allocations/v1/{allocationId}/choice-contexts/cancel" +playground: "interactive" +--- + +
+ + + +
+ +

Allocation API

+ + +

Get the choice context to cancel an allocation

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +Get the choice context to cancel an allocation. + +## Protocol Details + + + +
+ +
+ Operation ID + getAllocationCancelContext +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + + +The contract ID of the allocation to cancel. + + + + + + + + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + +Metadata that will be passed to the choice, and should be incorporated into the choice context. Provided for extensibility. + + + + + + +If set to true, the response will not include fields prefixed with 'debug'. Useful to save bandwidth. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The additional data to use when exercising the choice. + + + + + +The contracts that are required to be disclosed to the participant node for exercising the choice. + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://example.com/registry/allocations/v1/{allocationId}/choice-contexts/cancel' \ + --header 'Content-Type: application/json' \ + --data '{"meta":{},"excludeDebugFields":false}' +``` + + + + + + +```json 200 response +{ + "choiceContextData": {}, + "disclosedContracts": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-allocation-api/post-registryallocationsv1:allocationidchoice-contextsexecute-transfer.mdx b/docs-main/reference/splice-allocation-api/post-registryallocationsv1:allocationidchoice-contextsexecute-transfer.mdx new file mode 100644 index 000000000..64736d56c --- /dev/null +++ b/docs-main/reference/splice-allocation-api/post-registryallocationsv1:allocationidchoice-contextsexecute-transfer.mdx @@ -0,0 +1,247 @@ +--- +title: "Get the choice context to execute a transfer on an allocation" +api: "POST https://example.com/registry/allocations/v1/{allocationId}/choice-contexts/execute-transfer" +playground: "interactive" +--- + +
+ + + +
+ +

Allocation API

+ + +

Get the choice context to execute a transfer on an allocation

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +Get the choice context to execute a transfer on an allocation. + +## Protocol Details + + + +
+ +
+ Operation ID + getAllocationTransferContext +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + + +The contract ID of the allocation whose transfer the caller wants to execute. + + + + + + + + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + +Metadata that will be passed to the choice, and should be incorporated into the choice context. Provided for extensibility. + + + + + + +If set to true, the response will not include fields prefixed with 'debug'. Useful to save bandwidth. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The additional data to use when exercising the choice. + + + + + +The contracts that are required to be disclosed to the participant node for exercising the choice. + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://example.com/registry/allocations/v1/{allocationId}/choice-contexts/execute-transfer' \ + --header 'Content-Type: application/json' \ + --data '{"meta":{},"excludeDebugFields":false}' +``` + + + + + + +```json 200 response +{ + "choiceContextData": {}, + "disclosedContracts": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-allocation-api/post-registryallocationsv1:allocationidchoice-contextswithdraw.mdx b/docs-main/reference/splice-allocation-api/post-registryallocationsv1:allocationidchoice-contextswithdraw.mdx new file mode 100644 index 000000000..4a05436f2 --- /dev/null +++ b/docs-main/reference/splice-allocation-api/post-registryallocationsv1:allocationidchoice-contextswithdraw.mdx @@ -0,0 +1,247 @@ +--- +title: "Get the choice context to withdraw an allocation" +api: "POST https://example.com/registry/allocations/v1/{allocationId}/choice-contexts/withdraw" +playground: "interactive" +--- + +
+ + + +
+ +

Allocation API

+ + +

Get the choice context to withdraw an allocation

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +Get the choice context to withdraw an allocation. + +## Protocol Details + + + +
+ +
+ Operation ID + getAllocationWithdrawContext +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + + +The contract ID of the allocation to withdraw. + + + + + + + + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + +Metadata that will be passed to the choice, and should be incorporated into the choice context. Provided for extensibility. + + + + + + +If set to true, the response will not include fields prefixed with 'debug'. Useful to save bandwidth. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The additional data to use when exercising the choice. + + + + + +The contracts that are required to be disclosed to the participant node for exercising the choice. + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://example.com/registry/allocations/v1/{allocationId}/choice-contexts/withdraw' \ + --header 'Content-Type: application/json' \ + --data '{"meta":{},"excludeDebugFields":false}' +``` + + + + + + +```json 200 response +{ + "choiceContextData": {}, + "disclosedContracts": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-allocation-instruction-api/post-registryallocation-instructionv1allocation-factory.mdx b/docs-main/reference/splice-allocation-instruction-api/post-registryallocation-instructionv1allocation-factory.mdx new file mode 100644 index 000000000..a26e1f261 --- /dev/null +++ b/docs-main/reference/splice-allocation-instruction-api/post-registryallocation-instructionv1allocation-factory.mdx @@ -0,0 +1,229 @@ +--- +title: "Allocation factory" +api: "POST https://example.com/registry/allocation-instruction/v1/allocation-factory" +playground: "interactive" +--- + +
+ + + +
+ +

Allocation Instruction API

+ + +

Allocation factory

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +Get the factory and choice context for creating allocations using the `AllocationFactory_Allocate` choice. + +## Protocol Details + + + +
+ +
+ Operation ID + getAllocationFactory +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + +The arguments that are intended to be passed to the choice provided by the factory. To avoid repeating the Daml type definitions, they are specified as JSON objects. However the concrete format is given by how the choice arguments are encoded using the Daml JSON API (with the `extraArgs.context` and `extraArgs.meta` fields set to the empty object). The choice arguments are provided so that the registry can also provide choice-argument specific contracts, e.g., the configuration for a specific instrument-id. + + + + + + +If set to true, the response will not include fields prefixed with 'debug'. Useful to save bandwidth. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The contract ID of the contract implementing the factory interface. + + + + + +The context required to exercise a choice on a contract via an interface. Used to retrieve additional reference date that is passed in via disclosed contracts, which are in turn referred to via their contract ID in the `choiceContextData`. + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://example.com/registry/allocation-instruction/v1/allocation-factory' \ + --header 'Content-Type: application/json' \ + --data '{"choiceArguments":{},"excludeDebugFields":false}' +``` + + + + + + +```json 200 response +{ + "factoryId": "string", + "choiceContext": { + "choiceContextData": {}, + "disclosedContracts": [ + {} + ] + } +} +``` + + diff --git a/docs-main/reference/splice-allocation-instruction-v2-api/post-registryallocation-instructionv2:allocationinstructionidchoice-contextsaccept.mdx b/docs-main/reference/splice-allocation-instruction-v2-api/post-registryallocation-instructionv2:allocationinstructionidchoice-contextsaccept.mdx new file mode 100644 index 000000000..b420f4d69 --- /dev/null +++ b/docs-main/reference/splice-allocation-instruction-v2-api/post-registryallocation-instructionv2:allocationinstructionidchoice-contextsaccept.mdx @@ -0,0 +1,271 @@ +--- +title: "Get the choice context to accept an allocation instruction" +api: "POST https://example.com/registry/allocation-instruction/v2/{allocationInstructionId}/choice-contexts/accept" +playground: "interactive" +--- + +
+ + + +
+ +

Allocation Instruction V2 API

+ + +

Get the choice context to accept an allocation instruction

+ + + +
+ + OpenAPI + + Since 0.6.11 + +
+ + +
+ +Get the choice context to accept an allocation instruction. + +## Protocol Details + + + +
+ +
+ Operation ID + getAllocationInstructionAcceptContext +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + + +The contract ID of the allocation instruction to accept. + + + + + + + + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + +Metadata that will be passed to the choice, and should be incorporated into the choice context. Provided for extensibility. + + + + + + +If set to true, the response will not include fields prefixed with 'debug'. Useful to save bandwidth. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The additional data to use when exercising the choice. + + + + + +The contracts that are required to be disclosed to the participant node for exercising the choice. + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 409 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.6.11 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://example.com/registry/allocation-instruction/v2/{allocationInstructionId}/choice-contexts/accept' \ + --header 'Content-Type: application/json' \ + --data '{"meta":{},"excludeDebugFields":false}' +``` + + + + + + +```json 200 response +{ + "choiceContextData": {}, + "disclosedContracts": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-allocation-instruction-v2-api/post-registryallocation-instructionv2:allocationinstructionidchoice-contextswithdraw.mdx b/docs-main/reference/splice-allocation-instruction-v2-api/post-registryallocation-instructionv2:allocationinstructionidchoice-contextswithdraw.mdx new file mode 100644 index 000000000..b30ba8a6c --- /dev/null +++ b/docs-main/reference/splice-allocation-instruction-v2-api/post-registryallocation-instructionv2:allocationinstructionidchoice-contextswithdraw.mdx @@ -0,0 +1,271 @@ +--- +title: "Get the choice context to withdraw an allocation instruction" +api: "POST https://example.com/registry/allocation-instruction/v2/{allocationInstructionId}/choice-contexts/withdraw" +playground: "interactive" +--- + +
+ + + +
+ +

Allocation Instruction V2 API

+ + +

Get the choice context to withdraw an allocation instruction

+ + + +
+ + OpenAPI + + Since 0.6.11 + +
+ + +
+ +Get the choice context to withdraw an allocation instruction. + +## Protocol Details + + + +
+ +
+ Operation ID + getAllocationInstructionWithdrawContext +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + + +The contract ID of the allocation instruction to withdraw. + + + + + + + + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + +Metadata that will be passed to the choice, and should be incorporated into the choice context. Provided for extensibility. + + + + + + +If set to true, the response will not include fields prefixed with 'debug'. Useful to save bandwidth. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The additional data to use when exercising the choice. + + + + + +The contracts that are required to be disclosed to the participant node for exercising the choice. + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 409 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.6.11 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://example.com/registry/allocation-instruction/v2/{allocationInstructionId}/choice-contexts/withdraw' \ + --header 'Content-Type: application/json' \ + --data '{"meta":{},"excludeDebugFields":false}' +``` + + + + + + +```json 200 response +{ + "choiceContextData": {}, + "disclosedContracts": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-allocation-instruction-v2-api/post-registryallocation-instructionv2allocation-factory.mdx b/docs-main/reference/splice-allocation-instruction-v2-api/post-registryallocation-instructionv2allocation-factory.mdx new file mode 100644 index 000000000..0dadb4b38 --- /dev/null +++ b/docs-main/reference/splice-allocation-instruction-v2-api/post-registryallocation-instructionv2allocation-factory.mdx @@ -0,0 +1,253 @@ +--- +title: "Allocation factory" +api: "POST https://example.com/registry/allocation-instruction/v2/allocation-factory" +playground: "interactive" +--- + +
+ + + +
+ +

Allocation Instruction V2 API

+ + +

Allocation factory

+ + + +
+ + OpenAPI + + Since 0.6.11 + +
+ + +
+ +Get the factory and choice context for creating allocations using the `AllocationFactory_Allocate` choice. Registries MAY limit the size of the allocations that they support. To ensure wide compatibility with apps, registries MUST support creating allocations that involve at most 25 transfer legs. + +## Protocol Details + + + +
+ +
+ Operation ID + getAllocationFactory +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + +The arguments that are intended to be passed to the choice provided by the factory. To avoid repeating the Daml type definitions, they are specified as JSON objects. However the concrete format is given by how the choice arguments are encoded using the Daml JSON API (with the `extraArgs.context` and `extraArgs.meta` fields set to the empty object). The choice arguments are provided so that the registry can also provide choice-argument specific contracts, e.g., the configuration for a specific instrument-id. + + + + + + +If set to true, the response will not include fields prefixed with 'debug'. Useful to save bandwidth. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The contract ID of the contract implementing the factory interface. + + + + + +The context required to exercise a choice on a contract via an interface. Used to retrieve additional reference data that is passed in via disclosed contracts, which are in turn referred to via their contract ID in the `choiceContextData`. Asset implementations SHOULD avoid that this value depends on contract-ids passed in the choice arguments, so that clients can prefetch choice contexts when chaining multiple token standard actions together in a single Daml transaction. + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 409 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.6.11 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://example.com/registry/allocation-instruction/v2/allocation-factory' \ + --header 'Content-Type: application/json' \ + --data '{"choiceArguments":{},"excludeDebugFields":false}' +``` + + + + + + +```json 200 response +{ + "factoryId": "string", + "choiceContext": { + "choiceContextData": {}, + "disclosedContracts": [ + {} + ] + } +} +``` + + diff --git a/docs-main/reference/splice-allocation-v2-api/post-registryallocationsv2:allocationidchoice-contextscancel.mdx b/docs-main/reference/splice-allocation-v2-api/post-registryallocationsv2:allocationidchoice-contextscancel.mdx new file mode 100644 index 000000000..05256faa3 --- /dev/null +++ b/docs-main/reference/splice-allocation-v2-api/post-registryallocationsv2:allocationidchoice-contextscancel.mdx @@ -0,0 +1,271 @@ +--- +title: "Get the choice context to cancel an allocation" +api: "POST https://example.com/registry/allocations/v2/{allocationId}/choice-contexts/cancel" +playground: "interactive" +--- + +
+ + + +
+ +

Allocation V2 API

+ + +

Get the choice context to cancel an allocation

+ + + +
+ + OpenAPI + + Since 0.6.11 + +
+ + +
+ +Get the choice context to cancel an allocation. + +## Protocol Details + + + +
+ +
+ Operation ID + getAllocationCancelContext +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + + +The contract ID of the allocation to cancel. + + + + + + + + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + +Metadata that will be passed to the choice, and should be incorporated into the choice context. Provided for extensibility. + + + + + + +If set to true, the response will not include fields prefixed with 'debug'. Useful to save bandwidth. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The additional data to use when exercising the choice. + + + + + +The contracts that are required to be disclosed to the participant node for exercising the choice. + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 409 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.6.11 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://example.com/registry/allocations/v2/{allocationId}/choice-contexts/cancel' \ + --header 'Content-Type: application/json' \ + --data '{"meta":{},"excludeDebugFields":false}' +``` + + + + + + +```json 200 response +{ + "choiceContextData": {}, + "disclosedContracts": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-allocation-v2-api/post-registryallocationsv2:allocationidchoice-contextswithdraw.mdx b/docs-main/reference/splice-allocation-v2-api/post-registryallocationsv2:allocationidchoice-contextswithdraw.mdx new file mode 100644 index 000000000..6b72771cd --- /dev/null +++ b/docs-main/reference/splice-allocation-v2-api/post-registryallocationsv2:allocationidchoice-contextswithdraw.mdx @@ -0,0 +1,271 @@ +--- +title: "Get the choice context to withdraw an allocation" +api: "POST https://example.com/registry/allocations/v2/{allocationId}/choice-contexts/withdraw" +playground: "interactive" +--- + +
+ + + +
+ +

Allocation V2 API

+ + +

Get the choice context to withdraw an allocation

+ + + +
+ + OpenAPI + + Since 0.6.11 + +
+ + +
+ +Get the choice context to withdraw an allocation. + +## Protocol Details + + + +
+ +
+ Operation ID + getAllocationWithdrawContext +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + + +The contract ID of the allocation to withdraw. + + + + + + + + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + +Metadata that will be passed to the choice, and should be incorporated into the choice context. Provided for extensibility. + + + + + + +If set to true, the response will not include fields prefixed with 'debug'. Useful to save bandwidth. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The additional data to use when exercising the choice. + + + + + +The contracts that are required to be disclosed to the participant node for exercising the choice. + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 409 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.6.11 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://example.com/registry/allocations/v2/{allocationId}/choice-contexts/withdraw' \ + --header 'Content-Type: application/json' \ + --data '{"meta":{},"excludeDebugFields":false}' +``` + + + + + + +```json 200 response +{ + "choiceContextData": {}, + "disclosedContracts": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-allocation-v2-api/post-registryallocationv2settlement-factory.mdx b/docs-main/reference/splice-allocation-v2-api/post-registryallocationv2settlement-factory.mdx new file mode 100644 index 000000000..220cf3198 --- /dev/null +++ b/docs-main/reference/splice-allocation-v2-api/post-registryallocationv2settlement-factory.mdx @@ -0,0 +1,253 @@ +--- +title: "Settlement factory" +api: "POST https://example.com/registry/allocation/v2/settlement-factory" +playground: "interactive" +--- + +
+ + + +
+ +

Allocation V2 API

+ + +

Settlement factory

+ + + +
+ + OpenAPI + + Since 0.6.11 + +
+ + +
+ +Get the factory and choice context for settling allocations using the `SettlementFactory_SettleBatch` choice. Registries MAY limit the size of the settlement requests that they support. To ensure wide compatibility with apps, registries MUST support all settlement requests that involve at most 25 transfer legs. + +## Protocol Details + + + +
+ +
+ Operation ID + getSettlementFactory +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + +The arguments that are intended to be passed to the choice provided by the factory. To avoid repeating the Daml type definitions, they are specified as JSON objects. However the concrete format is given by how the choice arguments are encoded using the Daml JSON API (with the `extraArgs.context` and `extraArgs.meta` fields set to the empty object). The choice arguments are provided so that the registry can also provide choice-argument specific contracts, e.g., the configuration for a specific instrument-id. + + + + + + +If set to true, the response will not include fields prefixed with 'debug'. Useful to save bandwidth. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The contract ID of the contract implementing the factory interface. + + + + + +The context required to exercise a choice on a contract via an interface. Used to retrieve additional reference data that is passed in via disclosed contracts, which are in turn referred to via their contract ID in the `choiceContextData`. Asset implementations SHOULD avoid that this value depends on contract-ids passed in the choice arguments, so that clients can prefetch choice contexts when chaining multiple token standard actions together in a single Daml transaction. + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 409 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.6.11 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://example.com/registry/allocation/v2/settlement-factory' \ + --header 'Content-Type: application/json' \ + --data '{"choiceArguments":{},"excludeDebugFields":false}' +``` + + + + + + +```json 200 response +{ + "factoryId": "string", + "choiceContext": { + "choiceContextData": {}, + "disclosedContracts": [ + {} + ] + } +} +``` + + diff --git a/docs-main/reference/splice-ans-api/get-v0entryall.mdx b/docs-main/reference/splice-ans-api/get-v0entryall.mdx new file mode 100644 index 000000000..58263b7cf --- /dev/null +++ b/docs-main/reference/splice-ans-api/get-v0entryall.mdx @@ -0,0 +1,188 @@ +--- +title: "Lists all ANS entries owned by the user" +api: "GET https://example.com/api/validator/v0/entry/all" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

ANS API

+ + +

Lists all ANS entries owned by the user

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +Lists all ANS entries owned by the user. Expired entries are not included in the response, even if the corresponding contracts are still active on the ledger. + +## Protocol Details + + + +
+ +
+ Operation ID + listAnsEntries +
+ +
+ Authentication + Bearer token +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 500 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://example.com/api/validator/v0/entry/all' \ + --header 'Authorization: Bearer $TOKEN' +``` + + + + + + +```json 200 response +{ + "entries": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-ans-api/post-v0entrycreate.mdx b/docs-main/reference/splice-ans-api/post-v0entrycreate.mdx new file mode 100644 index 000000000..c384a14ac --- /dev/null +++ b/docs-main/reference/splice-ans-api/post-v0entrycreate.mdx @@ -0,0 +1,255 @@ +--- +title: "Requests the creation of a new ANS entry" +api: "POST https://example.com/api/validator/v0/entry/create" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

ANS API

+ + +

Requests the creation of a new ANS entry

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +Requests the creation of a new ANS entry. ANS entries need to be paid and renewed via subscription payments. Upon requesting the creation of the ANS entry, a subscription request is created. The user may accept the subscription request via their wallet by offering the initial payment. Once the subscription request is accepted, the DSO automation burns the payment and creates the ANS entry. + +## Protocol Details + + + +
+ +
+ Operation ID + createAnsEntry +
+ +
+ Authentication + Bearer token +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + +The name of the ANS entry. It must end with `.unverified.<ans>` where `<ans>` is the ANS acronym chosen by the DSO. + + + + + + +A valid URL or an empty string. Use this to link to a website, such as the homepage of an application provided by the owner of this entry. Must not be longer than 255 characters. + + + + + + +A human readable description of the ANS entry. May be empty. Must not be longer than 140 characters. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + +The name of the ANS entry, as specified in the request. + + + + + +The URL of the ANS entry, as specified in the request. + + + + + +The description of the ANS entry, as specified in the request. + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 500 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://example.com/api/validator/v0/entry/create' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"name":"string","url":"string","description":"string"}' +``` + + + + + + +```json 200 response +{ + "entryContextCid": "string", + "subscriptionRequestCid": "string", + "name": "string", + "url": "string", + "description": "string" +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-livez.mdx b/docs-main/reference/splice-scan-api/get-livez.mdx new file mode 100644 index 000000000..de74bd417 --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-livez.mdx @@ -0,0 +1,110 @@ +--- +title: "Is live" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/livez" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Is live

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +## Protocol Details + + + +
+ +
+ Operation ID + isLive +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +## Outputs + + + +### 200 + + + + + + + +### 503 + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/livez' +``` + + diff --git a/docs-main/reference/splice-scan-api/get-readyz.mdx b/docs-main/reference/splice-scan-api/get-readyz.mdx new file mode 100644 index 000000000..d35fd48fc --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-readyz.mdx @@ -0,0 +1,110 @@ +--- +title: "Is ready" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/readyz" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Is ready

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +## Protocol Details + + + +
+ +
+ Operation ID + isReady +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +## Outputs + + + +### 200 + + + + + + + +### 503 + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/readyz' +``` + + diff --git a/docs-main/reference/splice-scan-api/get-status.mdx b/docs-main/reference/splice-scan-api/get-status.mdx new file mode 100644 index 000000000..71506cae7 --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-status.mdx @@ -0,0 +1,129 @@ +--- +title: "Health status" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/status" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Health status

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +## Protocol Details + + + +
+ +
+ Operation ID + getHealthStatus +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/status' +``` + + + + + + +```json 200 response +{ + "success": {} +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0acs:party.mdx b/docs-main/reference/splice-scan-api/get-v0acs:party.mdx new file mode 100644 index 000000000..7d3ffd963 --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0acs:party.mdx @@ -0,0 +1,177 @@ +--- +title: "**Deprecated**" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/acs/{party}" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

**Deprecated**

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +**Deprecated**. Fetch the current SV participant ACS snapshot for the DSO and `party`. + +## Protocol Details + + + +
+ +
+ Operation ID + getAcsSnapshot +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + + + + + + + + + + +### Query parameters + + + + + + + + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +base64-encoded ACS snapshot for the intersection of the DSO party and the requested party’s ACS + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Deprecated + 0.5.10 +
+ +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/acs/{party}' +``` + + + + + + +```json 200 response +{ + "acs_snapshot": "string" +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0active-synchronizer-serial.mdx b/docs-main/reference/splice-scan-api/get-v0active-synchronizer-serial.mdx new file mode 100644 index 000000000..0b183feea --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0active-synchronizer-serial.mdx @@ -0,0 +1,181 @@ +--- +title: "Get the current physical synchronizer serial as reported by the SV participant" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/active-synchronizer-serial" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Get the current physical synchronizer serial as reported by the SV participant

+ + + +
+ + OpenAPI + + Since 0.6.0 + +
+ + +
+ +Get the current physical synchronizer serial as reported by the SV participant. + +## Protocol Details + + + +
+ +
+ Operation ID + getActivePhysicalSynchronizerSerial +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The current physical synchronizer serial as reported by the SV participant. + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 500 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.6.0 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/active-synchronizer-serial' +``` + + + + + + +```json 200 response +{ + "serial": 0 +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0adminsvvoterequests.mdx b/docs-main/reference/splice-scan-api/get-v0adminsvvoterequests.mdx new file mode 100644 index 000000000..8ecad6d84 --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0adminsvvoterequests.mdx @@ -0,0 +1,133 @@ +--- +title: "List all active `VoteRequest`\\ s" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/admin/sv/voterequests" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

List all active `VoteRequest`\ s

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +List all active `VoteRequest`\ s. + +## Protocol Details + + + +
+ +
+ Operation ID + listDsoRulesVoteRequests +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/admin/sv/voterequests' +``` + + + + + + +```json 200 response +{ + "dso_rules_vote_requests": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0adminvalidatorlicenses.mdx b/docs-main/reference/splice-scan-api/get-v0adminvalidatorlicenses.mdx new file mode 100644 index 000000000..843af8e4e --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0adminvalidatorlicenses.mdx @@ -0,0 +1,174 @@ +--- +title: "List all validators currently approved by members of the DSO, paginated, sorted newest-first" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/admin/validator/licenses" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

List all validators currently approved by members of the DSO, paginated, sorted newest-first

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +List all validators currently approved by members of the DSO, paginated, sorted newest-first. + +## Protocol Details + + + +
+ +
+ Operation ID + listValidatorLicenses +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Query parameters + + + + + + + + +OpenAPI type: `integer (int64)`. + + +A `next_page_token` from a prior response; if absent, return the first page. + + + + + +OpenAPI type: `integer (int32)`. + + +Maximum number of elements to return, 1000 by default. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +Contracts of Daml template `Splice.ValidatorLicense:ValidatorLicense`. + + + + + +When requesting the next page of results, pass this as URL query parameter `after`. If absent or `null`, there are no more pages. + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/admin/validator/licenses' +``` + + + + + + +```json 200 response +{ + "validator_licenses": [ + {} + ], + "next_page_token": 0 +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0amulet-config-for-round.mdx b/docs-main/reference/splice-scan-api/get-v0amulet-config-for-round.mdx new file mode 100644 index 000000000..82a994120 --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0amulet-config-for-round.mdx @@ -0,0 +1,206 @@ +--- +title: "**Deprecated**" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/amulet-config-for-round" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

**Deprecated**

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +**Deprecated**. Retrieve some information from the `AmuletRules` selected for the given round + +## Protocol Details + + + +
+ +
+ Operation ID + getAmuletConfigForRound +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Query parameters + + + + + + + + +OpenAPI type: `integer (int64)`. + + + + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Deprecated + 0.5.10 +
+ +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/amulet-config-for-round' +``` + + + + + + +```json 200 response +{ + "amulet_create_fee": "string", + "holding_fee": "string", + "lock_holder_fee": "string", + "transfer_fee": { + "initial": "string", + "steps": [ + {} + ] + } +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0amulet-pricevotes.mdx b/docs-main/reference/splice-scan-api/get-v0amulet-pricevotes.mdx new file mode 100644 index 000000000..437369e12 --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0amulet-pricevotes.mdx @@ -0,0 +1,133 @@ +--- +title: "Retrieve a list of the latest amulet price votes" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/amulet-price/votes" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Retrieve a list of the latest amulet price votes

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +Retrieve a list of the latest amulet price votes + +## Protocol Details + + + +
+ +
+ Operation ID + listAmuletPriceVotes +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/amulet-price/votes' +``` + + + + + + +```json 200 response +{ + "amulet_price_votes": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0ans-entries.mdx b/docs-main/reference/splice-scan-api/get-v0ans-entries.mdx new file mode 100644 index 000000000..d0d4547de --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0ans-entries.mdx @@ -0,0 +1,163 @@ +--- +title: "List ans entries" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/ans-entries" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

List ans entries

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +Lists all non-expired ANS entries whose names are prefixed with the `name_prefix`, up to `page_size` entries. + +## Protocol Details + + + +
+ +
+ Operation ID + listAnsEntries +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Query parameters + + + + + + + + + +Every result's name will start with this substring; if empty or absent, all entries will be listed. Does not have to be a whole word or segment; any substring will be accepted. + + + + + +OpenAPI type: `integer (int32)`. + + +The maximum number of results returned. Older (but still non-expired) results are listed first. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/ans-entries' +``` + + + + + + +```json 200 response +{ + "entries": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0ans-entriesby-name:name.mdx b/docs-main/reference/splice-scan-api/get-v0ans-entriesby-name:name.mdx new file mode 100644 index 000000000..4e2ee3603 --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0ans-entriesby-name:name.mdx @@ -0,0 +1,180 @@ +--- +title: "If present, the ANS entry named exactly `name`" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/ans-entries/by-name/{name}" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

If present, the ANS entry named exactly `name`

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +If present, the ANS entry named exactly `name`. + +## Protocol Details + + + +
+ +
+ Operation ID + lookupAnsEntryByName +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/ans-entries/by-name/{name}' +``` + + + + + + +```json 200 response +{ + "entry": { + "contract_id": "string", + "user": "string", + "name": "string", + "url": "string", + "description": "string", + "expires_at": "2026-01-01T00:00:00Z" + } +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0ans-entriesby-party:party.mdx b/docs-main/reference/splice-scan-api/get-v0ans-entriesby-party:party.mdx new file mode 100644 index 000000000..f3ef15504 --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0ans-entriesby-party:party.mdx @@ -0,0 +1,183 @@ +--- +title: "If present, the first ANS entry for user `party` according to `name` lexicographic order" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/ans-entries/by-party/{party}" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

If present, the first ANS entry for user `party` according to `name` lexicographic order

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +If present, the first ANS entry for user `party` according to `name` lexicographic order. + +## Protocol Details + + + +
+ +
+ Operation ID + lookupAnsEntryByParty +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + + +The user party ID that holds the ANS entry. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/ans-entries/by-party/{party}' +``` + + + + + + +```json 200 response +{ + "entry": { + "contract_id": "string", + "user": "string", + "name": "string", + "url": "string", + "description": "string", + "expires_at": "2026-01-01T00:00:00Z" + } +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0backfillingstatus.mdx b/docs-main/reference/splice-scan-api/get-v0backfillingstatus.mdx new file mode 100644 index 000000000..ce7dd15f0 --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0backfillingstatus.mdx @@ -0,0 +1,133 @@ +--- +title: "Retrieve the status of the backfilling process" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/backfilling/status" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Retrieve the status of the backfilling process

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +Retrieve the status of the backfilling process. + +## Protocol Details + + + +
+ +
+ Operation ID + getBackfillingStatus +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +True if ALL backfilling processes are complete, false otherwise. Some scan endpoints return error responses if backfilling is not complete (e.g., `/v1/updates`), others return partial results (e.g., `/v0/transactions`). This endpoint is a simple indicator for whether historical information may be incomplete. To determine the progress of individual backfilling processes, inspect the corresponding metrics. + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/backfilling/status' +``` + + + + + + +```json 200 response +{ + "complete": false +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0closed-rounds.mdx b/docs-main/reference/splice-scan-api/get-v0closed-rounds.mdx new file mode 100644 index 000000000..f983d65e4 --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0closed-rounds.mdx @@ -0,0 +1,135 @@ +--- +title: "Closed rounds" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/closed-rounds" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Closed rounds

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +Every closed mining round on the ledger still in post-close process for the connected Splice network, in round number order, earliest-first. + +## Protocol Details + + + +
+ +
+ Operation ID + getClosedRounds +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +Contracts of the Daml template `Splice.Round:ClosedMiningRound`, one for every closed round that is still in process, i.e. it either has unprocessed rewards or a missing `Splice.DsoRules:Confirmation`. + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/closed-rounds' +``` + + + + + + +```json 200 response +{ + "rounds": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0domains:domain_idmembers:member_idtraffic-status.mdx b/docs-main/reference/splice-scan-api/get-v0domains:domain_idmembers:member_idtraffic-status.mdx new file mode 100644 index 000000000..4caf6a2b6 --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0domains:domain_idmembers:member_idtraffic-status.mdx @@ -0,0 +1,234 @@ +--- +title: "Member traffic status" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/domains/{domain_id}/members/{member_id}/traffic-status" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Member traffic status

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +Get a member's traffic status as reported by the sequencer, according to ledger state at the time of the request. + +## Protocol Details + + + +
+ +
+ Operation ID + getMemberTrafficStatus +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + + +The synchronizer ID to look up traffic for. + + + + + + +The participant or mediator whose traffic to look up, in the format `code::id::fingerprint` where `code` is `PAR` or `MED`. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 500 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/domains/{domain_id}/members/{member_id}/traffic-status' +``` + + + + + + +```json 200 response +{ + "traffic_status": { + "actual": {}, + "target": {} + } +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0domains:domain_idparties:party_idparticipant-id.mdx b/docs-main/reference/splice-scan-api/get-v0domains:domain_idparties:party_idparticipant-id.mdx new file mode 100644 index 000000000..61804d8fb --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0domains:domain_idparties:party_idparticipant-id.mdx @@ -0,0 +1,209 @@ +--- +title: "Get the ID of the participant hosting a given party" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/domains/{domain_id}/parties/{party_id}/participant-id" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Get the ID of the participant hosting a given party

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +Get the ID of the participant hosting a given party. This will fail if there are multiple party-to-participant mappings for the given synchronizer and party, which is not currently supported. + +## Protocol Details + + + +
+ +
+ Operation ID + getPartyToParticipant +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + + +The synchronizer ID to look up a mapping for. + + + + + + +The party ID to lookup a participant ID for. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +ID of the participant hosting the provided party, in the form `PAR::id::fingerprint` + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 500 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/domains/{domain_id}/parties/{party_id}/participant-id' +``` + + + + + + +```json 200 response +{ + "participant_id": "string" +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0dso-party-id.mdx b/docs-main/reference/splice-scan-api/get-v0dso-party-id.mdx new file mode 100644 index 000000000..8732f432c --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0dso-party-id.mdx @@ -0,0 +1,131 @@ +--- +title: "The party ID of the DSO for the Splice network connected by this Scan app" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/dso-party-id" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

The party ID of the DSO for the Splice network connected by this Scan app

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +The party ID of the DSO for the Splice network connected by this Scan app. + +## Protocol Details + + + +
+ +
+ Operation ID + getDsoPartyId +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/dso-party-id' +``` + + + + + + +```json 200 response +{ + "dso_party_id": "string" +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0dso-sequencers.mdx b/docs-main/reference/splice-scan-api/get-v0dso-sequencers.mdx new file mode 100644 index 000000000..5df6aee12 --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0dso-sequencers.mdx @@ -0,0 +1,145 @@ +--- +title: "Retrieve Canton sequencer configuration for all SVs, grouped by connected synchronizer ID" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/dso-sequencers" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Retrieve Canton sequencer configuration for all SVs, grouped by connected synchronizer ID

+ + + +
+ + OpenAPI + + Since 0.5.10 + + Changed 0.6.0 + +
+ + +
+ +Retrieve Canton sequencer configuration for all SVs, grouped by connected synchronizer ID + +## Protocol Details + + + +
+ +
+ Operation ID + listDsoSequencers +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 0.6.0 +
+ +

The GET /v0/dso-sequencers operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/dso-sequencers' +``` + + + + + + +```json 200 response +{ + "domainSequencers": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0dso.mdx b/docs-main/reference/splice-scan-api/get-v0dso.mdx new file mode 100644 index 000000000..25fe6a2c9 --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0dso.mdx @@ -0,0 +1,192 @@ +--- +title: "Dso info" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/dso" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Dso info

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +## Protocol Details + + + +
+ +
+ Operation ID + getDsoInfo +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +User ID representing the SV + + + + + +Party representing the SV + + + + + +Party representing the whole DSO; for Scan only, also returned by `/v0/dso-party-id` + + + + + +Threshold required to pass vote requests; also known as the "governance threshold", it is always derived from the number of `svs` in `dso_rules` + + + + + + + + + + + + + + + + + +For every one of `svs` listed in `dso_rules`, a contract of the Daml template `Splice.DSO.SvState.SvNodeState`. This does not include states for offboarded SVs, though they may still have an on-ledger state contract + + + + + +Initial round from which the network bootstraps + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/dso' +``` + + + + + + +```json 200 response +{ + "sv_user": "string", + "sv_party_id": "string", + "dso_party_id": "string", + "voting_threshold": 0, + "latest_mining_round": { + "contract": {}, + "domain_id": "string" + }, + "amulet_rules": { + "contract": {}, + "domain_id": "string" + }, + "dso_rules": { + "contract": {}, + "domain_id": "string" + }, + "sv_node_states": [ + {} + ], + "initial_round": "string" +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0events:update_id.mdx b/docs-main/reference/splice-scan-api/get-v0events:update_id.mdx new file mode 100644 index 000000000..8f2bdfc14 --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0events:update_id.mdx @@ -0,0 +1,330 @@ +--- +title: "Returns the event with the given update_id" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/events/{update_id}" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Returns the event with the given update_id

+ + + +
+ + OpenAPI + + Since 0.5.10 + + Changed 0.6.10 + +
+ + +
+ +Returns the event with the given update_id. An event bears some combination of a transaction, a contract reassignment, and a verdict. + +## Protocol Details + + + +
+ +
+ Operation ID + getEventById +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + + + + + + + + + + +### Query parameters + + + + + + + + +OpenAPI type: `DamlValueEncoding`. + + + + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +An individual item in the update history. May be a transaction or a contract reassignment. + + + + + + + + + +Traffic summary data from the sequencer for the confirmation request corresponding to an event. + + + + + +App activity record computed from verdicts and traffic summaries as per [CIP-104](https://github.com/canton-foundation/cips/blob/main/cip-0104/cip-0104.md). + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 500 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 0.6.10 +
+ +

The GET /v0/events/{update_id} operation changed in this snapshot.

+ +
+ +
+
+ Changed + 0.6.0 +
+ +

The GET /v0/events/{update_id} operation changed in this snapshot.

+ +
+ +
+
+ Changed + 0.5.17 +
+ +

The GET /v0/events/{update_id} operation changed in this snapshot.

+ +
+ +
+
+ Changed + 0.5.15 +
+ +

The GET /v0/events/{update_id} operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/events/{update_id}' +``` + + + + + + +```json 200 response +{ + "update": {}, + "verdict": { + "update_id": "string", + "migration_id": 0, + "domain_id": "string", + "record_time": "string", + "finalization_time": "string", + "submitting_parties": [ + "string" + ], + "submitting_participant_uid": "string", + "verdict_result": {}, + "mediator_group": 0, + "transaction_views": {} + }, + "traffic_summary": { + "total_traffic_cost": 0, + "envelope_traffic_summaries": [ + {} + ] + }, + "app_activity_records": { + "round_number": 0, + "records": [ + {} + ] + } +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0feature-support.mdx b/docs-main/reference/splice-scan-api/get-v0feature-support.mdx new file mode 100644 index 000000000..a3a6f6fd5 --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0feature-support.mdx @@ -0,0 +1,165 @@ +--- +title: "Feature support" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/feature-support" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Feature support

+ + + +
+ + OpenAPI + + Since 0.5.10 + + Changed 0.5.16 + +
+ + +
+ +## Protocol Details + + + +
+ +
+ Operation ID + featureSupport +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 500 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 0.5.16 +
+ +

The GET /v0/feature-support operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/feature-support' +``` + + + + + + +```json 200 response +{ + "dummy": false +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0featured-apps.mdx b/docs-main/reference/splice-scan-api/get-v0featured-apps.mdx new file mode 100644 index 000000000..96837b25b --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0featured-apps.mdx @@ -0,0 +1,133 @@ +--- +title: "List every `FeaturedAppRight` registered with the DSO on the ledger" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/featured-apps" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

List every `FeaturedAppRight` registered with the DSO on the ledger

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +List every `FeaturedAppRight` registered with the DSO on the ledger. + +## Protocol Details + + + +
+ +
+ Operation ID + listFeaturedAppRights +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/featured-apps' +``` + + + + + + +```json 200 response +{ + "featured_apps": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0featured-apps:provider_party_id.mdx b/docs-main/reference/splice-scan-api/get-v0featured-apps:provider_party_id.mdx new file mode 100644 index 000000000..2ead1a697 --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0featured-apps:provider_party_id.mdx @@ -0,0 +1,155 @@ +--- +title: "Lookup featured app right" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/featured-apps/{provider_party_id}" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Lookup featured app right

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +If `provider_party_id` has a `FeaturedAppRight` registered with the DSO, return it; `featured_app_right` will be empty otherwise. + +## Protocol Details + + + +
+ +
+ Operation ID + lookupFeaturedAppRight +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/featured-apps/{provider_party_id}' +``` + + + + + + +```json 200 response +{ + "featured_app_right": { + "template_id": "string", + "contract_id": "string", + "payload": {}, + "created_event_blob": "string", + "created_at": "string" + } +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0featured-appsby-contract-id:contract_id.mdx b/docs-main/reference/splice-scan-api/get-v0featured-appsby-contract-id:contract_id.mdx new file mode 100644 index 000000000..5567665ba --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0featured-appsby-contract-id:contract_id.mdx @@ -0,0 +1,155 @@ +--- +title: "Look up a `FeaturedAppRight` contract by its contract ID" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/featured-apps/by-contract-id/{contract_id}" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Look up a `FeaturedAppRight` contract by its contract ID

+ + + +
+ + OpenAPI + + Since 0.6.0 + +
+ + +
+ +Look up a `FeaturedAppRight` contract by its contract ID. Returns `featured_app_right` if found, empty otherwise. + +## Protocol Details + + + +
+ +
+ Operation ID + lookupFeaturedAppRightByContractId +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.6.0 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/featured-apps/by-contract-id/{contract_id}' +``` + + + + + + +```json 200 response +{ + "featured_app_right": { + "template_id": "string", + "contract_id": "string", + "payload": {}, + "created_event_blob": "string", + "created_at": "string" + } +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0featured-appsby-provider:provider_party_id.mdx b/docs-main/reference/splice-scan-api/get-v0featured-appsby-provider:provider_party_id.mdx new file mode 100644 index 000000000..4128cd1b6 --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0featured-appsby-provider:provider_party_id.mdx @@ -0,0 +1,151 @@ +--- +title: "List all `FeaturedAppRight` contracts for the given provider" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/featured-apps/by-provider/{provider_party_id}" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

List all `FeaturedAppRight` contracts for the given provider

+ + + +
+ + OpenAPI + + Since 0.6.0 + +
+ + +
+ +List all `FeaturedAppRight` contracts for the given provider. + +## Protocol Details + + + +
+ +
+ Operation ID + listFeaturedAppRightsByProvider +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.6.0 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/featured-apps/by-provider/{provider_party_id}' +``` + + + + + + +```json 200 response +{ + "featured_apps": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0historybulkacs.mdx b/docs-main/reference/splice-scan-api/get-v0historybulkacs.mdx new file mode 100644 index 000000000..9dfb38f1d --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0historybulkacs.mdx @@ -0,0 +1,213 @@ +--- +title: "List bulk acs snapshot objects" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/history/bulk/acs" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

List bulk acs snapshot objects

+ + + +
+ + OpenAPI + + Since 0.5.17 + +
+ + +
+ +**Under Development, do not use in production yet** Get download URLs and metadata for an ACS snapshot available for bulk download, at or before a certain record time. + +## Protocol Details + + + +
+ +
+ Operation ID + listBulkAcsSnapshotObjects +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Query parameters + + + + + + + + +OpenAPI type: `string (date-time)`. + + + + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The record time for which the ACS snapshot was taken. + + + + + +The list of references to the bulk storage objects containing the ACS snapshot data. + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 501 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.17 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/history/bulk/acs' +``` + + + + + + +```json 200 response +{ + "record_time": "2026-01-01T00:00:00Z", + "object_refs": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0internalreward-accounting-processrounds:round_numberactivity-totals.mdx b/docs-main/reference/splice-scan-api/get-v0internalreward-accounting-processrounds:round_numberactivity-totals.mdx new file mode 100644 index 000000000..a8a6a1260 --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0internalreward-accounting-processrounds:round_numberactivity-totals.mdx @@ -0,0 +1,184 @@ +--- +title: "SV node internal API (CIP-0104, subject to change)" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/internal/reward-accounting-process/rounds/{round_number}/activity-totals" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

SV node internal API (CIP-0104, subject to change)

+ + + +
+ + OpenAPI + + Since 0.6.0 + + Changed 0.6.9 + +
+ + +
+ +SV node internal API (CIP-0104, subject to change). Return the CIP-0104 per-round activity totals for the specified round number. + +## Protocol Details + + + +
+ +
+ Operation ID + getRewardAccountingActivityTotals +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + +OpenAPI type: `integer (int64)`. + + + + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 0.6.9 +
+ +

The GET /v0/internal/reward-accounting-process/rounds/{round_number}/activity-totals operation changed in this snapshot.

+ +
+ +
+
+ Changed + 0.6.5 +
+ +

The operation moved from GET /v0/reward-accounting-process/rounds/{round_number}/activity-totals to GET /v0/internal/reward-accounting-process/rounds/{round_number}/activity-totals.

+ +
+ +
+
+ Introduced + 0.6.0 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/internal/reward-accounting-process/rounds/{round_number}/activity-totals' +``` + + + + + + +```json 200 response +{ + "status": "string", + "round_number": 0, + "total_app_activity_weight": 0, + "active_parties_count": 0, + "activity_records_count": 0, + "total_app_reward_minting_allowance": "string", + "total_app_reward_thresholded": "string", + "total_app_reward_unclaimed": "string", + "rewarded_app_provider_parties_count": 0 +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0internalreward-accounting-processrounds:round_numberbatches:batch_hash.mdx b/docs-main/reference/splice-scan-api/get-v0internalreward-accounting-processrounds:round_numberbatches:batch_hash.mdx new file mode 100644 index 000000000..94ffa3323 --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0internalreward-accounting-processrounds:round_numberbatches:batch_hash.mdx @@ -0,0 +1,192 @@ +--- +title: "SV node internal API (CIP-0104, subject to change)" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/internal/reward-accounting-process/rounds/{round_number}/batches/{batch_hash}" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

SV node internal API (CIP-0104, subject to change)

+ + + +
+ + OpenAPI + + Since 0.6.0 + + Changed 0.6.5 + +
+ + +
+ +SV node internal API (CIP-0104, subject to change). Returns the contents of a reward batch identified by its hash. The response is either a list of child batch hashes (for internal nodes) or a list of minting allowances (for leaf nodes). + +## Protocol Details + + + +
+ +
+ Operation ID + getRewardAccountingBatch +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + +OpenAPI type: `integer (int64)`. + + + + + + + + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 0.6.5 +
+ +

The operation moved from GET /v0/reward-accounting-process/rounds/{round_number}/batches/{batch_hash} to GET /v0/internal/reward-accounting-process/rounds/{round_number}/batches/{batch_hash}.

+ +
+ +
+
+ Introduced + 0.6.0 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/internal/reward-accounting-process/rounds/{round_number}/batches/{batch_hash}' +``` + + + + + + +```json 200 response +{} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0internalreward-accounting-processrounds:round_numberroot-hash.mdx b/docs-main/reference/splice-scan-api/get-v0internalreward-accounting-processrounds:round_numberroot-hash.mdx new file mode 100644 index 000000000..a866e36eb --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0internalreward-accounting-processrounds:round_numberroot-hash.mdx @@ -0,0 +1,168 @@ +--- +title: "SV node internal API (CIP-0104, subject to change)" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/internal/reward-accounting-process/rounds/{round_number}/root-hash" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

SV node internal API (CIP-0104, subject to change)

+ + + +
+ + OpenAPI + + Since 0.6.0 + + Changed 0.6.5 + +
+ + +
+ +SV node internal API (CIP-0104, subject to change). Returns the root hash computed for the specified round. + +## Protocol Details + + + +
+ +
+ Operation ID + getRewardAccountingRootHash +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + +OpenAPI type: `integer (int64)`. + + + + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 0.6.5 +
+ +

The operation moved from GET /v0/reward-accounting-process/rounds/{round_number}/root-hash to GET /v0/internal/reward-accounting-process/rounds/{round_number}/root-hash.

+ +
+ +
+
+ Introduced + 0.6.0 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/internal/reward-accounting-process/rounds/{round_number}/root-hash' +``` + + + + + + +```json 200 response +{ + "status": "string", + "round_number": 0, + "root_hash": "string" +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0internalreward-accounting-processroundsearliest-available.mdx b/docs-main/reference/splice-scan-api/get-v0internalreward-accounting-processroundsearliest-available.mdx new file mode 100644 index 000000000..b0ba5d66a --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0internalreward-accounting-processroundsearliest-available.mdx @@ -0,0 +1,167 @@ +--- +title: "SV node internal API (CIP-0104, subject to change)" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/internal/reward-accounting-process/rounds/earliest-available" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

SV node internal API (CIP-0104, subject to change)

+ + + +
+ + OpenAPI + + Since 0.6.0 + + Changed 0.6.5 + +
+ + +
+ +SV node internal API (CIP-0104, subject to change). Returns the earliest round for which CIP-0104 reward accounting activity records are complete. + +## Protocol Details + + + +
+ +
+ Operation ID + getRewardAccountingEarliestAvailableRound +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 0.6.5 +
+ +

The operation moved from GET /v0/reward-accounting-process/rounds/earliest-available to GET /v0/internal/reward-accounting-process/rounds/earliest-available.

+ +
+ +
+
+ Introduced + 0.6.0 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/internal/reward-accounting-process/rounds/earliest-available' +``` + + + + + + +```json 200 response +{ + "earliest_round": 0 +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0lsu.mdx b/docs-main/reference/splice-scan-api/get-v0lsu.mdx new file mode 100644 index 000000000..a6a20650e --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0lsu.mdx @@ -0,0 +1,135 @@ +--- +title: "Retrieve information on the next logical synchronizer upgrade (LSU)" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/lsu" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Retrieve information on the next logical synchronizer upgrade (LSU)

+ + + +
+ + OpenAPI + + Since 0.6.11 + +
+ + +
+ +Retrieve information on the next logical synchronizer upgrade (LSU) + +## Protocol Details + + + +
+ +
+ Operation ID + getLsu +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.6.11 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/lsu' +``` + + + + + + +```json 200 response +{ + "lsu": { + "topologyFreezeTime": "2026-01-01T00:00:00Z", + "upgradeTime": "2026-01-01T00:00:00Z", + "successorPhysicalSynchronizerId": "string" + } +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0migrationslast.mdx b/docs-main/reference/splice-scan-api/get-v0migrationslast.mdx new file mode 100644 index 000000000..0ac2c37ba --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0migrationslast.mdx @@ -0,0 +1,131 @@ +--- +title: "Returns the last migration id that was configured for the synchronizer upgrades" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/migrations/last" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Returns the last migration id that was configured for the synchronizer upgrades

+ + + +
+ + OpenAPI + + Since 0.6.8 + +
+ + +
+ +Returns the last migration id that was configured for the synchronizer upgrades. + +## Protocol Details + + + +
+ +
+ Operation ID + getMigrationId +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.6.8 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/migrations/last' +``` + + + + + + +```json 200 response +{ + "migration_id": 0 +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0migrationsschedule.mdx b/docs-main/reference/splice-scan-api/get-v0migrationsschedule.mdx new file mode 100644 index 000000000..be8049d32 --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0migrationsschedule.mdx @@ -0,0 +1,144 @@ +--- +title: "Migration schedule" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/migrations/schedule" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Migration schedule

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +If the DSO has scheduled a synchronizer upgrade, return its planned time and the new migration ID. + +## Protocol Details + + + +
+ +
+ Operation ID + getMigrationSchedule +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + +### 404 + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/migrations/schedule' +``` + + + + + + +```json 200 response +{ + "time": "2026-01-01T00:00:00Z", + "migration_id": 0 +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0roll-forward-lsu.mdx b/docs-main/reference/splice-scan-api/get-v0roll-forward-lsu.mdx new file mode 100644 index 000000000..4934b7344 --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0roll-forward-lsu.mdx @@ -0,0 +1,135 @@ +--- +title: "Retrieve information on a roll-forward LSU" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/roll-forward-lsu" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Retrieve information on a roll-forward LSU

+ + + +
+ + OpenAPI + + Since 0.6.0 + +
+ + +
+ +Retrieve information on a roll-forward LSU + +## Protocol Details + + + +
+ +
+ Operation ID + getRollForwardLsu +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.6.0 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/roll-forward-lsu' +``` + + + + + + +```json 200 response +{ + "rollForwardLsu": { + "upgradeTime": "2026-01-01T00:00:00Z", + "currentPhysicalSynchronizerId": "string", + "successorPhysicalSynchronizerId": "string" + } +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0scans.mdx b/docs-main/reference/splice-scan-api/get-v0scans.mdx new file mode 100644 index 000000000..9afcce337 --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0scans.mdx @@ -0,0 +1,133 @@ +--- +title: "Retrieve Canton scan configuration for all SVs, grouped by connected synchronizer ID" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/scans" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Retrieve Canton scan configuration for all SVs, grouped by connected synchronizer ID

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +Retrieve Canton scan configuration for all SVs, grouped by connected synchronizer ID + +## Protocol Details + + + +
+ +
+ Operation ID + listDsoScans +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/scans' +``` + + + + + + +```json 200 response +{ + "scans": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0splice-instance-names.mdx b/docs-main/reference/splice-scan-api/get-v0splice-instance-names.mdx new file mode 100644 index 000000000..1d5583610 --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0splice-instance-names.mdx @@ -0,0 +1,192 @@ +--- +title: "Retrieve the UI names of various elements of this Splice network" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/splice-instance-names" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Retrieve the UI names of various elements of this Splice network

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +Retrieve the UI names of various elements of this Splice network. + +## Protocol Details + + + +
+ +
+ Operation ID + getSpliceInstanceNames +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +What to call this Splice network. + + + + + +URL of an HTML favicon for this Splice network. + + + + + +What this Splice network calls Amulet. + + + + + +The three-letter acronym for Amulet. + + + + + +What this Splice network calls the Amulet Name Service. + + + + + +The acronym for `name_service_name`. + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/splice-instance-names' +``` + + + + + + +```json 200 response +{ + "network_name": "string", + "network_favicon_url": "string", + "amulet_name": "string", + "amulet_name_acronym": "string", + "name_service_name": "string", + "name_service_name_acronym": "string" +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0stateacssnapshot-timestamp-after.mdx b/docs-main/reference/splice-scan-api/get-v0stateacssnapshot-timestamp-after.mdx new file mode 100644 index 000000000..818b00779 --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0stateacssnapshot-timestamp-after.mdx @@ -0,0 +1,237 @@ +--- +title: "Date of first snapshot after" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/state/acs/snapshot-timestamp-after" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Date of first snapshot after

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +Returns the timestamp of the first snapshot after the given date, for the given migration_id or larger. + +## Protocol Details + + + +
+ +
+ Operation ID + getDateOfFirstSnapshotAfter +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Query parameters + + + + + + + + +OpenAPI type: `string (date-time)`. + + + + + + + + +OpenAPI type: `integer (int64)`. + + + + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The record time of the last transaction in the snapshot. + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 500 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/state/acs/snapshot-timestamp-after' +``` + + + + + + +```json 200 response +{ + "record_time": "2026-01-01T00:00:00Z" +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0stateacssnapshot-timestamp.mdx b/docs-main/reference/splice-scan-api/get-v0stateacssnapshot-timestamp.mdx new file mode 100644 index 000000000..84ab53a59 --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0stateacssnapshot-timestamp.mdx @@ -0,0 +1,237 @@ +--- +title: "Date of most recent snapshot before" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/state/acs/snapshot-timestamp" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Date of most recent snapshot before

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +Returns the timestamp of the most recent snapshot before the given date, for the given migration_id. This corresponds to the record time of the last transaction in the snapshot. + +## Protocol Details + + + +
+ +
+ Operation ID + getDateOfMostRecentSnapshotBefore +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Query parameters + + + + + + + + +OpenAPI type: `string (date-time)`. + + + + + + + + +OpenAPI type: `integer (int64)`. + + + + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The record time of the last transaction in the snapshot. + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 500 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/state/acs/snapshot-timestamp' +``` + + + + + + +```json 200 response +{ + "record_time": "2026-01-01T00:00:00Z" +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0sv-bft-sequencers.mdx b/docs-main/reference/splice-scan-api/get-v0sv-bft-sequencers.mdx new file mode 100644 index 000000000..d457b938f --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0sv-bft-sequencers.mdx @@ -0,0 +1,145 @@ +--- +title: "Retrieve Canton BFT sequencer configuration for this SV, for each configured Synchronizer" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/sv-bft-sequencers" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Retrieve Canton BFT sequencer configuration for this SV, for each configured Synchronizer

+ + + +
+ + OpenAPI + + Since 0.5.10 + + Changed 0.6.0 + +
+ + +
+ +Retrieve Canton BFT sequencer configuration for this SV, for each configured Synchronizer + +## Protocol Details + + + +
+ +
+ Operation ID + listSvBftSequencers +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 0.6.0 +
+ +

The GET /v0/sv-bft-sequencers operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/sv-bft-sequencers' +``` + + + + + + +```json 200 response +{ + "bftSequencers": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0synchronizer-bootstrapping-transactions:domain_id_prefix.mdx b/docs-main/reference/splice-scan-api/get-v0synchronizer-bootstrapping-transactions:domain_id_prefix.mdx new file mode 100644 index 000000000..ab0785914 --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0synchronizer-bootstrapping-transactions:domain_id_prefix.mdx @@ -0,0 +1,181 @@ +--- +title: "Synchronizer bootstrapping transactions" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/synchronizer-bootstrapping-transactions/{domain_id_prefix}" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Synchronizer bootstrapping transactions

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +## Protocol Details + + + +
+ +
+ Operation ID + getSynchronizerBootstrappingTransactions +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/synchronizer-bootstrapping-transactions/{domain_id_prefix}' +``` + + + + + + +```json 200 response +{ + "domain_parameters": "string", + "sequencer_domain_state": "string", + "mediator_domain_state": "string" +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0synchronizer-identities:domain_id_prefix.mdx b/docs-main/reference/splice-scan-api/get-v0synchronizer-identities:domain_id_prefix.mdx new file mode 100644 index 000000000..7468cbbc8 --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0synchronizer-identities:domain_id_prefix.mdx @@ -0,0 +1,190 @@ +--- +title: "Synchronizer identities" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/synchronizer-identities/{domain_id_prefix}" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Synchronizer identities

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +## Protocol Details + + + +
+ +
+ Operation ID + getSynchronizerIdentities +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/synchronizer-identities/{domain_id_prefix}' +``` + + + + + + +```json 200 response +{ + "sequencer_id": "string", + "sequencer_identity_transactions": [ + "string" + ], + "mediator_id": "string", + "mediator_identity_transactions": [ + "string" + ] +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0transfer-command-counter:party.mdx b/docs-main/reference/splice-scan-api/get-v0transfer-command-counter:party.mdx new file mode 100644 index 000000000..b9fc1e238 --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0transfer-command-counter:party.mdx @@ -0,0 +1,176 @@ +--- +title: "Lookup a TransferCommandCounter by the receiver party" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/transfer-command-counter/{party}" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Lookup a TransferCommandCounter by the receiver party

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +Lookup a TransferCommandCounter by the receiver party. + +## Protocol Details + + + +
+ +
+ Operation ID + lookupTransferCommandCounterByParty +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/transfer-command-counter/{party}' +``` + + + + + + +```json 200 response +{ + "transfer_command_counter": { + "contract": {}, + "domain_id": "string" + } +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0transfer-commandstatus.mdx b/docs-main/reference/splice-scan-api/get-v0transfer-commandstatus.mdx new file mode 100644 index 000000000..6451246db --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0transfer-commandstatus.mdx @@ -0,0 +1,182 @@ +--- +title: "Lookup transfer command status" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/transfer-command/status" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Lookup transfer command status

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +Retrieve the status of all transfer commands (up to a limit of 100) of the given sender for the specified nonce. + +## Protocol Details + + + +
+ +
+ Operation ID + lookupTransferCommandStatus +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Query parameters + + + + + + + + + + + + +OpenAPI type: `integer (int64)`. + + + + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/transfer-command/status' +``` + + + + + + +```json 200 response +{ + "transfer_commands_by_contract_id": {} +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0transfer-preapprovalsby-party:party.mdx b/docs-main/reference/splice-scan-api/get-v0transfer-preapprovalsby-party:party.mdx new file mode 100644 index 000000000..351923204 --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0transfer-preapprovalsby-party:party.mdx @@ -0,0 +1,176 @@ +--- +title: "Lookup a TransferPreapproval by the receiver party" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/transfer-preapprovals/by-party/{party}" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Lookup a TransferPreapproval by the receiver party

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +Lookup a TransferPreapproval by the receiver party. + +## Protocol Details + + + +
+ +
+ Operation ID + lookupTransferPreapprovalByParty +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/transfer-preapprovals/by-party/{party}' +``` + + + + + + +```json 200 response +{ + "transfer_preapproval": { + "contract": {}, + "domain_id": "string" + } +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0unclaimed-development-fund-coupons.mdx b/docs-main/reference/splice-scan-api/get-v0unclaimed-development-fund-coupons.mdx new file mode 100644 index 000000000..808279a8f --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0unclaimed-development-fund-coupons.mdx @@ -0,0 +1,159 @@ +--- +title: "List all unclaimed development fund coupons" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/unclaimed-development-fund-coupons" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

List all unclaimed development fund coupons

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +List all unclaimed development fund coupons. + +## Protocol Details + + + +
+ +
+ Operation ID + listUnclaimedDevelopmentFundCoupons +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +Contracts of the Daml template `Splice.Amulet:UnclaimedDevelopmentFundCoupon`. + + + + + + + + + + +### 500 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/unclaimed-development-fund-coupons' +``` + + + + + + +```json 200 response +{ + "unclaimed-development-fund-coupons": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0updates:update_id.mdx b/docs-main/reference/splice-scan-api/get-v0updates:update_id.mdx new file mode 100644 index 000000000..1036050d8 --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0updates:update_id.mdx @@ -0,0 +1,285 @@ +--- +title: "**Deprecated**, use /v2/updates/{update_id} instead" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/updates/{update_id}" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

**Deprecated**, use /v2/updates/{update_id} instead

+ + + +
+ + OpenAPI + + Since 0.5.10 + + Changed 0.6.0 + +
+ + +
+ +**Deprecated**, use /v2/updates/{update_id} instead. + +## Protocol Details + + + +
+ +
+ Operation ID + getUpdateById +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + + + + + + + + + + +### Query parameters + + + + + + + + + +Whether contract payload should be encoded into json using a lossless, but much harder to process, encoding. This is mostly used for backend calls, and is not recommended for external users. Optional and defaults to false. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +An individual item in the update history. May be a transaction or a contract reassignment. + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 500 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 0.6.0 +
+ +

The GET /v0/updates/{update_id} operation changed in this snapshot.

+ +
+ +
+
+ Changed + 0.5.17 +
+ +

The GET /v0/updates/{update_id} operation changed in this snapshot.

+ +
+ +
+
+ Deprecated + 0.5.10 +
+ +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/updates/{update_id}' +``` + + + + + + +```json 200 response +{ + "update_id": "string", + "migration_id": 0, + "workflow_id": "string", + "record_time": "string", + "synchronizer_id": "string", + "effective_at": "string", + "offset": "string", + "root_event_ids": [ + "string" + ], + "events_by_id": {}, + "external_transaction_hash": "string" +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0validatorsvalidator-faucets.mdx b/docs-main/reference/splice-scan-api/get-v0validatorsvalidator-faucets.mdx new file mode 100644 index 000000000..2a27707a6 --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0validatorsvalidator-faucets.mdx @@ -0,0 +1,204 @@ +--- +title: "Validator faucets by validator" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/validators/validator-faucets" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Validator faucets by validator

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +For every argument that is a valid onboarded validator, return statistics on its liveness activity, according to on-ledger state at the time of the request. + +## Protocol Details + + + +
+ +
+ Operation ID + getValidatorFaucetsByValidator +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Query parameters + + + + + + + + + +A list of validator party IDs, one per specification of the parameter. Any party IDs not matching onboarded validators will be ignored + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +Statistics for any party ID arguments found to have valid onboarding licenses; the order in the response is unrelated to argument order. + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/validators/validator-faucets' +``` + + + + + + +```json 200 response +{ + "validatorsReceivedFaucets": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v0voterequests:vote_request_contract_id.mdx b/docs-main/reference/splice-scan-api/get-v0voterequests:vote_request_contract_id.mdx new file mode 100644 index 000000000..d021f0217 --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v0voterequests:vote_request_contract_id.mdx @@ -0,0 +1,179 @@ +--- +title: "Look up a `VoteRequest` by contract ID" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/voterequests/{vote_request_contract_id}" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Look up a `VoteRequest` by contract ID

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +Look up a `VoteRequest` by contract ID. + +## Protocol Details + + + +
+ +
+ Operation ID + lookupDsoRulesVoteRequest +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/voterequests/{vote_request_contract_id}' +``` + + + + + + +```json 200 response +{ + "dso_rules_vote_request": { + "template_id": "string", + "contract_id": "string", + "payload": {}, + "created_event_blob": "string", + "created_at": "string" + } +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v1domains:domain_idparties:party_idparticipant-id.mdx b/docs-main/reference/splice-scan-api/get-v1domains:domain_idparties:party_idparticipant-id.mdx new file mode 100644 index 000000000..4373c1c68 --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v1domains:domain_idparties:party_idparticipant-id.mdx @@ -0,0 +1,211 @@ +--- +title: "Get the IDs of the participants hosting a given party" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v1/domains/{domain_id}/parties/{party_id}/participant-id" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Get the IDs of the participants hosting a given party

+ + + +
+ + OpenAPI + + Since 0.5.17 + +
+ + +
+ +Get the IDs of the participants hosting a given party. Unlike /v0, this endpoint supports parties hosted on multiple participants. + +## Protocol Details + + + +
+ +
+ Operation ID + getPartyToParticipantV1 +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + + +The synchronizer ID to look up a mapping for. + + + + + + +The party ID to lookup a participant ID for. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +IDs of the participants hosting the provided party, each in the form `PAR::id::fingerprint` + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 500 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.17 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v1/domains/{domain_id}/parties/{party_id}/participant-id' +``` + + + + + + +```json 200 response +{ + "participant_ids": [ + "string" + ] +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v1updates:update_id.mdx b/docs-main/reference/splice-scan-api/get-v1updates:update_id.mdx new file mode 100644 index 000000000..23714786d --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v1updates:update_id.mdx @@ -0,0 +1,287 @@ +--- +title: "Returns the update with the given update_id" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v1/updates/{update_id}" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Returns the update with the given update_id

+ + + +
+ + OpenAPI + + Since 0.5.10 + + Changed 0.6.0 + +
+ + +
+ +Returns the update with the given update_id. Unlike /v0/updates/{update_id}, this endpoint returns responses that are consistent across different scan instances. Event ids returned by this endpoint are not comparable to event ids returned by /v0/updates. The order of items in events_by_id is not defined. + +## Protocol Details + + + +
+ +
+ Operation ID + getUpdateByIdV1 +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + + + + + + + + + + +### Query parameters + + + + + + + + +OpenAPI type: `DamlValueEncoding`. + + + + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +An individual item in the update history. May be a transaction or a contract reassignment. + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 500 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 0.6.0 +
+ +

The GET /v1/updates/{update_id} operation changed in this snapshot.

+ +
+ +
+
+ Changed + 0.5.17 +
+ +

The GET /v1/updates/{update_id} operation changed in this snapshot.

+ +
+ +
+
+ Deprecated + 0.5.10 +
+ +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v1/updates/{update_id}' +``` + + + + + + +```json 200 response +{ + "update_id": "string", + "migration_id": 0, + "workflow_id": "string", + "record_time": "string", + "synchronizer_id": "string", + "effective_at": "string", + "offset": "string", + "root_event_ids": [ + "string" + ], + "events_by_id": {}, + "external_transaction_hash": "string" +} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v2updates:update_id.mdx b/docs-main/reference/splice-scan-api/get-v2updates:update_id.mdx new file mode 100644 index 000000000..ace19370f --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v2updates:update_id.mdx @@ -0,0 +1,266 @@ +--- +title: "Returns the update with the given update_id" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v2/updates/{update_id}" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Returns the update with the given update_id

+ + + +
+ + OpenAPI + + Since 0.5.10 + + Changed 0.6.0 + +
+ + +
+ +Returns the update with the given update_id. Compared to `/v1/updates/{update_id}`, the `/v2/updates/{update_id}` removes the `offset` field in responses, which was hardcoded to 1 in `/v1/updates/{update_id}` for compatibility, and is now removed. + +## Protocol Details + + + +
+ +
+ Operation ID + getUpdateByIdV2 +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + + + + + + + + + + +### Query parameters + + + + + + + + +OpenAPI type: `DamlValueEncoding`. + + + + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +An individual item in the update history. May be a transaction or a contract reassignment. + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 500 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 0.6.0 +
+ +

The GET /v2/updates/{update_id} operation changed in this snapshot.

+ +
+ +
+
+ Changed + 0.5.17 +
+ +

The GET /v2/updates/{update_id} operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v2/updates/{update_id}' +``` + + + + + + +```json 200 response +{} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-v2updateshash:hash.mdx b/docs-main/reference/splice-scan-api/get-v2updateshash:hash.mdx new file mode 100644 index 000000000..893a37862 --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-v2updateshash:hash.mdx @@ -0,0 +1,244 @@ +--- +title: "Returns the update associated with the given hash of the prepared transaction" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v2/updates/hash/{hash}" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Returns the update associated with the given hash of the prepared transaction

+ + + +
+ + OpenAPI + + Since 0.6.0 + +
+ + +
+ +Returns the update associated with the given hash of the prepared transaction. This endpoint is not always BFT safe. For transactions committed before a scan instance started indexing hashes, the instance will return a 404 error. For transactions committed around the time different scans started indexing hashes, some scan instances might return a 404 error while others return the matching update. + +## Protocol Details + + + +
+ +
+ Operation ID + getUpdateByHash +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + + + + + + + + + + +### Query parameters + + + + + + + + +OpenAPI type: `DamlValueEncoding`. + + + + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +An individual item in the update history. May be a transaction or a contract reassignment. + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 500 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.6.0 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v2/updates/hash/{hash}' +``` + + + + + + +```json 200 response +{} +``` + + diff --git a/docs-main/reference/splice-scan-api/get-version.mdx b/docs-main/reference/splice-scan-api/get-version.mdx new file mode 100644 index 000000000..8f745f62d --- /dev/null +++ b/docs-main/reference/splice-scan-api/get-version.mdx @@ -0,0 +1,134 @@ +--- +title: "Version" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/version" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Version

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +## Protocol Details + + + +
+ +
+ Operation ID + getVersion +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/version' +``` + + + + + + +```json 200 response +{ + "version": "string", + "commit_ts": "2026-01-01T00:00:00Z" +} +``` + + diff --git a/docs-main/reference/splice-scan-api/post-v0adminsvprevious-sv-reward-weight.mdx b/docs-main/reference/splice-scan-api/post-v0adminsvprevious-sv-reward-weight.mdx new file mode 100644 index 000000000..dad205b5c --- /dev/null +++ b/docs-main/reference/splice-scan-api/post-v0adminsvprevious-sv-reward-weight.mdx @@ -0,0 +1,164 @@ +--- +title: "Previous sv reward weight" +api: "POST https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/admin/sv/previous-sv-reward-weight" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Previous sv reward weight

+ + + +
+ + OpenAPI + + Since 0.6.9 + +
+ + +
+ +## Protocol Details + + + +
+ +
+ Operation ID + getPreviousSvRewardWeight +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + + + + + +Only consider reward weight changes that took effect strictly before this time. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The SV's reward weight set by the most recent accepted `UpdateSvRewardWeight` proposal before `effectiveBefore`, or absent if there is no such proposal. + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.6.9 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/admin/sv/previous-sv-reward-weight' \ + --header 'Content-Type: application/json' \ + --data '{"svParty":"string","effectiveBefore":"string"}' +``` + + + + + + +```json 200 response +{ + "rewardWeight": "string" +} +``` + + diff --git a/docs-main/reference/splice-scan-api/post-v0adminsvvoteresults.mdx b/docs-main/reference/splice-scan-api/post-v0adminsvvoteresults.mdx new file mode 100644 index 000000000..f13fad001 --- /dev/null +++ b/docs-main/reference/splice-scan-api/post-v0adminsvvoteresults.mdx @@ -0,0 +1,240 @@ +--- +title: "List vote request results" +api: "POST https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/admin/sv/voteresults" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

List vote request results

+ + + +
+ + OpenAPI + + Since 0.5.10 + + Changed 0.6.10 + +
+ + +
+ +## Protocol Details + + + +
+ +
+ Operation ID + listVoteRequestResults +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +OpenAPI type: `integer`. + + + + + + + + +OpenAPI type: `integer`. + + +Cursor for pagination. When requesting the next page of results, pass the `next_page_token` from the previous response. Results are ordered by effective date (the accepted vote's effectiveAt, or the result's completedAt otherwise), descending. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + +Cursor for the next page of results. Pass this as `pageToken` in the request. If absent or `null`, there are no more pages. + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 0.6.10 +
+ +

The POST /v0/admin/sv/voteresults operation changed in this snapshot.

+ +
+ +
+
+ Changed + 0.6.4 +
+ +

The POST /v0/admin/sv/voteresults operation changed in this snapshot.

+ +
+ +
+
+ Changed + 0.6.1 +
+ +

The POST /v0/admin/sv/voteresults operation changed in this snapshot.

+ +
+ +
+
+ Changed + 0.6.0 +
+ +

The POST /v0/admin/sv/voteresults operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/admin/sv/voteresults' \ + --header 'Content-Type: application/json' \ + --data '{"actionName":"string","accepted":false,"requester":"string","effectiveFrom":"string","effectiveTo":"string","limit":0,"pageToken":0}' +``` + + + + + + +```json 200 response +{ + "dso_rules_vote_results": [ + {} + ], + "next_page_token": 0 +} +``` + + diff --git a/docs-main/reference/splice-scan-api/post-v0adminsvvoteresultscount.mdx b/docs-main/reference/splice-scan-api/post-v0adminsvvoteresultscount.mdx new file mode 100644 index 000000000..ce9199ea8 --- /dev/null +++ b/docs-main/reference/splice-scan-api/post-v0adminsvvoteresultscount.mdx @@ -0,0 +1,175 @@ +--- +title: "Count all vote results matching the request filters" +api: "POST https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/admin/sv/voteresults/count" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Count all vote results matching the request filters

+ + + +
+ + OpenAPI + + Since 0.6.13 + +
+ + +
+ +Count all vote results matching the request filters. + +## Protocol Details + + + +
+ +
+ Operation ID + countVoteRequestResults +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +Total number of vote results matching the request filters. + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.6.13 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/admin/sv/voteresults/count' \ + --header 'Content-Type: application/json' \ + --data '{"actionName":"string","accepted":false,"requester":"string","effectiveFrom":"string","effectiveTo":"string"}' +``` + + + + + + +```json 200 response +{ + "count": 0 +} +``` + + diff --git a/docs-main/reference/splice-scan-api/post-v0amulet-rules.mdx b/docs-main/reference/splice-scan-api/post-v0amulet-rules.mdx new file mode 100644 index 000000000..b445903dc --- /dev/null +++ b/docs-main/reference/splice-scan-api/post-v0amulet-rules.mdx @@ -0,0 +1,167 @@ +--- +title: "Amulet rules" +api: "POST https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/amulet-rules" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Amulet rules

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +## Protocol Details + + + +
+ +
+ Operation ID + getAmuletRules +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `ContractId`. + + + + + + + + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/amulet-rules' \ + --header 'Content-Type: application/json' \ + --data '{"cached_amulet_rules_contract_id":"string","cached_amulet_rules_domain_id":"string"}' +``` + + + + + + +```json 200 response +{ + "amulet_rules_update": { + "contract": {}, + "domain_id": "string" + } +} +``` + + diff --git a/docs-main/reference/splice-scan-api/post-v0ans-rules.mdx b/docs-main/reference/splice-scan-api/post-v0ans-rules.mdx new file mode 100644 index 000000000..e7190e5c2 --- /dev/null +++ b/docs-main/reference/splice-scan-api/post-v0ans-rules.mdx @@ -0,0 +1,167 @@ +--- +title: "Ans rules" +api: "POST https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/ans-rules" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Ans rules

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +## Protocol Details + + + +
+ +
+ Operation ID + getAnsRules +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `ContractId`. + + + + + + + + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/ans-rules' \ + --header 'Content-Type: application/json' \ + --data '{"cached_ans_rules_contract_id":"string","cached_ans_rules_domain_id":"string"}' +``` + + + + + + +```json 200 response +{ + "ans_rules_update": { + "contract": {}, + "domain_id": "string" + } +} +``` + + diff --git a/docs-main/reference/splice-scan-api/post-v0backfillingimport-updates.mdx b/docs-main/reference/splice-scan-api/post-v0backfillingimport-updates.mdx new file mode 100644 index 000000000..9654f0f78 --- /dev/null +++ b/docs-main/reference/splice-scan-api/post-v0backfillingimport-updates.mdx @@ -0,0 +1,224 @@ +--- +title: "Import updates" +api: "POST https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/backfilling/import-updates" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Import updates

+ + + +
+ + OpenAPI + + Since 0.5.10 + + Changed 0.6.0 + +
+ + +
+ +## Protocol Details + + + +
+ +
+ Operation ID + getImportUpdates +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `integer (int64)`. + + + + + + + + + +Only return updates with an update id strictly greater than this. + + + + + +OpenAPI type: `integer (int32)`. + + +Return at most this many updates. The actual number of updates returned may be smaller. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 0.6.0 +
+ +

The POST /v0/backfilling/import-updates operation changed in this snapshot.

+ +
+ +
+
+ Changed + 0.5.17 +
+ +

The POST /v0/backfilling/import-updates operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/backfilling/import-updates' \ + --header 'Content-Type: application/json' \ + --data '{"migration_id":0,"after_update_id":"string","limit":0}' +``` + + + + + + +```json 200 response +{ + "transactions": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-scan-api/post-v0backfillingmigration-info.mdx b/docs-main/reference/splice-scan-api/post-v0backfillingmigration-info.mdx new file mode 100644 index 000000000..2c80306cb --- /dev/null +++ b/docs-main/reference/splice-scan-api/post-v0backfillingmigration-info.mdx @@ -0,0 +1,218 @@ +--- +title: "List all previous synchronizer migrations in this Splice network's history" +api: "POST https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/backfilling/migration-info" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

List all previous synchronizer migrations in this Splice network's history

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +List all previous synchronizer migrations in this Splice network's history. + +## Protocol Details + + + +
+ +
+ Operation ID + getMigrationInfo +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `integer (int64)`. + + + + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The migration id that was active before the given migration id, if any. + + + + + +All domains for which there are updates in the given migration id, along with the record time of the newest and oldest update associated with each domain + + + + + +The update id of the last import update (where import updates are sorted by update id, ascending) for the given migration id, if any + + + + + +True if this scan has all non-import updates for given migration id + + + + + +True if this scan has all import updates for the given migration id + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/backfilling/migration-info' \ + --header 'Content-Type: application/json' \ + --data '{"migration_id":0}' +``` + + + + + + +```json 200 response +{ + "previous_migration_id": 0, + "record_time_range": [ + {} + ], + "last_import_update_id": "string", + "complete": false, + "import_updates_complete": false +} +``` + + diff --git a/docs-main/reference/splice-scan-api/post-v0backfillingupdates-before.mdx b/docs-main/reference/splice-scan-api/post-v0backfillingupdates-before.mdx new file mode 100644 index 000000000..e379c1d03 --- /dev/null +++ b/docs-main/reference/splice-scan-api/post-v0backfillingupdates-before.mdx @@ -0,0 +1,241 @@ +--- +title: "Retrieve transactions and synchronizer reassignments prior to the request's specification" +api: "POST https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/backfilling/updates-before" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Retrieve transactions and synchronizer reassignments prior to the request's specification

+ + + +
+ + OpenAPI + + Since 0.5.10 + + Changed 0.6.0 + +
+ + +
+ +Retrieve transactions and synchronizer reassignments prior to the request's specification. + +## Protocol Details + + + +
+ +
+ Operation ID + getUpdatesBefore +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `integer (int64)`. + + + + + + + + + + + + +OpenAPI type: `string (date-time)`. + + +Only return updates with a record time strictly smaller than this time. + + + + + +OpenAPI type: `string (date-time)`. + + +Only return updates with a record time equal to or greater than this time. + + + + + +OpenAPI type: `integer (int32)`. + + +Return at most this many updates. The actual number of updates returned may be smaller. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 0.6.0 +
+ +

The POST /v0/backfilling/updates-before operation changed in this snapshot.

+ +
+ +
+
+ Changed + 0.5.17 +
+ +

The POST /v0/backfilling/updates-before operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/backfilling/updates-before' \ + --header 'Content-Type: application/json' \ + --data '{"migration_id":0,"synchronizer_id":"string","before":"2026-01-01T00:00:00Z","at_or_after":"2026-01-01T00:00:00Z","count":0}' +``` + + + + + + +```json 200 response +{ + "transactions": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-scan-api/post-v0events.mdx b/docs-main/reference/splice-scan-api/post-v0events.mdx new file mode 100644 index 000000000..226075381 --- /dev/null +++ b/docs-main/reference/splice-scan-api/post-v0events.mdx @@ -0,0 +1,272 @@ +--- +title: "Event history" +api: "POST https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/events" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Event history

+ + + +
+ + OpenAPI + + Since 0.5.10 + + Changed 0.6.10 + +
+ + +
+ +Returns the event history in ascending order, paged, from ledger begin or optionally starting after a record time. An event bears some combination of a transaction, a contract reassignment, and a verdict. Events are ordered lexicographically by `(migration id, record time)`. For a given migration id, each event has a unique record time. + +## Protocol Details + + + +
+ +
+ Operation ID + getEventHistory +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `UpdateHistoryRequestAfter`. + + + + + + + + +OpenAPI type: `integer (int32)`. + + +The maximum number of events returned for this request. + + + + + +OpenAPI type: `DamlValueEncoding`. + + +How daml values should be encoded in the response. "compact_json" is a compact, human-readable JSON encoding. It is the same encoding as the one used in the HTTP JSON API or the JavaScript codegen. "protobuf_json" is a verbose JSON encoding that is more difficult to parse, but contains type information, i.e., the values can be parsed losslessly without having access to the Daml source code. Optional and defaults to "compact_json". + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 500 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 0.6.10 +
+ +

The POST /v0/events operation changed in this snapshot.

+ +
+ +
+
+ Changed + 0.6.0 +
+ +

The POST /v0/events operation changed in this snapshot.

+ +
+ +
+
+ Changed + 0.5.17 +
+ +

The POST /v0/events operation changed in this snapshot.

+ +
+ +
+
+ Changed + 0.5.15 +
+ +

The POST /v0/events operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/events' \ + --header 'Content-Type: application/json' \ + --data '{"after":{"after_migration_id":0,"after_record_time":"string"},"page_size":0,"daml_value_encoding":"compact_json"}' +``` + + + + + + +```json 200 response +{ + "events": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-scan-api/post-v0external-party-amulet-rules.mdx b/docs-main/reference/splice-scan-api/post-v0external-party-amulet-rules.mdx new file mode 100644 index 000000000..85a4b6e64 --- /dev/null +++ b/docs-main/reference/splice-scan-api/post-v0external-party-amulet-rules.mdx @@ -0,0 +1,167 @@ +--- +title: "External party amulet rules" +api: "POST https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/external-party-amulet-rules" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

External party amulet rules

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +## Protocol Details + + + +
+ +
+ Operation ID + getExternalPartyAmuletRules +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `ContractId`. + + + + + + + + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/external-party-amulet-rules' \ + --header 'Content-Type: application/json' \ + --data '{"cached_external_party_amulet_rules_contract_id":"string","cached_external_party_amulet_rules_domain_id":"string"}' +``` + + + + + + +```json 200 response +{ + "external_party_amulet_rules_update": { + "contract": {}, + "domain_id": "string" + } +} +``` + + diff --git a/docs-main/reference/splice-scan-api/post-v0historybulkchecksums.mdx b/docs-main/reference/splice-scan-api/post-v0historybulkchecksums.mdx new file mode 100644 index 000000000..d14913aaf --- /dev/null +++ b/docs-main/reference/splice-scan-api/post-v0historybulkchecksums.mdx @@ -0,0 +1,190 @@ +--- +title: "**Under Development, do not use in production yet** Get checksums for bulk history objects" +api: "POST https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/history/bulk/checksums" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

**Under Development, do not use in production yet** Get checksums for bulk history objects

+ + + +
+ + OpenAPI + + Since 0.7.4 + +
+ + +
+ +**Under Development, do not use in production yet** Get checksums for bulk history objects. Searches for object_keys in both staging and committed objects. Meant for internal use only, as part of the processing pipeline of bulk history objects. + +## Protocol Details + + + +
+ +
+ Operation ID + getBulkObjectChecksums +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + +The list of keys of the bulk storage objects for which checksums are requested. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The list of checksums for the requested bulk storage objects (in the same order as the object_keys). + + + + + + + + + + +### 501 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.7.4 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/history/bulk/checksums' \ + --header 'Content-Type: application/json' \ + --data '{"object_keys":["string"]}' +``` + + + + + + +```json 200 response +{ + "checksums": [ + { + "value": "string" + } + ] +} +``` + + diff --git a/docs-main/reference/splice-scan-api/post-v0historybulkupdates.mdx b/docs-main/reference/splice-scan-api/post-v0historybulkupdates.mdx new file mode 100644 index 000000000..2da9ff077 --- /dev/null +++ b/docs-main/reference/splice-scan-api/post-v0historybulkupdates.mdx @@ -0,0 +1,270 @@ +--- +title: "List bulk update history objects" +api: "POST https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/history/bulk/updates" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

List bulk update history objects

+ + + +
+ + OpenAPI + + Since 0.5.18 + +
+ + +
+ +**Under Development, do not use in production yet** Get download URLs and metadata for update history objects available for bulk download, between two record times. Note that the returned objects may include also updates outside of the requested record time range (since only full objects are served from storage), but guaranteed to include all updates in the requested range. + +## Protocol Details + + + +
+ +
+ Operation ID + listBulkUpdateHistoryObjects +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `string (date-time)`. + + +The returned objects must include all updates with record time greater than start_record_time (but may also include updates before it). + + + + + +OpenAPI type: `string (date-time)`. + + +The returned objects must include all updates with record time at most end_record_time (but may also include updates after it). + + + + + + +The pagination token returned from a previous call to this endpoint with the same arguments. + + + + + +OpenAPI type: `integer (int32)`. + + +The maximum number of objects returned for this request. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The list of references to the bulk storage objects containing the updates. + + + + + +When requesting the next page of results, pass this as `after` to the next `ListBulkUpdateHistoryObjectsRequest` invocation. Will be absent when there are no more pages. + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 501 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.18 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/history/bulk/updates' \ + --header 'Content-Type: application/json' \ + --data '{"start_record_time":"2026-01-01T00:00:00Z","end_record_time":"2026-01-01T00:00:00Z","next_page_token":"string","page_size":0}' +``` + + + + + + +```json 200 response +{ + "object_refs": [ + {} + ], + "next_page_token": "string" +} +``` + + diff --git a/docs-main/reference/splice-scan-api/post-v0holdingsstate.mdx b/docs-main/reference/splice-scan-api/post-v0holdingsstate.mdx new file mode 100644 index 000000000..48d0454b9 --- /dev/null +++ b/docs-main/reference/splice-scan-api/post-v0holdingsstate.mdx @@ -0,0 +1,312 @@ +--- +title: "Deprecated" +api: "POST https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/holdings/state" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Deprecated

+ + + +
+ + OpenAPI + + Since 0.5.10 + + Changed 0.6.0 + +
+ + +
+ +Deprecated. Please use /v1/holdings/state instead. Returns the active amulet contracts for a given migration id and record time, in creation date ascending order, paged. + +## Protocol Details + + + +
+ +
+ Operation ID + getHoldingsStateAt +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `integer (int64)`. + + +The migration id for which to return the ACS. + + + + + +OpenAPI type: `string (date-time)`. + + +The timestamp at which the contract set was active. This needs to be an exact timestamp, i.e., needs to correspond to a timestamp reported by `/v0/state/acs/snapshot-timestamp` if `record_time_match` is set to `exact` (which is the default). If `record_time_match` is set to `at_or_before`, this can be any timestamp, and the most recent snapshot at or before the given `record_time` will be returned. + + + + + + +How to match the record_time. "exact" requires the record_time to match exactly. "at_or_before" finds the most recent snapshot at or before the given record_time. + + + + + +OpenAPI type: `integer (int64)`. + + +Pagination token for the next page of results. + + + + + +OpenAPI type: `integer (int32)`. + + +The maximum number of created events returned for this request. + + + + + + +Filters by contracts in which these party_ids are the owners of the amulets. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The same `record_time` as in the request. + + + + + +The same `migration_id` as in the request. + + + + + +Up to `page_size` contracts in the ACS. `create_arguments` are always encoded as `compact_json`. + + + + + +When requesting the next page of results, pass this as `after` to the `AcsRequest` or `HoldingsStateRequest`. Will be absent when there are no more pages. + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 500 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 0.6.0 +
+ +

The POST /v0/holdings/state operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/holdings/state' \ + --header 'Content-Type: application/json' \ + --data '{"migration_id":0,"record_time":"2026-01-01T00:00:00Z","record_time_match":"exact","after":0,"page_size":0,"owner_party_ids":["string"]}' +``` + + + + + + +```json 200 response +{ + "record_time": "2026-01-01T00:00:00Z", + "migration_id": 0, + "created_events": [ + {} + ], + "next_page_token": 0 +} +``` + + diff --git a/docs-main/reference/splice-scan-api/post-v0holdingssummary.mdx b/docs-main/reference/splice-scan-api/post-v0holdingssummary.mdx new file mode 100644 index 000000000..109222ffc --- /dev/null +++ b/docs-main/reference/splice-scan-api/post-v0holdingssummary.mdx @@ -0,0 +1,309 @@ +--- +title: "Deprecated" +api: "POST https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/holdings/summary" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Deprecated

+ + + +
+ + OpenAPI + + Since 0.5.10 + + Changed 0.6.3 + +
+ + +
+ +Deprecated. Please use /v1/holdings/summary instead. Returns the summary of active amulet contracts for a given migration id and record time, for the given parties. This is an aggregate of `/v0/holdings/state` by owner party ID with better performance than client-side computation. + +## Protocol Details + + + +
+ +
+ Operation ID + getHoldingsSummaryAt +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `integer (int64)`. + + +The migration id for which to return the summary. + + + + + +OpenAPI type: `string (date-time)`. + + +The timestamp at which the contract set was active. This needs to be an exact timestamp, i.e., needs to correspond to a timestamp reported by `/v0/state/acs/snapshot-timestamp` if `record_time_match` is set to `exact` (which is the default). If `record_time_match` is set to `at_or_before`, this can be any timestamp, and the most recent snapshot at or before the given `record_time` will be returned. + + + + + + +How to match the record_time. "exact" requires the record_time to match exactly. "at_or_before" finds the most recent snapshot at or before the given record_time. + + + + + + +The owners for which to compute the summary. + + + + + +OpenAPI type: `integer (int64)`. + + +Compute holding fees as of this round. Defaults to the earliest open mining round. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The same `record_time` as in the request. + + + + + +The same `migration_id` as in the request. + + + + + +The same `as_of_round` as in the request, with the same default. + + + + + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 500 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Deprecated + 0.6.3 +
+ +
+ +
+
+ Changed + 0.6.3 +
+ +

The POST /v0/holdings/summary operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/holdings/summary' \ + --header 'Content-Type: application/json' \ + --data '{"migration_id":0,"record_time":"2026-01-01T00:00:00Z","record_time_match":"exact","owner_party_ids":["string"],"as_of_round":0}' +``` + + + + + + +```json 200 response +{ + "record_time": "2026-01-01T00:00:00Z", + "migration_id": 0, + "computed_as_of_round": 0, + "summaries": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-scan-api/post-v0open-and-issuing-mining-rounds.mdx b/docs-main/reference/splice-scan-api/post-v0open-and-issuing-mining-rounds.mdx new file mode 100644 index 000000000..cacabc8cb --- /dev/null +++ b/docs-main/reference/splice-scan-api/post-v0open-and-issuing-mining-rounds.mdx @@ -0,0 +1,187 @@ +--- +title: "Open and issuing mining rounds" +api: "POST https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/open-and-issuing-mining-rounds" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Open and issuing mining rounds

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +All current open and issuing mining rounds, if the request is empty; passing contract IDs in the request can reduce the response data for polling/client-cache-update efficiency. + +## Protocol Details + + + +
+ +
+ Operation ID + getOpenAndIssuingMiningRounds +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `ContractId[]`. + + +The contract IDs for `open_mining_rounds` in the response the caller knows about. If unsure, an empty array is fine; only a performance penalty is incurred. + + + + + +OpenAPI type: `ContractId[]`. + + +The contract IDs for `issuing_mining_rounds` in the response the caller knows about. If unsure, an empty array is fine; only a performance penalty is incurred. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +Suggested cache TTL for the response; this should expire before the `opensAt` of any open rounds that may not be in this response yet. + + + + + +Always created with respect to an input set of contract IDs. If an input contract ID is absent from the keys of this map, that contract should be considered removed by the caller; if present, `contract` may be empty, reflecting that the caller should already have the full contract data for that contract ID. Contracts not present in the input set will have full contract data. `domain_id` is always up-to-date; if undefined the contract is currently unassigned to a synchronizer, i.e. "in-flight". + + + + + +Always created with respect to an input set of contract IDs. If an input contract ID is absent from the keys of this map, that contract should be considered removed by the caller; if present, `contract` may be empty, reflecting that the caller should already have the full contract data for that contract ID. Contracts not present in the input set will have full contract data. `domain_id` is always up-to-date; if undefined the contract is currently unassigned to a synchronizer, i.e. "in-flight". + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/open-and-issuing-mining-rounds' \ + --header 'Content-Type: application/json' \ + --data '{"cached_open_mining_round_contract_ids":["string"],"cached_issuing_round_contract_ids":["string"]}' +``` + + + + + + +```json 200 response +{ + "time_to_live_in_microseconds": 0, + "open_mining_rounds": {}, + "issuing_mining_rounds": {} +} +``` + + diff --git a/docs-main/reference/splice-scan-api/post-v0stateacs.mdx b/docs-main/reference/splice-scan-api/post-v0stateacs.mdx new file mode 100644 index 000000000..597c58f0e --- /dev/null +++ b/docs-main/reference/splice-scan-api/post-v0stateacs.mdx @@ -0,0 +1,327 @@ +--- +title: "Deprecated" +api: "POST https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/state/acs" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Deprecated

+ + + +
+ + OpenAPI + + Since 0.5.10 + + Changed 0.6.0 + +
+ + +
+ +Deprecated. Please use /v1/state/acs instead. Returns the ACS in creation date ascending order, paged, for a given migration id and record time. + +## Protocol Details + + + +
+ +
+ Operation ID + getAcsSnapshotAt +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `integer (int64)`. + + +The migration id for which to return the ACS. + + + + + +OpenAPI type: `string (date-time)`. + + +The timestamp at which the contract set was active. This needs to be an exact timestamp, i.e., needs to correspond to a timestamp reported by `/v0/state/acs/snapshot-timestamp` if `record_time_match` is set to `exact` (which is the default). If `record_time_match` is set to `at_or_before`, this can be any timestamp, and the most recent snapshot at or before the given `record_time` will be returned. + + + + + + +How to match the record_time. "exact" requires the record_time to match exactly. "at_or_before" finds the most recent snapshot at or before the given record_time. + + + + + +OpenAPI type: `integer (int64)`. + + +Pagination token for the next page of results. For this to be valid, this must be the `next_page_token` from a prior request with identical parameters aside from `after` and `page_size`; the response may be invalid otherwise. + + + + + +OpenAPI type: `integer (int32)`. + + +The maximum number of created events returned for this request. + + + + + + +Filters the ACS by contracts in which these party IDs are stakeholders. + + + + + + +Filters the ACS by contracts with these template IDs, specified as "PACKAGE_NAME:MODULE_NAME:ENTITY_NAME". + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The same `record_time` as in the request. + + + + + +The same `migration_id` as in the request. + + + + + +Up to `page_size` contracts in the ACS. `create_arguments` are always encoded as `compact_json`. + + + + + +When requesting the next page of results, pass this as `after` to the `AcsRequest` or `HoldingsStateRequest`. Will be absent when there are no more pages. + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 500 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Deprecated + 0.6.0 +
+ +
+ +
+
+ Changed + 0.6.0 +
+ +

The POST /v0/state/acs operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/state/acs' \ + --header 'Content-Type: application/json' \ + --data '{"migration_id":0,"record_time":"2026-01-01T00:00:00Z","record_time_match":"exact","after":0,"page_size":0,"party_ids":["string"],"templates":["string"]}' +``` + + + + + + +```json 200 response +{ + "record_time": "2026-01-01T00:00:00Z", + "migration_id": 0, + "created_events": [ + {} + ], + "next_page_token": 0 +} +``` + + diff --git a/docs-main/reference/splice-scan-api/post-v0stateacsforce.mdx b/docs-main/reference/splice-scan-api/post-v0stateacsforce.mdx new file mode 100644 index 000000000..72c196e98 --- /dev/null +++ b/docs-main/reference/splice-scan-api/post-v0stateacsforce.mdx @@ -0,0 +1,188 @@ +--- +title: "Takes a snapshot of the ACS at the current time" +api: "POST https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/state/acs/force" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Takes a snapshot of the ACS at the current time

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +Takes a snapshot of the ACS at the current time. The responses can be used as parameters to `/v0/state/acs` to retrieve the snapshot. Disabled in production environments due to its persistent alteration of the behavior of future invocations of `/v0/state/acs`, as it causes an immediate internal snapshot and delay in the next automatic snapshot. + +## Protocol Details + + + +
+ +
+ Operation ID + forceAcsSnapshotNow +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The [recent] time for which this ACS snapshot was persisted. + + + + + +The current migration ID of the Scan. + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 500 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/state/acs/force' +``` + + + + + + +```json 200 response +{ + "record_time": "2026-01-01T00:00:00Z", + "migration_id": 0 +} +``` + + diff --git a/docs-main/reference/splice-scan-api/post-v0updates.mdx b/docs-main/reference/splice-scan-api/post-v0updates.mdx new file mode 100644 index 000000000..6779e3850 --- /dev/null +++ b/docs-main/reference/splice-scan-api/post-v0updates.mdx @@ -0,0 +1,258 @@ +--- +title: "**Deprecated**, use /v2/updates instead" +api: "POST https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/updates" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

**Deprecated**, use /v2/updates instead

+ + + +
+ + OpenAPI + + Since 0.5.10 + + Changed 0.6.0 + +
+ + +
+ +**Deprecated**, use /v2/updates instead. Returns the update history in ascending order, paged, from ledger begin or optionally starting after a record time. + +## Protocol Details + + + +
+ +
+ Operation ID + getUpdateHistory +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `UpdateHistoryRequestAfter`. + + + + + + + + +OpenAPI type: `integer (int32)`. + + +The maximum number of transactions returned for this request. + + + + + + +Whether contract payload should be encoded into json using a lossless, but much harder to process, encoding. This is mostly used for backend calls, and is not recommended for external users. Optional and defaults to false. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 500 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 0.6.0 +
+ +

The POST /v0/updates operation changed in this snapshot.

+ +
+ +
+
+ Changed + 0.5.17 +
+ +

The POST /v0/updates operation changed in this snapshot.

+ +
+ +
+
+ Deprecated + 0.5.10 +
+ +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/updates' \ + --header 'Content-Type: application/json' \ + --data '{"after":{"after_migration_id":0,"after_record_time":"string"},"page_size":0,"lossless":false}' +``` + + + + + + +```json 200 response +{ + "transactions": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-scan-api/post-v0voterequest.mdx b/docs-main/reference/splice-scan-api/post-v0voterequest.mdx new file mode 100644 index 000000000..5bac3e953 --- /dev/null +++ b/docs-main/reference/splice-scan-api/post-v0voterequest.mdx @@ -0,0 +1,164 @@ +--- +title: "Look up several `VoteRequest`\\ s at once by their contract IDs" +api: "POST https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/voterequest" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Look up several `VoteRequest`\ s at once by their contract IDs

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +Look up several `VoteRequest`\ s at once by their contract IDs. + +## Protocol Details + + + +
+ +
+ Operation ID + listVoteRequestsByTrackingCid +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + +Contract IDs of Daml template `Splice.DsoRules:VoteRequest`. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +Contracts of Daml template `Splice.DsoRules:VoteRequest` that match `vote_request_contract_ids` in the request. + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/voterequest' \ + --header 'Content-Type: application/json' \ + --data '{"vote_request_contract_ids":["string"]}' +``` + + + + + + +```json 200 response +{ + "vote_requests": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-scan-api/post-v1holdingsstate.mdx b/docs-main/reference/splice-scan-api/post-v1holdingsstate.mdx new file mode 100644 index 000000000..9b841ea1a --- /dev/null +++ b/docs-main/reference/splice-scan-api/post-v1holdingsstate.mdx @@ -0,0 +1,300 @@ +--- +title: "Holdings state at v1" +api: "POST https://scan.sv-1.global.canton.network.sync.global/api/scan/v1/holdings/state" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Holdings state at v1

+ + + +
+ + OpenAPI + + Since 0.6.0 + +
+ + +
+ +Returns the active amulet contracts for a given migration id and record time, in creation date ascending order, paged. + +## Protocol Details + + + +
+ +
+ Operation ID + getHoldingsStateAtV1 +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `integer (int64)`. + + +The migration id for which to return the ACS. + + + + + +OpenAPI type: `string (date-time)`. + + +The timestamp at which the contract set was active. This needs to be an exact timestamp, i.e., needs to correspond to a timestamp reported by `/v0/state/acs/snapshot-timestamp` if `record_time_match` is set to `exact` (which is the default). If `record_time_match` is set to `at_or_before`, this can be any timestamp, and the most recent snapshot at or before the given `record_time` will be returned. + + + + + + +How to match the record_time. "exact" requires the record_time to match exactly. "at_or_before" finds the most recent snapshot at or before the given record_time. + + + + + +OpenAPI type: `integer (int64)`. + + +Pagination token for the next page of results. + + + + + +OpenAPI type: `integer (int32)`. + + +The maximum number of created events returned for this request. + + + + + + +Filters by contracts in which these party_ids are the owners of the amulets. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The same `record_time` as in the request. + + + + + +The same `migration_id` as in the request. + + + + + +Up to `page_size` contracts in the ACS. `create_arguments` are always encoded as `compact_json`. + + + + + +When requesting the next page of results, pass this as `after` to the `AcsRequest` or `HoldingsStateRequest`. Will be absent when there are no more pages. + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 500 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.6.0 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v1/holdings/state' \ + --header 'Content-Type: application/json' \ + --data '{"migration_id":0,"record_time":"2026-01-01T00:00:00Z","record_time_match":"exact","after":0,"page_size":0,"owner_party_ids":["string"]}' +``` + + + + + + +```json 200 response +{ + "record_time": "2026-01-01T00:00:00Z", + "migration_id": 0, + "created_events": [ + {} + ], + "next_page_token": 0 +} +``` + + diff --git a/docs-main/reference/splice-scan-api/post-v1holdingssummary.mdx b/docs-main/reference/splice-scan-api/post-v1holdingssummary.mdx new file mode 100644 index 000000000..ba5f526f5 --- /dev/null +++ b/docs-main/reference/splice-scan-api/post-v1holdingssummary.mdx @@ -0,0 +1,273 @@ +--- +title: "Holdings summary at v1" +api: "POST https://scan.sv-1.global.canton.network.sync.global/api/scan/v1/holdings/summary" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Holdings summary at v1

+ + + +
+ + OpenAPI + + Since 0.6.3 + +
+ + +
+ +Returns the summary of active amulet contracts for a given migration id and record time, for the given parties. This is an aggregate of `/v0/holdings/state` by owner party ID with better performance than client-side computation. Unlike /v0/holdings/summary, this version does not include holding fee fields as they do not express a meaningful aggregate value. + +## Protocol Details + + + +
+ +
+ Operation ID + getHoldingsSummaryAtV1 +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `integer (int64)`. + + +The migration id for which to return the summary. + + + + + +OpenAPI type: `string (date-time)`. + + +The timestamp at which the contract set was active. This needs to be an exact timestamp, i.e., needs to correspond to a timestamp reported by `/v0/state/acs/snapshot-timestamp` if `record_time_match` is set to `exact` (which is the default). If `record_time_match` is set to `at_or_before`, this can be any timestamp, and the most recent snapshot at or before the given `record_time` will be returned. + + + + + + +How to match the record_time. "exact" requires the record_time to match exactly. "at_or_before" finds the most recent snapshot at or before the given record_time. + + + + + + +The owners for which to compute the summary. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The same `record_time` as in the request. + + + + + +The same `migration_id` as in the request. + + + + + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 500 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.6.3 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v1/holdings/summary' \ + --header 'Content-Type: application/json' \ + --data '{"migration_id":0,"record_time":"2026-01-01T00:00:00Z","record_time_match":"exact","owner_party_ids":["string"]}' +``` + + + + + + +```json 200 response +{ + "record_time": "2026-01-01T00:00:00Z", + "migration_id": 0, + "summaries": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-scan-api/post-v1stateacs.mdx b/docs-main/reference/splice-scan-api/post-v1stateacs.mdx new file mode 100644 index 000000000..398c05d59 --- /dev/null +++ b/docs-main/reference/splice-scan-api/post-v1stateacs.mdx @@ -0,0 +1,307 @@ +--- +title: "Acs snapshot at v1" +api: "POST https://scan.sv-1.global.canton.network.sync.global/api/scan/v1/state/acs" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Acs snapshot at v1

+ + + +
+ + OpenAPI + + Since 0.6.0 + +
+ + +
+ +Returns the ACS in creation date ascending order, paged, for a given migration id and record time. Unlike /v0/state/acs, every contract is identified by an (optional) update_id (as opposed to the event ID in /v0/state/acs, which was not BFT-safe). The update_id is the ID of the update in which the contract was created, and can be used to correlate with updates returned by /v2/updates. + +## Protocol Details + + + +
+ +
+ Operation ID + getAcsSnapshotAtV1 +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `integer (int64)`. + + +The migration id for which to return the ACS. + + + + + +OpenAPI type: `string (date-time)`. + + +The timestamp at which the contract set was active. This needs to be an exact timestamp, i.e., needs to correspond to a timestamp reported by `/v0/state/acs/snapshot-timestamp` if `record_time_match` is set to `exact` (which is the default). If `record_time_match` is set to `at_or_before`, this can be any timestamp, and the most recent snapshot at or before the given `record_time` will be returned. + + + + + + +How to match the record_time. "exact" requires the record_time to match exactly. "at_or_before" finds the most recent snapshot at or before the given record_time. + + + + + +OpenAPI type: `integer (int64)`. + + +Pagination token for the next page of results. For this to be valid, this must be the `next_page_token` from a prior request with identical parameters aside from `after` and `page_size`; the response may be invalid otherwise. + + + + + +OpenAPI type: `integer (int32)`. + + +The maximum number of created events returned for this request. + + + + + + +Filters the ACS by contracts in which these party IDs are stakeholders. + + + + + + +Filters the ACS by contracts with these template IDs, specified as "PACKAGE_NAME:MODULE_NAME:ENTITY_NAME". + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The same `record_time` as in the request. + + + + + +The same `migration_id` as in the request. + + + + + +Up to `page_size` contracts in the ACS. `create_arguments` are always encoded as `compact_json`. + + + + + +When requesting the next page of results, pass this as `after` to the `AcsRequest` or `HoldingsStateRequest`. Will be absent when there are no more pages. + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 500 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.6.0 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v1/state/acs' \ + --header 'Content-Type: application/json' \ + --data '{"migration_id":0,"record_time":"2026-01-01T00:00:00Z","record_time_match":"exact","after":0,"page_size":0,"party_ids":["string"],"templates":["string"]}' +``` + + + + + + +```json 200 response +{ + "record_time": "2026-01-01T00:00:00Z", + "migration_id": 0, + "created_events": [ + {} + ], + "next_page_token": 0 +} +``` + + diff --git a/docs-main/reference/splice-scan-api/post-v1updates.mdx b/docs-main/reference/splice-scan-api/post-v1updates.mdx new file mode 100644 index 000000000..a53325cb5 --- /dev/null +++ b/docs-main/reference/splice-scan-api/post-v1updates.mdx @@ -0,0 +1,260 @@ +--- +title: "Update history v1" +api: "POST https://scan.sv-1.global.canton.network.sync.global/api/scan/v1/updates" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Update history v1

+ + + +
+ + OpenAPI + + Since 0.5.10 + + Changed 0.6.0 + +
+ + +
+ +Returns the update history in ascending order, paged, from ledger begin or optionally starting after a record time. Unlike /v0/updates, this endpoint returns responses that are consistent across different scan instances. Event ids returned by this endpoint are not comparable to event ids returned by /v0/updates. Updates are ordered lexicographically by `(migration id, record time)`. For a given migration id, each update has a unique record time. + +## Protocol Details + + + +
+ +
+ Operation ID + getUpdateHistoryV1 +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `UpdateHistoryRequestAfter`. + + + + + + + + +OpenAPI type: `integer (int32)`. + + +The maximum number of transactions returned for this request. + + + + + +OpenAPI type: `DamlValueEncoding`. + + +How daml values should be encoded in the response. "compact_json" is a compact, human-readable JSON encoding. It is the same encoding as the one used in the HTTP JSON API or the JavaScript codegen. "protobuf_json" is a verbose JSON encoding that is more difficult to parse, but contains type information, i.e., the values can be parsed losslessly without having access to the Daml source code. Optional and defaults to "compact_json". + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 500 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 0.6.0 +
+ +

The POST /v1/updates operation changed in this snapshot.

+ +
+ +
+
+ Changed + 0.5.17 +
+ +

The POST /v1/updates operation changed in this snapshot.

+ +
+ +
+
+ Deprecated + 0.5.10 +
+ +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v1/updates' \ + --header 'Content-Type: application/json' \ + --data '{"after":{"after_migration_id":0,"after_record_time":"string"},"page_size":0,"daml_value_encoding":"compact_json"}' +``` + + + + + + +```json 200 response +{ + "transactions": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-scan-api/post-v2updates.mdx b/docs-main/reference/splice-scan-api/post-v2updates.mdx new file mode 100644 index 000000000..aba1728ea --- /dev/null +++ b/docs-main/reference/splice-scan-api/post-v2updates.mdx @@ -0,0 +1,252 @@ +--- +title: "Update history v2" +api: "POST https://scan.sv-1.global.canton.network.sync.global/api/scan/v2/updates" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Update history v2

+ + + +
+ + OpenAPI + + Since 0.5.10 + + Changed 0.6.0 + +
+ + +
+ +Returns the update history in ascending order, paged, from ledger begin or optionally starting after a record time. Compared to `/v1/updates`, the `/v2/updates` removes the `offset` field in responses, which was hardcoded to 1 in `/v1/updates` for compatibility, and is now removed. + +## Protocol Details + + + +
+ +
+ Operation ID + getUpdateHistoryV2 +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `UpdateHistoryRequestAfter`. + + + + + + + + +OpenAPI type: `integer (int32)`. + + +The maximum number of transactions returned for this request. + + + + + +OpenAPI type: `DamlValueEncoding`. + + +How daml values should be encoded in the response. "compact_json" is a compact, human-readable JSON encoding. It is the same encoding as the one used in the HTTP JSON API or the JavaScript codegen. "protobuf_json" is a verbose JSON encoding that is more difficult to parse, but contains type information, i.e., the values can be parsed losslessly without having access to the Daml source code. Optional and defaults to "compact_json". + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 500 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 0.6.0 +
+ +

The POST /v2/updates operation changed in this snapshot.

+ +
+ +
+
+ Changed + 0.5.17 +
+ +

The POST /v2/updates operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v2/updates' \ + --header 'Content-Type: application/json' \ + --data '{"after":{"after_migration_id":0,"after_record_time":"string"},"page_size":0,"daml_value_encoding":"compact_json"}' +``` + + + + + + +```json 200 response +{ + "transactions": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyamulet-rules.mdx b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyamulet-rules.mdx new file mode 100644 index 000000000..567ebc4f5 --- /dev/null +++ b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyamulet-rules.mdx @@ -0,0 +1,132 @@ +--- +title: "Amulet rules" +api: "GET https://example.com/api/validator/v0/scan-proxy/amulet-rules" +playground: "interactive" +--- + +
+ + + +
+ +

Scan Proxy API

+ + +

Amulet rules

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +## Protocol Details + + + +
+ +
+ Operation ID + getAmuletRules +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://example.com/api/validator/v0/scan-proxy/amulet-rules' +``` + + + + + + +```json 200 response +{ + "amulet_rules": { + "contract": {}, + "domain_id": "string" + } +} +``` + + diff --git a/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyans-entries.mdx b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyans-entries.mdx new file mode 100644 index 000000000..bf74446d0 --- /dev/null +++ b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyans-entries.mdx @@ -0,0 +1,158 @@ +--- +title: "List ans entries" +api: "GET https://example.com/api/validator/v0/scan-proxy/ans-entries" +playground: "interactive" +--- + +
+ + + +
+ +

Scan Proxy API

+ + +

List ans entries

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +## Protocol Details + + + +
+ +
+ Operation ID + listAnsEntries +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Query parameters + + + + + + + + + + + + +OpenAPI type: `integer (int32)`. + + + + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://example.com/api/validator/v0/scan-proxy/ans-entries' +``` + + + + + + +```json 200 response +{ + "entries": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyans-entriesby-name:name.mdx b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyans-entriesby-name:name.mdx new file mode 100644 index 000000000..ba1c1d6b4 --- /dev/null +++ b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyans-entriesby-name:name.mdx @@ -0,0 +1,178 @@ +--- +title: "Lookup ans entry by name" +api: "GET https://example.com/api/validator/v0/scan-proxy/ans-entries/by-name/{name}" +playground: "interactive" +--- + +
+ + + +
+ +

Scan Proxy API

+ + +

Lookup ans entry by name

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +## Protocol Details + + + +
+ +
+ Operation ID + lookupAnsEntryByName +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://example.com/api/validator/v0/scan-proxy/ans-entries/by-name/{name}' +``` + + + + + + +```json 200 response +{ + "entry": { + "contract_id": "string", + "user": "string", + "name": "string", + "url": "string", + "description": "string", + "expires_at": "2026-01-01T00:00:00Z" + } +} +``` + + diff --git a/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyans-entriesby-party:party.mdx b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyans-entriesby-party:party.mdx new file mode 100644 index 000000000..c745c6453 --- /dev/null +++ b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyans-entriesby-party:party.mdx @@ -0,0 +1,178 @@ +--- +title: "Lookup ans entry by party" +api: "GET https://example.com/api/validator/v0/scan-proxy/ans-entries/by-party/{party}" +playground: "interactive" +--- + +
+ + + +
+ +

Scan Proxy API

+ + +

Lookup ans entry by party

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +## Protocol Details + + + +
+ +
+ Operation ID + lookupAnsEntryByParty +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://example.com/api/validator/v0/scan-proxy/ans-entries/by-party/{party}' +``` + + + + + + +```json 200 response +{ + "entry": { + "contract_id": "string", + "user": "string", + "name": "string", + "url": "string", + "description": "string", + "expires_at": "2026-01-01T00:00:00Z" + } +} +``` + + diff --git a/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxydso-party-id.mdx b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxydso-party-id.mdx new file mode 100644 index 000000000..1fc46778f --- /dev/null +++ b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxydso-party-id.mdx @@ -0,0 +1,129 @@ +--- +title: "Dso party id" +api: "GET https://example.com/api/validator/v0/scan-proxy/dso-party-id" +playground: "interactive" +--- + +
+ + + +
+ +

Scan Proxy API

+ + +

Dso party id

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +## Protocol Details + + + +
+ +
+ Operation ID + getDsoPartyId +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://example.com/api/validator/v0/scan-proxy/dso-party-id' +``` + + + + + + +```json 200 response +{ + "dso_party_id": "string" +} +``` + + diff --git a/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxydso.mdx b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxydso.mdx new file mode 100644 index 000000000..61b8ab8d4 --- /dev/null +++ b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxydso.mdx @@ -0,0 +1,192 @@ +--- +title: "Dso info" +api: "GET https://example.com/api/validator/v0/scan-proxy/dso" +playground: "interactive" +--- + +
+ + + +
+ +

Scan Proxy API

+ + +

Dso info

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +## Protocol Details + + + +
+ +
+ Operation ID + getDsoInfo +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +User ID representing the SV + + + + + +Party representing the SV + + + + + +Party representing the whole DSO; for Scan only, also returned by `/v0/dso-party-id` + + + + + +Threshold required to pass vote requests; also known as the "governance threshold", it is always derived from the number of `svs` in `dso_rules` + + + + + + + + + + + + + + + + + +For every one of `svs` listed in `dso_rules`, a contract of the Daml template `Splice.DSO.SvState.SvNodeState`. This does not include states for offboarded SVs, though they may still have an on-ledger state contract + + + + + +Initial round from which the network bootstraps + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://example.com/api/validator/v0/scan-proxy/dso' +``` + + + + + + +```json 200 response +{ + "sv_user": "string", + "sv_party_id": "string", + "dso_party_id": "string", + "voting_threshold": 0, + "latest_mining_round": { + "contract": {}, + "domain_id": "string" + }, + "amulet_rules": { + "contract": {}, + "domain_id": "string" + }, + "dso_rules": { + "contract": {}, + "domain_id": "string" + }, + "sv_node_states": [ + {} + ], + "initial_round": "string" +} +``` + + diff --git a/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyfeatured-apps:provider_party_id.mdx b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyfeatured-apps:provider_party_id.mdx new file mode 100644 index 000000000..3ff3a69ef --- /dev/null +++ b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyfeatured-apps:provider_party_id.mdx @@ -0,0 +1,153 @@ +--- +title: "Lookup featured app right" +api: "GET https://example.com/api/validator/v0/scan-proxy/featured-apps/{provider_party_id}" +playground: "interactive" +--- + +
+ + + +
+ +

Scan Proxy API

+ + +

Lookup featured app right

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +## Protocol Details + + + +
+ +
+ Operation ID + lookupFeaturedAppRight +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://example.com/api/validator/v0/scan-proxy/featured-apps/{provider_party_id}' +``` + + + + + + +```json 200 response +{ + "featured_app_right": { + "template_id": "string", + "contract_id": "string", + "payload": {}, + "created_event_blob": "string", + "created_at": "string" + } +} +``` + + diff --git a/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyopen-and-issuing-mining-rounds.mdx b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyopen-and-issuing-mining-rounds.mdx new file mode 100644 index 000000000..bf3081d06 --- /dev/null +++ b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyopen-and-issuing-mining-rounds.mdx @@ -0,0 +1,138 @@ +--- +title: "Open and issuing mining rounds" +api: "GET https://example.com/api/validator/v0/scan-proxy/open-and-issuing-mining-rounds" +playground: "interactive" +--- + +
+ + + +
+ +

Scan Proxy API

+ + +

Open and issuing mining rounds

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +## Protocol Details + + + +
+ +
+ Operation ID + getOpenAndIssuingMiningRounds +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://example.com/api/validator/v0/scan-proxy/open-and-issuing-mining-rounds' +``` + + + + + + +```json 200 response +{ + "open_mining_rounds": [ + {} + ], + "issuing_mining_rounds": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxytransfer-command-counter:party.mdx b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxytransfer-command-counter:party.mdx new file mode 100644 index 000000000..e7e6fb20a --- /dev/null +++ b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxytransfer-command-counter:party.mdx @@ -0,0 +1,174 @@ +--- +title: "Lookup transfer command counter by party" +api: "GET https://example.com/api/validator/v0/scan-proxy/transfer-command-counter/{party}" +playground: "interactive" +--- + +
+ + + +
+ +

Scan Proxy API

+ + +

Lookup transfer command counter by party

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +## Protocol Details + + + +
+ +
+ Operation ID + lookupTransferCommandCounterByParty +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://example.com/api/validator/v0/scan-proxy/transfer-command-counter/{party}' +``` + + + + + + +```json 200 response +{ + "transfer_command_counter": { + "contract": {}, + "domain_id": "string" + } +} +``` + + diff --git a/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxytransfer-commandstatus.mdx b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxytransfer-commandstatus.mdx new file mode 100644 index 000000000..2fd8f9558 --- /dev/null +++ b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxytransfer-commandstatus.mdx @@ -0,0 +1,182 @@ +--- +title: "Retrieve the status of all transfer commands of the given sender for the specified nonce" +api: "GET https://example.com/api/validator/v0/scan-proxy/transfer-command/status" +playground: "interactive" +--- + +
+ + + +
+ +

Scan Proxy API

+ + +

Retrieve the status of all transfer commands of the given sender for the specified nonce

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +Retrieve the status of all transfer commands of the given sender for the specified nonce. + +## Protocol Details + + + +
+ +
+ Operation ID + lookupTransferCommandStatus +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Query parameters + + + + + + + + + + + + +OpenAPI type: `integer (int64)`. + + + + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://example.com/api/validator/v0/scan-proxy/transfer-command/status' +``` + + + + + + +```json 200 response +{ + "transfer_commands_by_contract_id": {} +} +``` + + diff --git a/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxytransfer-preapprovalsby-party:party.mdx b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxytransfer-preapprovalsby-party:party.mdx new file mode 100644 index 000000000..a64375d36 --- /dev/null +++ b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxytransfer-preapprovalsby-party:party.mdx @@ -0,0 +1,174 @@ +--- +title: "Lookup transfer preapproval by party" +api: "GET https://example.com/api/validator/v0/scan-proxy/transfer-preapprovals/by-party/{party}" +playground: "interactive" +--- + +
+ + + +
+ +

Scan Proxy API

+ + +

Lookup transfer preapproval by party

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +## Protocol Details + + + +
+ +
+ Operation ID + lookupTransferPreapprovalByParty +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://example.com/api/validator/v0/scan-proxy/transfer-preapprovals/by-party/{party}' +``` + + + + + + +```json 200 response +{ + "transfer_preapproval": { + "contract": {}, + "domain_id": "string" + } +} +``` + + diff --git a/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyunclaimed-development-fund-coupons.mdx b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyunclaimed-development-fund-coupons.mdx new file mode 100644 index 000000000..10e338c95 --- /dev/null +++ b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyunclaimed-development-fund-coupons.mdx @@ -0,0 +1,135 @@ +--- +title: "List all unclaimed development fund coupons" +api: "GET https://example.com/api/validator/v0/scan-proxy/unclaimed-development-fund-coupons" +playground: "interactive" +--- + +
+ + + +
+ +

Scan Proxy API

+ + +

List all unclaimed development fund coupons

+ + + +
+ + OpenAPI + + Since 0.5.11 + +
+ + +
+ +List all unclaimed development fund coupons. + +## Protocol Details + + + +
+ +
+ Operation ID + listUnclaimedDevelopmentFundCoupons +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +Contracts of the Daml template `Splice.Amulet:UnclaimedDevelopmentFundCoupon`. + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.11 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://example.com/api/validator/v0/scan-proxy/unclaimed-development-fund-coupons' +``` + + + + + + +```json 200 response +{ + "unclaimed-development-fund-coupons": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-scan-proxy-api/post-v0scan-proxyans-rules.mdx b/docs-main/reference/splice-scan-proxy-api/post-v0scan-proxyans-rules.mdx new file mode 100644 index 000000000..508bfd82b --- /dev/null +++ b/docs-main/reference/splice-scan-proxy-api/post-v0scan-proxyans-rules.mdx @@ -0,0 +1,167 @@ +--- +title: "Ans rules" +api: "POST https://example.com/api/validator/v0/scan-proxy/ans-rules" +playground: "interactive" +--- + +
+ + + +
+ +

Scan Proxy API

+ + +

Ans rules

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +## Protocol Details + + + +
+ +
+ Operation ID + getAnsRules +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `ContractId`. + + + + + + + + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://example.com/api/validator/v0/scan-proxy/ans-rules' \ + --header 'Content-Type: application/json' \ + --data '{"cached_ans_rules_contract_id":"string","cached_ans_rules_domain_id":"string"}' +``` + + + + + + +```json 200 response +{ + "ans_rules_update": { + "contract": {}, + "domain_id": "string" + } +} +``` + + diff --git a/docs-main/reference/splice-scan-proxy-api/post-v0scan-proxyholdingssummary.mdx b/docs-main/reference/splice-scan-proxy-api/post-v0scan-proxyholdingssummary.mdx new file mode 100644 index 000000000..11d0fc0f0 --- /dev/null +++ b/docs-main/reference/splice-scan-proxy-api/post-v0scan-proxyholdingssummary.mdx @@ -0,0 +1,309 @@ +--- +title: "Deprecated" +api: "POST https://example.com/api/validator/v0/scan-proxy/holdings/summary" +playground: "interactive" +--- + +
+ + + +
+ +

Scan Proxy API

+ + +

Deprecated

+ + + +
+ + OpenAPI + + Since 0.5.10 + + Changed 0.6.3 + +
+ + +
+ +Deprecated. Please use /v1/scan-proxy/holdings/summary instead. Returns the summary of active amulet contracts for a given migration id and record time, for the given parties. This is an aggregate of `/v0/holdings/state` by owner party ID with better performance than client-side computation. + +## Protocol Details + + + +
+ +
+ Operation ID + getHoldingsSummaryAt +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `integer (int64)`. + + +The migration id for which to return the summary. + + + + + +OpenAPI type: `string (date-time)`. + + +The timestamp at which the contract set was active. This needs to be an exact timestamp, i.e., needs to correspond to a timestamp reported by `/v0/state/acs/snapshot-timestamp` if `record_time_match` is set to `exact` (which is the default). If `record_time_match` is set to `at_or_before`, this can be any timestamp, and the most recent snapshot at or before the given `record_time` will be returned. + + + + + + +How to match the record_time. "exact" requires the record_time to match exactly. "at_or_before" finds the most recent snapshot at or before the given record_time. + + + + + + +The owners for which to compute the summary. + + + + + +OpenAPI type: `integer (int64)`. + + +Compute holding fees as of this round. Defaults to the earliest open mining round. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The same `record_time` as in the request. + + + + + +The same `migration_id` as in the request. + + + + + +The same `as_of_round` as in the request, with the same default. + + + + + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 500 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Deprecated + 0.6.3 +
+ +
+ +
+
+ Changed + 0.6.3 +
+ +

The POST /v0/scan-proxy/holdings/summary operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://example.com/api/validator/v0/scan-proxy/holdings/summary' \ + --header 'Content-Type: application/json' \ + --data '{"migration_id":0,"record_time":"2026-01-01T00:00:00Z","record_time_match":"exact","owner_party_ids":["string"],"as_of_round":0}' +``` + + + + + + +```json 200 response +{ + "record_time": "2026-01-01T00:00:00Z", + "migration_id": 0, + "computed_as_of_round": 0, + "summaries": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-scan-proxy-api/post-v1scan-proxyholdingssummary.mdx b/docs-main/reference/splice-scan-proxy-api/post-v1scan-proxyholdingssummary.mdx new file mode 100644 index 000000000..2903ce2c8 --- /dev/null +++ b/docs-main/reference/splice-scan-proxy-api/post-v1scan-proxyholdingssummary.mdx @@ -0,0 +1,273 @@ +--- +title: "Holdings summary at v1" +api: "POST https://example.com/api/validator/v1/scan-proxy/holdings/summary" +playground: "interactive" +--- + +
+ + + +
+ +

Scan Proxy API

+ + +

Holdings summary at v1

+ + + +
+ + OpenAPI + + Since 0.6.3 + +
+ + +
+ +Returns the summary of active amulet contracts for a given migration id and record time, for the given parties. This is an aggregate of `/v0/holdings/state` by owner party ID with better performance than client-side computation. Unlike /v0/scan-proxy/holdings/summary, this version does not include holding fee fields as they do not express a meaningful aggregate value. + +## Protocol Details + + + +
+ +
+ Operation ID + getHoldingsSummaryAtV1 +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `integer (int64)`. + + +The migration id for which to return the summary. + + + + + +OpenAPI type: `string (date-time)`. + + +The timestamp at which the contract set was active. This needs to be an exact timestamp, i.e., needs to correspond to a timestamp reported by `/v0/state/acs/snapshot-timestamp` if `record_time_match` is set to `exact` (which is the default). If `record_time_match` is set to `at_or_before`, this can be any timestamp, and the most recent snapshot at or before the given `record_time` will be returned. + + + + + + +How to match the record_time. "exact" requires the record_time to match exactly. "at_or_before" finds the most recent snapshot at or before the given record_time. + + + + + + +The owners for which to compute the summary. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The same `record_time` as in the request. + + + + + +The same `migration_id` as in the request. + + + + + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 500 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.6.3 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://example.com/api/validator/v1/scan-proxy/holdings/summary' \ + --header 'Content-Type: application/json' \ + --data '{"migration_id":0,"record_time":"2026-01-01T00:00:00Z","record_time_match":"exact","owner_party_ids":["string"]}' +``` + + + + + + +```json 200 response +{ + "record_time": "2026-01-01T00:00:00Z", + "migration_id": 0, + "summaries": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-scan-streaming-api/get-v0historybulkdownload:object_key.mdx b/docs-main/reference/splice-scan-streaming-api/get-v0historybulkdownload:object_key.mdx new file mode 100644 index 000000000..117fee966 --- /dev/null +++ b/docs-main/reference/splice-scan-streaming-api/get-v0historybulkdownload:object_key.mdx @@ -0,0 +1,183 @@ +--- +title: "Download a bulk storage object" +api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/history/bulk/download/{object_key}" +playground: "interactive" +--- + +
+ + + +
+ +

Scan Streaming API

+ + +

Download a bulk storage object

+ + + +
+ + OpenAPI + + Since 0.5.16 + + Changed 0.5.17 + +
+ + +
+ +Download a bulk storage object + +## Protocol Details + + + +
+ +
+ Operation ID + bulkStorageDownload +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/octet-stream + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 0.5.17 +
+ +

The GET /v0/history/bulk/download/{object_key} operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 0.5.16 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/history/bulk/download/{object_key}' +``` + + + + + + +```json 200 response +"string" +``` + + diff --git a/docs-main/reference/splice-token-metadata-service/get-registrymetadatav1info.mdx b/docs-main/reference/splice-token-metadata-service/get-registrymetadatav1info.mdx new file mode 100644 index 000000000..0a771d795 --- /dev/null +++ b/docs-main/reference/splice-token-metadata-service/get-registrymetadatav1info.mdx @@ -0,0 +1,188 @@ +--- +title: "Get information about the registry" +api: "GET https://example.com/registry/metadata/v1/info" +playground: "interactive" +--- + +
+ + + +
+ +

Token Metadata Service

+ + +

Get information about the registry

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +Get information about the registry. The response includes the standards supported by the registry. + +## Protocol Details + + + +
+ +
+ Operation ID + getRegistryInfo +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The Daml party representing the registry app + + + + + +Map from token standard API name to the minor version of the API supported, e.g., splice-api-token-metadata-v1 -> 1 where the `1` corresponds to the minor version. + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 500 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://example.com/registry/metadata/v1/info' +``` + + + + + + +```json 200 response +{ + "adminId": "string", + "supportedApis": {} +} +``` + + diff --git a/docs-main/reference/splice-token-metadata-service/get-registrymetadatav1instruments.mdx b/docs-main/reference/splice-token-metadata-service/get-registrymetadatav1instruments.mdx new file mode 100644 index 000000000..ce4910b5d --- /dev/null +++ b/docs-main/reference/splice-token-metadata-service/get-registrymetadatav1instruments.mdx @@ -0,0 +1,240 @@ +--- +title: "List all instruments managed by this instrument admin" +api: "GET https://example.com/registry/metadata/v1/instruments" +playground: "interactive" +--- + +
+ + + +
+ +

Token Metadata Service

+ + +

List all instruments managed by this instrument admin

+ + + +
+ + OpenAPI + + Since 0.5.10 + + Changed 0.6.12 + +
+ + +
+ +List all instruments managed by this instrument admin. + +## Protocol Details + + + +
+ +
+ Operation ID + listInstruments +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Query parameters + + + + + + + + +OpenAPI type: `integer (int32)`. + + +Number of instruments per page. + + + + + + +The `nextPageToken` received from the response for the previous page. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + +The token for the next page of results, to be used as the lastInstrumentId for the next page. + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 500 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 0.6.12 +
+ +

The GET /registry/metadata/v1/instruments operation changed in this snapshot.

+ +
+ +
+
+ Changed + 0.6.11 +
+ +

The GET /registry/metadata/v1/instruments operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://example.com/registry/metadata/v1/instruments' +``` + + + + + + +```json 200 response +{ + "instruments": [ + {} + ], + "nextPageToken": "string" +} +``` + + diff --git a/docs-main/reference/splice-token-metadata-service/get-registrymetadatav1instruments:instrumentid.mdx b/docs-main/reference/splice-token-metadata-service/get-registrymetadatav1instruments:instrumentid.mdx new file mode 100644 index 000000000..d2fee5d22 --- /dev/null +++ b/docs-main/reference/splice-token-metadata-service/get-registrymetadatav1instruments:instrumentid.mdx @@ -0,0 +1,296 @@ +--- +title: "Retrieve an instrument's metadata" +api: "GET https://example.com/registry/metadata/v1/instruments/{instrumentId}" +playground: "interactive" +--- + +
+ + + +
+ +

Token Metadata Service

+ + +

Retrieve an instrument's metadata

+ + + +
+ + OpenAPI + + Since 0.5.10 + + Changed 0.6.12 + +
+ + +
+ +Retrieve an instrument's metadata. + +## Protocol Details + + + +
+ +
+ Operation ID + getInstrument +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The unique identifier assigned by the admin to the instrument. + + + + + +The display name for the instrument recommended by the instrument admin. This is not necessarily unique. + + + + + +The symbol for the instrument recommended by the instrument admin. This is not necessarily unique. + + + + + +Decimal encoded current total supply of the instrument. + + + + + +The timestamp when the total supply was last computed. + + + + + +The number of decimal places used by the instrument. Must be a number between 0 and 10, as the Daml interfaces represent holding amounts as `Decimal` values, which use 10 decimal places and are precise for 38 digits. Setting this to 0 means that the instrument can only be held in whole units. This number SHOULD be used for display purposes in a wallet to decide how many decimal places to show and accept when displaying or entering amounts. + + + + + +Indicates whether the instrument is currently paused. A paused instrument cannot be transferred or allocated. + + + + + +Additional information about the instrument pause state. + + + + + +Map from token standard API name to the minor version of the API supported, e.g., splice-api-token-metadata-v1 -> 1 where the `1` corresponds to the minor version. + + + + + +Informs wallets whether the instrument supports non-basic accounts and the wallet should thus show input fields for both the account provider and the account id in input forms for transfers and allocations. Note that wallets should always show non-null account providers and account ids when displaying transfers and allocations. This property is deprecated in favor of the more fine-grained `accountInputFieldsToShow` property. + + + + + +Which account input field(s) wallets should show in forms. + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 500 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Changed + 0.6.12 +
+ +

The GET /registry/metadata/v1/instruments/{instrumentId} operation changed in this snapshot.

+ +
+ +
+
+ Changed + 0.6.11 +
+ +

The GET /registry/metadata/v1/instruments/{instrumentId} operation changed in this snapshot.

+ +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://example.com/registry/metadata/v1/instruments/{instrumentId}' +``` + + + + + + +```json 200 response +{ + "id": "string", + "name": "string", + "symbol": "string", + "totalSupply": "string", + "totalSupplyAsOf": "2026-01-01T00:00:00Z", + "decimals": 10, + "paused": false, + "pauseInfo": { + "reason": "string", + "until": "2026-01-01T00:00:00Z" + }, + "supportedApis": {}, + "showAccountInputFields": false, + "accountInputFieldsToShow": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1:transferinstructionidchoice-contextsaccept.mdx b/docs-main/reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1:transferinstructionidchoice-contextsaccept.mdx new file mode 100644 index 000000000..a7d1e9dab --- /dev/null +++ b/docs-main/reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1:transferinstructionidchoice-contextsaccept.mdx @@ -0,0 +1,247 @@ +--- +title: "Get the choice context to accept a transfer instruction" +api: "POST https://example.com/registry/transfer-instruction/v1/{transferInstructionId}/choice-contexts/accept" +playground: "interactive" +--- + +
+ + + +
+ +

Transfer Instruction API

+ + +

Get the choice context to accept a transfer instruction

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +Get the choice context to accept a transfer instruction. + +## Protocol Details + + + +
+ +
+ Operation ID + getTransferInstructionAcceptContext +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + + +The contract ID of the transfer instruction to accept. + + + + + + + + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + +Metadata that will be passed to the choice, and should be incorporated into the choice context. Provided for extensibility. + + + + + + +If set to true, the response will not include fields prefixed with 'debug'. Useful to save bandwidth. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The additional data to use when exercising the choice. + + + + + +The contracts that are required to be disclosed to the participant node for exercising the choice. + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://example.com/registry/transfer-instruction/v1/{transferInstructionId}/choice-contexts/accept' \ + --header 'Content-Type: application/json' \ + --data '{"meta":{},"excludeDebugFields":false}' +``` + + + + + + +```json 200 response +{ + "choiceContextData": {}, + "disclosedContracts": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1:transferinstructionidchoice-contextsreject.mdx b/docs-main/reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1:transferinstructionidchoice-contextsreject.mdx new file mode 100644 index 000000000..d3bcfb9a8 --- /dev/null +++ b/docs-main/reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1:transferinstructionidchoice-contextsreject.mdx @@ -0,0 +1,247 @@ +--- +title: "Get the choice context to reject a transfer instruction" +api: "POST https://example.com/registry/transfer-instruction/v1/{transferInstructionId}/choice-contexts/reject" +playground: "interactive" +--- + +
+ + + +
+ +

Transfer Instruction API

+ + +

Get the choice context to reject a transfer instruction

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +Get the choice context to reject a transfer instruction. + +## Protocol Details + + + +
+ +
+ Operation ID + getTransferInstructionRejectContext +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + + +The contract ID of the transfer instruction to reject. + + + + + + + + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + +Metadata that will be passed to the choice, and should be incorporated into the choice context. Provided for extensibility. + + + + + + +If set to true, the response will not include fields prefixed with 'debug'. Useful to save bandwidth. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The additional data to use when exercising the choice. + + + + + +The contracts that are required to be disclosed to the participant node for exercising the choice. + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://example.com/registry/transfer-instruction/v1/{transferInstructionId}/choice-contexts/reject' \ + --header 'Content-Type: application/json' \ + --data '{"meta":{},"excludeDebugFields":false}' +``` + + + + + + +```json 200 response +{ + "choiceContextData": {}, + "disclosedContracts": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1:transferinstructionidchoice-contextswithdraw.mdx b/docs-main/reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1:transferinstructionidchoice-contextswithdraw.mdx new file mode 100644 index 000000000..5bb622b7b --- /dev/null +++ b/docs-main/reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1:transferinstructionidchoice-contextswithdraw.mdx @@ -0,0 +1,247 @@ +--- +title: "Get the choice context to withdraw a transfer instruction" +api: "POST https://example.com/registry/transfer-instruction/v1/{transferInstructionId}/choice-contexts/withdraw" +playground: "interactive" +--- + +
+ + + +
+ +

Transfer Instruction API

+ + +

Get the choice context to withdraw a transfer instruction

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +Get the choice context to withdraw a transfer instruction. + +## Protocol Details + + + +
+ +
+ Operation ID + getTransferInstructionWithdrawContext +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + + +The contract ID of the transfer instruction to withdraw. + + + + + + + + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + +Metadata that will be passed to the choice, and should be incorporated into the choice context. Provided for extensibility. + + + + + + +If set to true, the response will not include fields prefixed with 'debug'. Useful to save bandwidth. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The additional data to use when exercising the choice. + + + + + +The contracts that are required to be disclosed to the participant node for exercising the choice. + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://example.com/registry/transfer-instruction/v1/{transferInstructionId}/choice-contexts/withdraw' \ + --header 'Content-Type: application/json' \ + --data '{"meta":{},"excludeDebugFields":false}' +``` + + + + + + +```json 200 response +{ + "choiceContextData": {}, + "disclosedContracts": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1transfer-factory.mdx b/docs-main/reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1transfer-factory.mdx new file mode 100644 index 000000000..c49fa4036 --- /dev/null +++ b/docs-main/reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1transfer-factory.mdx @@ -0,0 +1,236 @@ +--- +title: "Get the factory and choice context for executing a direct transfer" +api: "POST https://example.com/registry/transfer-instruction/v1/transfer-factory" +playground: "interactive" +--- + +
+ + + +
+ +

Transfer Instruction API

+ + +

Get the factory and choice context for executing a direct transfer

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +Get the factory and choice context for executing a direct transfer. + +## Protocol Details + + + +
+ +
+ Operation ID + getTransferFactory +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + +The arguments that are intended to be passed to the choice provided by the factory. To avoid repeating the Daml type definitions, they are specified as JSON objects. However the concrete format is given by how the choice arguments are encoded using the Daml JSON API (with the `extraArgs.context` and `extraArgs.meta` fields set to the empty object). The choice arguments are provided so that the registry can also provide choice-argument specific contracts, e.g., the configuration for a specific instrument-id. + + + + + + +If set to true, the response will not include fields prefixed with 'debug'. Useful to save bandwidth. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The contract ID of the contract implementing the factory interface. + + + + + +The kind of transfer workflow that will be used: * `offer`: offer a transfer to the receiver and only transfer if they accept * `direct`: transfer directly to the receiver without asking them for approval. Only chosen if the receiver has pre-approved direct transfers. * `self`: a self-transfer where the sender and receiver are the same party. No approval is required, and the transfer is typically immediate. + + + + + +The context required to exercise a choice on a contract via an interface. Used to retrieve additional reference data that is passed in via disclosed contracts, which are in turn referred to via their contract ID in the `choiceContextData`. + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://example.com/registry/transfer-instruction/v1/transfer-factory' \ + --header 'Content-Type: application/json' \ + --data '{"choiceArguments":{},"excludeDebugFields":false}' +``` + + + + + + +```json 200 response +{ + "factoryId": "string", + "transferKind": "self", + "choiceContext": { + "choiceContextData": {}, + "disclosedContracts": [ + {} + ] + } +} +``` + + diff --git a/docs-main/reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2:transferinstructionidchoice-contextsaccept.mdx b/docs-main/reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2:transferinstructionidchoice-contextsaccept.mdx new file mode 100644 index 000000000..9c678bfae --- /dev/null +++ b/docs-main/reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2:transferinstructionidchoice-contextsaccept.mdx @@ -0,0 +1,271 @@ +--- +title: "Get the choice context to accept a transfer instruction" +api: "POST https://example.com/registry/transfer-instruction/v2/{transferInstructionId}/choice-contexts/accept" +playground: "interactive" +--- + +
+ + + +
+ +

Transfer Instruction V2 API

+ + +

Get the choice context to accept a transfer instruction

+ + + +
+ + OpenAPI + + Since 0.6.11 + +
+ + +
+ +Get the choice context to accept a transfer instruction. + +## Protocol Details + + + +
+ +
+ Operation ID + getTransferInstructionAcceptContext +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + + +The contract ID of the transfer instruction to accept. + + + + + + + + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + +Metadata that will be passed to the choice, and should be incorporated into the choice context. Provided for extensibility. + + + + + + +If set to true, the response will not include fields prefixed with 'debug'. Useful to save bandwidth. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The additional data to use when exercising the choice. + + + + + +The contracts that are required to be disclosed to the participant node for exercising the choice. + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 409 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.6.11 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://example.com/registry/transfer-instruction/v2/{transferInstructionId}/choice-contexts/accept' \ + --header 'Content-Type: application/json' \ + --data '{"meta":{},"excludeDebugFields":false}' +``` + + + + + + +```json 200 response +{ + "choiceContextData": {}, + "disclosedContracts": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2:transferinstructionidchoice-contextsreject.mdx b/docs-main/reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2:transferinstructionidchoice-contextsreject.mdx new file mode 100644 index 000000000..4054ca090 --- /dev/null +++ b/docs-main/reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2:transferinstructionidchoice-contextsreject.mdx @@ -0,0 +1,271 @@ +--- +title: "Get the choice context to reject a transfer instruction" +api: "POST https://example.com/registry/transfer-instruction/v2/{transferInstructionId}/choice-contexts/reject" +playground: "interactive" +--- + +
+ + + +
+ +

Transfer Instruction V2 API

+ + +

Get the choice context to reject a transfer instruction

+ + + +
+ + OpenAPI + + Since 0.6.11 + +
+ + +
+ +Get the choice context to reject a transfer instruction. + +## Protocol Details + + + +
+ +
+ Operation ID + getTransferInstructionRejectContext +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + + +The contract ID of the transfer instruction to reject. + + + + + + + + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + +Metadata that will be passed to the choice, and should be incorporated into the choice context. Provided for extensibility. + + + + + + +If set to true, the response will not include fields prefixed with 'debug'. Useful to save bandwidth. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The additional data to use when exercising the choice. + + + + + +The contracts that are required to be disclosed to the participant node for exercising the choice. + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 409 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.6.11 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://example.com/registry/transfer-instruction/v2/{transferInstructionId}/choice-contexts/reject' \ + --header 'Content-Type: application/json' \ + --data '{"meta":{},"excludeDebugFields":false}' +``` + + + + + + +```json 200 response +{ + "choiceContextData": {}, + "disclosedContracts": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2:transferinstructionidchoice-contextswithdraw.mdx b/docs-main/reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2:transferinstructionidchoice-contextswithdraw.mdx new file mode 100644 index 000000000..662d19830 --- /dev/null +++ b/docs-main/reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2:transferinstructionidchoice-contextswithdraw.mdx @@ -0,0 +1,271 @@ +--- +title: "Get the choice context to withdraw a transfer instruction" +api: "POST https://example.com/registry/transfer-instruction/v2/{transferInstructionId}/choice-contexts/withdraw" +playground: "interactive" +--- + +
+ + + +
+ +

Transfer Instruction V2 API

+ + +

Get the choice context to withdraw a transfer instruction

+ + + +
+ + OpenAPI + + Since 0.6.11 + +
+ + +
+ +Get the choice context to withdraw a transfer instruction. + +## Protocol Details + + + +
+ +
+ Operation ID + getTransferInstructionWithdrawContext +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + + +The contract ID of the transfer instruction to withdraw. + + + + + + + + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + +Metadata that will be passed to the choice, and should be incorporated into the choice context. Provided for extensibility. + + + + + + +If set to true, the response will not include fields prefixed with 'debug'. Useful to save bandwidth. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The additional data to use when exercising the choice. + + + + + +The contracts that are required to be disclosed to the participant node for exercising the choice. + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 409 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.6.11 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://example.com/registry/transfer-instruction/v2/{transferInstructionId}/choice-contexts/withdraw' \ + --header 'Content-Type: application/json' \ + --data '{"meta":{},"excludeDebugFields":false}' +``` + + + + + + +```json 200 response +{ + "choiceContextData": {}, + "disclosedContracts": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2transfer-factory.mdx b/docs-main/reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2transfer-factory.mdx new file mode 100644 index 000000000..850933236 --- /dev/null +++ b/docs-main/reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2transfer-factory.mdx @@ -0,0 +1,260 @@ +--- +title: "Get the factory and choice context for initiating a transfer workflow" +api: "POST https://example.com/registry/transfer-instruction/v2/transfer-factory" +playground: "interactive" +--- + +
+ + + +
+ +

Transfer Instruction V2 API

+ + +

Get the factory and choice context for initiating a transfer workflow

+ + + +
+ + OpenAPI + + Since 0.6.11 + +
+ + +
+ +Get the factory and choice context for initiating a transfer workflow. + +## Protocol Details + + + +
+ +
+ Operation ID + getTransferFactory +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + +The arguments that are intended to be passed to the choice provided by the factory. To avoid repeating the Daml type definitions, they are specified as JSON objects. However the concrete format is given by how the choice arguments are encoded using the Daml JSON API (with the `extraArgs.context` and `extraArgs.meta` fields set to the empty object). The choice arguments are provided so that the registry can also provide choice-argument specific contracts, e.g., the configuration for a specific instrument-id. + + + + + + +If set to true, the response will not include fields prefixed with 'debug'. Useful to save bandwidth. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The contract ID of the contract implementing the factory interface. + + + + + +The kind of transfer workflow that will be used: * `offer`: offer a transfer to the receiver and only transfer if they accept * `direct`: transfer directly to the receiver without asking them for approval. Only chosen if the receiver has pre-approved direct transfers. * `self`: a self-transfer where the sender and receiver are the same party. No approval is required, and the transfer is typically immediate. + + + + + +The context required to exercise a choice on a contract via an interface. Used to retrieve additional reference data that is passed in via disclosed contracts, which are in turn referred to via their contract ID in the `choiceContextData`. Asset implementations SHOULD avoid that this value depends on contract-ids passed in the choice arguments, so that clients can prefetch choice contexts when chaining multiple token standard actions together in a single Daml transaction. + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 409 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.6.11 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://example.com/registry/transfer-instruction/v2/transfer-factory' \ + --header 'Content-Type: application/json' \ + --data '{"choiceArguments":{},"excludeDebugFields":false}' +``` + + + + + + +```json 200 response +{ + "factoryId": "string", + "transferKind": "self", + "choiceContext": { + "choiceContextData": {}, + "disclosedContracts": [ + {} + ] + } +} +``` + + diff --git a/docs-main/reference/splice-wallet-api-external/get-v0wallettransfer-offers.mdx b/docs-main/reference/splice-wallet-api-external/get-v0wallettransfer-offers.mdx new file mode 100644 index 000000000..b770ace06 --- /dev/null +++ b/docs-main/reference/splice-wallet-api-external/get-v0wallettransfer-offers.mdx @@ -0,0 +1,188 @@ +--- +title: "List all open transfer offers where the user is either sender or receiver" +api: "GET https://example.com/api/validator/v0/wallet/transfer-offers" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

Wallet API (External)

+ + +

List all open transfer offers where the user is either sender or receiver

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +List all open transfer offers where the user is either sender or receiver. + +## Protocol Details + + + +
+ +
+ Operation ID + listTransferOffers +
+ +
+ Authentication + Bearer token +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 500 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request GET \ + --url 'https://example.com/api/validator/v0/wallet/transfer-offers' \ + --header 'Authorization: Bearer $TOKEN' +``` + + + + + + +```json 200 response +{ + "offers": [ + {} + ] +} +``` + + diff --git a/docs-main/reference/splice-wallet-api-external/post-v0walletbuy-traffic-requests.mdx b/docs-main/reference/splice-wallet-api-external/post-v0walletbuy-traffic-requests.mdx new file mode 100644 index 000000000..56224f332 --- /dev/null +++ b/docs-main/reference/splice-wallet-api-external/post-v0walletbuy-traffic-requests.mdx @@ -0,0 +1,295 @@ +--- +title: "Create a request to buy traffic" +api: "POST https://example.com/api/validator/v0/wallet/buy-traffic-requests" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

Wallet API (External)

+ + +

Create a request to buy traffic

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +Create a request to buy traffic. Note that this only creates the request to do so. Refer to the status endpoint to check if the request succeeded. + +## Protocol Details + + + +
+ +
+ Operation ID + createBuyTrafficRequest +
+ +
+ Authentication + Bearer token +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + +Traffic will be purchased for the validator hosting this party. If the party is hosted on multiple participants, the request will fail with 400 Bad Request. + + + + + + +The domain to purchase traffic for. + + + + + +OpenAPI type: `integer (int64)`. + + +traffic to purchase in bytes. + + + + + + +Tracking id to support exactly once submission. Once submitted, all succeessive calls with the same tracking id will get rejected with a 409 or 429 status code unless the command fails and the traffic did not get purchased. Clients should create a fresh tracking id when they try to send a new request to buy traffic. If that command submission fails with a retryable error or the application crashed and got restarted, successive command submissions must reuse the same tracking id to ensure they don't purchase traffic multiple times. + + + + + +OpenAPI type: `integer (int64)`. + + +Expiry time of the request to buy traffic as unix timestamp in microseconds. If the request does not succeed before this time, the wallet automation will reject and expire it. Note that this time is compared against the ledger effective time of the Daml transaction accepting or expiring an offer, and can skew from the wall clock time measured on the caller's machine. See https://docs.daml.com/concepts/time.html for how ledger effective time is bound to the record time of a transaction on a domain. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 409 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 429 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 500 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://example.com/api/validator/v0/wallet/buy-traffic-requests' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"receiving_validator_party_id":"string","domain_id":"string","traffic_amount":0,"tracking_id":"string","expires_at":0}' +``` + + + + + + +```json 200 response +{ + "request_contract_id": "string" +} +``` + + diff --git a/docs-main/reference/splice-wallet-api-external/post-v0walletbuy-traffic-requests:tracking_idstatus.mdx b/docs-main/reference/splice-wallet-api-external/post-v0walletbuy-traffic-requests:tracking_idstatus.mdx new file mode 100644 index 000000000..8ae340d72 --- /dev/null +++ b/docs-main/reference/splice-wallet-api-external/post-v0walletbuy-traffic-requests:tracking_idstatus.mdx @@ -0,0 +1,178 @@ +--- +title: "Check the status of a buy traffic request with a given tracking id" +api: "POST https://example.com/api/validator/v0/wallet/buy-traffic-requests/{tracking_id}/status" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

Wallet API (External)

+ + +

Check the status of a buy traffic request with a given tracking id

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +Check the status of a buy traffic request with a given tracking id. + +## Protocol Details + + + +
+ +
+ Operation ID + getBuyTrafficRequestStatus +
+ +
+ Authentication + Bearer token +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://example.com/api/validator/v0/wallet/buy-traffic-requests/{tracking_id}/status' \ + --header 'Authorization: Bearer $TOKEN' +``` + + + + + + +```json 200 response +{} +``` + + diff --git a/docs-main/reference/splice-wallet-api-external/post-v0wallettransfer-offers.mdx b/docs-main/reference/splice-wallet-api-external/post-v0wallettransfer-offers.mdx new file mode 100644 index 000000000..19fea1411 --- /dev/null +++ b/docs-main/reference/splice-wallet-api-external/post-v0wallettransfer-offers.mdx @@ -0,0 +1,317 @@ +--- +title: "Create an offer to directly transfer a given amount of Amulet to another party" +api: "POST https://example.com/api/validator/v0/wallet/transfer-offers" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

Wallet API (External)

+ + +

Create an offer to directly transfer a given amount of Amulet to another party

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +Create an offer to directly transfer a given amount of Amulet to another party. Direct transfers are a three-step process: 1. The sender creates a transfer offer 2. The receiver accepts the offer 3. The sender's wallet automation consumes the accepted offer and transfers the amount. Amulets are not locked for direct transfers. If the sender's wallet does not have enough Amulet to fulfill the offer at this point, the transfer will fail. + +## Protocol Details + + + +
+ +
+ Operation ID + createTransferOffer +
+ +
+ Authentication + Bearer token +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + + +The party id of the receiver. + + + + + + +The amount of Amulet to transfer. + + + + + + +An arbitrary, user chosen text. This should be a human readable string that describes the purpose of the transfer. It will be shown to the receiver when they decide whether to accept the offer. + + + + + +OpenAPI type: `integer (int64)`. + + +Expiry time of the transfer offer as unix timestamp in microseconds. After this time, the offer can no longer be accepted and automation in the wallet will eventually expire the transfer offer. Note that this time is compared against the ledger effective time of the Daml transaction accepting or expiring an offer, and can skew from the wall clock time measured on the caller's machine. See https://docs.daml.com/concepts/time.html for how ledger effective time is bound to the record time of a transaction on a domain. + + + + + + +Tracking id to support exactly once submission. Once submitted, all successive calls with the same tracking id will get rejected with a 409 or 429 status code unless the command fails and the offer did not get created. Clients should create a fresh tracking id when they try to create a new transfer offer. If that command submission fails with a retryable error or the application crashed and got restarted, successive command submissions must reuse the same tracking id to ensure they don't create the same offer multiple times. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 409 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 429 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 500 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://example.com/api/validator/v0/wallet/transfer-offers' \ + --header 'Authorization: Bearer $TOKEN' \ + --header 'Content-Type: application/json' \ + --data '{"receiver_party_id":"string","amount":"string","description":"string","expires_at":0,"tracking_id":"string"}' +``` + + + + + + +```json 200 response +{ + "offer_contract_id": "string" +} +``` + + diff --git a/docs-main/reference/splice-wallet-api-external/post-v0wallettransfer-offers:tracking_idstatus.mdx b/docs-main/reference/splice-wallet-api-external/post-v0wallettransfer-offers:tracking_idstatus.mdx new file mode 100644 index 000000000..851b4cf2f --- /dev/null +++ b/docs-main/reference/splice-wallet-api-external/post-v0wallettransfer-offers:tracking_idstatus.mdx @@ -0,0 +1,178 @@ +--- +title: "Check the status of a transfer offer with a given tracking id" +api: "POST https://example.com/api/validator/v0/wallet/transfer-offers/{tracking_id}/status" +authMethod: "bearer" +playground: "interactive" +--- + +
+ + + +
+ +

Wallet API (External)

+ + +

Check the status of a transfer offer with a given tracking id

+ + + +
+ + OpenAPI + + Since 0.5.10 + +
+ + +
+ +Check the status of a transfer offer with a given tracking id. + +## Protocol Details + + + +
+ +
+ Operation ID + getTransferOfferStatus +
+ +
+ Authentication + Bearer token +
+ +
+ Published + 0.7.4 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Path parameters + + + + + + + + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Introduced + 0.5.10 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://example.com/api/validator/v0/wallet/transfer-offers/{tracking_id}/status' \ + --header 'Authorization: Bearer $TOKEN' +``` + + + + + + +```json 200 response +{} +``` + + diff --git a/scripts/generate_splice_mintlify_openapi.py b/scripts/generate_splice_mintlify_openapi.py index c7b381ffb..a950e0095 100644 --- a/scripts/generate_splice_mintlify_openapi.py +++ b/scripts/generate_splice_mintlify_openapi.py @@ -3,6 +3,7 @@ from __future__ import annotations import argparse +import hashlib import json import os import re @@ -16,15 +17,31 @@ import yaml from validate_splice_mintlify_openapi_nav import validate_splice_nav +from x2mdx.openapi import ( + ManualOpenAPIRenderOptions, + operation_history_events, + render_manual_openapi_operation, +) +from x2mdx.render import write_page REPO_ROOT = Path(__file__).resolve().parents[1] USER_AGENT = "digital-asset-docs-mintlify-openapi/1.0" -DEFAULT_SOURCE_CONFIG = REPO_ROOT / "config" / "mintlify-openapi" / "splice-openapi" / "source-artifacts.json" -DEFAULT_CACHE_DIR = REPO_ROOT / ".internal" / "cache" / "mintlify-openapi" / "splice-openapi" +DEFAULT_SOURCE_CONFIG = ( + REPO_ROOT + / "config" + / "mintlify-openapi" + / "splice-openapi" + / "source-artifacts.json" +) +DEFAULT_CACHE_DIR = ( + REPO_ROOT / ".internal" / "cache" / "mintlify-openapi" / "splice-openapi" +) DEFAULT_DOCS_JSON = REPO_ROOT / "docs-main" / "docs.json" HTTP_METHODS = {"get", "put", "post", "delete", "options", "head", "patch", "trace"} SCAN_OPENAPI_PLACEHOLDER_SERVER = "https://example.com/api/scan" -SCAN_OPENAPI_PUBLIC_SERVER = "https://scan.sv-1.global.canton.network.sync.global/api/scan" +SCAN_OPENAPI_PUBLIC_SERVER = ( + "https://scan.sv-1.global.canton.network.sync.global/api/scan" +) SCAN_OPENAPI_SERVER_REPLACEMENT_SPECS = {"scan.yaml", "scan-stream-server.yaml"} UNPUBLISHED_SECURITY_SCHEME_LINK_RE = re.compile( r"as described in \[spliceAppBearerAuth\]\(\"?(?:\.\./)+common/src/main/openapi/" @@ -91,7 +108,9 @@ def selected_releases( f"https://api.github.com/repos/{release_repo}/releases?per_page=100&page={page}" ) if not isinstance(payload, list): - raise ValueError(f"Expected list payload from GitHub releases API for {release_repo}") + raise ValueError( + f"Expected list payload from GitHub releases API for {release_repo}" + ) if not payload: break for release in payload: @@ -141,7 +160,9 @@ def selected_releases( releases.sort(key=lambda entry: version_key(entry["version"])) if not releases: - raise ValueError(f"No published releases matched the configured Splice OpenAPI selection for {release_repo}") + raise ValueError( + f"No published releases matched the configured Splice OpenAPI selection for {release_repo}" + ) return releases @@ -160,10 +181,14 @@ def resolve_publish_release( if publish_version is None: return releases[-1] - selected = next((entry for entry in releases if entry["version"] == publish_version), None) + selected = next( + (entry for entry in releases if entry["version"] == publish_version), None + ) if selected is None: available = ", ".join(entry["version"] for entry in releases) - raise ValueError(f"Publish version '{publish_version}' not found in selected releases: {available}") + raise ValueError( + f"Publish version '{publish_version}' not found in selected releases: {available}" + ) return selected @@ -187,7 +212,10 @@ def ensure_archive( release["download_url"], headers={"User-Agent": USER_AGENT}, ) - with urllib.request.urlopen(request, timeout=180) as response, temp_path.open("wb") as handle: + with ( + urllib.request.urlopen(request, timeout=180) as response, + temp_path.open("wb") as handle, + ): shutil.copyfileobj(response, handle) temp_path.replace(output_path) return output_path @@ -216,7 +244,10 @@ def normalized_families(source_config: dict[str, Any]) -> list[dict[str, Any]]: nav_label = spec.get("nav_label") source_ref = spec.get("source") directory = spec.get("directory") - if not all(isinstance(item, str) and item for item in (filename, nav_label, source_ref, directory)): + if not all( + isinstance(item, str) and item + for item in (filename, nav_label, source_ref, directory) + ): raise ValueError( f"Specs for family '{group}' must define non-empty filename, nav_label, source, and directory" ) @@ -247,17 +278,49 @@ def extract_spec_bytes( continue raw_handle = handle.extractfile(member) if raw_handle is None: - raise FileNotFoundError(f"Failed to extract '{member.name}' from {archive}") + raise FileNotFoundError( + f"Failed to extract '{member.name}' from {archive}" + ) extracted[filename] = raw_handle.read() missing = sorted(spec_filenames - extracted.keys()) if missing: joined = ", ".join(missing) - raise FileNotFoundError(f"Archive {archive} did not contain expected OpenAPI specs: {joined}") + raise FileNotFoundError( + f"Archive {archive} did not contain expected OpenAPI specs: {joined}" + ) + return extracted + + +def extract_available_spec_bytes( + *, + archive: Path, + spec_filenames: set[str], +) -> dict[str, bytes]: + extracted: dict[str, bytes] = {} + with tarfile.open(archive, "r:gz") as handle: + for member in handle.getmembers(): + if not member.isfile(): + continue + filename = Path(member.name).name + if filename not in spec_filenames: + continue + if filename in extracted: + raise ValueError( + f"Duplicate OpenAPI spec '{filename}' found in {archive}" + ) + raw_handle = handle.extractfile(member) + if raw_handle is None: + raise FileNotFoundError( + f"Failed to extract '{member.name}' from {archive}" + ) + extracted[filename] = raw_handle.read() return extracted -def render_output_bytes(*, spec_filename: str, spec_bytes: bytes, output_path: Path) -> bytes: +def render_output_bytes( + *, spec_filename: str, spec_bytes: bytes, output_path: Path +) -> bytes: if output_path.suffix not in {".yaml", ".yml"}: return spec_bytes @@ -329,9 +392,13 @@ def operation_summary_rewrites(spec: dict[str, Any]) -> dict[tuple[str, str], st continue summary = operation.get("summary") if not isinstance(summary, str) or not summary.strip(): - rewrites[(path, method.lower())] = generated_operation_summary(path, method) + rewrites[(path, method.lower())] = generated_operation_summary( + path, method + ) elif path_only_operation_summary(path, method, summary): - rewrites[(path, method.lower())] = generated_operation_summary(path, method) + rewrites[(path, method.lower())] = generated_operation_summary( + path, method + ) return rewrites @@ -355,7 +422,9 @@ def add_missing_operation_summaries(text: str) -> str: if current_path is not None and current_method is not None: summary_match = re.fullmatch(r" summary:\s*.*", line) if summary_match and (current_path, current_method) in rewrites: - output_lines.append(f' summary: "{rewrites[(current_path, current_method)]}"') + output_lines.append( + f' summary: "{rewrites[(current_path, current_method)]}"' + ) current_method = None continue @@ -382,7 +451,9 @@ def add_missing_operation_summaries(text: str) -> str: current_method = None continue - method_match = re.fullmatch(r" (?Pget|put|post|delete|options|head|patch|trace):\s*", line) + method_match = re.fullmatch( + r" (?Pget|put|post|delete|options|head|patch|trace):\s*", line + ) if current_path is None or method_match is None: continue @@ -395,14 +466,90 @@ def add_missing_operation_summaries(text: str) -> str: rendered = "\n".join(output_lines).rstrip() + "\n" parsed = yaml.safe_load(rendered) if not isinstance(parsed, dict): - raise ValueError("Generated OpenAPI YAML stopped parsing after summary insertion") + raise ValueError( + "Generated OpenAPI YAML stopped parsing after summary insertion" + ) remaining = operation_summary_rewrites(parsed) if remaining: - details = ", ".join(f"{method.upper()} {path}" for path, method in sorted(remaining)) - raise ValueError(f"Failed to normalize generated summaries for OpenAPI operations: {details}") + details = ", ".join( + f"{method.upper()} {path}" for path, method in sorted(remaining) + ) + raise ValueError( + f"Failed to normalize generated summaries for OpenAPI operations: {details}" + ) return rendered +def materialize_release_specs( + *, + cache_dir: Path, + release: dict[str, str], + spec_filenames: set[str], + force_refresh: bool, +) -> dict[str, dict[str, Any]]: + archive = ensure_archive( + cache_dir=cache_dir, + release=release, + force_refresh=force_refresh, + ) + extracted = extract_available_spec_bytes( + archive=archive, + spec_filenames=spec_filenames, + ) + fixture_dir = cache_dir / "fixtures" / release["version"] + if fixture_dir.exists(): + shutil.rmtree(fixture_dir) + fixture_dir.mkdir(parents=True, exist_ok=True) + + parsed: dict[str, dict[str, Any]] = {} + for filename, raw_bytes in sorted(extracted.items()): + normalized = render_output_bytes( + spec_filename=filename, + spec_bytes=raw_bytes, + output_path=Path(filename), + ) + fixture_path = fixture_dir / filename + fixture_path.write_bytes(normalized) + payload = yaml.safe_load(normalized.decode("utf-8")) + if not isinstance(payload, dict): + raise ValueError( + f"Expected {filename} from Splice {release['version']} to parse as an object" + ) + parsed[filename] = payload + return parsed + + +def versioned_enabled_specs( + *, + cache_dir: Path, + releases: list[dict[str, str]], + spec_filenames: set[str], + force_refresh: bool, +) -> dict[str, dict[str, dict[str, Any]]]: + snapshots: dict[str, dict[str, dict[str, Any]]] = { + filename: {} for filename in spec_filenames + } + for release in releases: + release_specs = materialize_release_specs( + cache_dir=cache_dir, + release=release, + spec_filenames=spec_filenames, + force_refresh=force_refresh, + ) + for filename, payload in release_specs.items(): + snapshots[filename][release["version"]] = payload + + missing = sorted( + filename for filename, versions in snapshots.items() if not versions + ) + if missing: + raise ValueError( + "Enabled Splice OpenAPI specs were absent from every selected release: " + + ", ".join(missing) + ) + return snapshots + + def write_managed_specs( *, docs_root: Path, @@ -481,6 +628,119 @@ def filtered_families_for_navigation( return filtered +def validate_excluded_specs( + *, + source_config: dict[str, Any], + families: list[dict[str, Any]], + enabled_specs: set[str] | None, +) -> None: + if enabled_specs is None: + return + all_specs = {spec["filename"] for family in families for spec in family["specs"]} + disabled_specs = all_specs - enabled_specs + excluded = source_config.get("excluded_specs") + if not isinstance(excluded, list): + raise ValueError( + "source config must record every disabled family spec in excluded_specs" + ) + recorded: set[str] = set() + for index, item in enumerate(excluded): + if not isinstance(item, dict): + raise ValueError(f"excluded_specs[{index}] must be an object") + filename = item.get("filename") + reason = item.get("reason") + if not isinstance(filename, str) or not filename: + raise ValueError( + f"excluded_specs[{index}].filename must be a non-empty string" + ) + if not isinstance(reason, str) or not reason.strip(): + raise ValueError( + f"excluded_specs[{index}].reason must be a non-empty string" + ) + recorded.add(filename) + if recorded != disabled_specs: + raise ValueError( + "excluded_specs must exactly match disabled family specs: " + f"expected={sorted(disabled_specs)} recorded={sorted(recorded)}" + ) + + +def operation_items(spec: dict[str, Any]) -> list[tuple[str, str, dict[str, Any]]]: + paths = spec.get("paths") + if not isinstance(paths, dict): + raise ValueError("OpenAPI specification must define paths") + operations: list[tuple[str, str, dict[str, Any]]] = [] + for path, path_item in paths.items(): + if not isinstance(path, str) or not isinstance(path_item, dict): + continue + for method, operation in path_item.items(): + if method.lower() in HTTP_METHODS and isinstance(operation, dict): + operations.append((method.upper(), path, operation)) + return operations + + +def manual_operation_page_ref(*, directory: str, method: str, path: str) -> str: + mintlify_path = mintlify_operation_path(path) + slug = mintlify_path.removeprefix("/").replace("/", "").lower() + return f"{directory.rstrip('/')}/{method.lower()}-{slug}" + + +def manual_operation_page_refs(*, spec: dict[str, Any], directory: str) -> list[str]: + return [ + manual_operation_page_ref(directory=directory, method=method, path=path) + for method, path, _operation in operation_items(spec) + ] + + +def validate_manual_route_baseline( + source_config: dict[str, Any], + *, + families: list[dict[str, Any]], + snapshots: dict[str, dict[str, dict[str, Any]]], + publish_version: str, +) -> None: + baseline = source_config.get("legacy_manual_route_baseline") + if not isinstance(baseline, dict): + raise ValueError("legacy_manual_route_baseline must be an object") + expected_count = baseline.get("operation_count") + expected_sha256 = baseline.get("sha256") + if not isinstance(expected_count, int) or expected_count < 0: + raise ValueError( + "legacy_manual_route_baseline.operation_count must be a non-negative integer" + ) + if not isinstance(expected_sha256, str) or not re.fullmatch( + r"[0-9a-f]{64}", expected_sha256 + ): + raise ValueError( + "legacy_manual_route_baseline.sha256 must be a lowercase SHA-256 digest" + ) + + routes: list[str] = [] + for family in families: + for spec_config in family["specs"]: + published = snapshots[spec_config["filename"]].get(publish_version) + if published is None: + raise ValueError( + f"Enabled spec {spec_config['filename']} is absent from publish version {publish_version}" + ) + routes.extend( + f"/{page_ref}" + for page_ref in manual_operation_page_refs( + spec=published, + directory=spec_config["directory"], + ) + ) + actual_sha256 = hashlib.sha256( + ("\n".join(sorted(routes)) + "\n").encode("utf-8") + ).hexdigest() + if len(routes) != expected_count or actual_sha256 != expected_sha256: + raise ValueError( + "Manual Splice OpenAPI routes do not match the captured native-route baseline: " + f"expected {expected_count} routes/{expected_sha256}, got " + f"{len(routes)} routes/{actual_sha256}" + ) + + def openapi_operation_page_refs(spec: dict[str, Any]) -> list[str]: paths = spec.get("paths") if not isinstance(paths, dict): @@ -497,33 +757,164 @@ def openapi_operation_page_refs(spec: dict[str, Any]) -> list[str]: return refs -def build_splice_openapi_nav_entry(*, docs_root: Path, spec: dict[str, Any]) -> dict[str, Any]: +def manual_api_server(spec: dict[str, Any]) -> str: + servers = spec.get("servers") + if isinstance(servers, list): + for server in servers: + if isinstance(server, dict): + url = server.get("url") + if isinstance(url, str) and url.strip(): + return url.strip() + return "https://example.com" + + +def operation_authentication( + *, + spec: dict[str, Any], + operation: dict[str, Any], +) -> tuple[str | None, str | None]: + security = operation.get("security", spec.get("security")) + if security is None or security == []: + return None, None + if not isinstance(security, list): + raise ValueError("OpenAPI operation security must be a list") + if any(requirement == {} for requirement in security): + return None, None + + components = spec.get("components") + schemes = ( + components.get("securitySchemes") if isinstance(components, dict) else None + ) + if not isinstance(schemes, dict): + raise ValueError("Secured OpenAPI operation does not define securitySchemes") + for requirement in security: + if not isinstance(requirement, dict): + continue + for scheme_name in requirement: + scheme = schemes.get(scheme_name) + if not isinstance(scheme, dict): + continue + if ( + scheme.get("type") == "http" + and str(scheme.get("scheme")).lower() == "bearer" + ): + return "bearer", "Bearer token" + raise ValueError( + "Manual Splice OpenAPI rendering currently supports public or HTTP bearer operations" + ) + + +def prepare_manual_output_directories( + *, docs_root: Path, families: list[dict[str, Any]] +) -> None: + for family in families: + for spec_config in family["specs"]: + output_dir = docs_root / spec_config["directory"] + if output_dir.exists(): + shutil.rmtree(output_dir) + output_dir.mkdir(parents=True, exist_ok=True) + + +def write_manual_operation_pages( + *, + docs_json_path: Path, + families: list[dict[str, Any]], + snapshots: dict[str, dict[str, dict[str, Any]]], + release_versions: list[str], + publish_version: str, + source_name: str, +) -> set[Path]: + docs_root = docs_json_path.parent + prepare_manual_output_directories(docs_root=docs_root, families=families) + written: set[Path] = set() + for family in families: + for spec_config in family["specs"]: + filename = spec_config["filename"] + specs_by_version = snapshots[filename] + versions = [ + version for version in release_versions if version in specs_by_version + ] + if publish_version not in specs_by_version: + raise ValueError( + f"Enabled spec {filename} is absent from publish version {publish_version}" + ) + published = specs_by_version[publish_version] + server = manual_api_server(published) + raw_spec_href = f"/{spec_config['source']}" + for method, path, operation in operation_items(published): + page_ref = manual_operation_page_ref( + directory=spec_config["directory"], + method=method, + path=path, + ) + auth_method, authentication_label = operation_authentication( + spec=published, + operation=operation, + ) + history_events = operation_history_events( + specs_by_version=specs_by_version, + versions=versions, + publish_version=publish_version, + method=method, + path=path, + source_name=f"{source_name}: {filename}", + ) + page = render_manual_openapi_operation( + spec=published, + options=ManualOpenAPIRenderOptions( + method=method, + path=path, + output_path=f"{page_ref}.mdx", + server=server, + surface_label=spec_config["nav_label"], + auth_method=auth_method, + authentication_label=authentication_label, + raw_spec_href=raw_spec_href, + ), + history_events=history_events, + publish_version=publish_version, + ) + output_path = docs_root / f"{page_ref}.mdx" + write_page(page, output_path) + written.add(output_path.resolve()) + print(f"Generated manual Splice OpenAPI page: {output_path}") + return written + + +def build_splice_openapi_nav_entry( + *, docs_root: Path, spec: dict[str, Any] +) -> dict[str, Any]: openapi_path = docs_root / spec["source"] payload = yaml.safe_load(openapi_path.read_text(encoding="utf-8")) if not isinstance(payload, dict): raise ValueError(f"Expected OpenAPI spec to parse as an object: {openapi_path}") entry: dict[str, Any] = { "group": spec["nav_label"], - "openapi": { - "source": spec["source"], - "directory": spec["directory"], - }, - "pages": openapi_operation_page_refs(payload), + "pages": manual_operation_page_refs( + spec=payload, + directory=spec["directory"], + ), } return entry -def build_splice_group_pages(*, docs_root: Path, families: list[dict[str, Any]]) -> list[Any]: +def build_splice_group_pages( + *, docs_root: Path, families: list[dict[str, Any]] +) -> list[Any]: pages: list[Any] = [] for family in families: family_pages: list[dict[str, Any]] = [] for spec in family["specs"]: - family_pages.append(build_splice_openapi_nav_entry(docs_root=docs_root, spec=spec)) + family_pages.append( + build_splice_openapi_nav_entry(docs_root=docs_root, spec=spec) + ) pages.append({"group": family["group"], "pages": family_pages}) return pages -def navigation_pages(payload: dict[str, Any], dropdown_label: str, docs_json_path: Path) -> list[Any]: +def navigation_pages( + payload: dict[str, Any], dropdown_label: str, docs_json_path: Path +) -> list[Any]: navigation = payload.get("navigation") if not isinstance(navigation, dict): raise ValueError(f"docs.json missing navigation object: {docs_json_path}") @@ -531,7 +922,11 @@ def navigation_pages(payload: dict[str, Any], dropdown_label: str, docs_json_pat dropdowns = navigation.get("dropdowns") if isinstance(dropdowns, list): dropdown = next( - (item for item in dropdowns if isinstance(item, dict) and item.get("dropdown") == dropdown_label), + ( + item + for item in dropdowns + if isinstance(item, dict) and item.get("dropdown") == dropdown_label + ), None, ) if dropdown is None: @@ -544,7 +939,11 @@ def navigation_pages(payload: dict[str, Any], dropdown_label: str, docs_json_pat products = navigation.get("products") if isinstance(products, list): product = next( - (item for item in products if isinstance(item, dict) and item.get("product") == dropdown_label), + ( + item + for item in products + if isinstance(item, dict) and item.get("product") == dropdown_label + ), None, ) if product is None: @@ -554,10 +953,14 @@ def navigation_pages(payload: dict[str, Any], dropdown_label: str, docs_json_pat raise ValueError(f"Product does not expose a pages list: {dropdown_label}") return pages - raise ValueError(f"docs.json navigation must define dropdowns or products: {docs_json_path}") + raise ValueError( + f"docs.json navigation must define dropdowns or products: {docs_json_path}" + ) -def merge_splice_group_pages(*, existing_pages: list[Any], generated_pages: list[Any]) -> list[Any]: +def merge_splice_group_pages( + *, existing_pages: list[Any], generated_pages: list[Any] +) -> list[Any]: generated_group_labels = { item["group"] for item in generated_pages @@ -588,7 +991,9 @@ def update_docs_navigation( if insert_after_group is not None and not isinstance(insert_after_group, str): raise ValueError("insert_after_group must be a string when set") enabled_specs = enabled_nav_specs(source_config) - navigation_families = filtered_families_for_navigation(families=families, enabled_specs=enabled_specs) + navigation_families = filtered_families_for_navigation( + families=families, enabled_specs=enabled_specs + ) pages = navigation_pages(payload, dropdown_label, docs_json_path) @@ -612,7 +1017,9 @@ def update_docs_navigation( insert_at = index + 1 break - generated_pages = build_splice_group_pages(docs_root=docs_json_path.parent, families=navigation_families) + generated_pages = build_splice_group_pages( + docs_root=docs_json_path.parent, families=navigation_families + ) if existing_top_group_pages is not None: generated_pages = merge_splice_group_pages( existing_pages=existing_top_group_pages, @@ -630,8 +1037,9 @@ def update_docs_navigation( def parse_args() -> argparse.Namespace: parser = argparse.ArgumentParser( description=( - "Publish the latest configured Splice OpenAPI specs into docs-main/openapi so Mintlify can " - "render them natively, and wire any enabled spec groups into docs.json." + "Publish configured Splice OpenAPI specs into docs-main/openapi, generate " + "checked-in manual operation pages with release history, and wire enabled " + "spec groups into docs.json." ) ) parser.add_argument("--source-config", default=str(DEFAULT_SOURCE_CONFIG)) @@ -658,19 +1066,34 @@ def main() -> int: args = parse_args() source_config = load_json(Path(args.source_config).resolve()) include_versions = set(args.version) if args.version else None - releases = selected_releases(source_config=source_config, include_versions=include_versions) + releases = selected_releases( + source_config=source_config, include_versions=include_versions + ) publish_release = resolve_publish_release( source_config=source_config, releases=releases, requested_version=args.publish_version, ) + cache_dir = Path(args.cache_dir).resolve() archive = ensure_archive( - cache_dir=Path(args.cache_dir).resolve(), + cache_dir=cache_dir, release=publish_release, force_refresh=args.force_refresh, ) families = normalized_families(source_config) - spec_filenames = {spec["filename"] for family in families for spec in family["specs"]} + enabled_specs = enabled_nav_specs(source_config) + validate_excluded_specs( + source_config=source_config, + families=families, + enabled_specs=enabled_specs, + ) + navigation_families = filtered_families_for_navigation( + families=families, + enabled_specs=enabled_specs, + ) + spec_filenames = { + spec["filename"] for family in families for spec in family["specs"] + } spec_bytes = extract_spec_bytes(archive=archive, spec_filenames=spec_filenames) docs_json_path = Path(args.docs_json).resolve() @@ -681,6 +1104,31 @@ def main() -> int: families=families, spec_bytes=spec_bytes, ) + enabled_filenames = { + spec["filename"] for family in navigation_families for spec in family["specs"] + } + snapshots = versioned_enabled_specs( + cache_dir=cache_dir, + releases=releases, + spec_filenames=enabled_filenames, + force_refresh=args.force_refresh, + ) + validate_manual_route_baseline( + source_config, + families=navigation_families, + snapshots=snapshots, + publish_version=publish_release["version"], + ) + write_manual_operation_pages( + docs_json_path=docs_json_path, + families=navigation_families, + snapshots=snapshots, + release_versions=[release["version"] for release in releases], + publish_version=publish_release["version"], + source_name=str( + source_config.get("source") or "Splice OpenAPI release bundle snapshots" + ), + ) cleanup_legacy_outputs(docs_root=docs_root, source_config=source_config) update_docs_navigation( docs_json_path=docs_json_path, diff --git a/scripts/validate_splice_mintlify_openapi_nav.py b/scripts/validate_splice_mintlify_openapi_nav.py index 81fc10e86..f3091f638 100644 --- a/scripts/validate_splice_mintlify_openapi_nav.py +++ b/scripts/validate_splice_mintlify_openapi_nav.py @@ -12,7 +12,13 @@ REPO_ROOT = Path(__file__).resolve().parents[1] -DEFAULT_SOURCE_CONFIG = REPO_ROOT / "config" / "mintlify-openapi" / "splice-openapi" / "source-artifacts.json" +DEFAULT_SOURCE_CONFIG = ( + REPO_ROOT + / "config" + / "mintlify-openapi" + / "splice-openapi" + / "source-artifacts.json" +) DEFAULT_DOCS_JSON = REPO_ROOT / "docs-main" / "docs.json" HTTP_METHODS = {"get", "put", "post", "delete", "options", "head", "patch", "trace"} @@ -24,14 +30,20 @@ def load_json(path: Path) -> dict[str, Any]: return payload -def navigation_dropdown_pages(docs: dict[str, Any], dropdown_label: str, docs_json_path: Path) -> list[Any]: +def navigation_dropdown_pages( + docs: dict[str, Any], dropdown_label: str, docs_json_path: Path +) -> list[Any]: navigation = docs.get("navigation") if not isinstance(navigation, dict): raise ValueError(f"docs.json missing navigation object: {docs_json_path}") dropdowns = navigation.get("dropdowns") if isinstance(dropdowns, list): dropdown = next( - (item for item in dropdowns if isinstance(item, dict) and item.get("dropdown") == dropdown_label), + ( + item + for item in dropdowns + if isinstance(item, dict) and item.get("dropdown") == dropdown_label + ), None, ) if dropdown is None: @@ -44,7 +56,11 @@ def navigation_dropdown_pages(docs: dict[str, Any], dropdown_label: str, docs_js products = navigation.get("products") if isinstance(products, list): product = next( - (item for item in products if isinstance(item, dict) and item.get("product") == dropdown_label), + ( + item + for item in products + if isinstance(item, dict) and item.get("product") == dropdown_label + ), None, ) if product is None: @@ -54,7 +70,9 @@ def navigation_dropdown_pages(docs: dict[str, Any], dropdown_label: str, docs_js raise ValueError(f"Product does not expose a pages list: {dropdown_label}") return pages - raise ValueError(f"docs.json navigation must define dropdowns or products: {docs_json_path}") + raise ValueError( + f"docs.json navigation must define dropdowns or products: {docs_json_path}" + ) def find_group(items: list[Any], label: str) -> dict[str, Any] | None: @@ -100,8 +118,13 @@ def expected_openapi_specs(source_config: dict[str, Any]) -> list[dict[str, Any] nav_label = spec.get("nav_label") source = spec.get("source") directory = spec.get("directory") - if not all(isinstance(item, str) and item for item in (filename, nav_label, source, directory)): - raise ValueError("Each source config spec must define filename, nav_label, source, and directory") + if not all( + isinstance(item, str) and item + for item in (filename, nav_label, source, directory) + ): + raise ValueError( + "Each source config spec must define filename, nav_label, source, and directory" + ) if selected is None or filename in selected: entries.append( { @@ -116,7 +139,10 @@ def expected_openapi_specs(source_config: dict[str, Any]) -> list[dict[str, Any] def expected_openapi_entries(source_config: dict[str, Any]) -> list[tuple[str, str]]: - return [(spec["source"], spec["directory"]) for spec in expected_openapi_specs(source_config)] + return [ + (spec["source"], spec["directory"]) + for spec in expected_openapi_specs(source_config) + ] def collect_openapi_entries(node: Any, entries: set[tuple[str, str]]) -> None: @@ -177,6 +203,30 @@ def openapi_operation_page_refs(openapi_path: Path) -> list[str]: return refs +def mintlify_operation_path(path: str) -> str: + return re.sub(r"\{([^{}]+)\}", r":\1", path) + + +def manual_operation_page_ref(*, directory: str, method: str, path: str) -> str: + mintlify_path = mintlify_operation_path(path) + slug = mintlify_path.removeprefix("/").replace("/", "").lower() + return f"{directory.rstrip('/')}/{method.lower()}-{slug}" + + +def manual_operation_page_refs(openapi_path: Path, *, directory: str) -> list[str]: + return [ + manual_operation_page_ref( + directory=directory, + method=method, + path=path, + ) + for method, path in ( + page_ref.split(" ", 1) + for page_ref in openapi_operation_page_refs(openapi_path) + ) + ] + + def mintlify_operation_slug(summary: str) -> str: without_braced_params = re.sub(r"\{[^}]+}", "", summary) return re.sub(r"[^A-Za-z0-9]+", "", without_braced_params).lower() @@ -193,7 +243,9 @@ def validate_openapi_operation_slug_uniqueness( openapi_path = docs_root / source spec = yaml.safe_load(openapi_path.read_text(encoding="utf-8")) if not isinstance(spec, dict): - raise ValueError(f"Expected OpenAPI spec to parse as an object: {openapi_path}") + raise ValueError( + f"Expected OpenAPI spec to parse as an object: {openapi_path}" + ) paths = spec.get("paths") if not isinstance(paths, dict): continue @@ -203,7 +255,9 @@ def validate_openapi_operation_slug_uniqueness( if not isinstance(path, str) or not isinstance(path_item, dict): continue for method, operation in path_item.items(): - if method.lower() not in HTTP_METHODS or not isinstance(operation, dict): + if method.lower() not in HTTP_METHODS or not isinstance( + operation, dict + ): continue summary = operation.get("summary") if not isinstance(summary, str) or not summary.strip(): @@ -242,7 +296,7 @@ def validate_openapi_operation_summaries( ) -def validate_explicit_openapi_nav_pages( +def validate_explicit_manual_nav_pages( *, docs_json_path: Path, top_group: dict[str, Any], @@ -256,25 +310,55 @@ def validate_explicit_openapi_nav_pages( for spec in expected_specs: family_group = find_group(top_group_pages, spec["family_group"]) if family_group is None: - raise ValueError(f"Splice OpenAPI family is missing from nav: {spec['family_group']}") + raise ValueError( + f"Splice OpenAPI family is missing from nav: {spec['family_group']}" + ) family_pages = family_group.get("pages") if not isinstance(family_pages, list): - raise ValueError(f"Splice OpenAPI family must expose pages: {spec['family_group']}") + raise ValueError( + f"Splice OpenAPI family must expose pages: {spec['family_group']}" + ) spec_group = find_group(family_pages, spec["nav_label"]) if spec_group is None: - raise ValueError(f"Splice OpenAPI spec is missing from nav: {spec['nav_label']}") + raise ValueError( + f"Splice OpenAPI spec is missing from nav: {spec['nav_label']}" + ) actual_pages = spec_group.get("pages") if not isinstance(actual_pages, list): - raise ValueError(f"Splice OpenAPI spec must expose explicit pages: {spec['nav_label']}") - expected_pages = openapi_operation_page_refs(docs_root / spec["source"]) + raise ValueError( + f"Splice OpenAPI spec must expose explicit pages: {spec['nav_label']}" + ) + expected_pages = manual_operation_page_refs( + docs_root / spec["source"], + directory=spec["directory"], + ) if actual_pages != expected_pages: raise ValueError( - f"Splice OpenAPI nav pages differ for {spec['nav_label']}:\n" + f"Splice manual OpenAPI nav pages differ for {spec['nav_label']}:\n" f"expected={expected_pages}\nactual={actual_pages}" ) + for page_ref in expected_pages: + page_path = docs_root / f"{page_ref}.mdx" + if not page_path.is_file(): + raise ValueError(f"Splice manual OpenAPI page is missing: {page_path}") + text = page_path.read_text(encoding="utf-8") + headings = re.findall(r"(?m)^## .+$", text) + if not headings or headings[-1] != "## History": + raise ValueError( + f"Splice manual OpenAPI page must end with History: {page_path}" + ) + if "details and history" in text.lower(): + raise ValueError( + f"Splice manual OpenAPI page contains retired history wording: {page_path}" + ) -def validate_splice_nav(*, source_config_path: Path = DEFAULT_SOURCE_CONFIG, docs_json_path: Path = DEFAULT_DOCS_JSON) -> None: + +def validate_splice_nav( + *, + source_config_path: Path = DEFAULT_SOURCE_CONFIG, + docs_json_path: Path = DEFAULT_DOCS_JSON, +) -> None: source_config = load_json(source_config_path) docs = load_json(docs_json_path) dropdown_label = source_config.get("nav_dropdown") or "API Reference" @@ -287,19 +371,30 @@ def validate_splice_nav(*, source_config_path: Path = DEFAULT_SOURCE_CONFIG, doc pages = navigation_dropdown_pages(docs, dropdown_label, docs_json_path) top_group = find_group(pages, top_level_group_label) if top_group is None: - raise ValueError(f"Configured Splice OpenAPI nav group is missing: {top_level_group_label}") + raise ValueError( + f"Configured Splice OpenAPI nav group is missing: {top_level_group_label}" + ) actual_entries: set[tuple[str, str]] = set() collect_openapi_entries(top_group, actual_entries) + if actual_entries: + details = "\n".join( + f"- source={source} directory={directory}" + for source, directory in sorted(actual_entries) + ) + raise ValueError( + "Splice APIs still contain native Mintlify OpenAPI navigation entries:\n" + f"{details}" + ) expected_specs = expected_openapi_specs(source_config) expected_entries = [(spec["source"], spec["directory"]) for spec in expected_specs] - missing = [entry for entry in expected_entries if entry not in actual_entries] - if missing: - details = "\n".join(f"- source={source} directory={directory}" for source, directory in missing) - raise ValueError(f"Splice OpenAPI nav is missing configured entries:\n{details}") - validate_openapi_operation_summaries(docs_json_path=docs_json_path, entries=expected_entries) - validate_openapi_operation_slug_uniqueness(docs_json_path=docs_json_path, entries=expected_entries) - validate_explicit_openapi_nav_pages( + validate_openapi_operation_summaries( + docs_json_path=docs_json_path, entries=expected_entries + ) + validate_openapi_operation_slug_uniqueness( + docs_json_path=docs_json_path, entries=expected_entries + ) + validate_explicit_manual_nav_pages( docs_json_path=docs_json_path, top_group=top_group, expected_specs=expected_specs, @@ -307,7 +402,9 @@ def validate_splice_nav(*, source_config_path: Path = DEFAULT_SOURCE_CONFIG, doc def parse_args() -> argparse.Namespace: - parser = argparse.ArgumentParser(description="Validate configured Splice OpenAPI specs are wired into docs.json.") + parser = argparse.ArgumentParser( + description="Validate configured Splice OpenAPI specs are wired into docs.json." + ) parser.add_argument("--source-config", default=str(DEFAULT_SOURCE_CONFIG)) parser.add_argument("--docs-json", default=str(DEFAULT_DOCS_JSON)) return parser.parse_args() diff --git a/tests/test_splice_mintlify_openapi.py b/tests/test_splice_mintlify_openapi.py index fe96e0e03..e326c6ee8 100644 --- a/tests/test_splice_mintlify_openapi.py +++ b/tests/test_splice_mintlify_openapi.py @@ -1,6 +1,7 @@ from __future__ import annotations import importlib.util +import hashlib import json import sys from pathlib import Path @@ -32,7 +33,9 @@ def test_splice_openapi_release_requests_use_github_token(monkeypatch) -> None: module = load_script_module("generate_splice_mintlify_openapi.py") monkeypatch.setenv("GITHUB_TOKEN", "test-token") - assert module.request_headers("https://api.github.com/repos/example/project/releases") == { + assert module.request_headers( + "https://api.github.com/repos/example/project/releases" + ) == { "Accept": "application/vnd.github+json", "User-Agent": module.USER_AGENT, "Authorization": "Bearer test-token", @@ -64,14 +67,21 @@ def test_splice_openapi_rewrites_scan_server_examples(tmp_path: Path) -> None: output_path=tmp_path / "wallet-external.yaml", ).decode("utf-8") - assert "https://scan.sv-1.global.canton.network.sync.global/api/scan" in rendered_scan - assert "https://scan.sv-1.global.canton.network.sync.global/api/scan" in rendered_stream + assert ( + "https://scan.sv-1.global.canton.network.sync.global/api/scan" in rendered_scan + ) + assert ( + "https://scan.sv-1.global.canton.network.sync.global/api/scan" + in rendered_stream + ) assert "https://example.com/api/scan" not in rendered_scan assert "https://example.com/api/scan" not in rendered_stream assert "https://example.com/api/scan" in rendered_wallet -def test_splice_openapi_nav_emits_explicit_pages_for_every_spec(tmp_path: Path) -> None: +def test_splice_openapi_nav_emits_explicit_manual_pages_for_every_spec( + tmp_path: Path, +) -> None: module = load_script_module("generate_splice_mintlify_openapi.py") docs_json = tmp_path / "docs-main" / "docs.json" write_json( @@ -81,13 +91,17 @@ def test_splice_openapi_nav_emits_explicit_pages_for_every_spec(tmp_path: Path) "dropdowns": [ { "dropdown": "API Reference", - "pages": [{"group": "Wallet Kernel", "pages": ["reference/wallet"]}], + "pages": [ + {"group": "Wallet Kernel", "pages": ["reference/wallet"]} + ], } ] } }, ) - openapi_path = tmp_path / "docs-main" / "openapi" / "splice" / "token-standard" / "token.yaml" + openapi_path = ( + tmp_path / "docs-main" / "openapi" / "splice" / "token-standard" / "token.yaml" + ) openapi_path.parent.mkdir(parents=True, exist_ok=True) openapi_path.write_text( """openapi: 3.0.3 @@ -136,18 +150,62 @@ def test_splice_openapi_nav_emits_explicit_pages_for_every_spec(tmp_path: Path) scan_api = scan_group["pages"][0] assert scan_api == { "group": "Scan API", - "openapi": { - "source": "openapi/splice/token-standard/token.yaml", - "directory": "reference/splice-scan-api", - }, "pages": [ - "GET /registry/metadata", - "POST /registry/metadata/{token-id}", + "reference/splice-scan-api/get-registrymetadata", + "reference/splice-scan-api/post-registrymetadata:token-id", ], } -def test_splice_openapi_normalizes_path_summaries_for_mintlify_operation_slugs(tmp_path: Path) -> None: +def test_splice_manual_pages_rely_on_mintlify_navigation_breadcrumbs( + tmp_path: Path, +) -> None: + module = load_script_module("generate_splice_mintlify_openapi.py") + spec = { + "openapi": "3.0.3", + "servers": [{"url": "https://scan.example.com/api/scan"}], + "paths": { + "/v0/scans": { + "get": { + "summary": "List scans", + "operationId": "listScans", + "responses": {"200": {"description": "Success"}}, + } + } + }, + } + docs_json = tmp_path / "docs-main" / "docs.json" + + written = module.write_manual_operation_pages( + docs_json_path=docs_json, + families=[ + { + "group": "Scan APIs", + "specs": [ + { + "filename": "scan.yaml", + "nav_label": "Scan API", + "source": "openapi/splice/scan/scan.yaml", + "directory": "reference/splice-scan-api", + } + ], + } + ], + snapshots={"scan.yaml": {"0.7.4": spec}}, + release_versions=["0.7.4"], + publish_version="0.7.4", + source_name="test fixtures", + ) + + assert len(written) == 1 + rendered = next(iter(written)).read_text(encoding="utf-8") + assert "x2mdx-ref-breadcrumbs" not in rendered + assert 'Operation ID' in rendered + + +def test_splice_openapi_normalizes_path_summaries_for_mintlify_operation_slugs( + tmp_path: Path, +) -> None: module = load_script_module("generate_splice_mintlify_openapi.py") source = b"""openapi: 3.0.3 paths: @@ -178,9 +236,13 @@ def test_splice_openapi_normalizes_path_summaries_for_mintlify_operation_slugs(t assert ' summary: "GET /registry/missing/:token-id"' in rendered -def test_splice_openapi_validator_rejects_mintlify_operation_slug_collisions(tmp_path: Path) -> None: +def test_splice_openapi_validator_rejects_mintlify_operation_slug_collisions( + tmp_path: Path, +) -> None: module = load_script_module("validate_splice_mintlify_openapi_nav.py") - openapi_path = tmp_path / "docs-main" / "openapi" / "splice" / "token-standard" / "token.yaml" + openapi_path = ( + tmp_path / "docs-main" / "openapi" / "splice" / "token-standard" / "token.yaml" + ) openapi_path.parent.mkdir(parents=True, exist_ok=True) openapi_path.write_text( """openapi: 3.0.3 @@ -199,7 +261,9 @@ def test_splice_openapi_validator_rejects_mintlify_operation_slug_collisions(tmp try: module.validate_openapi_operation_slug_uniqueness( docs_json_path=tmp_path / "docs-main" / "docs.json", - entries=[("openapi/splice/token-standard/token.yaml", "reference/splice-token")], + entries=[ + ("openapi/splice/token-standard/token.yaml", "reference/splice-token") + ], ) except ValueError as error: assert "collide under Mintlify operation slugging" in str(error) @@ -228,7 +292,10 @@ def test_splice_openapi_nav_updates_product_navigation_and_preserves_existing_pa "group": "Splice APIs", "pages": [ "sdks-tools/api-reference/splice-daml-apis", - {"group": "Scan APIs", "pages": ["stale-scan-entry"]}, + { + "group": "Scan APIs", + "pages": ["stale-scan-entry"], + }, ], }, ], @@ -281,4 +348,71 @@ def test_splice_openapi_nav_updates_product_navigation_and_preserves_existing_pa assert splice_group["group"] == "Splice APIs" assert splice_group["pages"][0] == "sdks-tools/api-reference/splice-daml-apis" assert splice_group["pages"][1]["group"] == "Scan APIs" - assert splice_group["pages"][1]["pages"][0]["pages"] == ["GET /v0/scans"] + assert splice_group["pages"][1]["pages"][0]["pages"] == [ + "reference/splice-scan-api/get-v0scans" + ] + + +def test_splice_openapi_exclusions_must_cover_disabled_specs() -> None: + module = load_script_module("generate_splice_mintlify_openapi.py") + source_config = { + "enabled_nav_specs": ["public.yaml"], + "excluded_specs": [{"filename": "internal.yaml", "reason": "Internal API."}], + "families": [ + { + "group": "APIs", + "specs": [ + { + "filename": "public.yaml", + "nav_label": "Public", + "source": "openapi/public.yaml", + "directory": "reference/public", + }, + { + "filename": "internal.yaml", + "nav_label": "Internal", + "source": "openapi/internal.yaml", + "directory": "reference/internal", + }, + ], + } + ], + } + + module.validate_excluded_specs( + source_config=source_config, + families=module.normalized_families(source_config), + enabled_specs=module.enabled_nav_specs(source_config), + ) + + +def test_splice_openapi_route_baseline_covers_manual_reader_routes() -> None: + module = load_script_module("generate_splice_mintlify_openapi.py") + spec = { + "openapi": "3.0.3", + "paths": { + "/v0/items/{item_id}": {"get": {"operationId": "getItem", "responses": {}}} + }, + } + route = "/reference/splice-items/get-v0items:item_id\n" + module.validate_manual_route_baseline( + { + "legacy_manual_route_baseline": { + "operation_count": 1, + "sha256": hashlib.sha256(route.encode("utf-8")).hexdigest(), + } + }, + families=[ + { + "group": "APIs", + "specs": [ + { + "filename": "items.yaml", + "directory": "reference/splice-items", + } + ], + } + ], + snapshots={"items.yaml": {"0.7.4": spec}}, + publish_version="0.7.4", + ) From 9ffd0ed4baef29310c8c3feb351465b5c66a4975 Mon Sep 17 00:00:00 2001 From: danielporterda Date: Wed, 26 Aug 2026 15:06:13 -0400 Subject: [PATCH 09/14] Match generated reference colors to the design Signed-off-by: danielporterda --- docs-main/styles.css | 136 ++++++++++++++++++++------- tests/test_reference_page_history.py | 30 ++++++ 2 files changed, 130 insertions(+), 36 deletions(-) diff --git a/docs-main/styles.css b/docs-main/styles.css index a07599469..19a9a995b 100644 --- a/docs-main/styles.css +++ b/docs-main/styles.css @@ -24,6 +24,25 @@ --canton-product-selector-line-active: #734BE2; --canton-product-selector-divider: rgba(75, 85, 99, 0.16); + /* Generated-reference visual system, sourced from the approved Figma frame. */ + --x2mdx-ref-canvas: #F6F8FB; + --x2mdx-ref-sidebar: #FBFCFD; + --x2mdx-ref-surface: #FFFFFF; + --x2mdx-ref-text-strong: #11131A; + --x2mdx-ref-text: #252937; + --x2mdx-ref-text-muted: #6B7280; + --x2mdx-ref-border: rgba(17, 19, 26, 0.08); + --x2mdx-ref-accent-soft: #F3EEFF; + --x2mdx-ref-neutral-soft: #F4F5F7; + --x2mdx-ref-info: #1D4ED8; + --x2mdx-ref-info-soft: #EDF5FF; + --x2mdx-ref-success: #15803D; + --x2mdx-ref-success-soft: #ECFBF0; + --x2mdx-ref-danger: #B91C1C; + --x2mdx-ref-danger-soft: #FFF1F1; + --x2mdx-ref-warning: #B16305; + --x2mdx-ref-warning-soft: #FFF8E4; + /* Typography */ --canton-font-family: 'Inter', system-ui, -apple-system, sans-serif; } @@ -40,6 +59,24 @@ --canton-product-selector-line: rgba(169, 133, 255, 0.70); --canton-product-selector-line-active: #A985FF; --canton-product-selector-divider: rgba(255, 255, 255, 0.10); + + --x2mdx-ref-canvas: #111115; + --x2mdx-ref-sidebar: #111115; + --x2mdx-ref-surface: rgba(17, 24, 39, 0.78); + --x2mdx-ref-text-strong: #F3F4F6; + --x2mdx-ref-text: #E5E7EB; + --x2mdx-ref-text-muted: #D1D5DB; + --x2mdx-ref-border: rgba(255, 255, 255, 0.08); + --x2mdx-ref-accent-soft: rgba(169, 133, 255, 0.16); + --x2mdx-ref-neutral-soft: rgba(156, 163, 175, 0.12); + --x2mdx-ref-info: #93C5FD; + --x2mdx-ref-info-soft: rgba(29, 78, 216, 0.22); + --x2mdx-ref-success: #86EFAC; + --x2mdx-ref-success-soft: rgba(21, 128, 61, 0.22); + --x2mdx-ref-danger: #FCA5A5; + --x2mdx-ref-danger-soft: rgba(185, 28, 28, 0.22); + --x2mdx-ref-warning: #FCD34D; + --x2mdx-ref-warning-soft: rgba(177, 99, 5, 0.22); } /* ============================================ @@ -448,6 +485,29 @@ div.todo { x2mdx Reference Renderer ============================================ */ +/* Mintlify supplies the chrome and interactive API playground. The shared + reference renderer owns the page canvas and content surfaces. */ +body:has(.x2mdx-ref-page) #background-color { + background-color: var(--x2mdx-ref-canvas) !important; +} + +body:has(.x2mdx-ref-page) #navbar { + border-bottom: 1px solid var(--x2mdx-ref-border); + background-color: var(--x2mdx-ref-surface); +} + +body:has(.x2mdx-ref-page) #sidebar { + background-color: var(--x2mdx-ref-sidebar); +} + +body:has(.x2mdx-ref-page) #content-container { + color: var(--x2mdx-ref-text-muted); +} + +body:has(.x2mdx-ref-page) #content-container :is(h1, h2, h3, h4, h5, h6) { + color: var(--x2mdx-ref-text-strong); +} + .x2mdx-ref-back { margin: 0 0 0.75rem; font-size: 0.9rem; @@ -474,7 +534,7 @@ div.todo { align-items: center; gap: 0.5rem; margin: 0 0 0.75rem; - color: rgb(107, 114, 128); + color: var(--x2mdx-ref-text-muted); font-size: 0.9rem; line-height: 1.35; } @@ -498,7 +558,7 @@ div.todo { font-weight: 600; letter-spacing: 0.08em; text-transform: uppercase; - color: rgb(107, 114, 128); + color: var(--x2mdx-ref-text-muted); } :root.dark .x2mdx-ref-eyebrow, @@ -508,6 +568,7 @@ div.todo { .x2mdx-ref-title { margin: 0; + color: var(--x2mdx-ref-text-strong); font-size: clamp(2rem, 3vw, 2.7rem); line-height: 1.05; } @@ -540,7 +601,7 @@ div.todo { .x2mdx-ref-summary { margin: 0; max-width: 58rem; - color: rgb(75, 85, 99); + color: var(--x2mdx-ref-text-muted); font-size: 1.02rem; } @@ -657,9 +718,9 @@ body:has(.x2mdx-ref-page--operation):not(:has(.x2mdx-ref-page--manual-api)) [ari margin: 0 0 3.25rem; padding: 0.55rem 0.75rem; overflow: hidden; - border: 1px solid rgba(13, 12, 17, 0.1); + border: 1px solid var(--x2mdx-ref-border); border-radius: 1rem; - background: rgba(255, 255, 255, 0.64); + background: var(--x2mdx-ref-surface); box-shadow: 0 1px 2px rgba(13, 12, 17, 0.04); } @@ -768,7 +829,7 @@ body:has(.x2mdx-ref-page--operation):not(:has(.x2mdx-ref-page--manual-api)) [ari padding: 0.14rem 0.52rem; border: 1px solid rgba(var(--canton-highlight-rgb), 0.16); border-radius: 999px; - background: rgba(var(--canton-highlight-rgb), 0.06); + background: var(--x2mdx-ref-accent-soft); color: var(--canton-highlight); font-size: 0.76rem; font-weight: 600; @@ -776,9 +837,9 @@ body:has(.x2mdx-ref-page--operation):not(:has(.x2mdx-ref-page--manual-api)) [ari } .x2mdx-ref-badge--neutral { - background: rgba(107, 114, 128, 0.08); - border-color: rgba(107, 114, 128, 0.14); - color: rgb(75, 85, 99); + background: var(--x2mdx-ref-neutral-soft); + border-color: rgba(107, 114, 128, 0.18); + color: var(--x2mdx-ref-text-muted); } :root.dark .x2mdx-ref-badge--neutral, @@ -789,21 +850,21 @@ body:has(.x2mdx-ref-page--operation):not(:has(.x2mdx-ref-page--manual-api)) [ari } .x2mdx-ref-badge--added { - background: rgba(22, 163, 74, 0.08); - border-color: rgba(22, 163, 74, 0.18); - color: rgb(21, 128, 61); + background: var(--x2mdx-ref-success-soft); + border-color: rgba(21, 128, 61, 0.18); + color: var(--x2mdx-ref-success); } .x2mdx-ref-badge--changed { - background: rgba(37, 99, 235, 0.08); - border-color: rgba(37, 99, 235, 0.18); - color: rgb(29, 78, 216); + background: var(--x2mdx-ref-info-soft); + border-color: rgba(29, 78, 216, 0.18); + color: var(--x2mdx-ref-info); } .x2mdx-ref-badge--removed { - background: rgba(220, 38, 38, 0.08); - border-color: rgba(220, 38, 38, 0.18); - color: rgb(185, 28, 28); + background: var(--x2mdx-ref-danger-soft); + border-color: rgba(185, 28, 28, 0.18); + color: var(--x2mdx-ref-danger); } .x2mdx-ref-meta-grid { @@ -816,9 +877,9 @@ body:has(.x2mdx-ref-page--operation):not(:has(.x2mdx-ref-page--manual-api)) [ari .x2mdx-ref-meta-item { min-width: 0; padding: 0.85rem 0.95rem; - border: 1px solid rgba(15, 23, 42, 0.08); + border: 1px solid var(--x2mdx-ref-border); border-radius: 0.7rem; - background: rgba(255, 255, 255, 0.74); + background: var(--x2mdx-ref-surface); } :root.dark .x2mdx-ref-meta-item, @@ -833,7 +894,7 @@ body:has(.x2mdx-ref-page--operation):not(:has(.x2mdx-ref-page--manual-api)) [ari font-size: 0.77rem; font-weight: 600; text-transform: uppercase; - color: rgb(107, 114, 128); + color: var(--x2mdx-ref-text-muted); } .x2mdx-ref-meta-item dd, @@ -842,6 +903,7 @@ body:has(.x2mdx-ref-page--operation):not(:has(.x2mdx-ref-page--manual-api)) [ari overflow-wrap: anywhere; font-size: 0.96rem; font-weight: 500; + color: var(--x2mdx-ref-text); } .x2mdx-ref-card-grid { @@ -856,9 +918,9 @@ body:has(.x2mdx-ref-page--operation):not(:has(.x2mdx-ref-page--manual-api)) [ari min-height: 100%; min-width: 0; padding: 1rem; - border: 1px solid rgba(15, 23, 42, 0.08); + border: 1px solid var(--x2mdx-ref-border); border-radius: 0.7rem; - background: rgba(255, 255, 255, 0.82); + background: var(--x2mdx-ref-surface); color: inherit; text-decoration: none; transition: border-color 160ms ease, transform 160ms ease, background-color 160ms ease; @@ -889,7 +951,7 @@ body:has(.x2mdx-ref-page--operation):not(:has(.x2mdx-ref-page--manual-api)) [ari font-size: 1rem; font-weight: 700; line-height: 1.3; - color: inherit; + color: var(--x2mdx-ref-text-strong); text-decoration: none; overflow-wrap: anywhere; } @@ -905,7 +967,7 @@ body:has(.x2mdx-ref-page--operation):not(:has(.x2mdx-ref-page--manual-api)) [ari .x2mdx-ref-card-summary { order: 1; margin: 0; - color: rgb(75, 85, 99); + color: var(--x2mdx-ref-text-muted); overflow-wrap: anywhere; } @@ -923,31 +985,32 @@ body:has(.x2mdx-ref-page--operation):not(:has(.x2mdx-ref-page--manual-api)) [ari display: grid; gap: 0.5rem; padding: 0.9rem 1rem; - border: 1px solid rgba(15, 23, 42, 0.08); - border-left: 3px solid rgba(107, 114, 128, 0.55); + border: 0; + border-left: 3px solid var(--x2mdx-ref-text-muted); border-radius: 0.7rem; - background: rgba(255, 255, 255, 0.82); + background: var(--x2mdx-ref-neutral-soft); } :root.dark .x2mdx-ref-history-event, [data-theme="dark"] .x2mdx-ref-history-event { - border-color: rgba(255, 255, 255, 0.08); - border-left-color: rgba(156, 163, 175, 0.65); - background: rgba(17, 24, 39, 0.78); + color: var(--x2mdx-ref-text); } .x2mdx-ref-history-event--introduced { - border-left-color: rgba(22, 163, 74, 0.75); + border-left-color: var(--x2mdx-ref-success); + background: var(--x2mdx-ref-success-soft); } .x2mdx-ref-history-event--changed, .x2mdx-ref-history-event--replacement { - border-left-color: rgba(37, 99, 235, 0.75); + border-left-color: var(--x2mdx-ref-info); + background: var(--x2mdx-ref-info-soft); } .x2mdx-ref-history-event--deprecated, .x2mdx-ref-history-event--remove-as-of { - border-left-color: rgba(220, 38, 38, 0.72); + border-left-color: var(--x2mdx-ref-danger); + background: var(--x2mdx-ref-danger-soft); } .x2mdx-ref-history-event-head { @@ -958,6 +1021,7 @@ body:has(.x2mdx-ref-page--operation):not(:has(.x2mdx-ref-page--manual-api)) [ari } .x2mdx-ref-history-event-label { + color: var(--x2mdx-ref-text-strong); font-size: 0.92rem; font-weight: 700; line-height: 1.3; @@ -966,7 +1030,7 @@ body:has(.x2mdx-ref-page--operation):not(:has(.x2mdx-ref-page--manual-api)) [ari .x2mdx-ref-history-event-version { flex: 0 0 auto; background: transparent; - color: rgb(75, 85, 99); + color: var(--x2mdx-ref-text-muted); font-size: 0.82rem; } @@ -977,7 +1041,7 @@ body:has(.x2mdx-ref-page--operation):not(:has(.x2mdx-ref-page--manual-api)) [ari .x2mdx-ref-history-event-detail { margin: 0; - color: rgb(75, 85, 99); + color: var(--x2mdx-ref-text-muted); font-size: 0.92rem; line-height: 1.5; } diff --git a/tests/test_reference_page_history.py b/tests/test_reference_page_history.py index cb27bd4fa..987476263 100644 --- a/tests/test_reference_page_history.py +++ b/tests/test_reference_page_history.py @@ -138,3 +138,33 @@ def test_history_styles_cover_desktop_dark_mode_and_narrow_layouts() -> None: assert ".x2mdx-ref-history-event" in styles assert '[data-theme="dark"] .x2mdx-ref-history-event' in styles assert "@media (max-width: 640px)" in styles + + +def test_shared_reference_colors_match_the_approved_design_tokens() -> None: + styles = (Path(__file__).parents[1] / "docs-main" / "styles.css").read_text( + encoding="utf-8" + ) + + expected_tokens = { + "--x2mdx-ref-canvas: #F6F8FB;", + "--x2mdx-ref-sidebar: #FBFCFD;", + "--x2mdx-ref-surface: #FFFFFF;", + "--x2mdx-ref-text-strong: #11131A;", + "--x2mdx-ref-text: #252937;", + "--x2mdx-ref-text-muted: #6B7280;", + "--x2mdx-ref-accent-soft: #F3EEFF;", + "--x2mdx-ref-info: #1D4ED8;", + "--x2mdx-ref-info-soft: #EDF5FF;", + "--x2mdx-ref-success: #15803D;", + "--x2mdx-ref-success-soft: #ECFBF0;", + "--x2mdx-ref-danger: #B91C1C;", + "--x2mdx-ref-danger-soft: #FFF1F1;", + "--x2mdx-ref-warning-soft: #FFF8E4;", + } + + assert expected_tokens <= {line.strip() for line in styles.splitlines()} + assert "body:has(.x2mdx-ref-page) #background-color" in styles + assert "body:has(.x2mdx-ref-page) #navbar" in styles + assert "background: var(--x2mdx-ref-success-soft);" in styles + assert "background: var(--x2mdx-ref-info-soft);" in styles + assert "background: var(--x2mdx-ref-danger-soft);" in styles From c9957c21227bdcbb50d704ca40c8769de25f1839 Mon Sep 17 00:00:00 2001 From: danielporterda Date: Wed, 26 Aug 2026 16:39:00 -0400 Subject: [PATCH 10/14] Make Splice history follow latest release Signed-off-by: danielporterda --- .../splice-openapi/source-artifacts.json | 1 - config/x2mdx/reference-targets.json | 2 +- .../splice_openapi.py | 82 ++----------------- scripts/update_generated_reference_prs.py | 30 ++++--- tests/test_splice_mintlify_openapi.py | 30 +++++++ tests/test_update_generated_reference_prs.py | 15 ++++ ...test_update_generated_reference_sources.py | 57 ++----------- 7 files changed, 76 insertions(+), 141 deletions(-) diff --git a/config/mintlify-openapi/splice-openapi/source-artifacts.json b/config/mintlify-openapi/splice-openapi/source-artifacts.json index 7c4036990..216e44010 100644 --- a/config/mintlify-openapi/splice-openapi/source-artifacts.json +++ b/config/mintlify-openapi/splice-openapi/source-artifacts.json @@ -3,7 +3,6 @@ "release_repo": "digital-asset/decentralized-canton-sync", "tag_regex": "^v(?P0\\.[0-9]+\\.[0-9]+)$", "min_version": "0.5.10", - "publish_version": "0.7.4", "asset_template": "{version}_openapi.tar.gz", "nav_dropdown": "API Reference", "top_level_group_label": "Splice APIs", diff --git a/config/x2mdx/reference-targets.json b/config/x2mdx/reference-targets.json index 927a5e403..9f64c7eb4 100644 --- a/config/x2mdx/reference-targets.json +++ b/config/x2mdx/reference-targets.json @@ -184,7 +184,7 @@ "item_boundary": "operation", "identity_policy": "openapi.operation_id", "history_mode": "snapshots", - "version_policy": "configured_publish_version", + "version_policy": "latest_selected_release", "source_config": "config/mintlify-openapi/splice-openapi/source-artifacts.json", "reader_output_roots": [ "docs-main/reference/splice-ans-api", diff --git a/scripts/generated_reference_sources/splice_openapi.py b/scripts/generated_reference_sources/splice_openapi.py index 17899a573..e84e5b1cc 100644 --- a/scripts/generated_reference_sources/splice_openapi.py +++ b/scripts/generated_reference_sources/splice_openapi.py @@ -1,93 +1,25 @@ from __future__ import annotations -from dataclasses import dataclass from pathlib import Path -from typing import Required, TypedDict -import generate_splice_mintlify_openapi as splice_openapi_generator - -from generated_reference_sources.common import SourceUpdate, load_json, write_json +from generated_reference_sources.common import SourceUpdate, load_json REPO_ROOT = Path(__file__).resolve().parents[2] SOURCE_KEY = "splice-openapi" -SOURCE_LABEL = "Splice OpenAPI" DEFAULT_SOURCE_CONFIG = ( REPO_ROOT / "config" / "mintlify-openapi" / "splice-openapi" / "source-artifacts.json" ) -class SpliceOpenApiSpecConfig(TypedDict, total=False): - filename: str - nav_label: str - source: str - directory: str - - -class SpliceOpenApiFamilyConfig(TypedDict, total=False): - group: str - specs: list[SpliceOpenApiSpecConfig] - - -class SpliceOpenApiSourceConfigPayload(TypedDict, total=False): - source: str - release_repo: str - tag_regex: str - min_version: str - publish_version: Required[str] - asset_template: str - nav_dropdown: str - top_level_group_label: str - insert_after_group: str - managed_openapi_root: str - enabled_nav_specs: list[str] - legacy_cleanup_paths: list[str] - families: list[SpliceOpenApiFamilyConfig] - - -@dataclass(frozen=True) -class SpliceOpenApiSourceConfig: - raw: SpliceOpenApiSourceConfigPayload - publish_version: str - - -def parse_source_config(path: Path) -> SpliceOpenApiSourceConfig: - raw_json = load_json(path) - publish_version = raw_json.get("publish_version") - if not isinstance(publish_version, str) or not publish_version: - raise ValueError(f"{path} must define non-empty publish_version") - raw: SpliceOpenApiSourceConfigPayload = {} - raw.update(raw_json) - return SpliceOpenApiSourceConfig(raw=raw, publish_version=publish_version) - - -def latest_version(source_config: SpliceOpenApiSourceConfig) -> str: - releases = splice_openapi_generator.selected_releases( - source_config=source_config.raw, - include_versions=None, - ) - return releases[-1]["version"] - - def update_source( *, source_config_path: Path, dry_run: bool, ) -> SourceUpdate | None: - source_config = parse_source_config(source_config_path) - current_version = latest_version(source_config) - if source_config.publish_version == current_version: - return None - - update = SourceUpdate( - source=SOURCE_LABEL, - path=source_config_path, - field="publish_version", - previous=source_config.publish_version, - current=current_version, - ) - if not dry_run: - updated_config = dict(source_config.raw) - updated_config["publish_version"] = current_version - write_json(source_config_path, updated_config) - return update + # Splice is intentionally unpinned: the generator resolves every eligible stable + # release and publishes the latest selection on each run. Keep this compatibility + # entry point as a no-op for callers that still include every source updater. + _ = dry_run + load_json(source_config_path) + return None diff --git a/scripts/update_generated_reference_prs.py b/scripts/update_generated_reference_prs.py index 624f224c2..9544acff2 100644 --- a/scripts/update_generated_reference_prs.py +++ b/scripts/update_generated_reference_prs.py @@ -90,30 +90,36 @@ class UpdateTarget: title="Update Splice OpenAPI reference", branch="generated-references/splice-openapi/update", description=( - "Updates the Splice OpenAPI source pin to the latest stable " - "decentralized-canton-sync release and regenerates the checked-in " - "Splice OpenAPI specifications and navigation." + "Discovers every eligible stable decentralized-canton-sync release, " + "publishes the latest Splice OpenAPI bundle, and regenerates the checked-in " + "specifications, operation pages, history, and navigation." ), generate_commands=( ("nix-shell", "--run", "npm run generate:splice-mintlify-openapi"), ), paths=( - "config/mintlify-openapi/splice-openapi/source-artifacts.json", "docs-main/docs.json", "docs-main/openapi/splice", + "docs-main/reference/splice-allocation-api", + "docs-main/reference/splice-allocation-instruction-api", + "docs-main/reference/splice-allocation-instruction-v2-api", + "docs-main/reference/splice-allocation-v2-api", + "docs-main/reference/splice-ans-api", + "docs-main/reference/splice-scan-api", + "docs-main/reference/splice-scan-proxy-api", + "docs-main/reference/splice-scan-streaming-api", + "docs-main/reference/splice-token-metadata-service", + "docs-main/reference/splice-transfer-instruction-api", + "docs-main/reference/splice-transfer-instruction-v2-api", + "docs-main/reference/splice-wallet-api-external", ), - summary_kind="source-config", - summary_path="config/mintlify-openapi/splice-openapi/source-artifacts.json", - summary_label="Splice OpenAPI", + summary_kind="static", + summary_path=None, + summary_label=None, validation=( - "npm run update:generated-reference-sources -- --source splice-openapi", "npm run generate:splice-mintlify-openapi", "git diff --check", ), - source_update_commands=( - ("nix-shell", "--run", "npm run update:generated-reference-sources -- --source splice-openapi"), - ), - source_update_paths=("config/mintlify-openapi/splice-openapi/source-artifacts.json",), ), UpdateTarget( key="splice-token-standard-v2", diff --git a/tests/test_splice_mintlify_openapi.py b/tests/test_splice_mintlify_openapi.py index e326c6ee8..3316684f4 100644 --- a/tests/test_splice_mintlify_openapi.py +++ b/tests/test_splice_mintlify_openapi.py @@ -43,6 +43,36 @@ def test_splice_openapi_release_requests_use_github_token(monkeypatch) -> None: } +def test_splice_openapi_publish_defaults_to_latest_selected_release() -> None: + module = load_script_module("generate_splice_mintlify_openapi.py") + releases = [ + {"version": "0.5.10"}, + {"version": "0.6.14"}, + {"version": "0.7.4"}, + ] + + assert module.resolve_publish_release( + source_config={}, + releases=releases, + requested_version=None, + ) == {"version": "0.7.4"} + + +def test_splice_openapi_publish_allows_explicit_historical_override() -> None: + module = load_script_module("generate_splice_mintlify_openapi.py") + releases = [ + {"version": "0.5.10"}, + {"version": "0.6.14"}, + {"version": "0.7.4"}, + ] + + assert module.resolve_publish_release( + source_config={}, + releases=releases, + requested_version="0.6.14", + ) == {"version": "0.6.14"} + + def test_splice_openapi_rewrites_scan_server_examples(tmp_path: Path) -> None: module = load_script_module("generate_splice_mintlify_openapi.py") spec_bytes = b"""openapi: 3.0.0 diff --git a/tests/test_update_generated_reference_prs.py b/tests/test_update_generated_reference_prs.py index 00fd96479..32b4e9c64 100644 --- a/tests/test_update_generated_reference_prs.py +++ b/tests/test_update_generated_reference_prs.py @@ -94,6 +94,21 @@ def test_java_ledger_bindings_target_does_not_auto_merge() -> None: assert target.auto_merge is False +def test_splice_openapi_target_regenerates_without_a_source_pin() -> None: + module = load_script_module() + target = next(target for target in module.UPDATE_TARGETS if target.key == "splice-openapi") + + assert target.source_update_commands == () + assert target.source_update_paths == () + assert target.summary_kind == "static" + assert target.summary_path is None + assert target.generate_commands == ( + ("nix-shell", "--run", "npm run generate:splice-mintlify-openapi"), + ) + assert "config/mintlify-openapi/splice-openapi/source-artifacts.json" not in target.paths + assert "docs-main/reference/splice-scan-api" in target.paths + + def test_generated_docs_workflow_uses_merger_app_for_pr_mutations() -> None: workflow = (REPO_ROOT / ".github" / "workflows" / "update-version-dashboard.yml").read_text( encoding="utf-8" diff --git a/tests/test_update_generated_reference_sources.py b/tests/test_update_generated_reference_sources.py index b461579a9..b62baaffd 100644 --- a/tests/test_update_generated_reference_sources.py +++ b/tests/test_update_generated_reference_sources.py @@ -24,7 +24,7 @@ def load_script_module() -> ModuleType: return module -def write_source_config(path: Path, *, publish_version: str) -> None: +def write_source_config(path: Path) -> None: path.write_text( json.dumps( { @@ -32,7 +32,6 @@ def write_source_config(path: Path, *, publish_version: str) -> None: "release_repo": "digital-asset/decentralized-canton-sync", "tag_regex": "^v(?P0\\.[0-9]+\\.[0-9]+)$", "min_version": "0.5.10", - "publish_version": publish_version, "asset_template": "{version}_openapi.tar.gz", }, indent=2, @@ -170,38 +169,10 @@ def write_daml_script_source_config(path: Path, *, publish_version: str) -> None ) -def test_update_splice_openapi_source_updates_stale_publish_version(tmp_path: Path) -> None: - module = load_script_module() - source_config_path = tmp_path / "source-artifacts.json" - write_source_config(source_config_path, publish_version="0.5.18") - module.splice_openapi.splice_openapi_generator.selected_releases = lambda **_kwargs: [ - {"version": "0.5.18"}, - {"version": "0.6.7"}, - ] - - update = module.splice_openapi.update_source( - source_config_path=source_config_path, - dry_run=False, - ) - - assert update == module.SourceUpdate( - source="Splice OpenAPI", - path=source_config_path, - field="publish_version", - previous="0.5.18", - current="0.6.7", - ) - assert json.loads(source_config_path.read_text(encoding="utf-8"))["publish_version"] == "0.6.7" - - -def test_update_splice_openapi_source_noops_when_current(tmp_path: Path) -> None: +def test_update_splice_openapi_source_is_dynamic_and_unpinned(tmp_path: Path) -> None: module = load_script_module() source_config_path = tmp_path / "source-artifacts.json" - write_source_config(source_config_path, publish_version="0.6.7") - module.splice_openapi.splice_openapi_generator.selected_releases = lambda **_kwargs: [ - {"version": "0.5.18"}, - {"version": "0.6.7"}, - ] + write_source_config(source_config_path) assert ( module.splice_openapi.update_source( @@ -210,28 +181,10 @@ def test_update_splice_openapi_source_noops_when_current(tmp_path: Path) -> None ) is None ) - assert json.loads(source_config_path.read_text(encoding="utf-8"))["publish_version"] == "0.6.7" - - -def test_update_splice_openapi_source_dry_run_does_not_write(tmp_path: Path) -> None: - module = load_script_module() - source_config_path = tmp_path / "source-artifacts.json" - write_source_config(source_config_path, publish_version="0.5.18") - module.splice_openapi.splice_openapi_generator.selected_releases = lambda **_kwargs: [ - {"version": "0.5.18"}, - {"version": "0.6.7"}, - ] - - update = module.splice_openapi.update_source( - source_config_path=source_config_path, - dry_run=True, + assert "publish_version" not in json.loads( + source_config_path.read_text(encoding="utf-8") ) - assert update is not None - assert update.previous == "0.5.18" - assert update.current == "0.6.7" - assert json.loads(source_config_path.read_text(encoding="utf-8"))["publish_version"] == "0.5.18" - def test_update_wallet_gateway_openrpc_source_updates_stale_publish_version(tmp_path: Path) -> None: module = load_script_module() From 1c5ee1a087eac186fa1b423788378aadb54b2272 Mon Sep 17 00:00:00 2001 From: danielporterda Date: Wed, 26 Aug 2026 16:41:47 -0400 Subject: [PATCH 11/14] Trigger Mintlify preview rebuild Signed-off-by: danielporterda --- docs-main/reference/splice-scan-api/get-v0scans.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/docs-main/reference/splice-scan-api/get-v0scans.mdx b/docs-main/reference/splice-scan-api/get-v0scans.mdx index 9afcce337..194e96e81 100644 --- a/docs-main/reference/splice-scan-api/get-v0scans.mdx +++ b/docs-main/reference/splice-scan-api/get-v0scans.mdx @@ -5,6 +5,7 @@ playground: "interactive" ---
+{/* Mintlify preview rebuild marker: c9957c21 */} From c92991983f388d8897896432578588526fa9495f Mon Sep 17 00:00:00 2001 From: danielporterda Date: Thu, 27 Aug 2026 12:26:19 -0400 Subject: [PATCH 12/14] Normalize Splice OpenAPI history Signed-off-by: danielporterda --- docs-main/openapi/splice/history-report.json | 4722 ++++++++++++++++++ scripts/generate_splice_mintlify_openapi.py | 156 +- src/x2mdx/history/__init__.py | 2 + src/x2mdx/history/io.py | 8 + src/x2mdx/history/validation.py | 9 + src/x2mdx/openapi/__init__.py | 6 + src/x2mdx/openapi/history.py | 699 +++ tests/test_history_contract.py | 21 + tests/test_openapi_history.py | 308 ++ tests/test_splice_mintlify_openapi.py | 98 +- 10 files changed, 5995 insertions(+), 34 deletions(-) create mode 100644 docs-main/openapi/splice/history-report.json create mode 100644 src/x2mdx/openapi/history.py create mode 100644 tests/test_openapi_history.py diff --git a/docs-main/openapi/splice/history-report.json b/docs-main/openapi/splice/history-report.json new file mode 100644 index 000000000..27629df89 --- /dev/null +++ b/docs-main/openapi/splice/history-report.json @@ -0,0 +1,4722 @@ +{ + "surface_id": "splice-openapi", + "title": "Splice OpenAPI", + "format": "openapi", + "configured_scope": "Reader-facing operations from 12 enabled Splice OpenAPI specifications.", + "history_mode": "snapshots", + "publish_version": "0.7.4", + "comparison_versions": [ + "0.5.10", + "0.5.11", + "0.5.12", + "0.5.13", + "0.5.14", + "0.5.15", + "0.5.16", + "0.5.17", + "0.5.18", + "0.6.0", + "0.6.1", + "0.6.2", + "0.6.3", + "0.6.4", + "0.6.5", + "0.6.6", + "0.6.7", + "0.6.8", + "0.6.9", + "0.6.10", + "0.6.11", + "0.6.12", + "0.6.13", + "0.6.14", + "0.7.0", + "0.7.1", + "0.7.2", + "0.7.3", + "0.7.4" + ], + "source_artifacts": [ + { + "version": "0.5.10", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "revision": "v0.5.10", + "path": "0.5.10_openapi.tar.gz" + }, + { + "version": "0.5.11", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.11/0.5.11_openapi.tar.gz", + "revision": "v0.5.11", + "path": "0.5.11_openapi.tar.gz" + }, + { + "version": "0.5.12", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.12/0.5.12_openapi.tar.gz", + "revision": "v0.5.12", + "path": "0.5.12_openapi.tar.gz" + }, + { + "version": "0.5.13", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.13/0.5.13_openapi.tar.gz", + "revision": "v0.5.13", + "path": "0.5.13_openapi.tar.gz" + }, + { + "version": "0.5.14", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.14/0.5.14_openapi.tar.gz", + "revision": "v0.5.14", + "path": "0.5.14_openapi.tar.gz" + }, + { + "version": "0.5.15", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.15/0.5.15_openapi.tar.gz", + "revision": "v0.5.15", + "path": "0.5.15_openapi.tar.gz" + }, + { + "version": "0.5.16", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.16/0.5.16_openapi.tar.gz", + "revision": "v0.5.16", + "path": "0.5.16_openapi.tar.gz" + }, + { + "version": "0.5.17", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.17/0.5.17_openapi.tar.gz", + "revision": "v0.5.17", + "path": "0.5.17_openapi.tar.gz" + }, + { + "version": "0.5.18", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.18/0.5.18_openapi.tar.gz", + "revision": "v0.5.18", + "path": "0.5.18_openapi.tar.gz" + }, + { + "version": "0.6.0", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.0/0.6.0_openapi.tar.gz", + "revision": "v0.6.0", + "path": "0.6.0_openapi.tar.gz" + }, + { + "version": "0.6.1", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.1/0.6.1_openapi.tar.gz", + "revision": "v0.6.1", + "path": "0.6.1_openapi.tar.gz" + }, + { + "version": "0.6.2", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.2/0.6.2_openapi.tar.gz", + "revision": "v0.6.2", + "path": "0.6.2_openapi.tar.gz" + }, + { + "version": "0.6.3", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.3/0.6.3_openapi.tar.gz", + "revision": "v0.6.3", + "path": "0.6.3_openapi.tar.gz" + }, + { + "version": "0.6.4", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.4/0.6.4_openapi.tar.gz", + "revision": "v0.6.4", + "path": "0.6.4_openapi.tar.gz" + }, + { + "version": "0.6.5", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.5/0.6.5_openapi.tar.gz", + "revision": "v0.6.5", + "path": "0.6.5_openapi.tar.gz" + }, + { + "version": "0.6.6", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.6/0.6.6_openapi.tar.gz", + "revision": "v0.6.6", + "path": "0.6.6_openapi.tar.gz" + }, + { + "version": "0.6.7", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.7/0.6.7_openapi.tar.gz", + "revision": "v0.6.7", + "path": "0.6.7_openapi.tar.gz" + }, + { + "version": "0.6.8", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.8/0.6.8_openapi.tar.gz", + "revision": "v0.6.8", + "path": "0.6.8_openapi.tar.gz" + }, + { + "version": "0.6.9", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.9/0.6.9_openapi.tar.gz", + "revision": "v0.6.9", + "path": "0.6.9_openapi.tar.gz" + }, + { + "version": "0.6.10", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.10/0.6.10_openapi.tar.gz", + "revision": "v0.6.10", + "path": "0.6.10_openapi.tar.gz" + }, + { + "version": "0.6.11", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.11/0.6.11_openapi.tar.gz", + "revision": "v0.6.11", + "path": "0.6.11_openapi.tar.gz" + }, + { + "version": "0.6.12", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.12/0.6.12_openapi.tar.gz", + "revision": "v0.6.12", + "path": "0.6.12_openapi.tar.gz" + }, + { + "version": "0.6.13", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.13/0.6.13_openapi.tar.gz", + "revision": "v0.6.13", + "path": "0.6.13_openapi.tar.gz" + }, + { + "version": "0.6.14", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.14/0.6.14_openapi.tar.gz", + "revision": "v0.6.14", + "path": "0.6.14_openapi.tar.gz" + }, + { + "version": "0.7.0", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.7.0/0.7.0_openapi.tar.gz", + "revision": "v0.7.0", + "path": "0.7.0_openapi.tar.gz" + }, + { + "version": "0.7.1", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.7.1/0.7.1_openapi.tar.gz", + "revision": "v0.7.1", + "path": "0.7.1_openapi.tar.gz" + }, + { + "version": "0.7.2", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.7.2/0.7.2_openapi.tar.gz", + "revision": "v0.7.2", + "path": "0.7.2_openapi.tar.gz" + }, + { + "version": "0.7.3", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.7.3/0.7.3_openapi.tar.gz", + "revision": "v0.7.3", + "path": "0.7.3_openapi.tar.gz" + }, + { + "version": "0.7.4", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.7.4/0.7.4_openapi.tar.gz", + "revision": "v0.7.4", + "path": "0.7.4_openapi.tar.gz" + } + ], + "version_policy": "latest_selected_release", + "items": [ + { + "id": "allocation-instruction-v1.yaml::getAllocationFactory", + "kind": "operation", + "route": "/reference/splice-allocation-instruction-api/post-registryallocation-instructionv1allocation-factory", + "location": "allocation-instruction-v1.yaml: POST /registry/allocation-instruction/v1/allocation-factory", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "allocation-instruction-v1.yaml#paths./registry/allocation-instruction/v1/allocation-factory.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "allocation-instruction-v2.yaml::getAllocationFactory", + "kind": "operation", + "route": "/reference/splice-allocation-instruction-v2-api/post-registryallocation-instructionv2allocation-factory", + "location": "allocation-instruction-v2.yaml: POST /registry/allocation-instruction/v2/allocation-factory", + "first_seen": "0.6.11", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.11/0.6.11_openapi.tar.gz", + "observed_in_version": "0.6.11", + "location": "allocation-instruction-v2.yaml#paths./registry/allocation-instruction/v2/allocation-factory.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "allocation-instruction-v2.yaml::getAllocationInstructionAcceptContext", + "kind": "operation", + "route": "/reference/splice-allocation-instruction-v2-api/post-registryallocation-instructionv2:allocationinstructionidchoice-contextsaccept", + "location": "allocation-instruction-v2.yaml: POST /registry/allocation-instruction/v2/{allocationInstructionId}/choice-contexts/accept", + "first_seen": "0.6.11", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.11/0.6.11_openapi.tar.gz", + "observed_in_version": "0.6.11", + "location": "allocation-instruction-v2.yaml#paths./registry/allocation-instruction/v2/{allocationInstructionId}/choice-contexts/accept.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "allocation-instruction-v2.yaml::getAllocationInstructionWithdrawContext", + "kind": "operation", + "route": "/reference/splice-allocation-instruction-v2-api/post-registryallocation-instructionv2:allocationinstructionidchoice-contextswithdraw", + "location": "allocation-instruction-v2.yaml: POST /registry/allocation-instruction/v2/{allocationInstructionId}/choice-contexts/withdraw", + "first_seen": "0.6.11", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.11/0.6.11_openapi.tar.gz", + "observed_in_version": "0.6.11", + "location": "allocation-instruction-v2.yaml#paths./registry/allocation-instruction/v2/{allocationInstructionId}/choice-contexts/withdraw.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "allocation-v1.yaml::getAllocationCancelContext", + "kind": "operation", + "route": "/reference/splice-allocation-api/post-registryallocationsv1:allocationidchoice-contextscancel", + "location": "allocation-v1.yaml: POST /registry/allocations/v1/{allocationId}/choice-contexts/cancel", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "allocation-v1.yaml#paths./registry/allocations/v1/{allocationId}/choice-contexts/cancel.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "allocation-v1.yaml::getAllocationTransferContext", + "kind": "operation", + "route": "/reference/splice-allocation-api/post-registryallocationsv1:allocationidchoice-contextsexecute-transfer", + "location": "allocation-v1.yaml: POST /registry/allocations/v1/{allocationId}/choice-contexts/execute-transfer", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "allocation-v1.yaml#paths./registry/allocations/v1/{allocationId}/choice-contexts/execute-transfer.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "allocation-v1.yaml::getAllocationWithdrawContext", + "kind": "operation", + "route": "/reference/splice-allocation-api/post-registryallocationsv1:allocationidchoice-contextswithdraw", + "location": "allocation-v1.yaml: POST /registry/allocations/v1/{allocationId}/choice-contexts/withdraw", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "allocation-v1.yaml#paths./registry/allocations/v1/{allocationId}/choice-contexts/withdraw.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "allocation-v2.yaml::getAllocationCancelContext", + "kind": "operation", + "route": "/reference/splice-allocation-v2-api/post-registryallocationsv2:allocationidchoice-contextscancel", + "location": "allocation-v2.yaml: POST /registry/allocations/v2/{allocationId}/choice-contexts/cancel", + "first_seen": "0.6.11", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.11/0.6.11_openapi.tar.gz", + "observed_in_version": "0.6.11", + "location": "allocation-v2.yaml#paths./registry/allocations/v2/{allocationId}/choice-contexts/cancel.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "allocation-v2.yaml::getAllocationWithdrawContext", + "kind": "operation", + "route": "/reference/splice-allocation-v2-api/post-registryallocationsv2:allocationidchoice-contextswithdraw", + "location": "allocation-v2.yaml: POST /registry/allocations/v2/{allocationId}/choice-contexts/withdraw", + "first_seen": "0.6.11", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.11/0.6.11_openapi.tar.gz", + "observed_in_version": "0.6.11", + "location": "allocation-v2.yaml#paths./registry/allocations/v2/{allocationId}/choice-contexts/withdraw.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "allocation-v2.yaml::getSettlementFactory", + "kind": "operation", + "route": "/reference/splice-allocation-v2-api/post-registryallocationv2settlement-factory", + "location": "allocation-v2.yaml: POST /registry/allocation/v2/settlement-factory", + "first_seen": "0.6.11", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.11/0.6.11_openapi.tar.gz", + "observed_in_version": "0.6.11", + "location": "allocation-v2.yaml#paths./registry/allocation/v2/settlement-factory.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "ans-external.yaml::createAnsEntry", + "kind": "operation", + "route": "/reference/splice-ans-api/post-v0entrycreate", + "location": "ans-external.yaml: POST /v0/entry/create", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "ans-external.yaml#paths./v0/entry/create.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "ans-external.yaml::listAnsEntries", + "kind": "operation", + "route": "/reference/splice-ans-api/get-v0entryall", + "location": "ans-external.yaml: GET /v0/entry/all", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "ans-external.yaml#paths./v0/entry/all.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan-proxy.yaml::getAmuletRules", + "kind": "operation", + "route": "/reference/splice-scan-proxy-api/get-v0scan-proxyamulet-rules", + "location": "scan-proxy.yaml: GET /v0/scan-proxy/amulet-rules", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan-proxy.yaml#paths./v0/scan-proxy/amulet-rules.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan-proxy.yaml::getAnsRules", + "kind": "operation", + "route": "/reference/splice-scan-proxy-api/post-v0scan-proxyans-rules", + "location": "scan-proxy.yaml: POST /v0/scan-proxy/ans-rules", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan-proxy.yaml#paths./v0/scan-proxy/ans-rules.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan-proxy.yaml::getDsoInfo", + "kind": "operation", + "route": "/reference/splice-scan-proxy-api/get-v0scan-proxydso", + "location": "scan-proxy.yaml: GET /v0/scan-proxy/dso", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan-proxy.yaml#paths./v0/scan-proxy/dso.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan-proxy.yaml::getDsoPartyId", + "kind": "operation", + "route": "/reference/splice-scan-proxy-api/get-v0scan-proxydso-party-id", + "location": "scan-proxy.yaml: GET /v0/scan-proxy/dso-party-id", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan-proxy.yaml#paths./v0/scan-proxy/dso-party-id.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan-proxy.yaml::getHoldingsSummaryAt", + "kind": "operation", + "route": "/reference/splice-scan-proxy-api/post-v0scan-proxyholdingssummary", + "location": "scan-proxy.yaml: POST /v0/scan-proxy/holdings/summary", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan-proxy.yaml#paths./v0/scan-proxy/holdings/summary.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": "0.6.3", + "changes": [ + { + "version": "0.6.3", + "summary": "The POST /v0/scan-proxy/holdings/summary operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.3/0.6.3_openapi.tar.gz", + "observed_in_version": "0.6.3", + "location": "scan-proxy.yaml#paths./v0/scan-proxy/holdings/summary.post", + "detail": null + } + ] + } + ], + "lifecycle_state": "deprecated", + "lifecycle_transitions": [ + { + "state": "deprecated", + "version": "0.6.3", + "evidence": { + "kind": "source_metadata", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.3/0.6.3_openapi.tar.gz", + "observed_in_version": "0.6.3", + "location": "scan-proxy.yaml#paths./v0/scan-proxy/holdings/summary.post.deprecated", + "detail": null + } + } + ], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan-proxy.yaml::getHoldingsSummaryAtV1", + "kind": "operation", + "route": "/reference/splice-scan-proxy-api/post-v1scan-proxyholdingssummary", + "location": "scan-proxy.yaml: POST /v1/scan-proxy/holdings/summary", + "first_seen": "0.6.3", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.3/0.6.3_openapi.tar.gz", + "observed_in_version": "0.6.3", + "location": "scan-proxy.yaml#paths./v1/scan-proxy/holdings/summary.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan-proxy.yaml::getOpenAndIssuingMiningRounds", + "kind": "operation", + "route": "/reference/splice-scan-proxy-api/get-v0scan-proxyopen-and-issuing-mining-rounds", + "location": "scan-proxy.yaml: GET /v0/scan-proxy/open-and-issuing-mining-rounds", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan-proxy.yaml#paths./v0/scan-proxy/open-and-issuing-mining-rounds.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan-proxy.yaml::listAnsEntries", + "kind": "operation", + "route": "/reference/splice-scan-proxy-api/get-v0scan-proxyans-entries", + "location": "scan-proxy.yaml: GET /v0/scan-proxy/ans-entries", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan-proxy.yaml#paths./v0/scan-proxy/ans-entries.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan-proxy.yaml::listUnclaimedDevelopmentFundCoupons", + "kind": "operation", + "route": "/reference/splice-scan-proxy-api/get-v0scan-proxyunclaimed-development-fund-coupons", + "location": "scan-proxy.yaml: GET /v0/scan-proxy/unclaimed-development-fund-coupons", + "first_seen": "0.5.11", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.11/0.5.11_openapi.tar.gz", + "observed_in_version": "0.5.11", + "location": "scan-proxy.yaml#paths./v0/scan-proxy/unclaimed-development-fund-coupons.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan-proxy.yaml::lookupAnsEntryByName", + "kind": "operation", + "route": "/reference/splice-scan-proxy-api/get-v0scan-proxyans-entriesby-name:name", + "location": "scan-proxy.yaml: GET /v0/scan-proxy/ans-entries/by-name/{name}", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan-proxy.yaml#paths./v0/scan-proxy/ans-entries/by-name/{name}.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan-proxy.yaml::lookupAnsEntryByParty", + "kind": "operation", + "route": "/reference/splice-scan-proxy-api/get-v0scan-proxyans-entriesby-party:party", + "location": "scan-proxy.yaml: GET /v0/scan-proxy/ans-entries/by-party/{party}", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan-proxy.yaml#paths./v0/scan-proxy/ans-entries/by-party/{party}.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan-proxy.yaml::lookupFeaturedAppRight", + "kind": "operation", + "route": "/reference/splice-scan-proxy-api/get-v0scan-proxyfeatured-apps:provider_party_id", + "location": "scan-proxy.yaml: GET /v0/scan-proxy/featured-apps/{provider_party_id}", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan-proxy.yaml#paths./v0/scan-proxy/featured-apps/{provider_party_id}.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan-proxy.yaml::lookupTransferCommandCounterByParty", + "kind": "operation", + "route": "/reference/splice-scan-proxy-api/get-v0scan-proxytransfer-command-counter:party", + "location": "scan-proxy.yaml: GET /v0/scan-proxy/transfer-command-counter/{party}", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan-proxy.yaml#paths./v0/scan-proxy/transfer-command-counter/{party}.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan-proxy.yaml::lookupTransferCommandStatus", + "kind": "operation", + "route": "/reference/splice-scan-proxy-api/get-v0scan-proxytransfer-commandstatus", + "location": "scan-proxy.yaml: GET /v0/scan-proxy/transfer-command/status", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan-proxy.yaml#paths./v0/scan-proxy/transfer-command/status.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan-proxy.yaml::lookupTransferPreapprovalByParty", + "kind": "operation", + "route": "/reference/splice-scan-proxy-api/get-v0scan-proxytransfer-preapprovalsby-party:party", + "location": "scan-proxy.yaml: GET /v0/scan-proxy/transfer-preapprovals/by-party/{party}", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan-proxy.yaml#paths./v0/scan-proxy/transfer-preapprovals/by-party/{party}.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan-stream-server.yaml::bulkStorageDownload", + "kind": "operation", + "route": "/reference/splice-scan-streaming-api/get-v0historybulkdownload:object_key", + "location": "scan-stream-server.yaml: GET /v0/history/bulk/download/{object_key}", + "first_seen": "0.5.16", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.16/0.5.16_openapi.tar.gz", + "observed_in_version": "0.5.16", + "location": "scan-stream-server.yaml#paths./v0/history/bulk/download/{object_key}.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": "0.5.17", + "changes": [ + { + "version": "0.5.17", + "summary": "The GET /v0/history/bulk/download/{object_key} operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.17/0.5.17_openapi.tar.gz", + "observed_in_version": "0.5.17", + "location": "scan-stream-server.yaml#paths./v0/history/bulk/download/{object_key}.get", + "detail": null + } + ] + } + ], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::countVoteRequestResults", + "kind": "operation", + "route": "/reference/splice-scan-api/post-v0adminsvvoteresultscount", + "location": "scan.yaml: POST /v0/admin/sv/voteresults/count", + "first_seen": "0.6.13", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.13/0.6.13_openapi.tar.gz", + "observed_in_version": "0.6.13", + "location": "scan.yaml#paths./v0/admin/sv/voteresults/count.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::featureSupport", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0feature-support", + "location": "scan.yaml: GET /v0/feature-support", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/feature-support.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": "0.5.16", + "changes": [ + { + "version": "0.5.16", + "summary": "The GET /v0/feature-support operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.16/0.5.16_openapi.tar.gz", + "observed_in_version": "0.5.16", + "location": "scan.yaml#paths./v0/feature-support.get", + "detail": null + } + ] + } + ], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::forceAcsSnapshotNow", + "kind": "operation", + "route": "/reference/splice-scan-api/post-v0stateacsforce", + "location": "scan.yaml: POST /v0/state/acs/force", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/state/acs/force.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getAcsSnapshot", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0acs:party", + "location": "scan.yaml: GET /v0/acs/{party}", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/acs/{party}.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": "deprecated", + "lifecycle_transitions": [ + { + "state": "deprecated", + "version": "0.5.10", + "evidence": { + "kind": "source_metadata", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/acs/{party}.get.deprecated", + "detail": null + } + } + ], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getAcsSnapshotAt", + "kind": "operation", + "route": "/reference/splice-scan-api/post-v0stateacs", + "location": "scan.yaml: POST /v0/state/acs", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/state/acs.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": "0.6.0", + "changes": [ + { + "version": "0.6.0", + "summary": "The POST /v0/state/acs operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.0/0.6.0_openapi.tar.gz", + "observed_in_version": "0.6.0", + "location": "scan.yaml#paths./v0/state/acs.post", + "detail": null + } + ] + } + ], + "lifecycle_state": "deprecated", + "lifecycle_transitions": [ + { + "state": "deprecated", + "version": "0.6.0", + "evidence": { + "kind": "source_metadata", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.0/0.6.0_openapi.tar.gz", + "observed_in_version": "0.6.0", + "location": "scan.yaml#paths./v0/state/acs.post.deprecated", + "detail": null + } + } + ], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getAcsSnapshotAtV1", + "kind": "operation", + "route": "/reference/splice-scan-api/post-v1stateacs", + "location": "scan.yaml: POST /v1/state/acs", + "first_seen": "0.6.0", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.0/0.6.0_openapi.tar.gz", + "observed_in_version": "0.6.0", + "location": "scan.yaml#paths./v1/state/acs.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getActivePhysicalSynchronizerSerial", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0active-synchronizer-serial", + "location": "scan.yaml: GET /v0/active-synchronizer-serial", + "first_seen": "0.6.0", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.0/0.6.0_openapi.tar.gz", + "observed_in_version": "0.6.0", + "location": "scan.yaml#paths./v0/active-synchronizer-serial.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getAggregatedRounds", + "kind": "operation", + "route": null, + "location": "scan.yaml: GET /v0/aggregated-rounds", + "first_seen": "0.5.10", + "last_seen": "0.6.6", + "current_present": false, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/aggregated-rounds.get", + "detail": null + }, + "observed_removal": "0.6.7", + "removal_evidence": { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.7/0.6.7_openapi.tar.gz", + "observed_in_version": "0.6.7", + "location": "scan.yaml", + "detail": "GET /v0/aggregated-rounds is absent from this specification snapshot." + }, + "last_changed": null, + "changes": [], + "lifecycle_state": "deprecated", + "lifecycle_transitions": [ + { + "state": "deprecated", + "version": "0.5.10", + "evidence": { + "kind": "source_metadata", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/aggregated-rounds.get.deprecated", + "detail": null + } + } + ], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getAmuletConfigForRound", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0amulet-config-for-round", + "location": "scan.yaml: GET /v0/amulet-config-for-round", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/amulet-config-for-round.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": "deprecated", + "lifecycle_transitions": [ + { + "state": "deprecated", + "version": "0.5.10", + "evidence": { + "kind": "source_metadata", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/amulet-config-for-round.get.deprecated", + "detail": null + } + } + ], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getAmuletRules", + "kind": "operation", + "route": "/reference/splice-scan-api/post-v0amulet-rules", + "location": "scan.yaml: POST /v0/amulet-rules", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/amulet-rules.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getAnsRules", + "kind": "operation", + "route": "/reference/splice-scan-api/post-v0ans-rules", + "location": "scan.yaml: POST /v0/ans-rules", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/ans-rules.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getBackfillingStatus", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0backfillingstatus", + "location": "scan.yaml: GET /v0/backfilling/status", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/backfilling/status.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getBulkObjectChecksums", + "kind": "operation", + "route": "/reference/splice-scan-api/post-v0historybulkchecksums", + "location": "scan.yaml: POST /v0/history/bulk/checksums", + "first_seen": "0.7.4", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.7.4/0.7.4_openapi.tar.gz", + "observed_in_version": "0.7.4", + "location": "scan.yaml#paths./v0/history/bulk/checksums.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getClosedRounds", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0closed-rounds", + "location": "scan.yaml: GET /v0/closed-rounds", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/closed-rounds.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getDateOfFirstSnapshotAfter", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0stateacssnapshot-timestamp-after", + "location": "scan.yaml: GET /v0/state/acs/snapshot-timestamp-after", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/state/acs/snapshot-timestamp-after.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getDateOfMostRecentSnapshotBefore", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0stateacssnapshot-timestamp", + "location": "scan.yaml: GET /v0/state/acs/snapshot-timestamp", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/state/acs/snapshot-timestamp.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getDsoInfo", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0dso", + "location": "scan.yaml: GET /v0/dso", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/dso.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getDsoPartyId", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0dso-party-id", + "location": "scan.yaml: GET /v0/dso-party-id", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/dso-party-id.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getEventById", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0events:update_id", + "location": "scan.yaml: GET /v0/events/{update_id}", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/events/{update_id}.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": "0.6.10", + "changes": [ + { + "version": "0.5.15", + "summary": "The GET /v0/events/{update_id} operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.15/0.5.15_openapi.tar.gz", + "observed_in_version": "0.5.15", + "location": "scan.yaml#paths./v0/events/{update_id}.get", + "detail": null + } + ] + }, + { + "version": "0.5.17", + "summary": "The GET /v0/events/{update_id} operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.17/0.5.17_openapi.tar.gz", + "observed_in_version": "0.5.17", + "location": "scan.yaml#paths./v0/events/{update_id}.get", + "detail": null + } + ] + }, + { + "version": "0.6.0", + "summary": "The GET /v0/events/{update_id} operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.0/0.6.0_openapi.tar.gz", + "observed_in_version": "0.6.0", + "location": "scan.yaml#paths./v0/events/{update_id}.get", + "detail": null + } + ] + }, + { + "version": "0.6.10", + "summary": "The GET /v0/events/{update_id} operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.10/0.6.10_openapi.tar.gz", + "observed_in_version": "0.6.10", + "location": "scan.yaml#paths./v0/events/{update_id}.get", + "detail": null + } + ] + } + ], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getEventHistory", + "kind": "operation", + "route": "/reference/splice-scan-api/post-v0events", + "location": "scan.yaml: POST /v0/events", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/events.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": "0.6.10", + "changes": [ + { + "version": "0.5.15", + "summary": "The POST /v0/events operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.15/0.5.15_openapi.tar.gz", + "observed_in_version": "0.5.15", + "location": "scan.yaml#paths./v0/events.post", + "detail": null + } + ] + }, + { + "version": "0.5.17", + "summary": "The POST /v0/events operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.17/0.5.17_openapi.tar.gz", + "observed_in_version": "0.5.17", + "location": "scan.yaml#paths./v0/events.post", + "detail": null + } + ] + }, + { + "version": "0.6.0", + "summary": "The POST /v0/events operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.0/0.6.0_openapi.tar.gz", + "observed_in_version": "0.6.0", + "location": "scan.yaml#paths./v0/events.post", + "detail": null + } + ] + }, + { + "version": "0.6.10", + "summary": "The POST /v0/events operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.10/0.6.10_openapi.tar.gz", + "observed_in_version": "0.6.10", + "location": "scan.yaml#paths./v0/events.post", + "detail": null + } + ] + } + ], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getExternalPartyAmuletRules", + "kind": "operation", + "route": "/reference/splice-scan-api/post-v0external-party-amulet-rules", + "location": "scan.yaml: POST /v0/external-party-amulet-rules", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/external-party-amulet-rules.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getHealthStatus", + "kind": "operation", + "route": "/reference/splice-scan-api/get-status", + "location": "scan.yaml: GET /status", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./status.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getHoldingsStateAt", + "kind": "operation", + "route": "/reference/splice-scan-api/post-v0holdingsstate", + "location": "scan.yaml: POST /v0/holdings/state", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/holdings/state.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": "0.6.0", + "changes": [ + { + "version": "0.6.0", + "summary": "The POST /v0/holdings/state operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.0/0.6.0_openapi.tar.gz", + "observed_in_version": "0.6.0", + "location": "scan.yaml#paths./v0/holdings/state.post", + "detail": null + } + ] + } + ], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getHoldingsStateAtV1", + "kind": "operation", + "route": "/reference/splice-scan-api/post-v1holdingsstate", + "location": "scan.yaml: POST /v1/holdings/state", + "first_seen": "0.6.0", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.0/0.6.0_openapi.tar.gz", + "observed_in_version": "0.6.0", + "location": "scan.yaml#paths./v1/holdings/state.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getHoldingsSummaryAt", + "kind": "operation", + "route": "/reference/splice-scan-api/post-v0holdingssummary", + "location": "scan.yaml: POST /v0/holdings/summary", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/holdings/summary.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": "0.6.3", + "changes": [ + { + "version": "0.6.3", + "summary": "The POST /v0/holdings/summary operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.3/0.6.3_openapi.tar.gz", + "observed_in_version": "0.6.3", + "location": "scan.yaml#paths./v0/holdings/summary.post", + "detail": null + } + ] + } + ], + "lifecycle_state": "deprecated", + "lifecycle_transitions": [ + { + "state": "deprecated", + "version": "0.6.3", + "evidence": { + "kind": "source_metadata", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.3/0.6.3_openapi.tar.gz", + "observed_in_version": "0.6.3", + "location": "scan.yaml#paths./v0/holdings/summary.post.deprecated", + "detail": null + } + } + ], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getHoldingsSummaryAtV1", + "kind": "operation", + "route": "/reference/splice-scan-api/post-v1holdingssummary", + "location": "scan.yaml: POST /v1/holdings/summary", + "first_seen": "0.6.3", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.3/0.6.3_openapi.tar.gz", + "observed_in_version": "0.6.3", + "location": "scan.yaml#paths./v1/holdings/summary.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getImportUpdates", + "kind": "operation", + "route": "/reference/splice-scan-api/post-v0backfillingimport-updates", + "location": "scan.yaml: POST /v0/backfilling/import-updates", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/backfilling/import-updates.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": "0.6.0", + "changes": [ + { + "version": "0.5.17", + "summary": "The POST /v0/backfilling/import-updates operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.17/0.5.17_openapi.tar.gz", + "observed_in_version": "0.5.17", + "location": "scan.yaml#paths./v0/backfilling/import-updates.post", + "detail": null + } + ] + }, + { + "version": "0.6.0", + "summary": "The POST /v0/backfilling/import-updates operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.0/0.6.0_openapi.tar.gz", + "observed_in_version": "0.6.0", + "location": "scan.yaml#paths./v0/backfilling/import-updates.post", + "detail": null + } + ] + } + ], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getLsu", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0lsu", + "location": "scan.yaml: GET /v0/lsu", + "first_seen": "0.6.11", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.11/0.6.11_openapi.tar.gz", + "observed_in_version": "0.6.11", + "location": "scan.yaml#paths./v0/lsu.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getMemberTrafficStatus", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0domains:domain_idmembers:member_idtraffic-status", + "location": "scan.yaml: GET /v0/domains/{domain_id}/members/{member_id}/traffic-status", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/domains/{domain_id}/members/{member_id}/traffic-status.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getMigrationId", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0migrationslast", + "location": "scan.yaml: GET /v0/migrations/last", + "first_seen": "0.6.8", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.8/0.6.8_openapi.tar.gz", + "observed_in_version": "0.6.8", + "location": "scan.yaml#paths./v0/migrations/last.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getMigrationInfo", + "kind": "operation", + "route": "/reference/splice-scan-api/post-v0backfillingmigration-info", + "location": "scan.yaml: POST /v0/backfilling/migration-info", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/backfilling/migration-info.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getMigrationSchedule", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0migrationsschedule", + "location": "scan.yaml: GET /v0/migrations/schedule", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/migrations/schedule.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getOpenAndIssuingMiningRounds", + "kind": "operation", + "route": "/reference/splice-scan-api/post-v0open-and-issuing-mining-rounds", + "location": "scan.yaml: POST /v0/open-and-issuing-mining-rounds", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/open-and-issuing-mining-rounds.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getPartyToParticipant", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0domains:domain_idparties:party_idparticipant-id", + "location": "scan.yaml: GET /v0/domains/{domain_id}/parties/{party_id}/participant-id", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/domains/{domain_id}/parties/{party_id}/participant-id.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getPartyToParticipantV1", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v1domains:domain_idparties:party_idparticipant-id", + "location": "scan.yaml: GET /v1/domains/{domain_id}/parties/{party_id}/participant-id", + "first_seen": "0.5.17", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.17/0.5.17_openapi.tar.gz", + "observed_in_version": "0.5.17", + "location": "scan.yaml#paths./v1/domains/{domain_id}/parties/{party_id}/participant-id.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getPreviousSvRewardWeight", + "kind": "operation", + "route": "/reference/splice-scan-api/post-v0adminsvprevious-sv-reward-weight", + "location": "scan.yaml: POST /v0/admin/sv/previous-sv-reward-weight", + "first_seen": "0.6.9", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.9/0.6.9_openapi.tar.gz", + "observed_in_version": "0.6.9", + "location": "scan.yaml#paths./v0/admin/sv/previous-sv-reward-weight.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getRewardAccountingActivityTotals", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0internalreward-accounting-processrounds:round_numberactivity-totals", + "location": "scan.yaml: GET /v0/internal/reward-accounting-process/rounds/{round_number}/activity-totals", + "first_seen": "0.6.0", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.0/0.6.0_openapi.tar.gz", + "observed_in_version": "0.6.0", + "location": "scan.yaml#paths./v0/reward-accounting-process/rounds/{round_number}/activity-totals.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": "0.6.9", + "changes": [ + { + "version": "0.6.5", + "summary": "The operation moved from GET /v0/reward-accounting-process/rounds/{round_number}/activity-totals to GET /v0/internal/reward-accounting-process/rounds/{round_number}/activity-totals.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.5/0.6.5_openapi.tar.gz", + "observed_in_version": "0.6.5", + "location": "scan.yaml#paths./v0/internal/reward-accounting-process/rounds/{round_number}/activity-totals.get", + "detail": null + } + ] + }, + { + "version": "0.6.9", + "summary": "The GET /v0/internal/reward-accounting-process/rounds/{round_number}/activity-totals operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.9/0.6.9_openapi.tar.gz", + "observed_in_version": "0.6.9", + "location": "scan.yaml#paths./v0/internal/reward-accounting-process/rounds/{round_number}/activity-totals.get", + "detail": null + } + ] + } + ], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getRewardAccountingBatch", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0internalreward-accounting-processrounds:round_numberbatches:batch_hash", + "location": "scan.yaml: GET /v0/internal/reward-accounting-process/rounds/{round_number}/batches/{batch_hash}", + "first_seen": "0.6.0", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.0/0.6.0_openapi.tar.gz", + "observed_in_version": "0.6.0", + "location": "scan.yaml#paths./v0/reward-accounting-process/rounds/{round_number}/batches/{batch_hash}.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": "0.6.5", + "changes": [ + { + "version": "0.6.5", + "summary": "The operation moved from GET /v0/reward-accounting-process/rounds/{round_number}/batches/{batch_hash} to GET /v0/internal/reward-accounting-process/rounds/{round_number}/batches/{batch_hash}.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.5/0.6.5_openapi.tar.gz", + "observed_in_version": "0.6.5", + "location": "scan.yaml#paths./v0/internal/reward-accounting-process/rounds/{round_number}/batches/{batch_hash}.get", + "detail": null + } + ] + } + ], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getRewardAccountingEarliestAvailableRound", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0internalreward-accounting-processroundsearliest-available", + "location": "scan.yaml: GET /v0/internal/reward-accounting-process/rounds/earliest-available", + "first_seen": "0.6.0", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.0/0.6.0_openapi.tar.gz", + "observed_in_version": "0.6.0", + "location": "scan.yaml#paths./v0/reward-accounting-process/rounds/earliest-available.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": "0.6.5", + "changes": [ + { + "version": "0.6.5", + "summary": "The operation moved from GET /v0/reward-accounting-process/rounds/earliest-available to GET /v0/internal/reward-accounting-process/rounds/earliest-available.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.5/0.6.5_openapi.tar.gz", + "observed_in_version": "0.6.5", + "location": "scan.yaml#paths./v0/internal/reward-accounting-process/rounds/earliest-available.get", + "detail": null + } + ] + } + ], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getRewardAccountingRootHash", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0internalreward-accounting-processrounds:round_numberroot-hash", + "location": "scan.yaml: GET /v0/internal/reward-accounting-process/rounds/{round_number}/root-hash", + "first_seen": "0.6.0", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.0/0.6.0_openapi.tar.gz", + "observed_in_version": "0.6.0", + "location": "scan.yaml#paths./v0/reward-accounting-process/rounds/{round_number}/root-hash.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": "0.6.5", + "changes": [ + { + "version": "0.6.5", + "summary": "The operation moved from GET /v0/reward-accounting-process/rounds/{round_number}/root-hash to GET /v0/internal/reward-accounting-process/rounds/{round_number}/root-hash.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.5/0.6.5_openapi.tar.gz", + "observed_in_version": "0.6.5", + "location": "scan.yaml#paths./v0/internal/reward-accounting-process/rounds/{round_number}/root-hash.get", + "detail": null + } + ] + } + ], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getRewardsCollected", + "kind": "operation", + "route": null, + "location": "scan.yaml: GET /v0/rewards-collected", + "first_seen": "0.5.10", + "last_seen": "0.6.6", + "current_present": false, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/rewards-collected.get", + "detail": null + }, + "observed_removal": "0.6.7", + "removal_evidence": { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.7/0.6.7_openapi.tar.gz", + "observed_in_version": "0.6.7", + "location": "scan.yaml", + "detail": "GET /v0/rewards-collected is absent from this specification snapshot." + }, + "last_changed": null, + "changes": [], + "lifecycle_state": "deprecated", + "lifecycle_transitions": [ + { + "state": "deprecated", + "version": "0.5.10", + "evidence": { + "kind": "source_metadata", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/rewards-collected.get.deprecated", + "detail": null + } + } + ], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getRollForwardLsu", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0roll-forward-lsu", + "location": "scan.yaml: GET /v0/roll-forward-lsu", + "first_seen": "0.6.0", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.0/0.6.0_openapi.tar.gz", + "observed_in_version": "0.6.0", + "location": "scan.yaml#paths./v0/roll-forward-lsu.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getRoundOfLatestData", + "kind": "operation", + "route": null, + "location": "scan.yaml: GET /v0/round-of-latest-data", + "first_seen": "0.5.10", + "last_seen": "0.6.6", + "current_present": false, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/round-of-latest-data.get", + "detail": null + }, + "observed_removal": "0.6.7", + "removal_evidence": { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.7/0.6.7_openapi.tar.gz", + "observed_in_version": "0.6.7", + "location": "scan.yaml", + "detail": "GET /v0/round-of-latest-data is absent from this specification snapshot." + }, + "last_changed": null, + "changes": [], + "lifecycle_state": "deprecated", + "lifecycle_transitions": [ + { + "state": "deprecated", + "version": "0.5.10", + "evidence": { + "kind": "source_metadata", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/round-of-latest-data.get.deprecated", + "detail": null + } + } + ], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getSpliceInstanceNames", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0splice-instance-names", + "location": "scan.yaml: GET /v0/splice-instance-names", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/splice-instance-names.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getSynchronizerBootstrappingTransactions", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0synchronizer-bootstrapping-transactions:domain_id_prefix", + "location": "scan.yaml: GET /v0/synchronizer-bootstrapping-transactions/{domain_id_prefix}", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/synchronizer-bootstrapping-transactions/{domain_id_prefix}.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getSynchronizerIdentities", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0synchronizer-identities:domain_id_prefix", + "location": "scan.yaml: GET /v0/synchronizer-identities/{domain_id_prefix}", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/synchronizer-identities/{domain_id_prefix}.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getTopProvidersByAppRewards", + "kind": "operation", + "route": null, + "location": "scan.yaml: GET /v0/top-providers-by-app-rewards", + "first_seen": "0.5.10", + "last_seen": "0.6.5", + "current_present": false, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/top-providers-by-app-rewards.get", + "detail": null + }, + "observed_removal": "0.6.6", + "removal_evidence": { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.6/0.6.6_openapi.tar.gz", + "observed_in_version": "0.6.6", + "location": "scan.yaml", + "detail": "GET /v0/top-providers-by-app-rewards is absent from this specification snapshot." + }, + "last_changed": null, + "changes": [], + "lifecycle_state": "deprecated", + "lifecycle_transitions": [ + { + "state": "deprecated", + "version": "0.5.10", + "evidence": { + "kind": "source_metadata", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/top-providers-by-app-rewards.get.deprecated", + "detail": null + } + } + ], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getTopValidatorsByPurchasedTraffic", + "kind": "operation", + "route": null, + "location": "scan.yaml: GET /v0/top-validators-by-purchased-traffic", + "first_seen": "0.5.10", + "last_seen": "0.6.5", + "current_present": false, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/top-validators-by-purchased-traffic.get", + "detail": null + }, + "observed_removal": "0.6.6", + "removal_evidence": { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.6/0.6.6_openapi.tar.gz", + "observed_in_version": "0.6.6", + "location": "scan.yaml", + "detail": "GET /v0/top-validators-by-purchased-traffic is absent from this specification snapshot." + }, + "last_changed": null, + "changes": [], + "lifecycle_state": "deprecated", + "lifecycle_transitions": [ + { + "state": "deprecated", + "version": "0.5.10", + "evidence": { + "kind": "source_metadata", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/top-validators-by-purchased-traffic.get.deprecated", + "detail": null + } + } + ], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getTopValidatorsByValidatorFaucets", + "kind": "operation", + "route": null, + "location": "scan.yaml: GET /v0/top-validators-by-validator-faucets", + "first_seen": "0.5.10", + "last_seen": "0.6.5", + "current_present": false, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/top-validators-by-validator-faucets.get", + "detail": null + }, + "observed_removal": "0.6.6", + "removal_evidence": { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.6/0.6.6_openapi.tar.gz", + "observed_in_version": "0.6.6", + "location": "scan.yaml", + "detail": "GET /v0/top-validators-by-validator-faucets is absent from this specification snapshot." + }, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getTopValidatorsByValidatorRewards", + "kind": "operation", + "route": null, + "location": "scan.yaml: GET /v0/top-validators-by-validator-rewards", + "first_seen": "0.5.10", + "last_seen": "0.6.5", + "current_present": false, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/top-validators-by-validator-rewards.get", + "detail": null + }, + "observed_removal": "0.6.6", + "removal_evidence": { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.6/0.6.6_openapi.tar.gz", + "observed_in_version": "0.6.6", + "location": "scan.yaml", + "detail": "GET /v0/top-validators-by-validator-rewards is absent from this specification snapshot." + }, + "last_changed": null, + "changes": [], + "lifecycle_state": "deprecated", + "lifecycle_transitions": [ + { + "state": "deprecated", + "version": "0.5.10", + "evidence": { + "kind": "source_metadata", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/top-validators-by-validator-rewards.get.deprecated", + "detail": null + } + } + ], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getUpdateByHash", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v2updateshash:hash", + "location": "scan.yaml: GET /v2/updates/hash/{hash}", + "first_seen": "0.6.0", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.0/0.6.0_openapi.tar.gz", + "observed_in_version": "0.6.0", + "location": "scan.yaml#paths./v2/updates/hash/{hash}.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getUpdateById", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0updates:update_id", + "location": "scan.yaml: GET /v0/updates/{update_id}", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/updates/{update_id}.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": "0.6.0", + "changes": [ + { + "version": "0.5.17", + "summary": "The GET /v0/updates/{update_id} operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.17/0.5.17_openapi.tar.gz", + "observed_in_version": "0.5.17", + "location": "scan.yaml#paths./v0/updates/{update_id}.get", + "detail": null + } + ] + }, + { + "version": "0.6.0", + "summary": "The GET /v0/updates/{update_id} operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.0/0.6.0_openapi.tar.gz", + "observed_in_version": "0.6.0", + "location": "scan.yaml#paths./v0/updates/{update_id}.get", + "detail": null + } + ] + } + ], + "lifecycle_state": "deprecated", + "lifecycle_transitions": [ + { + "state": "deprecated", + "version": "0.5.10", + "evidence": { + "kind": "source_metadata", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/updates/{update_id}.get.deprecated", + "detail": null + } + } + ], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getUpdateByIdV1", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v1updates:update_id", + "location": "scan.yaml: GET /v1/updates/{update_id}", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v1/updates/{update_id}.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": "0.6.0", + "changes": [ + { + "version": "0.5.17", + "summary": "The GET /v1/updates/{update_id} operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.17/0.5.17_openapi.tar.gz", + "observed_in_version": "0.5.17", + "location": "scan.yaml#paths./v1/updates/{update_id}.get", + "detail": null + } + ] + }, + { + "version": "0.6.0", + "summary": "The GET /v1/updates/{update_id} operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.0/0.6.0_openapi.tar.gz", + "observed_in_version": "0.6.0", + "location": "scan.yaml#paths./v1/updates/{update_id}.get", + "detail": null + } + ] + } + ], + "lifecycle_state": "deprecated", + "lifecycle_transitions": [ + { + "state": "deprecated", + "version": "0.5.10", + "evidence": { + "kind": "source_metadata", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v1/updates/{update_id}.get.deprecated", + "detail": null + } + } + ], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getUpdateByIdV2", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v2updates:update_id", + "location": "scan.yaml: GET /v2/updates/{update_id}", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v2/updates/{update_id}.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": "0.6.0", + "changes": [ + { + "version": "0.5.17", + "summary": "The GET /v2/updates/{update_id} operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.17/0.5.17_openapi.tar.gz", + "observed_in_version": "0.5.17", + "location": "scan.yaml#paths./v2/updates/{update_id}.get", + "detail": null + } + ] + }, + { + "version": "0.6.0", + "summary": "The GET /v2/updates/{update_id} operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.0/0.6.0_openapi.tar.gz", + "observed_in_version": "0.6.0", + "location": "scan.yaml#paths./v2/updates/{update_id}.get", + "detail": null + } + ] + } + ], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getUpdateHistory", + "kind": "operation", + "route": "/reference/splice-scan-api/post-v0updates", + "location": "scan.yaml: POST /v0/updates", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/updates.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": "0.6.0", + "changes": [ + { + "version": "0.5.17", + "summary": "The POST /v0/updates operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.17/0.5.17_openapi.tar.gz", + "observed_in_version": "0.5.17", + "location": "scan.yaml#paths./v0/updates.post", + "detail": null + } + ] + }, + { + "version": "0.6.0", + "summary": "The POST /v0/updates operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.0/0.6.0_openapi.tar.gz", + "observed_in_version": "0.6.0", + "location": "scan.yaml#paths./v0/updates.post", + "detail": null + } + ] + } + ], + "lifecycle_state": "deprecated", + "lifecycle_transitions": [ + { + "state": "deprecated", + "version": "0.5.10", + "evidence": { + "kind": "source_metadata", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/updates.post.deprecated", + "detail": null + } + } + ], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getUpdateHistoryV1", + "kind": "operation", + "route": "/reference/splice-scan-api/post-v1updates", + "location": "scan.yaml: POST /v1/updates", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v1/updates.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": "0.6.0", + "changes": [ + { + "version": "0.5.17", + "summary": "The POST /v1/updates operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.17/0.5.17_openapi.tar.gz", + "observed_in_version": "0.5.17", + "location": "scan.yaml#paths./v1/updates.post", + "detail": null + } + ] + }, + { + "version": "0.6.0", + "summary": "The POST /v1/updates operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.0/0.6.0_openapi.tar.gz", + "observed_in_version": "0.6.0", + "location": "scan.yaml#paths./v1/updates.post", + "detail": null + } + ] + } + ], + "lifecycle_state": "deprecated", + "lifecycle_transitions": [ + { + "state": "deprecated", + "version": "0.5.10", + "evidence": { + "kind": "source_metadata", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v1/updates.post.deprecated", + "detail": null + } + } + ], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getUpdateHistoryV2", + "kind": "operation", + "route": "/reference/splice-scan-api/post-v2updates", + "location": "scan.yaml: POST /v2/updates", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v2/updates.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": "0.6.0", + "changes": [ + { + "version": "0.5.17", + "summary": "The POST /v2/updates operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.17/0.5.17_openapi.tar.gz", + "observed_in_version": "0.5.17", + "location": "scan.yaml#paths./v2/updates.post", + "detail": null + } + ] + }, + { + "version": "0.6.0", + "summary": "The POST /v2/updates operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.0/0.6.0_openapi.tar.gz", + "observed_in_version": "0.6.0", + "location": "scan.yaml#paths./v2/updates.post", + "detail": null + } + ] + } + ], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getUpdatesBefore", + "kind": "operation", + "route": "/reference/splice-scan-api/post-v0backfillingupdates-before", + "location": "scan.yaml: POST /v0/backfilling/updates-before", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/backfilling/updates-before.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": "0.6.0", + "changes": [ + { + "version": "0.5.17", + "summary": "The POST /v0/backfilling/updates-before operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.17/0.5.17_openapi.tar.gz", + "observed_in_version": "0.5.17", + "location": "scan.yaml#paths./v0/backfilling/updates-before.post", + "detail": null + } + ] + }, + { + "version": "0.6.0", + "summary": "The POST /v0/backfilling/updates-before operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.0/0.6.0_openapi.tar.gz", + "observed_in_version": "0.6.0", + "location": "scan.yaml#paths./v0/backfilling/updates-before.post", + "detail": null + } + ] + } + ], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getValidatorFaucetsByValidator", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0validatorsvalidator-faucets", + "location": "scan.yaml: GET /v0/validators/validator-faucets", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/validators/validator-faucets.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getVersion", + "kind": "operation", + "route": "/reference/splice-scan-api/get-version", + "location": "scan.yaml: GET /version", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./version.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::isLive", + "kind": "operation", + "route": "/reference/splice-scan-api/get-livez", + "location": "scan.yaml: GET /livez", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./livez.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::isReady", + "kind": "operation", + "route": "/reference/splice-scan-api/get-readyz", + "location": "scan.yaml: GET /readyz", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./readyz.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::listActivity", + "kind": "operation", + "route": null, + "location": "scan.yaml: POST /v0/activities", + "first_seen": "0.5.10", + "last_seen": "0.6.7", + "current_present": false, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/activities.post", + "detail": null + }, + "observed_removal": "0.6.8", + "removal_evidence": { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.8/0.6.8_openapi.tar.gz", + "observed_in_version": "0.6.8", + "location": "scan.yaml", + "detail": "POST /v0/activities is absent from this specification snapshot." + }, + "last_changed": "0.5.12", + "changes": [ + { + "version": "0.5.12", + "summary": "The POST /v0/activities operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.12/0.5.12_openapi.tar.gz", + "observed_in_version": "0.5.12", + "location": "scan.yaml#paths./v0/activities.post", + "detail": null + } + ] + } + ], + "lifecycle_state": "deprecated", + "lifecycle_transitions": [ + { + "state": "deprecated", + "version": "0.5.10", + "evidence": { + "kind": "source_metadata", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/activities.post.deprecated", + "detail": null + } + } + ], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::listAmuletPriceVotes", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0amulet-pricevotes", + "location": "scan.yaml: GET /v0/amulet-price/votes", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/amulet-price/votes.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::listAnsEntries", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0ans-entries", + "location": "scan.yaml: GET /v0/ans-entries", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/ans-entries.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::listBulkAcsSnapshotObjects", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0historybulkacs", + "location": "scan.yaml: GET /v0/history/bulk/acs", + "first_seen": "0.5.17", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.17/0.5.17_openapi.tar.gz", + "observed_in_version": "0.5.17", + "location": "scan.yaml#paths./v0/history/bulk/acs.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::listBulkUpdateHistoryObjects", + "kind": "operation", + "route": "/reference/splice-scan-api/post-v0historybulkupdates", + "location": "scan.yaml: POST /v0/history/bulk/updates", + "first_seen": "0.5.18", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.18/0.5.18_openapi.tar.gz", + "observed_in_version": "0.5.18", + "location": "scan.yaml#paths./v0/history/bulk/updates.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::listDsoRulesVoteRequests", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0adminsvvoterequests", + "location": "scan.yaml: GET /v0/admin/sv/voterequests", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/admin/sv/voterequests.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::listDsoScans", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0scans", + "location": "scan.yaml: GET /v0/scans", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/scans.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::listDsoSequencers", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0dso-sequencers", + "location": "scan.yaml: GET /v0/dso-sequencers", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/dso-sequencers.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": "0.6.0", + "changes": [ + { + "version": "0.6.0", + "summary": "The GET /v0/dso-sequencers operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.0/0.6.0_openapi.tar.gz", + "observed_in_version": "0.6.0", + "location": "scan.yaml#paths./v0/dso-sequencers.get", + "detail": null + } + ] + } + ], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::listFeaturedAppRights", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0featured-apps", + "location": "scan.yaml: GET /v0/featured-apps", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/featured-apps.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::listFeaturedAppRightsByProvider", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0featured-appsby-provider:provider_party_id", + "location": "scan.yaml: GET /v0/featured-apps/by-provider/{provider_party_id}", + "first_seen": "0.6.0", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.0/0.6.0_openapi.tar.gz", + "observed_in_version": "0.6.0", + "location": "scan.yaml#paths./v0/featured-apps/by-provider/{provider_party_id}.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::listRoundPartyTotals", + "kind": "operation", + "route": null, + "location": "scan.yaml: POST /v0/round-party-totals", + "first_seen": "0.5.10", + "last_seen": "0.6.6", + "current_present": false, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/round-party-totals.post", + "detail": null + }, + "observed_removal": "0.6.7", + "removal_evidence": { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.7/0.6.7_openapi.tar.gz", + "observed_in_version": "0.6.7", + "location": "scan.yaml", + "detail": "POST /v0/round-party-totals is absent from this specification snapshot." + }, + "last_changed": null, + "changes": [], + "lifecycle_state": "deprecated", + "lifecycle_transitions": [ + { + "state": "deprecated", + "version": "0.5.10", + "evidence": { + "kind": "source_metadata", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/round-party-totals.post.deprecated", + "detail": null + } + } + ], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::listRoundTotals", + "kind": "operation", + "route": null, + "location": "scan.yaml: POST /v0/round-totals", + "first_seen": "0.5.10", + "last_seen": "0.6.6", + "current_present": false, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/round-totals.post", + "detail": null + }, + "observed_removal": "0.6.7", + "removal_evidence": { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.7/0.6.7_openapi.tar.gz", + "observed_in_version": "0.6.7", + "location": "scan.yaml", + "detail": "POST /v0/round-totals is absent from this specification snapshot." + }, + "last_changed": null, + "changes": [], + "lifecycle_state": "deprecated", + "lifecycle_transitions": [ + { + "state": "deprecated", + "version": "0.5.10", + "evidence": { + "kind": "source_metadata", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/round-totals.post.deprecated", + "detail": null + } + } + ], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::listSvBftSequencers", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0sv-bft-sequencers", + "location": "scan.yaml: GET /v0/sv-bft-sequencers", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/sv-bft-sequencers.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": "0.6.0", + "changes": [ + { + "version": "0.6.0", + "summary": "The GET /v0/sv-bft-sequencers operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.0/0.6.0_openapi.tar.gz", + "observed_in_version": "0.6.0", + "location": "scan.yaml#paths./v0/sv-bft-sequencers.get", + "detail": null + } + ] + } + ], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::listTransactionHistory", + "kind": "operation", + "route": null, + "location": "scan.yaml: POST /v0/transactions", + "first_seen": "0.5.10", + "last_seen": "0.6.14", + "current_present": false, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/transactions.post", + "detail": null + }, + "observed_removal": "0.7.0", + "removal_evidence": { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.7.0/0.7.0_openapi.tar.gz", + "observed_in_version": "0.7.0", + "location": "scan.yaml", + "detail": "POST /v0/transactions is absent from this specification snapshot." + }, + "last_changed": "0.5.12", + "changes": [ + { + "version": "0.5.12", + "summary": "The POST /v0/transactions operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.12/0.5.12_openapi.tar.gz", + "observed_in_version": "0.5.12", + "location": "scan.yaml#paths./v0/transactions.post", + "detail": null + } + ] + } + ], + "lifecycle_state": "deprecated", + "lifecycle_transitions": [ + { + "state": "deprecated", + "version": "0.5.10", + "evidence": { + "kind": "source_metadata", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/transactions.post.deprecated", + "detail": null + } + } + ], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::listUnclaimedDevelopmentFundCoupons", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0unclaimed-development-fund-coupons", + "location": "scan.yaml: GET /v0/unclaimed-development-fund-coupons", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/unclaimed-development-fund-coupons.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::listValidatorLicenses", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0adminvalidatorlicenses", + "location": "scan.yaml: GET /v0/admin/validator/licenses", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/admin/validator/licenses.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::listVoteRequestResults", + "kind": "operation", + "route": "/reference/splice-scan-api/post-v0adminsvvoteresults", + "location": "scan.yaml: POST /v0/admin/sv/voteresults", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/admin/sv/voteresults.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": "0.6.10", + "changes": [ + { + "version": "0.6.0", + "summary": "The POST /v0/admin/sv/voteresults operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.0/0.6.0_openapi.tar.gz", + "observed_in_version": "0.6.0", + "location": "scan.yaml#paths./v0/admin/sv/voteresults.post", + "detail": null + } + ] + }, + { + "version": "0.6.1", + "summary": "The POST /v0/admin/sv/voteresults operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.1/0.6.1_openapi.tar.gz", + "observed_in_version": "0.6.1", + "location": "scan.yaml#paths./v0/admin/sv/voteresults.post", + "detail": null + } + ] + }, + { + "version": "0.6.4", + "summary": "The POST /v0/admin/sv/voteresults operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.4/0.6.4_openapi.tar.gz", + "observed_in_version": "0.6.4", + "location": "scan.yaml#paths./v0/admin/sv/voteresults.post", + "detail": null + } + ] + }, + { + "version": "0.6.10", + "summary": "The POST /v0/admin/sv/voteresults operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.10/0.6.10_openapi.tar.gz", + "observed_in_version": "0.6.10", + "location": "scan.yaml#paths./v0/admin/sv/voteresults.post", + "detail": null + } + ] + } + ], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::listVoteRequestsByTrackingCid", + "kind": "operation", + "route": "/reference/splice-scan-api/post-v0voterequest", + "location": "scan.yaml: POST /v0/voterequest", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/voterequest.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::lookupAnsEntryByName", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0ans-entriesby-name:name", + "location": "scan.yaml: GET /v0/ans-entries/by-name/{name}", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/ans-entries/by-name/{name}.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::lookupAnsEntryByParty", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0ans-entriesby-party:party", + "location": "scan.yaml: GET /v0/ans-entries/by-party/{party}", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/ans-entries/by-party/{party}.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::lookupDsoRulesVoteRequest", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0voterequests:vote_request_contract_id", + "location": "scan.yaml: GET /v0/voterequests/{vote_request_contract_id}", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/voterequests/{vote_request_contract_id}.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::lookupFeaturedAppRight", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0featured-apps:provider_party_id", + "location": "scan.yaml: GET /v0/featured-apps/{provider_party_id}", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/featured-apps/{provider_party_id}.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::lookupFeaturedAppRightByContractId", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0featured-appsby-contract-id:contract_id", + "location": "scan.yaml: GET /v0/featured-apps/by-contract-id/{contract_id}", + "first_seen": "0.6.0", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.0/0.6.0_openapi.tar.gz", + "observed_in_version": "0.6.0", + "location": "scan.yaml#paths./v0/featured-apps/by-contract-id/{contract_id}.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::lookupTransferCommandCounterByParty", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0transfer-command-counter:party", + "location": "scan.yaml: GET /v0/transfer-command-counter/{party}", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/transfer-command-counter/{party}.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::lookupTransferCommandStatus", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0transfer-commandstatus", + "location": "scan.yaml: GET /v0/transfer-command/status", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/transfer-command/status.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::lookupTransferPreapprovalByParty", + "kind": "operation", + "route": "/reference/splice-scan-api/get-v0transfer-preapprovalsby-party:party", + "location": "scan.yaml: GET /v0/transfer-preapprovals/by-party/{party}", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "scan.yaml#paths./v0/transfer-preapprovals/by-party/{party}.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "token-metadata-v1.yaml::getInstrument", + "kind": "operation", + "route": "/reference/splice-token-metadata-service/get-registrymetadatav1instruments:instrumentid", + "location": "token-metadata-v1.yaml: GET /registry/metadata/v1/instruments/{instrumentId}", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "token-metadata-v1.yaml#paths./registry/metadata/v1/instruments/{instrumentId}.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": "0.6.12", + "changes": [ + { + "version": "0.6.11", + "summary": "The GET /registry/metadata/v1/instruments/{instrumentId} operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.11/0.6.11_openapi.tar.gz", + "observed_in_version": "0.6.11", + "location": "token-metadata-v1.yaml#paths./registry/metadata/v1/instruments/{instrumentId}.get", + "detail": null + } + ] + }, + { + "version": "0.6.12", + "summary": "The GET /registry/metadata/v1/instruments/{instrumentId} operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.12/0.6.12_openapi.tar.gz", + "observed_in_version": "0.6.12", + "location": "token-metadata-v1.yaml#paths./registry/metadata/v1/instruments/{instrumentId}.get", + "detail": null + } + ] + } + ], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "token-metadata-v1.yaml::getRegistryInfo", + "kind": "operation", + "route": "/reference/splice-token-metadata-service/get-registrymetadatav1info", + "location": "token-metadata-v1.yaml: GET /registry/metadata/v1/info", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "token-metadata-v1.yaml#paths./registry/metadata/v1/info.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "token-metadata-v1.yaml::listInstruments", + "kind": "operation", + "route": "/reference/splice-token-metadata-service/get-registrymetadatav1instruments", + "location": "token-metadata-v1.yaml: GET /registry/metadata/v1/instruments", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "token-metadata-v1.yaml#paths./registry/metadata/v1/instruments.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": "0.6.12", + "changes": [ + { + "version": "0.6.11", + "summary": "The GET /registry/metadata/v1/instruments operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.11/0.6.11_openapi.tar.gz", + "observed_in_version": "0.6.11", + "location": "token-metadata-v1.yaml#paths./registry/metadata/v1/instruments.get", + "detail": null + } + ] + }, + { + "version": "0.6.12", + "summary": "The GET /registry/metadata/v1/instruments operation changed in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.12/0.6.12_openapi.tar.gz", + "observed_in_version": "0.6.12", + "location": "token-metadata-v1.yaml#paths./registry/metadata/v1/instruments.get", + "detail": null + } + ] + } + ], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "transfer-instruction-v1.yaml::getTransferFactory", + "kind": "operation", + "route": "/reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1transfer-factory", + "location": "transfer-instruction-v1.yaml: POST /registry/transfer-instruction/v1/transfer-factory", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "transfer-instruction-v1.yaml#paths./registry/transfer-instruction/v1/transfer-factory.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "transfer-instruction-v1.yaml::getTransferInstructionAcceptContext", + "kind": "operation", + "route": "/reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1:transferinstructionidchoice-contextsaccept", + "location": "transfer-instruction-v1.yaml: POST /registry/transfer-instruction/v1/{transferInstructionId}/choice-contexts/accept", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "transfer-instruction-v1.yaml#paths./registry/transfer-instruction/v1/{transferInstructionId}/choice-contexts/accept.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "transfer-instruction-v1.yaml::getTransferInstructionRejectContext", + "kind": "operation", + "route": "/reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1:transferinstructionidchoice-contextsreject", + "location": "transfer-instruction-v1.yaml: POST /registry/transfer-instruction/v1/{transferInstructionId}/choice-contexts/reject", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "transfer-instruction-v1.yaml#paths./registry/transfer-instruction/v1/{transferInstructionId}/choice-contexts/reject.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "transfer-instruction-v1.yaml::getTransferInstructionWithdrawContext", + "kind": "operation", + "route": "/reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1:transferinstructionidchoice-contextswithdraw", + "location": "transfer-instruction-v1.yaml: POST /registry/transfer-instruction/v1/{transferInstructionId}/choice-contexts/withdraw", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "transfer-instruction-v1.yaml#paths./registry/transfer-instruction/v1/{transferInstructionId}/choice-contexts/withdraw.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "transfer-instruction-v2.yaml::getTransferFactory", + "kind": "operation", + "route": "/reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2transfer-factory", + "location": "transfer-instruction-v2.yaml: POST /registry/transfer-instruction/v2/transfer-factory", + "first_seen": "0.6.11", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.11/0.6.11_openapi.tar.gz", + "observed_in_version": "0.6.11", + "location": "transfer-instruction-v2.yaml#paths./registry/transfer-instruction/v2/transfer-factory.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "transfer-instruction-v2.yaml::getTransferInstructionAcceptContext", + "kind": "operation", + "route": "/reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2:transferinstructionidchoice-contextsaccept", + "location": "transfer-instruction-v2.yaml: POST /registry/transfer-instruction/v2/{transferInstructionId}/choice-contexts/accept", + "first_seen": "0.6.11", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.11/0.6.11_openapi.tar.gz", + "observed_in_version": "0.6.11", + "location": "transfer-instruction-v2.yaml#paths./registry/transfer-instruction/v2/{transferInstructionId}/choice-contexts/accept.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "transfer-instruction-v2.yaml::getTransferInstructionRejectContext", + "kind": "operation", + "route": "/reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2:transferinstructionidchoice-contextsreject", + "location": "transfer-instruction-v2.yaml: POST /registry/transfer-instruction/v2/{transferInstructionId}/choice-contexts/reject", + "first_seen": "0.6.11", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.11/0.6.11_openapi.tar.gz", + "observed_in_version": "0.6.11", + "location": "transfer-instruction-v2.yaml#paths./registry/transfer-instruction/v2/{transferInstructionId}/choice-contexts/reject.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "transfer-instruction-v2.yaml::getTransferInstructionWithdrawContext", + "kind": "operation", + "route": "/reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2:transferinstructionidchoice-contextswithdraw", + "location": "transfer-instruction-v2.yaml: POST /registry/transfer-instruction/v2/{transferInstructionId}/choice-contexts/withdraw", + "first_seen": "0.6.11", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.6.11/0.6.11_openapi.tar.gz", + "observed_in_version": "0.6.11", + "location": "transfer-instruction-v2.yaml#paths./registry/transfer-instruction/v2/{transferInstructionId}/choice-contexts/withdraw.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "wallet-external.yaml::createBuyTrafficRequest", + "kind": "operation", + "route": "/reference/splice-wallet-api-external/post-v0walletbuy-traffic-requests", + "location": "wallet-external.yaml: POST /v0/wallet/buy-traffic-requests", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "wallet-external.yaml#paths./v0/wallet/buy-traffic-requests.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "wallet-external.yaml::createTransferOffer", + "kind": "operation", + "route": "/reference/splice-wallet-api-external/post-v0wallettransfer-offers", + "location": "wallet-external.yaml: POST /v0/wallet/transfer-offers", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "wallet-external.yaml#paths./v0/wallet/transfer-offers.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "wallet-external.yaml::getBuyTrafficRequestStatus", + "kind": "operation", + "route": "/reference/splice-wallet-api-external/post-v0walletbuy-traffic-requests:tracking_idstatus", + "location": "wallet-external.yaml: POST /v0/wallet/buy-traffic-requests/{tracking_id}/status", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "wallet-external.yaml#paths./v0/wallet/buy-traffic-requests/{tracking_id}/status.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "wallet-external.yaml::getTransferOfferStatus", + "kind": "operation", + "route": "/reference/splice-wallet-api-external/post-v0wallettransfer-offers:tracking_idstatus", + "location": "wallet-external.yaml: POST /v0/wallet/transfer-offers/{tracking_id}/status", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "wallet-external.yaml#paths./v0/wallet/transfer-offers/{tracking_id}/status.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "wallet-external.yaml::listTransferOffers", + "kind": "operation", + "route": "/reference/splice-wallet-api-external/get-v0wallettransfer-offers", + "location": "wallet-external.yaml: GET /v0/wallet/transfer-offers", + "first_seen": "0.5.10", + "last_seen": "0.7.4", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.5.10/0.5.10_openapi.tar.gz", + "observed_in_version": "0.5.10", + "location": "wallet-external.yaml#paths./v0/wallet/transfer-offers.get", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, + "last_changed": null, + "changes": [], + "lifecycle_state": null, + "lifecycle_transitions": [], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + } + ], + "limitations": [ + "wallet-internal.yaml is excluded: Internal validator API; excluded from the reader-facing Splice API reference.", + "validator-internal.yaml is excluded: Internal validator API; excluded from the reader-facing Splice API reference.", + "scan-stream-server.yaml is absent from 6 selected release snapshot(s): 0.5.10, 0.5.11, 0.5.12, 0.5.13, 0.5.14, 0.5.15. Its operation history uses only releases that contain the specification.", + "transfer-instruction-v2.yaml is absent from 20 selected release snapshot(s): 0.5.10, 0.5.11, 0.5.12, 0.5.13, 0.5.14, 0.5.15, 0.5.16, 0.5.17, 0.5.18, 0.6.0, 0.6.1, 0.6.2, 0.6.3, 0.6.4, 0.6.5, 0.6.6, 0.6.7, 0.6.8, 0.6.9, 0.6.10. Its operation history uses only releases that contain the specification.", + "allocation-v2.yaml is absent from 20 selected release snapshot(s): 0.5.10, 0.5.11, 0.5.12, 0.5.13, 0.5.14, 0.5.15, 0.5.16, 0.5.17, 0.5.18, 0.6.0, 0.6.1, 0.6.2, 0.6.3, 0.6.4, 0.6.5, 0.6.6, 0.6.7, 0.6.8, 0.6.9, 0.6.10. Its operation history uses only releases that contain the specification.", + "allocation-instruction-v2.yaml is absent from 20 selected release snapshot(s): 0.5.10, 0.5.11, 0.5.12, 0.5.13, 0.5.14, 0.5.15, 0.5.16, 0.5.17, 0.5.18, 0.6.0, 0.6.1, 0.6.2, 0.6.3, 0.6.4, 0.6.5, 0.6.6, 0.6.7, 0.6.8, 0.6.9, 0.6.10. Its operation history uses only releases that contain the specification." + ] +} diff --git a/scripts/generate_splice_mintlify_openapi.py b/scripts/generate_splice_mintlify_openapi.py index a950e0095..dc773b1bc 100644 --- a/scripts/generate_splice_mintlify_openapi.py +++ b/scripts/generate_splice_mintlify_openapi.py @@ -17,9 +17,18 @@ import yaml from validate_splice_mintlify_openapi_nav import validate_splice_nav +from x2mdx.history import ( + SourceArtifact, + SurfaceHistoryReport, + VersionSelectionPolicy, + history_events_for_item, + validate_history_report, + write_history_report, +) from x2mdx.openapi import ( ManualOpenAPIRenderOptions, - operation_history_events, + OpenAPIHistoryScope, + build_openapi_history_report, render_manual_openapi_operation, ) from x2mdx.render import write_page @@ -37,6 +46,9 @@ REPO_ROOT / ".internal" / "cache" / "mintlify-openapi" / "splice-openapi" ) DEFAULT_DOCS_JSON = REPO_ROOT / "docs-main" / "docs.json" +DEFAULT_HISTORY_REPORT = ( + REPO_ROOT / "docs-main" / "openapi" / "splice" / "history-report.json" +) HTTP_METHODS = {"get", "put", "post", "delete", "options", "head", "patch", "trace"} SCAN_OPENAPI_PLACEHOLDER_SERVER = "https://example.com/api/scan" SCAN_OPENAPI_PUBLIC_SERVER = ( @@ -192,6 +204,24 @@ def resolve_publish_release( return selected +def comparison_releases_through_publish( + *, releases: list[dict[str, str]], publish_version: str +) -> list[dict[str, str]]: + publish_index = next( + ( + index + for index, release in enumerate(releases) + if release["version"] == publish_version + ), + None, + ) + if publish_index is None: + raise ValueError( + f"Publish version '{publish_version}' is absent from selected releases" + ) + return releases[: publish_index + 1] + + def archive_path(cache_dir: Path, *, release: dict[str, str]) -> Path: return cache_dir / "archives" / release["version"] / release["asset_name"] @@ -692,6 +722,76 @@ def manual_operation_page_refs(*, spec: dict[str, Any], directory: str) -> list[ ] +def build_splice_history_report( + *, + source_config: dict[str, Any], + families: list[dict[str, Any]], + snapshots: dict[str, dict[str, dict[str, Any]]], + releases: list[dict[str, str]], + publish_version: str, +) -> SurfaceHistoryReport: + comparison_versions = tuple(release["version"] for release in releases) + scopes: list[OpenAPIHistoryScope] = [] + for family in families: + for spec_config in family["specs"]: + filename = spec_config["filename"] + specs_by_version = snapshots[filename] + published = specs_by_version.get(publish_version) + if published is None: + raise ValueError( + f"Enabled spec {filename} is absent from publish version {publish_version}" + ) + current_routes = { + (method.lower(), path): ( + "/" + + manual_operation_page_ref( + directory=spec_config["directory"], + method=method, + path=path, + ) + ) + for method, path, _operation in operation_items(published) + } + scopes.append( + OpenAPIHistoryScope( + id=filename, + specs_by_version=specs_by_version, + current_routes=current_routes, + ) + ) + + source_artifacts = tuple( + SourceArtifact( + version=release["version"], + source=release["download_url"], + revision=release["tag"], + path=release["asset_name"], + ) + for release in releases + ) + limitations = tuple( + f"{item['filename']} is excluded: {item['reason']}" + for item in source_config.get("excluded_specs", []) + if isinstance(item, dict) + and isinstance(item.get("filename"), str) + and isinstance(item.get("reason"), str) + ) + return build_openapi_history_report( + surface_id="splice-openapi", + title="Splice OpenAPI", + configured_scope=( + f"Reader-facing operations from {len(scopes)} enabled Splice OpenAPI " + "specifications." + ), + scopes=tuple(scopes), + comparison_versions=comparison_versions, + publish_version=publish_version, + source_artifacts=source_artifacts, + version_policy=VersionSelectionPolicy.LATEST_SELECTED_RELEASE, + limitations=limitations, + ) + + def validate_manual_route_baseline( source_config: dict[str, Any], *, @@ -820,20 +920,19 @@ def write_manual_operation_pages( docs_json_path: Path, families: list[dict[str, Any]], snapshots: dict[str, dict[str, dict[str, Any]]], - release_versions: list[str], publish_version: str, - source_name: str, + history_report: SurfaceHistoryReport, ) -> set[Path]: docs_root = docs_json_path.parent prepare_manual_output_directories(docs_root=docs_root, families=families) written: set[Path] = set() + history_items_by_route = { + item.route: item for item in history_report.current_items() if item.route + } for family in families: for spec_config in family["specs"]: filename = spec_config["filename"] specs_by_version = snapshots[filename] - versions = [ - version for version in release_versions if version in specs_by_version - ] if publish_version not in specs_by_version: raise ValueError( f"Enabled spec {filename} is absent from publish version {publish_version}" @@ -851,13 +950,17 @@ def write_manual_operation_pages( spec=published, operation=operation, ) - history_events = operation_history_events( - specs_by_version=specs_by_version, - versions=versions, - publish_version=publish_version, - method=method, - path=path, - source_name=f"{source_name}: {filename}", + history_item = history_items_by_route.get(f"/{page_ref}") + if history_item is None or not history_item.current_present: + raise ValueError( + f"Normalized Splice history is missing current operation: " + f"{filename} {method} {path}" + ) + history_events = list( + history_events_for_item( + history_item, + comparison_versions=history_report.comparison_versions, + ) ) page = render_manual_openapi_operation( spec=published, @@ -1045,6 +1148,11 @@ def parse_args() -> argparse.Namespace: parser.add_argument("--source-config", default=str(DEFAULT_SOURCE_CONFIG)) parser.add_argument("--cache-dir", default=str(DEFAULT_CACHE_DIR)) parser.add_argument("--docs-json", default=str(DEFAULT_DOCS_JSON)) + parser.add_argument( + "--history-report", + default=str(DEFAULT_HISTORY_REPORT), + help="Write the validated normalized Splice history report to this JSON path.", + ) parser.add_argument( "--publish-version", help="Explicit decentralized-canton-sync release version whose OpenAPI bundle should drive the Mintlify view.", @@ -1074,6 +1182,10 @@ def main() -> int: releases=releases, requested_version=args.publish_version, ) + comparison_releases = comparison_releases_through_publish( + releases=releases, + publish_version=publish_release["version"], + ) cache_dir = Path(args.cache_dir).resolve() archive = ensure_archive( cache_dir=cache_dir, @@ -1109,7 +1221,7 @@ def main() -> int: } snapshots = versioned_enabled_specs( cache_dir=cache_dir, - releases=releases, + releases=comparison_releases, spec_filenames=enabled_filenames, force_refresh=args.force_refresh, ) @@ -1119,15 +1231,23 @@ def main() -> int: snapshots=snapshots, publish_version=publish_release["version"], ) + history_report = build_splice_history_report( + source_config=source_config, + families=navigation_families, + snapshots=snapshots, + releases=comparison_releases, + publish_version=publish_release["version"], + ) + validate_history_report(history_report) + history_report_path = Path(args.history_report).resolve() + write_history_report(history_report_path, history_report) + print(f"Generated normalized Splice history report: {history_report_path}") write_manual_operation_pages( docs_json_path=docs_json_path, families=navigation_families, snapshots=snapshots, - release_versions=[release["version"] for release in releases], publish_version=publish_release["version"], - source_name=str( - source_config.get("source") or "Splice OpenAPI release bundle snapshots" - ), + history_report=history_report, ) cleanup_legacy_outputs(docs_root=docs_root, source_config=source_config) update_docs_navigation( diff --git a/src/x2mdx/history/__init__.py b/src/x2mdx/history/__init__.py index b602cc6d8..6d7a30390 100644 --- a/src/x2mdx/history/__init__.py +++ b/src/x2mdx/history/__init__.py @@ -5,6 +5,7 @@ history_report_from_dict, history_report_to_dict, load_history_report, + write_history_report, ) from x2mdx.history.models import ( ChangeDetail, @@ -47,4 +48,5 @@ "history_report_to_dict", "load_history_report", "validate_history_report", + "write_history_report", ] diff --git a/src/x2mdx/history/io.py b/src/x2mdx/history/io.py index 81160b127..4aa544b60 100644 --- a/src/x2mdx/history/io.py +++ b/src/x2mdx/history/io.py @@ -151,3 +151,11 @@ def load_history_report(path: Path) -> SurfaceHistoryReport: def history_report_to_dict(report: SurfaceHistoryReport) -> dict[str, Any]: return asdict(report) + + +def write_history_report(path: Path, report: SurfaceHistoryReport) -> None: + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text( + json.dumps(history_report_to_dict(report), indent=2) + "\n", + encoding="utf-8", + ) diff --git a/src/x2mdx/history/validation.py b/src/x2mdx/history/validation.py index 50e9788a0..5cc641f68 100644 --- a/src/x2mdx/history/validation.py +++ b/src/x2mdx/history/validation.py @@ -292,6 +292,8 @@ def validate_history_report(report: SurfaceHistoryReport) -> None: problems.append("comparison_versions must be unique") if report.publish_version not in versions: problems.append("publish_version must be present in comparison_versions") + elif versions and versions[-1] != report.publish_version: + problems.append("publish_version must be the final comparison version") if report.history_mode == HistoryMode.UNAVAILABLE and not report.limitations: problems.append("history_mode=unavailable requires at least one limitation") @@ -309,6 +311,13 @@ def validate_history_report(report: SurfaceHistoryReport) -> None: item_ids = [item.id for item in report.items] if len(item_ids) != len(set(item_ids)): problems.append("item IDs must be unique") + current_routes = [ + item.route + for item in report.items + if item.current_present and item.route is not None + ] + if len(current_routes) != len(set(current_routes)): + problems.append("current item routes must be unique") known_item_ids = set(item_ids) for item in report.items: _validate_item(item, report=report, item_ids=known_item_ids, problems=problems) diff --git a/src/x2mdx/openapi/__init__.py b/src/x2mdx/openapi/__init__.py index fbf810882..21f2087f7 100644 --- a/src/x2mdx/openapi/__init__.py +++ b/src/x2mdx/openapi/__init__.py @@ -1,3 +1,7 @@ +from x2mdx.openapi.history import ( + OpenAPIHistoryScope, + build_openapi_history_report, +) from x2mdx.openapi.render import ( ManualOpenAPIRenderOptions, operation_history_events, @@ -6,6 +10,8 @@ __all__ = [ "ManualOpenAPIRenderOptions", + "OpenAPIHistoryScope", + "build_openapi_history_report", "operation_history_events", "render_manual_openapi_operation", ] diff --git a/src/x2mdx/openapi/history.py b/src/x2mdx/openapi/history.py new file mode 100644 index 000000000..98affbff9 --- /dev/null +++ b/src/x2mdx/openapi/history.py @@ -0,0 +1,699 @@ +from __future__ import annotations + +import json +import re +from dataclasses import dataclass, field, replace +from typing import Any, Mapping + +from x2mdx.history.models import ( + ChangeDetail, + Evidence, + EvidenceKind, + HistoryItem, + HistoryMode, + IdentityConfidence, + LifecycleState, + LifecycleTransition, + ReferenceFormat, + ReplacementEdge, + SourceArtifact, + SurfaceHistoryReport, + VersionSelectionPolicy, +) + + +HTTP_METHODS = { + "get", + "put", + "post", + "delete", + "options", + "head", + "patch", + "trace", +} +REMOVE_AS_OF_RE = re.compile( + r"\b(?:will\s+be\s+)?removed\s+in\s+(?:the\s+)?(?:Canton\s+)?version\s+" + r"(?Pv?\d+(?:\.\d+){1,3}(?:[-+][0-9A-Za-z.-]+)?)", + re.IGNORECASE, +) + + +@dataclass(frozen=True) +class OpenAPIHistoryScope: + """One identity namespace within a combined OpenAPI history report.""" + + id: str + specs_by_version: Mapping[str, dict[str, Any]] + current_routes: Mapping[tuple[str, str], str] = field(default_factory=dict) + + +@dataclass(frozen=True) +class _OperationSnapshot: + version: str + method: str + path: str + operation: dict[str, Any] + fingerprint: str + used_fallback_identity: bool + + +def build_openapi_history_report( + *, + surface_id: str, + title: str, + configured_scope: str, + scopes: tuple[OpenAPIHistoryScope, ...], + comparison_versions: tuple[str, ...], + publish_version: str, + source_artifacts: tuple[SourceArtifact, ...], + version_policy: VersionSelectionPolicy, + limitations: tuple[str, ...] = (), +) -> SurfaceHistoryReport: + if not scopes: + raise ValueError("OpenAPI history requires at least one configured scope") + scope_ids = [scope.id for scope in scopes] + if len(scope_ids) != len(set(scope_ids)): + raise ValueError("OpenAPI history scope IDs must be unique") + + sources_by_version = _sources_by_version(source_artifacts) + missing_sources = tuple( + version for version in comparison_versions if version not in sources_by_version + ) + if missing_sources: + raise ValueError( + "OpenAPI history requires a source artifact for every comparison " + f"version: {', '.join(missing_sources)}" + ) + items: list[HistoryItem] = [] + used_fallback = False + for scope in scopes: + scope_items = _history_items_for_scope( + scope=scope, + comparison_versions=comparison_versions, + publish_version=publish_version, + sources_by_version=sources_by_version, + ) + items.extend(scope_items) + used_fallback = used_fallback or any( + item.identity_confidence == IdentityConfidence.FALLBACK + for item in scope_items + ) + + report_limitations = list(limitations) + for scope in scopes: + missing_versions = tuple( + version + for version in comparison_versions + if version not in scope.specs_by_version + ) + if missing_versions: + report_limitations.append( + f"{scope.id} is absent from {len(missing_versions)} selected release " + f"snapshot(s): {', '.join(missing_versions)}. Its operation history " + "uses only releases that contain the specification." + ) + if used_fallback: + report_limitations.append( + "Some snapshots omit operationId; identity falls back to METHOD path " + "within that OpenAPI specification and is recorded as lower confidence." + ) + + return SurfaceHistoryReport( + surface_id=surface_id, + title=title, + format=ReferenceFormat.OPENAPI, + configured_scope=configured_scope, + history_mode=HistoryMode.SNAPSHOTS, + publish_version=publish_version, + comparison_versions=comparison_versions, + source_artifacts=source_artifacts, + version_policy=version_policy, + items=tuple(sorted(items, key=lambda item: item.id)), + limitations=tuple(report_limitations), + ) + + +def _history_items_for_scope( + *, + scope: OpenAPIHistoryScope, + comparison_versions: tuple[str, ...], + publish_version: str, + sources_by_version: Mapping[str, str], +) -> list[HistoryItem]: + if publish_version not in scope.specs_by_version: + raise ValueError( + f"OpenAPI history scope {scope.id} is absent from publish version " + f"{publish_version}" + ) + available_versions = tuple( + version for version in comparison_versions if version in scope.specs_by_version + ) + observations = _observations_by_identity( + scope=scope, + comparison_versions=comparison_versions, + ) + known_item_ids = { + _scoped_item_id(scope_id=scope.id, local_id=local_id) + for local_id in observations + } + items = [ + _history_item( + scope=scope, + local_id=local_id, + observations=item_observations, + available_versions=available_versions, + publish_version=publish_version, + sources_by_version=sources_by_version, + known_item_ids=known_item_ids, + ) + for local_id, item_observations in observations.items() + ] + edges_by_item_id: dict[str, list[ReplacementEdge]] = { + item.id: list(item.replacement_edges) for item in items + } + all_edges = { + (edge.from_item_id, edge.to_item_id, edge.version): edge + for item in items + for edge in item.replacement_edges + } + for edge in all_edges.values(): + for endpoint in (edge.from_item_id, edge.to_item_id): + endpoint_edges = edges_by_item_id[endpoint] + if edge not in endpoint_edges: + endpoint_edges.append(edge) + return [ + replace(item, replacement_edges=tuple(edges_by_item_id[item.id])) + for item in items + ] + + +def _history_item( + *, + scope: OpenAPIHistoryScope, + local_id: str, + observations: list[_OperationSnapshot], + available_versions: tuple[str, ...], + publish_version: str, + sources_by_version: Mapping[str, str], + known_item_ids: set[str], +) -> HistoryItem: + item_id = _scoped_item_id(scope_id=scope.id, local_id=local_id) + first = observations[0] + last = observations[-1] + current = next( + ( + observation + for observation in observations + if observation.version == publish_version + ), + None, + ) + current_present = current is not None + observation_indexes = [ + available_versions.index(observation.version) for observation in observations + ] + if any( + right - left > 1 + for left, right in zip(observation_indexes, observation_indexes[1:]) + ): + raise ValueError( + f"OpenAPI operation disappears and later reappears within {scope.id}: " + f"{item_id}. The normalized history model cannot represent this " + "continuity without an explicit reintroduction event." + ) + location_observation = current or last + route = None + if current is not None: + route = scope.current_routes.get((current.method, current.path)) + if route is None: + raise ValueError( + f"Current OpenAPI operation has no configured reader route: " + f"{scope.id} {current.method.upper()} {current.path}" + ) + + introduction_evidence = _evidence( + kind=EvidenceKind.SNAPSHOT, + source=sources_by_version[first.version], + version=first.version, + scope_id=scope.id, + method=first.method, + path=first.path, + ) + changes = _changes( + scope_id=scope.id, + observations=observations, + sources_by_version=sources_by_version, + ) + lifecycle_transitions = _lifecycle_transitions( + scope_id=scope.id, + observations=observations, + sources_by_version=sources_by_version, + ) + remove_as_of, remove_as_of_evidence = _authored_remove_as_of( + scope_id=scope.id, + observations=observations, + sources_by_version=sources_by_version, + ) + replacement_edges = _replacement_edges( + scope_id=scope.id, + item_id=item_id, + observations=observations, + sources_by_version=sources_by_version, + known_item_ids=known_item_ids, + ) + + observed_removal = None + removal_evidence = None + if not current_present: + last_index = available_versions.index(last.version) + observed_removal = available_versions[last_index + 1] + removal_evidence = Evidence( + kind=EvidenceKind.SNAPSHOT_DIFF, + source=sources_by_version[observed_removal], + observed_in_version=observed_removal, + location=scope.id, + detail=( + f"{last.method.upper()} {last.path} is absent from this specification snapshot." + ), + ) + + identity_evidence = tuple( + _evidence( + kind=EvidenceKind.SNAPSHOT, + source=sources_by_version[observation.version], + version=observation.version, + scope_id=scope.id, + method=observation.method, + path=observation.path, + detail="operationId was absent; identity used the METHOD path fallback.", + ) + for observation in observations + if observation.used_fallback_identity + ) + identity_confidence = ( + IdentityConfidence.FALLBACK if identity_evidence else IdentityConfidence.EXACT + ) + lifecycle_state = lifecycle_transitions[-1].state if lifecycle_transitions else None + + return HistoryItem( + id=item_id, + kind="operation", + route=route, + location=( + f"{scope.id}: {location_observation.method.upper()} " + f"{location_observation.path}" + ), + first_seen=first.version, + last_seen=last.version, + current_present=current_present, + introduction_evidence=introduction_evidence, + observed_removal=observed_removal, + removal_evidence=removal_evidence, + last_changed=changes[-1].version if changes else None, + changes=changes, + lifecycle_state=lifecycle_state, + lifecycle_transitions=lifecycle_transitions, + remove_as_of=remove_as_of, + remove_as_of_evidence=remove_as_of_evidence, + replacement_edges=replacement_edges, + identity_confidence=identity_confidence, + identity_evidence=identity_evidence, + ) + + +def _observations_by_identity( + *, + scope: OpenAPIHistoryScope, + comparison_versions: tuple[str, ...], +) -> dict[str, list[_OperationSnapshot]]: + raw_by_version: dict[str, list[tuple[str, str, dict[str, Any], str | None]]] = {} + explicit_ids_by_location: dict[tuple[str, str], set[str]] = {} + for version in comparison_versions: + spec = scope.specs_by_version.get(version) + if spec is None: + continue + raw_operations: list[tuple[str, str, dict[str, Any], str | None]] = [] + seen_operation_ids: dict[str, tuple[str, str]] = {} + for method, path, operation in _operation_items(spec): + operation_id = _operation_id(operation) + if operation_id is not None: + if operation_id in seen_operation_ids: + previous_method, previous_path = seen_operation_ids[operation_id] + raise ValueError( + "Duplicate OpenAPI operationId " + f"'{operation_id}' in {scope.id} {version}: " + f"{previous_method.upper()} {previous_path} and " + f"{method.upper()} {path}" + ) + seen_operation_ids[operation_id] = (method, path) + explicit_ids_by_location.setdefault((method, path), set()).add( + operation_id + ) + raw_operations.append((method, path, operation, operation_id)) + raw_by_version[version] = raw_operations + + observations: dict[str, list[_OperationSnapshot]] = {} + for version in comparison_versions: + spec = scope.specs_by_version.get(version) + if spec is None: + continue + seen_local_ids: set[str] = set() + for method, path, operation, operation_id in raw_by_version[version]: + used_fallback = operation_id is None + local_id = operation_id + if local_id is None: + location_ids = explicit_ids_by_location.get((method, path), set()) + local_id = ( + next(iter(location_ids)) + if len(location_ids) == 1 + else _fallback_operation_id(method=method, path=path) + ) + if local_id in seen_local_ids: + raise ValueError( + f"OpenAPI history identity collision in {scope.id} {version}: {local_id}" + ) + seen_local_ids.add(local_id) + observations.setdefault(local_id, []).append( + _OperationSnapshot( + version=version, + method=method, + path=path, + operation=operation, + fingerprint=_operation_fingerprint( + spec, + operation, + method=method, + path=path, + ), + used_fallback_identity=used_fallback, + ) + ) + return observations + + +def _changes( + *, + scope_id: str, + observations: list[_OperationSnapshot], + sources_by_version: Mapping[str, str], +) -> tuple[ChangeDetail, ...]: + changes: list[ChangeDetail] = [] + previous = observations[0] + for observation in observations[1:]: + previous_location = (previous.method, previous.path) + location = (observation.method, observation.path) + if ( + observation.fingerprint == previous.fingerprint + and location == previous_location + ): + previous = observation + continue + if location != previous_location: + summary = ( + f"The operation moved from {previous.method.upper()} {previous.path} " + f"to {observation.method.upper()} {observation.path}." + ) + else: + summary = ( + f"The {observation.method.upper()} {observation.path} operation " + "changed in this snapshot." + ) + changes.append( + ChangeDetail( + version=observation.version, + summary=summary, + evidence=( + _evidence( + kind=EvidenceKind.SNAPSHOT_DIFF, + source=sources_by_version[observation.version], + version=observation.version, + scope_id=scope_id, + method=observation.method, + path=observation.path, + ), + ), + ) + ) + previous = observation + return tuple(changes) + + +def _lifecycle_transitions( + *, + scope_id: str, + observations: list[_OperationSnapshot], + sources_by_version: Mapping[str, str], +) -> tuple[LifecycleTransition, ...]: + transitions: list[LifecycleTransition] = [] + previous_state: LifecycleState | None = None + for observation in observations: + state, field_name = _authored_lifecycle_state(observation.operation) + if state is None or state == previous_state: + continue + transitions.append( + LifecycleTransition( + state=state, + version=observation.version, + evidence=_evidence( + kind=EvidenceKind.SOURCE_METADATA, + source=sources_by_version[observation.version], + version=observation.version, + scope_id=scope_id, + method=observation.method, + path=observation.path, + field_name=field_name, + ), + ) + ) + previous_state = state + return tuple(transitions) + + +def _authored_remove_as_of( + *, + scope_id: str, + observations: list[_OperationSnapshot], + sources_by_version: Mapping[str, str], +) -> tuple[str | None, Evidence | None]: + observation = observations[-1] + value = _remove_as_of(observation.operation) + if value is None: + return None, None + if isinstance(observation.operation.get("x-remove-as-of"), str): + field_name = "x-remove-as-of" + detail = "Authored removal schedule in the OpenAPI extension." + else: + field_name = "description" + detail = "Authored removal schedule in the OpenAPI operation text." + return value, _evidence( + kind=EvidenceKind.SOURCE_METADATA, + source=sources_by_version[observation.version], + version=observation.version, + scope_id=scope_id, + method=observation.method, + path=observation.path, + field_name=field_name, + detail=detail, + ) + + +def _replacement_edges( + *, + scope_id: str, + item_id: str, + observations: list[_OperationSnapshot], + sources_by_version: Mapping[str, str], + known_item_ids: set[str], +) -> tuple[ReplacementEdge, ...]: + edges: list[ReplacementEdge] = [] + seen_targets: set[str] = set() + for observation in observations: + replacement = observation.operation.get("x-replaces") + if not isinstance(replacement, str) or not replacement.strip(): + continue + from_item_id = _scoped_item_id( + scope_id=scope_id, + local_id=replacement.strip(), + ) + if from_item_id in seen_targets: + continue + if from_item_id not in known_item_ids: + raise ValueError( + f"{item_id} x-replaces references an operation outside the " + f"comparison window: {replacement.strip()}" + ) + seen_targets.add(from_item_id) + edges.append( + ReplacementEdge( + from_item_id=from_item_id, + to_item_id=item_id, + version=observation.version, + evidence=_evidence( + kind=EvidenceKind.SOURCE_METADATA, + source=sources_by_version[observation.version], + version=observation.version, + scope_id=scope_id, + method=observation.method, + path=observation.path, + field_name="x-replaces", + ), + ) + ) + return tuple(edges) + + +def _sources_by_version( + source_artifacts: tuple[SourceArtifact, ...], +) -> dict[str, str]: + sources: dict[str, str] = {} + for artifact in source_artifacts: + if artifact.version in sources: + raise ValueError( + f"OpenAPI history has duplicate source artifacts for {artifact.version}" + ) + sources[artifact.version] = artifact.source + return sources + + +def _operation_items( + spec: dict[str, Any], +) -> list[tuple[str, str, dict[str, Any]]]: + paths = spec.get("paths") + if not isinstance(paths, dict): + raise ValueError("OpenAPI specification must define paths") + operations: list[tuple[str, str, dict[str, Any]]] = [] + for path, path_item in paths.items(): + if not isinstance(path, str) or not isinstance(path_item, dict): + continue + for method, operation in path_item.items(): + normalized_method = method.lower() + if normalized_method in HTTP_METHODS and isinstance(operation, dict): + operations.append((normalized_method, path, operation)) + return operations + + +def _operation_fingerprint( + spec: dict[str, Any], + operation: dict[str, Any], + *, + method: str, + path: str, +) -> str: + paths = spec.get("paths") + path_item = paths.get(path) if isinstance(paths, dict) else None + path_parameters = ( + path_item.get("parameters") if isinstance(path_item, dict) else None + ) or [] + contract = { + "method": method.lower(), + "operation": operation, + "path_parameters": path_parameters, + } + return json.dumps( + _expand_local_refs(spec, contract), + sort_keys=True, + separators=(",", ":"), + ensure_ascii=False, + ) + + +def _expand_local_refs( + spec: dict[str, Any], + value: Any, + *, + seen_refs: frozenset[str] = frozenset(), +) -> Any: + if isinstance(value, list): + return [_expand_local_refs(spec, item, seen_refs=seen_refs) for item in value] + if not isinstance(value, dict): + return value + reference = value.get("$ref") + if isinstance(reference, str) and reference.startswith("#/"): + if reference in seen_refs: + return {"$ref": reference} + resolved = _resolve_local_ref(spec, reference) + return { + "$ref": reference, + "$resolved": _expand_local_refs( + spec, + resolved, + seen_refs=seen_refs | {reference}, + ), + } + return { + str(key): _expand_local_refs(spec, child, seen_refs=seen_refs) + for key, child in value.items() + } + + +def _resolve_local_ref(spec: dict[str, Any], reference: str) -> Any: + current: Any = spec + for token in reference[2:].split("/"): + token = token.replace("~1", "/").replace("~0", "~") + if not isinstance(current, dict) or token not in current: + raise ValueError(f"Unresolvable local OpenAPI reference: {reference}") + current = current[token] + return current + + +def _operation_id(operation: dict[str, Any]) -> str | None: + value = operation.get("operationId") + return value.strip() if isinstance(value, str) and value.strip() else None + + +def _fallback_operation_id(*, method: str, path: str) -> str: + return f"{method.upper()} {path}" + + +def _scoped_item_id(*, scope_id: str, local_id: str) -> str: + return f"{scope_id}::{local_id}" + + +def _remove_as_of(operation: dict[str, Any]) -> str | None: + extension = operation.get("x-remove-as-of") + if isinstance(extension, str) and extension.strip(): + return extension.strip().removeprefix("v") + text = " ".join(str(operation.get(key) or "") for key in ("summary", "description")) + match = REMOVE_AS_OF_RE.search(text) + return match.group("version").removeprefix("v") if match else None + + +def _authored_lifecycle_state( + operation: dict[str, Any], +) -> tuple[LifecycleState | None, str]: + raw_state = operation.get("x-state") + if raw_state is not None: + if not isinstance(raw_state, str): + raise ValueError("OpenAPI x-state must be a string") + try: + return LifecycleState(raw_state.strip().lower()), "x-state" + except ValueError as error: + allowed = ", ".join(state.value for state in LifecycleState) + raise ValueError( + f"Unsupported OpenAPI x-state '{raw_state}'; expected one of {allowed}" + ) from error + if operation.get("deprecated") is True: + return LifecycleState.DEPRECATED, "deprecated" + return None, "" + + +def _evidence( + *, + kind: EvidenceKind, + source: str, + version: str, + scope_id: str, + method: str, + path: str, + field_name: str | None = None, + detail: str | None = None, +) -> Evidence: + suffix = f".{field_name}" if field_name else "" + return Evidence( + kind=kind, + source=source, + observed_in_version=version, + location=f"{scope_id}#paths.{path}.{method}{suffix}", + detail=detail, + ) diff --git a/tests/test_history_contract.py b/tests/test_history_contract.py index f65a7a4f5..ac530069a 100644 --- a/tests/test_history_contract.py +++ b/tests/test_history_contract.py @@ -16,6 +16,7 @@ history_report_to_dict, load_history_report, validate_history_report, + write_history_report, ) @@ -74,6 +75,16 @@ def test_current_item_at_removal_deadline_fails() -> None: validate_history_report(stale_report) +def test_publish_version_must_end_the_comparison_window() -> None: + report = conformance_report() + invalid_report = replace(report, publish_version="1.1.0") + + with pytest.raises( + HistoryValidationError, match="publish_version must be the final comparison" + ): + validate_history_report(invalid_report) + + def test_item_removed_before_advertised_version_fails() -> None: report = conformance_report() item = report.items_by_id()["payments.legacy"] @@ -141,3 +152,13 @@ def test_report_round_trips_through_json_shape() -> None: assert round_tripped == report json.dumps(payload) + + +def test_report_can_be_persisted_and_loaded(tmp_path: Path) -> None: + report = conformance_report() + output = tmp_path / "history-report.json" + + write_history_report(output, report) + + assert load_history_report(output) == report + assert output.read_text(encoding="utf-8").endswith("\n") diff --git a/tests/test_openapi_history.py b/tests/test_openapi_history.py new file mode 100644 index 000000000..2ac12b373 --- /dev/null +++ b/tests/test_openapi_history.py @@ -0,0 +1,308 @@ +from __future__ import annotations + +import pytest + +from x2mdx.history import ( + HistoryEventKind, + IdentityConfidence, + LifecycleState, + SourceArtifact, + VersionSelectionPolicy, + history_events_for_item, + validate_history_report, +) +from x2mdx.openapi import OpenAPIHistoryScope, build_openapi_history_report + + +def operation( + operation_id: str | None, + *, + deprecated: bool = False, + remove_as_of: str | None = None, + replaces: str | None = None, + state: str | None = None, + response_type: str = "string", +) -> dict[str, object]: + value: dict[str, object] = { + "responses": { + "200": { + "description": "Success", + "content": {"application/json": {"schema": {"type": response_type}}}, + } + } + } + if operation_id is not None: + value["operationId"] = operation_id + if deprecated: + value["deprecated"] = True + if remove_as_of is not None: + value["x-remove-as-of"] = remove_as_of + if replaces is not None: + value["x-replaces"] = replaces + if state is not None: + value["x-state"] = state + return value + + +def test_openapi_report_normalizes_current_removed_and_fallback_operations() -> None: + first = { + "openapi": "3.0.3", + "paths": { + "/old": { + "post": operation( + "oldOperation", + deprecated=True, + remove_as_of="2.0.0", + ) + }, + "/moving": {"get": operation("movingOperation")}, + "/fallback": {"get": operation(None)}, + }, + } + second = { + "openapi": "3.0.3", + "paths": { + "/moved": {"get": operation("movingOperation", response_type="object")}, + "/replacement": { + "post": operation( + "newOperation", + replaces="oldOperation", + state="stable", + ) + }, + "/fallback": {"get": operation(None)}, + }, + } + report = build_openapi_history_report( + surface_id="example-openapi", + title="Example OpenAPI", + configured_scope="Public operations.", + scopes=( + OpenAPIHistoryScope( + id="public.yaml", + specs_by_version={"1.0.0": first, "2.0.0": second}, + current_routes={ + ("get", "/moved"): "/reference/get-moved", + ("post", "/replacement"): "/reference/post-replacement", + ("get", "/fallback"): "/reference/get-fallback", + }, + ), + ), + comparison_versions=("1.0.0", "2.0.0"), + publish_version="2.0.0", + source_artifacts=( + SourceArtifact("1.0.0", "https://example.com/1.0.0.tgz", "v1.0.0"), + SourceArtifact("2.0.0", "https://example.com/2.0.0.tgz", "v2.0.0"), + ), + version_policy=VersionSelectionPolicy.LATEST_SELECTED_RELEASE, + ) + + validate_history_report(report) + items = report.items_by_id() + + removed = items["public.yaml::oldOperation"] + assert removed.current_present is False + assert removed.route is None + assert removed.last_seen == "1.0.0" + assert removed.observed_removal == "2.0.0" + assert removed.remove_as_of == "2.0.0" + assert removed.lifecycle_state == LifecycleState.DEPRECATED + assert removed.replacement_edges[0].to_item_id == "public.yaml::newOperation" + + moved = items["public.yaml::movingOperation"] + assert moved.route == "/reference/get-moved" + assert moved.last_changed == "2.0.0" + assert "moved from GET /moving to GET /moved" in moved.changes[0].summary + assert [ + event.kind + for event in history_events_for_item( + moved, + comparison_versions=report.comparison_versions, + ) + ] == [HistoryEventKind.CHANGED, HistoryEventKind.INTRODUCED] + + successor = items["public.yaml::newOperation"] + assert successor.lifecycle_state == LifecycleState.STABLE + assert successor.replacement_edges[0].from_item_id == "public.yaml::oldOperation" + + fallback = items["public.yaml::GET /fallback"] + assert fallback.identity_confidence == IdentityConfidence.FALLBACK + assert len(fallback.identity_evidence) == 2 + assert "METHOD path" in report.limitations[-1] + + +def test_openapi_report_scopes_reused_operation_ids_by_specification() -> None: + spec = { + "openapi": "3.0.3", + "paths": {"/status": {"get": operation("getStatus")}}, + } + report = build_openapi_history_report( + surface_id="combined", + title="Combined", + configured_scope="Two specifications.", + scopes=( + OpenAPIHistoryScope( + id="one.yaml", + specs_by_version={"1.0.0": spec}, + current_routes={("get", "/status"): "/reference/one/status"}, + ), + OpenAPIHistoryScope( + id="two.yaml", + specs_by_version={"1.0.0": spec}, + current_routes={("get", "/status"): "/reference/two/status"}, + ), + ), + comparison_versions=("1.0.0",), + publish_version="1.0.0", + source_artifacts=( + SourceArtifact("1.0.0", "https://example.com/1.0.0.tgz", "v1.0.0"), + ), + version_policy=VersionSelectionPolicy.LATEST_SELECTED_RELEASE, + ) + + validate_history_report(report) + assert {item.id for item in report.items} == { + "one.yaml::getStatus", + "two.yaml::getStatus", + } + + +def test_openapi_report_uses_next_available_spec_for_removal_evidence() -> None: + first = { + "openapi": "3.0.3", + "paths": {"/legacy": {"get": operation("legacyOperation")}}, + } + last = {"openapi": "3.0.3", "paths": {}} + report = build_openapi_history_report( + surface_id="example", + title="Example", + configured_scope="One specification with a missing bundle member.", + scopes=( + OpenAPIHistoryScope( + id="public.yaml", + specs_by_version={"1.0.0": first, "2.0.0": last}, + current_routes={}, + ), + ), + comparison_versions=("1.0.0", "1.1.0", "2.0.0"), + publish_version="2.0.0", + source_artifacts=( + SourceArtifact("1.0.0", "https://example.com/1.0.0.tgz"), + SourceArtifact("1.1.0", "https://example.com/1.1.0.tgz"), + SourceArtifact("2.0.0", "https://example.com/2.0.0.tgz"), + ), + version_policy=VersionSelectionPolicy.LATEST_SELECTED_RELEASE, + ) + + validate_history_report(report) + removed = report.items_by_id()["public.yaml::legacyOperation"] + assert removed.observed_removal == "2.0.0" + assert ( + "public.yaml is absent from 1 selected release snapshot" + in report.limitations[0] + ) + + +def test_openapi_report_correlates_missing_current_id_at_a_stable_location() -> None: + first = { + "openapi": "3.0.3", + "paths": {"/status": {"get": operation("getStatus")}}, + } + current = { + "openapi": "3.0.3", + "paths": {"/status": {"get": operation(None)}}, + } + report = build_openapi_history_report( + surface_id="example", + title="Example", + configured_scope="One specification.", + scopes=( + OpenAPIHistoryScope( + id="public.yaml", + specs_by_version={"1.0.0": first, "2.0.0": current}, + current_routes={("get", "/status"): "/reference/status"}, + ), + ), + comparison_versions=("1.0.0", "2.0.0"), + publish_version="2.0.0", + source_artifacts=( + SourceArtifact("1.0.0", "https://example.com/1.0.0.tgz"), + SourceArtifact("2.0.0", "https://example.com/2.0.0.tgz"), + ), + version_policy=VersionSelectionPolicy.LATEST_SELECTED_RELEASE, + ) + + validate_history_report(report) + item = report.items_by_id()["public.yaml::getStatus"] + assert item.current_present is True + assert item.route == "/reference/status" + assert item.identity_confidence == IdentityConfidence.FALLBACK + + +def test_openapi_report_rejects_disappear_then_reappear_continuity() -> None: + present = { + "openapi": "3.0.3", + "paths": {"/status": {"get": operation("getStatus")}}, + } + missing = {"openapi": "3.0.3", "paths": {}} + + with pytest.raises(ValueError, match="disappears and later reappears"): + build_openapi_history_report( + surface_id="example", + title="Example", + configured_scope="One specification.", + scopes=( + OpenAPIHistoryScope( + id="public.yaml", + specs_by_version={ + "1.0.0": present, + "1.1.0": missing, + "2.0.0": present, + }, + current_routes={("get", "/status"): "/reference/status"}, + ), + ), + comparison_versions=("1.0.0", "1.1.0", "2.0.0"), + publish_version="2.0.0", + source_artifacts=( + SourceArtifact("1.0.0", "https://example.com/1.0.0.tgz"), + SourceArtifact("1.1.0", "https://example.com/1.1.0.tgz"), + SourceArtifact("2.0.0", "https://example.com/2.0.0.tgz"), + ), + version_policy=VersionSelectionPolicy.LATEST_SELECTED_RELEASE, + ) + + +def test_openapi_report_does_not_carry_a_cancelled_removal_schedule_forward() -> None: + scheduled = { + "openapi": "3.0.3", + "paths": {"/status": {"get": operation("getStatus", remove_as_of="3.0.0")}}, + } + current = { + "openapi": "3.0.3", + "paths": {"/status": {"get": operation("getStatus")}}, + } + report = build_openapi_history_report( + surface_id="example", + title="Example", + configured_scope="One specification.", + scopes=( + OpenAPIHistoryScope( + id="public.yaml", + specs_by_version={"1.0.0": scheduled, "2.0.0": current}, + current_routes={("get", "/status"): "/reference/status"}, + ), + ), + comparison_versions=("1.0.0", "2.0.0"), + publish_version="2.0.0", + source_artifacts=( + SourceArtifact("1.0.0", "https://example.com/1.0.0.tgz"), + SourceArtifact("2.0.0", "https://example.com/2.0.0.tgz"), + ), + version_policy=VersionSelectionPolicy.LATEST_SELECTED_RELEASE, + ) + + validate_history_report(report) + item = report.items_by_id()["public.yaml::getStatus"] + assert item.remove_as_of is None + assert item.remove_as_of_evidence is None diff --git a/tests/test_splice_mintlify_openapi.py b/tests/test_splice_mintlify_openapi.py index 3316684f4..1e95c896b 100644 --- a/tests/test_splice_mintlify_openapi.py +++ b/tests/test_splice_mintlify_openapi.py @@ -7,6 +7,12 @@ from pathlib import Path from types import ModuleType +from x2mdx.history import ( + VersionSelectionPolicy, + load_history_report, + validate_history_report, +) + REPO_ROOT = Path(__file__).resolve().parents[1] @@ -43,6 +49,32 @@ def test_splice_openapi_release_requests_use_github_token(monkeypatch) -> None: } +def test_checked_in_splice_history_report_is_valid_and_retains_removed_operations() -> ( + None +): + report = load_history_report( + REPO_ROOT / "docs-main" / "openapi" / "splice" / "history-report.json" + ) + + validate_history_report(report) + + assert report.surface_id == "splice-openapi" + assert report.version_policy == VersionSelectionPolicy.LATEST_SELECTED_RELEASE + assert report.comparison_versions[0] == "0.5.10" + assert report.comparison_versions[-1] == report.publish_version + assert tuple(artifact.version for artifact in report.source_artifacts) == ( + report.comparison_versions + ) + assert len(report.current_items()) == 121 + assert any(not item.current_present for item in report.items) + assert all(item.route is None for item in report.items if not item.current_present) + assert all( + (REPO_ROOT / "docs-main" / f"{item.route.removeprefix('/')}.mdx").is_file() + for item in report.current_items() + if item.route is not None + ) + + def test_splice_openapi_publish_defaults_to_latest_selected_release() -> None: module = load_script_module("generate_splice_mintlify_openapi.py") releases = [ @@ -73,6 +105,23 @@ def test_splice_openapi_publish_allows_explicit_historical_override() -> None: ) == {"version": "0.6.14"} +def test_splice_openapi_history_window_ends_at_historical_publish_override() -> None: + module = load_script_module("generate_splice_mintlify_openapi.py") + releases = [ + {"version": "0.5.10"}, + {"version": "0.6.14"}, + {"version": "0.7.4"}, + ] + + assert module.comparison_releases_through_publish( + releases=releases, + publish_version="0.6.14", + ) == [ + {"version": "0.5.10"}, + {"version": "0.6.14"}, + ] + + def test_splice_openapi_rewrites_scan_server_examples(tmp_path: Path) -> None: module = load_script_module("generate_splice_mintlify_openapi.py") spec_bytes = b"""openapi: 3.0.0 @@ -206,25 +255,42 @@ def test_splice_manual_pages_rely_on_mintlify_navigation_breadcrumbs( } docs_json = tmp_path / "docs-main" / "docs.json" + families = [ + { + "group": "Scan APIs", + "specs": [ + { + "filename": "scan.yaml", + "nav_label": "Scan API", + "source": "openapi/splice/scan/scan.yaml", + "directory": "reference/splice-scan-api", + } + ], + } + ] + snapshots = {"scan.yaml": {"0.7.4": spec}} + releases = [ + { + "version": "0.7.4", + "tag": "v0.7.4", + "asset_name": "0.7.4_openapi.tar.gz", + "download_url": "https://example.com/0.7.4_openapi.tar.gz", + } + ] + history_report = module.build_splice_history_report( + source_config={}, + families=families, + snapshots=snapshots, + releases=releases, + publish_version="0.7.4", + ) + written = module.write_manual_operation_pages( docs_json_path=docs_json, - families=[ - { - "group": "Scan APIs", - "specs": [ - { - "filename": "scan.yaml", - "nav_label": "Scan API", - "source": "openapi/splice/scan/scan.yaml", - "directory": "reference/splice-scan-api", - } - ], - } - ], - snapshots={"scan.yaml": {"0.7.4": spec}}, - release_versions=["0.7.4"], + families=families, + snapshots=snapshots, publish_version="0.7.4", - source_name="test fixtures", + history_report=history_report, ) assert len(written) == 1 From a55b0e6f6ff6988d52f24b123e15ceedaefc6d6a Mon Sep 17 00:00:00 2001 From: danielporterda Date: Thu, 27 Aug 2026 14:09:52 -0400 Subject: [PATCH 13/14] Link lifecycle badges to history Signed-off-by: danielporterda --- .../splice-openapi/source-artifacts.json | 1 + docs-main/docs.json | 2 + docs-main/openapi/splice/history-report.json | 445 +++++++++++------- docs-main/openapi/splice/scan/scan.yaml | 200 ++++++++ .../delete-v2idps:idp-id.mdx | 14 +- .../delete-v2users:user-id.mdx | 14 +- .../json-api-reference/get-livez.mdx | 6 +- .../json-api-reference/get-readyz.mdx | 6 +- .../get-v2authenticated-user.mdx | 14 +- .../json-api-reference/get-v2idps.mdx | 14 +- .../json-api-reference/get-v2idps:idp-id.mdx | 14 +- ...ve-submissionpreferred-package-version.mdx | 18 +- .../get-v2package-vetting.mdx | 18 +- .../json-api-reference/get-v2packages.mdx | 14 +- .../get-v2packages:package-id.mdx | 14 +- .../get-v2packages:package-idstatus.mdx | 14 +- .../json-api-reference/get-v2parties.mdx | 14 +- .../get-v2parties:party.mdx | 14 +- .../get-v2partiesparticipant-id.mdx | 14 +- .../get-v2stateactive-contracts-page.mdx | 10 +- .../get-v2stateconnected-synchronizers.mdx | 14 +- .../get-v2statelatest-pruned-offsets.mdx | 14 +- .../get-v2stateledger-end.mdx | 14 +- ...pdatestransaction-tree-by-id:update-id.mdx | 24 +- ...datestransaction-tree-by-offset:offset.mdx | 24 +- .../json-api-reference/get-v2users.mdx | 14 +- .../get-v2users:user-id.mdx | 14 +- .../get-v2users:user-idrights.mdx | 14 +- .../json-api-reference/get-v2version.mdx | 14 +- .../patch-v2idps:idp-id.mdx | 14 +- .../patch-v2parties:party.mdx | 14 +- .../patch-v2users:user-id.mdx | 14 +- ...ch-v2users:user-ididentity-provider-id.mdx | 14 +- .../patch-v2users:user-idrights.mdx | 14 +- ...ost-v2commandsasyncsubmit-reassignment.mdx | 14 +- .../post-v2commandsasyncsubmit.mdx | 14 +- .../post-v2commandscommand-completions.mdx | 6 +- .../post-v2commandscompletions.mdx | 14 +- ...mmandssubmit-and-wait-for-reassignment.mdx | 14 +- ...dssubmit-and-wait-for-transaction-tree.mdx | 24 +- ...ommandssubmit-and-wait-for-transaction.mdx | 14 +- .../post-v2commandssubmit-and-wait.mdx | 14 +- .../post-v2contractscontract-by-id.mdx | 14 +- .../json-api-reference/post-v2dars.mdx | 14 +- .../post-v2darsvalidate.mdx | 14 +- .../post-v2eventsevents-by-contract-id.mdx | 14 +- .../json-api-reference/post-v2idps.mdx | 14 +- .../post-v2interactive-submissionexecute.mdx | 14 +- ...v2interactive-submissionexecuteandwait.mdx | 14 +- ...submissionexecuteandwaitfortransaction.mdx | 14 +- ...teractive-submissionpreferred-packages.mdx | 14 +- .../post-v2interactive-submissionprepare.mdx | 14 +- .../post-v2package-vetting.mdx | 18 +- .../post-v2package-vettinglist.mdx | 14 +- .../post-v2package-vettingupdate.mdx | 14 +- .../json-api-reference/post-v2packages.mdx | 14 +- .../json-api-reference/post-v2parties.mdx | 14 +- .../post-v2partiesexternalallocate.mdx | 14 +- ...ost-v2partiesexternalgenerate-topology.mdx | 14 +- .../post-v2stateactive-contracts-page.mdx | 6 +- .../post-v2stateactive-contracts.mdx | 14 +- .../json-api-reference/post-v2updates.mdx | 14 +- .../post-v2updatesflats.mdx | 24 +- .../post-v2updatesget-updates-page.mdx | 6 +- .../post-v2updatestransaction-by-id.mdx | 24 +- .../post-v2updatestransaction-by-offset.mdx | 24 +- .../post-v2updatestrees.mdx | 24 +- .../post-v2updatesupdate-by-id.mdx | 14 +- .../post-v2updatesupdate-by-offset.mdx | 14 +- .../json-api-reference/post-v2users.mdx | 14 +- .../post-v2users:user-idrights.mdx | 14 +- ...nsv1:allocationidchoice-contextscancel.mdx | 8 +- ...ationidchoice-contextsexecute-transfer.mdx | 8 +- ...v1:allocationidchoice-contextswithdraw.mdx | 8 +- ...cation-instructionv1allocation-factory.mdx | 8 +- ...tioninstructionidchoice-contextsaccept.mdx | 8 +- ...oninstructionidchoice-contextswithdraw.mdx | 8 +- ...cation-instructionv2allocation-factory.mdx | 8 +- ...nsv2:allocationidchoice-contextscancel.mdx | 8 +- ...v2:allocationidchoice-contextswithdraw.mdx | 8 +- ...registryallocationv2settlement-factory.mdx | 8 +- .../splice-ans-api/get-v0entryall.mdx | 8 +- .../splice-ans-api/post-v0entrycreate.mdx | 8 +- .../reference/splice-scan-api/get-livez.mdx | 8 +- .../reference/splice-scan-api/get-readyz.mdx | 8 +- .../reference/splice-scan-api/get-status.mdx | 8 +- .../splice-scan-api/get-v0acs:party.mdx | 12 +- .../get-v0active-synchronizer-serial.mdx | 8 +- .../get-v0adminsvvoterequests.mdx | 8 +- .../get-v0adminvalidatorlicenses.mdx | 8 +- .../get-v0amulet-config-for-round.mdx | 12 +- .../get-v0amulet-pricevotes.mdx | 8 +- .../splice-scan-api/get-v0ans-entries.mdx | 8 +- .../get-v0ans-entriesby-name:name.mdx | 8 +- .../get-v0ans-entriesby-party:party.mdx | 8 +- .../get-v0backfillingstatus.mdx | 8 +- .../splice-scan-api/get-v0closed-rounds.mdx | 8 +- ...main_idmembers:member_idtraffic-status.mdx | 8 +- ...omain_idparties:party_idparticipant-id.mdx | 8 +- .../splice-scan-api/get-v0dso-party-id.mdx | 8 +- .../splice-scan-api/get-v0dso-sequencers.mdx | 16 +- .../reference/splice-scan-api/get-v0dso.mdx | 8 +- .../get-v0events:update_id.mdx | 34 +- .../splice-scan-api/get-v0feature-support.mdx | 16 +- .../splice-scan-api/get-v0featured-apps.mdx | 8 +- .../get-v0featured-apps:provider_party_id.mdx | 8 +- ...eatured-appsby-contract-id:contract_id.mdx | 8 +- ...ured-appsby-provider:provider_party_id.mdx | 8 +- .../splice-scan-api/get-v0historybulkacs.mdx | 8 +- ...cessrounds:round_numberactivity-totals.mdx | 20 +- ...srounds:round_numberbatches:batch_hash.mdx | 14 +- ...ng-processrounds:round_numberroot-hash.mdx | 14 +- ...unting-processroundsearliest-available.mdx | 14 +- .../reference/splice-scan-api/get-v0lsu.mdx | 8 +- .../splice-scan-api/get-v0migrationslast.mdx | 8 +- .../get-v0migrationsschedule.mdx | 8 +- .../get-v0roll-forward-lsu.mdx | 8 +- .../reference/splice-scan-api/get-v0scans.mdx | 8 +- .../get-v0splice-instance-names.mdx | 8 +- ...get-v0stateacssnapshot-timestamp-after.mdx | 8 +- .../get-v0stateacssnapshot-timestamp.mdx | 8 +- .../get-v0sv-bft-sequencers.mdx | 16 +- ...trapping-transactions:domain_id_prefix.mdx | 8 +- ...nchronizer-identities:domain_id_prefix.mdx | 8 +- .../get-v0transfer-command-counter:party.mdx | 8 +- .../get-v0transfer-commandstatus.mdx | 8 +- ...-v0transfer-preapprovalsby-party:party.mdx | 8 +- ...t-v0unclaimed-development-fund-coupons.mdx | 8 +- .../get-v0updates:update_id.mdx | 26 +- .../get-v0validatorsvalidator-faucets.mdx | 8 +- ...0voterequests:vote_request_contract_id.mdx | 8 +- ...omain_idparties:party_idparticipant-id.mdx | 8 +- .../get-v1updates:update_id.mdx | 26 +- .../get-v2updates:update_id.mdx | 22 +- .../get-v2updateshash:hash.mdx | 8 +- .../reference/splice-scan-api/get-version.mdx | 8 +- ...ost-v0adminsvprevious-sv-reward-weight.mdx | 8 +- .../post-v0adminsvvoteresults.mdx | 34 +- .../post-v0adminsvvoteresultscount.mdx | 8 +- .../splice-scan-api/post-v0amulet-rules.mdx | 8 +- .../splice-scan-api/post-v0ans-rules.mdx | 8 +- .../post-v0backfillingimport-updates.mdx | 22 +- .../post-v0backfillingmigration-info.mdx | 8 +- .../post-v0backfillingupdates-before.mdx | 22 +- .../splice-scan-api/post-v0events.mdx | 34 +- .../post-v0external-party-amulet-rules.mdx | 8 +- .../post-v0historybulkchecksums.mdx | 8 +- .../post-v0historybulkupdates.mdx | 8 +- .../splice-scan-api/post-v0holdingsstate.mdx | 16 +- .../post-v0holdingssummary.mdx | 20 +- .../post-v0open-and-issuing-mining-rounds.mdx | 8 +- .../splice-scan-api/post-v0stateacs.mdx | 20 +- .../splice-scan-api/post-v0stateacsforce.mdx | 8 +- .../splice-scan-api/post-v0updates.mdx | 26 +- .../splice-scan-api/post-v0voterequest.mdx | 8 +- .../splice-scan-api/post-v1holdingsstate.mdx | 36 +- .../post-v1holdingssummary.mdx | 8 +- .../splice-scan-api/post-v1stateacs.mdx | 36 +- .../splice-scan-api/post-v1updates.mdx | 26 +- .../splice-scan-api/post-v2holdingsstate.mdx | 298 ++++++++++++ .../splice-scan-api/post-v2stateacs.mdx | 305 ++++++++++++ .../splice-scan-api/post-v2updates.mdx | 22 +- .../get-v0scan-proxyamulet-rules.mdx | 8 +- .../get-v0scan-proxyans-entries.mdx | 8 +- ...et-v0scan-proxyans-entriesby-name:name.mdx | 8 +- ...-v0scan-proxyans-entriesby-party:party.mdx | 8 +- .../get-v0scan-proxydso-party-id.mdx | 8 +- .../get-v0scan-proxydso.mdx | 8 +- ...n-proxyfeatured-apps:provider_party_id.mdx | 8 +- ...an-proxyopen-and-issuing-mining-rounds.mdx | 8 +- ...an-proxytransfer-command-counter:party.mdx | 8 +- ...get-v0scan-proxytransfer-commandstatus.mdx | 8 +- ...oxytransfer-preapprovalsby-party:party.mdx | 8 +- ...roxyunclaimed-development-fund-coupons.mdx | 8 +- .../post-v0scan-proxyans-rules.mdx | 8 +- .../post-v0scan-proxyholdingssummary.mdx | 20 +- .../post-v1scan-proxyholdingssummary.mdx | 8 +- .../get-v0historybulkdownload:object_key.mdx | 16 +- .../get-registrymetadatav1info.mdx | 8 +- .../get-registrymetadatav1instruments.mdx | 22 +- ...strymetadatav1instruments:instrumentid.mdx | 22 +- ...sferinstructionidchoice-contextsaccept.mdx | 8 +- ...sferinstructionidchoice-contextsreject.mdx | 8 +- ...erinstructionidchoice-contextswithdraw.mdx | 8 +- ...transfer-instructionv1transfer-factory.mdx | 8 +- ...sferinstructionidchoice-contextsaccept.mdx | 8 +- ...sferinstructionidchoice-contextsreject.mdx | 8 +- ...erinstructionidchoice-contextswithdraw.mdx | 8 +- ...transfer-instructionv2transfer-factory.mdx | 8 +- .../get-v0wallettransfer-offers.mdx | 8 +- .../post-v0walletbuy-traffic-requests.mdx | 8 +- ...buy-traffic-requests:tracking_idstatus.mdx | 8 +- .../post-v0wallettransfer-offers.mdx | 8 +- ...allettransfer-offers:tracking_idstatus.mdx | 8 +- docs-main/styles.css | 13 + scripts/generate_splice_mintlify_openapi.py | 16 +- src/x2mdx/history/__init__.py | 3 +- src/x2mdx/history/events.py | 22 +- src/x2mdx/openapi/history.py | 2 +- src/x2mdx/openapi/render.py | 40 +- src/x2mdx/reference_pages.py | 76 ++- .../templates/shared/reference_macros.md.j2 | 4 +- src/x2mdx/templating.py | 2 + tests/test_history_contract.py | 8 +- tests/test_openapi_manual_render.py | 10 +- tests/test_reference_page_history.py | 27 +- tests/test_splice_mintlify_openapi.py | 46 +- 207 files changed, 2511 insertions(+), 1357 deletions(-) create mode 100644 docs-main/reference/splice-scan-api/post-v2holdingsstate.mdx create mode 100644 docs-main/reference/splice-scan-api/post-v2stateacs.mdx diff --git a/config/mintlify-openapi/splice-openapi/source-artifacts.json b/config/mintlify-openapi/splice-openapi/source-artifacts.json index 216e44010..96acc9d72 100644 --- a/config/mintlify-openapi/splice-openapi/source-artifacts.json +++ b/config/mintlify-openapi/splice-openapi/source-artifacts.json @@ -33,6 +33,7 @@ } ], "legacy_manual_route_baseline": { + "captured_version": "0.7.4", "operation_count": 121, "sha256": "e6b65e1f5e63a55574f95226c7a717c70dfdbe4af524cbad679986c4bff59cc5", "source": "Mintlify native Splice OpenAPI routes captured before manual-page migration on 2026-08-25" diff --git a/docs-main/docs.json b/docs-main/docs.json index 9bdb10093..1f328511a 100644 --- a/docs-main/docs.json +++ b/docs-main/docs.json @@ -2122,9 +2122,11 @@ "reference/splice-scan-api/get-v0stateacssnapshot-timestamp-after", "reference/splice-scan-api/post-v0stateacs", "reference/splice-scan-api/post-v1stateacs", + "reference/splice-scan-api/post-v2stateacs", "reference/splice-scan-api/post-v0stateacsforce", "reference/splice-scan-api/post-v0holdingsstate", "reference/splice-scan-api/post-v1holdingsstate", + "reference/splice-scan-api/post-v2holdingsstate", "reference/splice-scan-api/post-v0holdingssummary", "reference/splice-scan-api/post-v1holdingssummary", "reference/splice-scan-api/get-v0ans-entries", diff --git a/docs-main/openapi/splice/history-report.json b/docs-main/openapi/splice/history-report.json index 27629df89..327e47fb9 100644 --- a/docs-main/openapi/splice/history-report.json +++ b/docs-main/openapi/splice/history-report.json @@ -4,7 +4,7 @@ "format": "openapi", "configured_scope": "Reader-facing operations from 12 enabled Splice OpenAPI specifications.", "history_mode": "snapshots", - "publish_version": "0.7.4", + "publish_version": "0.7.5", "comparison_versions": [ "0.5.10", "0.5.11", @@ -34,7 +34,8 @@ "0.7.1", "0.7.2", "0.7.3", - "0.7.4" + "0.7.4", + "0.7.5" ], "source_artifacts": [ { @@ -210,6 +211,12 @@ "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.7.4/0.7.4_openapi.tar.gz", "revision": "v0.7.4", "path": "0.7.4_openapi.tar.gz" + }, + { + "version": "0.7.5", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.7.5/0.7.5_openapi.tar.gz", + "revision": "v0.7.5", + "path": "0.7.5_openapi.tar.gz" } ], "version_policy": "latest_selected_release", @@ -220,7 +227,7 @@ "route": "/reference/splice-allocation-instruction-api/post-registryallocation-instructionv1allocation-factory", "location": "allocation-instruction-v1.yaml: POST /registry/allocation-instruction/v1/allocation-factory", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -247,7 +254,7 @@ "route": "/reference/splice-allocation-instruction-v2-api/post-registryallocation-instructionv2allocation-factory", "location": "allocation-instruction-v2.yaml: POST /registry/allocation-instruction/v2/allocation-factory", "first_seen": "0.6.11", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -274,7 +281,7 @@ "route": "/reference/splice-allocation-instruction-v2-api/post-registryallocation-instructionv2:allocationinstructionidchoice-contextsaccept", "location": "allocation-instruction-v2.yaml: POST /registry/allocation-instruction/v2/{allocationInstructionId}/choice-contexts/accept", "first_seen": "0.6.11", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -301,7 +308,7 @@ "route": "/reference/splice-allocation-instruction-v2-api/post-registryallocation-instructionv2:allocationinstructionidchoice-contextswithdraw", "location": "allocation-instruction-v2.yaml: POST /registry/allocation-instruction/v2/{allocationInstructionId}/choice-contexts/withdraw", "first_seen": "0.6.11", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -328,7 +335,7 @@ "route": "/reference/splice-allocation-api/post-registryallocationsv1:allocationidchoice-contextscancel", "location": "allocation-v1.yaml: POST /registry/allocations/v1/{allocationId}/choice-contexts/cancel", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -355,7 +362,7 @@ "route": "/reference/splice-allocation-api/post-registryallocationsv1:allocationidchoice-contextsexecute-transfer", "location": "allocation-v1.yaml: POST /registry/allocations/v1/{allocationId}/choice-contexts/execute-transfer", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -382,7 +389,7 @@ "route": "/reference/splice-allocation-api/post-registryallocationsv1:allocationidchoice-contextswithdraw", "location": "allocation-v1.yaml: POST /registry/allocations/v1/{allocationId}/choice-contexts/withdraw", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -409,7 +416,7 @@ "route": "/reference/splice-allocation-v2-api/post-registryallocationsv2:allocationidchoice-contextscancel", "location": "allocation-v2.yaml: POST /registry/allocations/v2/{allocationId}/choice-contexts/cancel", "first_seen": "0.6.11", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -436,7 +443,7 @@ "route": "/reference/splice-allocation-v2-api/post-registryallocationsv2:allocationidchoice-contextswithdraw", "location": "allocation-v2.yaml: POST /registry/allocations/v2/{allocationId}/choice-contexts/withdraw", "first_seen": "0.6.11", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -463,7 +470,7 @@ "route": "/reference/splice-allocation-v2-api/post-registryallocationv2settlement-factory", "location": "allocation-v2.yaml: POST /registry/allocation/v2/settlement-factory", "first_seen": "0.6.11", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -490,7 +497,7 @@ "route": "/reference/splice-ans-api/post-v0entrycreate", "location": "ans-external.yaml: POST /v0/entry/create", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -517,7 +524,7 @@ "route": "/reference/splice-ans-api/get-v0entryall", "location": "ans-external.yaml: GET /v0/entry/all", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -544,7 +551,7 @@ "route": "/reference/splice-scan-proxy-api/get-v0scan-proxyamulet-rules", "location": "scan-proxy.yaml: GET /v0/scan-proxy/amulet-rules", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -571,7 +578,7 @@ "route": "/reference/splice-scan-proxy-api/post-v0scan-proxyans-rules", "location": "scan-proxy.yaml: POST /v0/scan-proxy/ans-rules", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -598,7 +605,7 @@ "route": "/reference/splice-scan-proxy-api/get-v0scan-proxydso", "location": "scan-proxy.yaml: GET /v0/scan-proxy/dso", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -625,7 +632,7 @@ "route": "/reference/splice-scan-proxy-api/get-v0scan-proxydso-party-id", "location": "scan-proxy.yaml: GET /v0/scan-proxy/dso-party-id", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -652,7 +659,7 @@ "route": "/reference/splice-scan-proxy-api/post-v0scan-proxyholdingssummary", "location": "scan-proxy.yaml: POST /v0/scan-proxy/holdings/summary", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -667,7 +674,7 @@ "changes": [ { "version": "0.6.3", - "summary": "The POST /v0/scan-proxy/holdings/summary operation changed in this snapshot.", + "summary": "The POST /v0/scan-proxy/holdings/summary operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -705,7 +712,7 @@ "route": "/reference/splice-scan-proxy-api/post-v1scan-proxyholdingssummary", "location": "scan-proxy.yaml: POST /v1/scan-proxy/holdings/summary", "first_seen": "0.6.3", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -732,7 +739,7 @@ "route": "/reference/splice-scan-proxy-api/get-v0scan-proxyopen-and-issuing-mining-rounds", "location": "scan-proxy.yaml: GET /v0/scan-proxy/open-and-issuing-mining-rounds", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -759,7 +766,7 @@ "route": "/reference/splice-scan-proxy-api/get-v0scan-proxyans-entries", "location": "scan-proxy.yaml: GET /v0/scan-proxy/ans-entries", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -786,7 +793,7 @@ "route": "/reference/splice-scan-proxy-api/get-v0scan-proxyunclaimed-development-fund-coupons", "location": "scan-proxy.yaml: GET /v0/scan-proxy/unclaimed-development-fund-coupons", "first_seen": "0.5.11", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -813,7 +820,7 @@ "route": "/reference/splice-scan-proxy-api/get-v0scan-proxyans-entriesby-name:name", "location": "scan-proxy.yaml: GET /v0/scan-proxy/ans-entries/by-name/{name}", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -840,7 +847,7 @@ "route": "/reference/splice-scan-proxy-api/get-v0scan-proxyans-entriesby-party:party", "location": "scan-proxy.yaml: GET /v0/scan-proxy/ans-entries/by-party/{party}", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -867,7 +874,7 @@ "route": "/reference/splice-scan-proxy-api/get-v0scan-proxyfeatured-apps:provider_party_id", "location": "scan-proxy.yaml: GET /v0/scan-proxy/featured-apps/{provider_party_id}", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -894,7 +901,7 @@ "route": "/reference/splice-scan-proxy-api/get-v0scan-proxytransfer-command-counter:party", "location": "scan-proxy.yaml: GET /v0/scan-proxy/transfer-command-counter/{party}", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -921,7 +928,7 @@ "route": "/reference/splice-scan-proxy-api/get-v0scan-proxytransfer-commandstatus", "location": "scan-proxy.yaml: GET /v0/scan-proxy/transfer-command/status", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -948,7 +955,7 @@ "route": "/reference/splice-scan-proxy-api/get-v0scan-proxytransfer-preapprovalsby-party:party", "location": "scan-proxy.yaml: GET /v0/scan-proxy/transfer-preapprovals/by-party/{party}", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -975,7 +982,7 @@ "route": "/reference/splice-scan-streaming-api/get-v0historybulkdownload:object_key", "location": "scan-stream-server.yaml: GET /v0/history/bulk/download/{object_key}", "first_seen": "0.5.16", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -990,7 +997,7 @@ "changes": [ { "version": "0.5.17", - "summary": "The GET /v0/history/bulk/download/{object_key} operation changed in this snapshot.", + "summary": "The GET /v0/history/bulk/download/{object_key} operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -1016,7 +1023,7 @@ "route": "/reference/splice-scan-api/post-v0adminsvvoteresultscount", "location": "scan.yaml: POST /v0/admin/sv/voteresults/count", "first_seen": "0.6.13", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -1043,7 +1050,7 @@ "route": "/reference/splice-scan-api/get-v0feature-support", "location": "scan.yaml: GET /v0/feature-support", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -1058,7 +1065,7 @@ "changes": [ { "version": "0.5.16", - "summary": "The GET /v0/feature-support operation changed in this snapshot.", + "summary": "The GET /v0/feature-support operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -1084,7 +1091,7 @@ "route": "/reference/splice-scan-api/post-v0stateacsforce", "location": "scan.yaml: POST /v0/state/acs/force", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -1111,7 +1118,7 @@ "route": "/reference/splice-scan-api/get-v0acs:party", "location": "scan.yaml: GET /v0/acs/{party}", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -1150,7 +1157,7 @@ "route": "/reference/splice-scan-api/post-v0stateacs", "location": "scan.yaml: POST /v0/state/acs", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -1165,7 +1172,7 @@ "changes": [ { "version": "0.6.0", - "summary": "The POST /v0/state/acs operation changed in this snapshot.", + "summary": "The POST /v0/state/acs operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -1203,7 +1210,7 @@ "route": "/reference/splice-scan-api/post-v1stateacs", "location": "scan.yaml: POST /v1/state/acs", "first_seen": "0.6.0", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -1214,6 +1221,59 @@ }, "observed_removal": null, "removal_evidence": null, + "last_changed": "0.7.5", + "changes": [ + { + "version": "0.7.5", + "summary": "The POST /v1/state/acs operation was updated in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.7.5/0.7.5_openapi.tar.gz", + "observed_in_version": "0.7.5", + "location": "scan.yaml#paths./v1/state/acs.post", + "detail": null + } + ] + } + ], + "lifecycle_state": "deprecated", + "lifecycle_transitions": [ + { + "state": "deprecated", + "version": "0.7.5", + "evidence": { + "kind": "source_metadata", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.7.5/0.7.5_openapi.tar.gz", + "observed_in_version": "0.7.5", + "location": "scan.yaml#paths./v1/state/acs.post.deprecated", + "detail": null + } + } + ], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getAcsSnapshotAtV2", + "kind": "operation", + "route": "/reference/splice-scan-api/post-v2stateacs", + "location": "scan.yaml: POST /v2/state/acs", + "first_seen": "0.7.5", + "last_seen": "0.7.5", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.7.5/0.7.5_openapi.tar.gz", + "observed_in_version": "0.7.5", + "location": "scan.yaml#paths./v2/state/acs.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, "last_changed": null, "changes": [], "lifecycle_state": null, @@ -1230,7 +1290,7 @@ "route": "/reference/splice-scan-api/get-v0active-synchronizer-serial", "location": "scan.yaml: GET /v0/active-synchronizer-serial", "first_seen": "0.6.0", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -1302,7 +1362,7 @@ "route": "/reference/splice-scan-api/get-v0amulet-config-for-round", "location": "scan.yaml: GET /v0/amulet-config-for-round", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -1341,7 +1401,7 @@ "route": "/reference/splice-scan-api/post-v0amulet-rules", "location": "scan.yaml: POST /v0/amulet-rules", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -1368,7 +1428,7 @@ "route": "/reference/splice-scan-api/post-v0ans-rules", "location": "scan.yaml: POST /v0/ans-rules", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -1395,7 +1455,7 @@ "route": "/reference/splice-scan-api/get-v0backfillingstatus", "location": "scan.yaml: GET /v0/backfilling/status", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -1422,7 +1482,7 @@ "route": "/reference/splice-scan-api/post-v0historybulkchecksums", "location": "scan.yaml: POST /v0/history/bulk/checksums", "first_seen": "0.7.4", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -1449,7 +1509,7 @@ "route": "/reference/splice-scan-api/get-v0closed-rounds", "location": "scan.yaml: GET /v0/closed-rounds", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -1476,7 +1536,7 @@ "route": "/reference/splice-scan-api/get-v0stateacssnapshot-timestamp-after", "location": "scan.yaml: GET /v0/state/acs/snapshot-timestamp-after", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -1503,7 +1563,7 @@ "route": "/reference/splice-scan-api/get-v0stateacssnapshot-timestamp", "location": "scan.yaml: GET /v0/state/acs/snapshot-timestamp", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -1530,7 +1590,7 @@ "route": "/reference/splice-scan-api/get-v0dso", "location": "scan.yaml: GET /v0/dso", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -1557,7 +1617,7 @@ "route": "/reference/splice-scan-api/get-v0dso-party-id", "location": "scan.yaml: GET /v0/dso-party-id", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -1584,7 +1644,7 @@ "route": "/reference/splice-scan-api/get-v0events:update_id", "location": "scan.yaml: GET /v0/events/{update_id}", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -1599,7 +1659,7 @@ "changes": [ { "version": "0.5.15", - "summary": "The GET /v0/events/{update_id} operation changed in this snapshot.", + "summary": "The GET /v0/events/{update_id} operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -1612,7 +1672,7 @@ }, { "version": "0.5.17", - "summary": "The GET /v0/events/{update_id} operation changed in this snapshot.", + "summary": "The GET /v0/events/{update_id} operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -1625,7 +1685,7 @@ }, { "version": "0.6.0", - "summary": "The GET /v0/events/{update_id} operation changed in this snapshot.", + "summary": "The GET /v0/events/{update_id} operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -1638,7 +1698,7 @@ }, { "version": "0.6.10", - "summary": "The GET /v0/events/{update_id} operation changed in this snapshot.", + "summary": "The GET /v0/events/{update_id} operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -1664,7 +1724,7 @@ "route": "/reference/splice-scan-api/post-v0events", "location": "scan.yaml: POST /v0/events", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -1679,7 +1739,7 @@ "changes": [ { "version": "0.5.15", - "summary": "The POST /v0/events operation changed in this snapshot.", + "summary": "The POST /v0/events operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -1692,7 +1752,7 @@ }, { "version": "0.5.17", - "summary": "The POST /v0/events operation changed in this snapshot.", + "summary": "The POST /v0/events operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -1705,7 +1765,7 @@ }, { "version": "0.6.0", - "summary": "The POST /v0/events operation changed in this snapshot.", + "summary": "The POST /v0/events operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -1718,7 +1778,7 @@ }, { "version": "0.6.10", - "summary": "The POST /v0/events operation changed in this snapshot.", + "summary": "The POST /v0/events operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -1744,7 +1804,7 @@ "route": "/reference/splice-scan-api/post-v0external-party-amulet-rules", "location": "scan.yaml: POST /v0/external-party-amulet-rules", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -1771,7 +1831,7 @@ "route": "/reference/splice-scan-api/get-status", "location": "scan.yaml: GET /status", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -1798,7 +1858,7 @@ "route": "/reference/splice-scan-api/post-v0holdingsstate", "location": "scan.yaml: POST /v0/holdings/state", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -1813,7 +1873,7 @@ "changes": [ { "version": "0.6.0", - "summary": "The POST /v0/holdings/state operation changed in this snapshot.", + "summary": "The POST /v0/holdings/state operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -1839,7 +1899,7 @@ "route": "/reference/splice-scan-api/post-v1holdingsstate", "location": "scan.yaml: POST /v1/holdings/state", "first_seen": "0.6.0", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -1850,6 +1910,59 @@ }, "observed_removal": null, "removal_evidence": null, + "last_changed": "0.7.5", + "changes": [ + { + "version": "0.7.5", + "summary": "The POST /v1/holdings/state operation was updated in this snapshot.", + "evidence": [ + { + "kind": "snapshot_diff", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.7.5/0.7.5_openapi.tar.gz", + "observed_in_version": "0.7.5", + "location": "scan.yaml#paths./v1/holdings/state.post", + "detail": null + } + ] + } + ], + "lifecycle_state": "deprecated", + "lifecycle_transitions": [ + { + "state": "deprecated", + "version": "0.7.5", + "evidence": { + "kind": "source_metadata", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.7.5/0.7.5_openapi.tar.gz", + "observed_in_version": "0.7.5", + "location": "scan.yaml#paths./v1/holdings/state.post.deprecated", + "detail": null + } + } + ], + "remove_as_of": null, + "remove_as_of_evidence": null, + "replacement_edges": [], + "identity_confidence": "exact", + "identity_evidence": [] + }, + { + "id": "scan.yaml::getHoldingsStateAtV2", + "kind": "operation", + "route": "/reference/splice-scan-api/post-v2holdingsstate", + "location": "scan.yaml: POST /v2/holdings/state", + "first_seen": "0.7.5", + "last_seen": "0.7.5", + "current_present": true, + "introduction_evidence": { + "kind": "snapshot", + "source": "https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.7.5/0.7.5_openapi.tar.gz", + "observed_in_version": "0.7.5", + "location": "scan.yaml#paths./v2/holdings/state.post", + "detail": null + }, + "observed_removal": null, + "removal_evidence": null, "last_changed": null, "changes": [], "lifecycle_state": null, @@ -1866,7 +1979,7 @@ "route": "/reference/splice-scan-api/post-v0holdingssummary", "location": "scan.yaml: POST /v0/holdings/summary", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -1881,7 +1994,7 @@ "changes": [ { "version": "0.6.3", - "summary": "The POST /v0/holdings/summary operation changed in this snapshot.", + "summary": "The POST /v0/holdings/summary operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -1919,7 +2032,7 @@ "route": "/reference/splice-scan-api/post-v1holdingssummary", "location": "scan.yaml: POST /v1/holdings/summary", "first_seen": "0.6.3", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -1946,7 +2059,7 @@ "route": "/reference/splice-scan-api/post-v0backfillingimport-updates", "location": "scan.yaml: POST /v0/backfilling/import-updates", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -1961,7 +2074,7 @@ "changes": [ { "version": "0.5.17", - "summary": "The POST /v0/backfilling/import-updates operation changed in this snapshot.", + "summary": "The POST /v0/backfilling/import-updates operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -1974,7 +2087,7 @@ }, { "version": "0.6.0", - "summary": "The POST /v0/backfilling/import-updates operation changed in this snapshot.", + "summary": "The POST /v0/backfilling/import-updates operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -2000,7 +2113,7 @@ "route": "/reference/splice-scan-api/get-v0lsu", "location": "scan.yaml: GET /v0/lsu", "first_seen": "0.6.11", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -2027,7 +2140,7 @@ "route": "/reference/splice-scan-api/get-v0domains:domain_idmembers:member_idtraffic-status", "location": "scan.yaml: GET /v0/domains/{domain_id}/members/{member_id}/traffic-status", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -2054,7 +2167,7 @@ "route": "/reference/splice-scan-api/get-v0migrationslast", "location": "scan.yaml: GET /v0/migrations/last", "first_seen": "0.6.8", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -2081,7 +2194,7 @@ "route": "/reference/splice-scan-api/post-v0backfillingmigration-info", "location": "scan.yaml: POST /v0/backfilling/migration-info", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -2108,7 +2221,7 @@ "route": "/reference/splice-scan-api/get-v0migrationsschedule", "location": "scan.yaml: GET /v0/migrations/schedule", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -2135,7 +2248,7 @@ "route": "/reference/splice-scan-api/post-v0open-and-issuing-mining-rounds", "location": "scan.yaml: POST /v0/open-and-issuing-mining-rounds", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -2162,7 +2275,7 @@ "route": "/reference/splice-scan-api/get-v0domains:domain_idparties:party_idparticipant-id", "location": "scan.yaml: GET /v0/domains/{domain_id}/parties/{party_id}/participant-id", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -2189,7 +2302,7 @@ "route": "/reference/splice-scan-api/get-v1domains:domain_idparties:party_idparticipant-id", "location": "scan.yaml: GET /v1/domains/{domain_id}/parties/{party_id}/participant-id", "first_seen": "0.5.17", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -2216,7 +2329,7 @@ "route": "/reference/splice-scan-api/post-v0adminsvprevious-sv-reward-weight", "location": "scan.yaml: POST /v0/admin/sv/previous-sv-reward-weight", "first_seen": "0.6.9", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -2243,7 +2356,7 @@ "route": "/reference/splice-scan-api/get-v0internalreward-accounting-processrounds:round_numberactivity-totals", "location": "scan.yaml: GET /v0/internal/reward-accounting-process/rounds/{round_number}/activity-totals", "first_seen": "0.6.0", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -2271,7 +2384,7 @@ }, { "version": "0.6.9", - "summary": "The GET /v0/internal/reward-accounting-process/rounds/{round_number}/activity-totals operation changed in this snapshot.", + "summary": "The GET /v0/internal/reward-accounting-process/rounds/{round_number}/activity-totals operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -2297,7 +2410,7 @@ "route": "/reference/splice-scan-api/get-v0internalreward-accounting-processrounds:round_numberbatches:batch_hash", "location": "scan.yaml: GET /v0/internal/reward-accounting-process/rounds/{round_number}/batches/{batch_hash}", "first_seen": "0.6.0", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -2338,7 +2451,7 @@ "route": "/reference/splice-scan-api/get-v0internalreward-accounting-processroundsearliest-available", "location": "scan.yaml: GET /v0/internal/reward-accounting-process/rounds/earliest-available", "first_seen": "0.6.0", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -2379,7 +2492,7 @@ "route": "/reference/splice-scan-api/get-v0internalreward-accounting-processrounds:round_numberroot-hash", "location": "scan.yaml: GET /v0/internal/reward-accounting-process/rounds/{round_number}/root-hash", "first_seen": "0.6.0", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -2465,7 +2578,7 @@ "route": "/reference/splice-scan-api/get-v0roll-forward-lsu", "location": "scan.yaml: GET /v0/roll-forward-lsu", "first_seen": "0.6.0", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -2537,7 +2650,7 @@ "route": "/reference/splice-scan-api/get-v0splice-instance-names", "location": "scan.yaml: GET /v0/splice-instance-names", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -2564,7 +2677,7 @@ "route": "/reference/splice-scan-api/get-v0synchronizer-bootstrapping-transactions:domain_id_prefix", "location": "scan.yaml: GET /v0/synchronizer-bootstrapping-transactions/{domain_id_prefix}", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -2591,7 +2704,7 @@ "route": "/reference/splice-scan-api/get-v0synchronizer-identities:domain_id_prefix", "location": "scan.yaml: GET /v0/synchronizer-identities/{domain_id_prefix}", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -2786,7 +2899,7 @@ "route": "/reference/splice-scan-api/get-v2updateshash:hash", "location": "scan.yaml: GET /v2/updates/hash/{hash}", "first_seen": "0.6.0", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -2813,7 +2926,7 @@ "route": "/reference/splice-scan-api/get-v0updates:update_id", "location": "scan.yaml: GET /v0/updates/{update_id}", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -2828,7 +2941,7 @@ "changes": [ { "version": "0.5.17", - "summary": "The GET /v0/updates/{update_id} operation changed in this snapshot.", + "summary": "The GET /v0/updates/{update_id} operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -2841,7 +2954,7 @@ }, { "version": "0.6.0", - "summary": "The GET /v0/updates/{update_id} operation changed in this snapshot.", + "summary": "The GET /v0/updates/{update_id} operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -2879,7 +2992,7 @@ "route": "/reference/splice-scan-api/get-v1updates:update_id", "location": "scan.yaml: GET /v1/updates/{update_id}", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -2894,7 +3007,7 @@ "changes": [ { "version": "0.5.17", - "summary": "The GET /v1/updates/{update_id} operation changed in this snapshot.", + "summary": "The GET /v1/updates/{update_id} operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -2907,7 +3020,7 @@ }, { "version": "0.6.0", - "summary": "The GET /v1/updates/{update_id} operation changed in this snapshot.", + "summary": "The GET /v1/updates/{update_id} operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -2945,7 +3058,7 @@ "route": "/reference/splice-scan-api/get-v2updates:update_id", "location": "scan.yaml: GET /v2/updates/{update_id}", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -2960,7 +3073,7 @@ "changes": [ { "version": "0.5.17", - "summary": "The GET /v2/updates/{update_id} operation changed in this snapshot.", + "summary": "The GET /v2/updates/{update_id} operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -2973,7 +3086,7 @@ }, { "version": "0.6.0", - "summary": "The GET /v2/updates/{update_id} operation changed in this snapshot.", + "summary": "The GET /v2/updates/{update_id} operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -2999,7 +3112,7 @@ "route": "/reference/splice-scan-api/post-v0updates", "location": "scan.yaml: POST /v0/updates", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -3014,7 +3127,7 @@ "changes": [ { "version": "0.5.17", - "summary": "The POST /v0/updates operation changed in this snapshot.", + "summary": "The POST /v0/updates operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -3027,7 +3140,7 @@ }, { "version": "0.6.0", - "summary": "The POST /v0/updates operation changed in this snapshot.", + "summary": "The POST /v0/updates operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -3065,7 +3178,7 @@ "route": "/reference/splice-scan-api/post-v1updates", "location": "scan.yaml: POST /v1/updates", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -3080,7 +3193,7 @@ "changes": [ { "version": "0.5.17", - "summary": "The POST /v1/updates operation changed in this snapshot.", + "summary": "The POST /v1/updates operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -3093,7 +3206,7 @@ }, { "version": "0.6.0", - "summary": "The POST /v1/updates operation changed in this snapshot.", + "summary": "The POST /v1/updates operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -3131,7 +3244,7 @@ "route": "/reference/splice-scan-api/post-v2updates", "location": "scan.yaml: POST /v2/updates", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -3146,7 +3259,7 @@ "changes": [ { "version": "0.5.17", - "summary": "The POST /v2/updates operation changed in this snapshot.", + "summary": "The POST /v2/updates operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -3159,7 +3272,7 @@ }, { "version": "0.6.0", - "summary": "The POST /v2/updates operation changed in this snapshot.", + "summary": "The POST /v2/updates operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -3185,7 +3298,7 @@ "route": "/reference/splice-scan-api/post-v0backfillingupdates-before", "location": "scan.yaml: POST /v0/backfilling/updates-before", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -3200,7 +3313,7 @@ "changes": [ { "version": "0.5.17", - "summary": "The POST /v0/backfilling/updates-before operation changed in this snapshot.", + "summary": "The POST /v0/backfilling/updates-before operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -3213,7 +3326,7 @@ }, { "version": "0.6.0", - "summary": "The POST /v0/backfilling/updates-before operation changed in this snapshot.", + "summary": "The POST /v0/backfilling/updates-before operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -3239,7 +3352,7 @@ "route": "/reference/splice-scan-api/get-v0validatorsvalidator-faucets", "location": "scan.yaml: GET /v0/validators/validator-faucets", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -3266,7 +3379,7 @@ "route": "/reference/splice-scan-api/get-version", "location": "scan.yaml: GET /version", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -3293,7 +3406,7 @@ "route": "/reference/splice-scan-api/get-livez", "location": "scan.yaml: GET /livez", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -3320,7 +3433,7 @@ "route": "/reference/splice-scan-api/get-readyz", "location": "scan.yaml: GET /readyz", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -3368,7 +3481,7 @@ "changes": [ { "version": "0.5.12", - "summary": "The POST /v0/activities operation changed in this snapshot.", + "summary": "The POST /v0/activities operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -3406,7 +3519,7 @@ "route": "/reference/splice-scan-api/get-v0amulet-pricevotes", "location": "scan.yaml: GET /v0/amulet-price/votes", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -3433,7 +3546,7 @@ "route": "/reference/splice-scan-api/get-v0ans-entries", "location": "scan.yaml: GET /v0/ans-entries", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -3460,7 +3573,7 @@ "route": "/reference/splice-scan-api/get-v0historybulkacs", "location": "scan.yaml: GET /v0/history/bulk/acs", "first_seen": "0.5.17", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -3487,7 +3600,7 @@ "route": "/reference/splice-scan-api/post-v0historybulkupdates", "location": "scan.yaml: POST /v0/history/bulk/updates", "first_seen": "0.5.18", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -3514,7 +3627,7 @@ "route": "/reference/splice-scan-api/get-v0adminsvvoterequests", "location": "scan.yaml: GET /v0/admin/sv/voterequests", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -3541,7 +3654,7 @@ "route": "/reference/splice-scan-api/get-v0scans", "location": "scan.yaml: GET /v0/scans", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -3568,7 +3681,7 @@ "route": "/reference/splice-scan-api/get-v0dso-sequencers", "location": "scan.yaml: GET /v0/dso-sequencers", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -3583,7 +3696,7 @@ "changes": [ { "version": "0.6.0", - "summary": "The GET /v0/dso-sequencers operation changed in this snapshot.", + "summary": "The GET /v0/dso-sequencers operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -3609,7 +3722,7 @@ "route": "/reference/splice-scan-api/get-v0featured-apps", "location": "scan.yaml: GET /v0/featured-apps", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -3636,7 +3749,7 @@ "route": "/reference/splice-scan-api/get-v0featured-appsby-provider:provider_party_id", "location": "scan.yaml: GET /v0/featured-apps/by-provider/{provider_party_id}", "first_seen": "0.6.0", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -3753,7 +3866,7 @@ "route": "/reference/splice-scan-api/get-v0sv-bft-sequencers", "location": "scan.yaml: GET /v0/sv-bft-sequencers", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -3768,7 +3881,7 @@ "changes": [ { "version": "0.6.0", - "summary": "The GET /v0/sv-bft-sequencers operation changed in this snapshot.", + "summary": "The GET /v0/sv-bft-sequencers operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -3815,7 +3928,7 @@ "changes": [ { "version": "0.5.12", - "summary": "The POST /v0/transactions operation changed in this snapshot.", + "summary": "The POST /v0/transactions operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -3853,7 +3966,7 @@ "route": "/reference/splice-scan-api/get-v0unclaimed-development-fund-coupons", "location": "scan.yaml: GET /v0/unclaimed-development-fund-coupons", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -3880,7 +3993,7 @@ "route": "/reference/splice-scan-api/get-v0adminvalidatorlicenses", "location": "scan.yaml: GET /v0/admin/validator/licenses", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -3907,7 +4020,7 @@ "route": "/reference/splice-scan-api/post-v0adminsvvoteresults", "location": "scan.yaml: POST /v0/admin/sv/voteresults", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -3922,7 +4035,7 @@ "changes": [ { "version": "0.6.0", - "summary": "The POST /v0/admin/sv/voteresults operation changed in this snapshot.", + "summary": "The POST /v0/admin/sv/voteresults operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -3935,7 +4048,7 @@ }, { "version": "0.6.1", - "summary": "The POST /v0/admin/sv/voteresults operation changed in this snapshot.", + "summary": "The POST /v0/admin/sv/voteresults operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -3948,7 +4061,7 @@ }, { "version": "0.6.4", - "summary": "The POST /v0/admin/sv/voteresults operation changed in this snapshot.", + "summary": "The POST /v0/admin/sv/voteresults operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -3961,7 +4074,7 @@ }, { "version": "0.6.10", - "summary": "The POST /v0/admin/sv/voteresults operation changed in this snapshot.", + "summary": "The POST /v0/admin/sv/voteresults operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -3987,7 +4100,7 @@ "route": "/reference/splice-scan-api/post-v0voterequest", "location": "scan.yaml: POST /v0/voterequest", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -4014,7 +4127,7 @@ "route": "/reference/splice-scan-api/get-v0ans-entriesby-name:name", "location": "scan.yaml: GET /v0/ans-entries/by-name/{name}", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -4041,7 +4154,7 @@ "route": "/reference/splice-scan-api/get-v0ans-entriesby-party:party", "location": "scan.yaml: GET /v0/ans-entries/by-party/{party}", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -4068,7 +4181,7 @@ "route": "/reference/splice-scan-api/get-v0voterequests:vote_request_contract_id", "location": "scan.yaml: GET /v0/voterequests/{vote_request_contract_id}", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -4095,7 +4208,7 @@ "route": "/reference/splice-scan-api/get-v0featured-apps:provider_party_id", "location": "scan.yaml: GET /v0/featured-apps/{provider_party_id}", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -4122,7 +4235,7 @@ "route": "/reference/splice-scan-api/get-v0featured-appsby-contract-id:contract_id", "location": "scan.yaml: GET /v0/featured-apps/by-contract-id/{contract_id}", "first_seen": "0.6.0", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -4149,7 +4262,7 @@ "route": "/reference/splice-scan-api/get-v0transfer-command-counter:party", "location": "scan.yaml: GET /v0/transfer-command-counter/{party}", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -4176,7 +4289,7 @@ "route": "/reference/splice-scan-api/get-v0transfer-commandstatus", "location": "scan.yaml: GET /v0/transfer-command/status", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -4203,7 +4316,7 @@ "route": "/reference/splice-scan-api/get-v0transfer-preapprovalsby-party:party", "location": "scan.yaml: GET /v0/transfer-preapprovals/by-party/{party}", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -4230,7 +4343,7 @@ "route": "/reference/splice-token-metadata-service/get-registrymetadatav1instruments:instrumentid", "location": "token-metadata-v1.yaml: GET /registry/metadata/v1/instruments/{instrumentId}", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -4245,7 +4358,7 @@ "changes": [ { "version": "0.6.11", - "summary": "The GET /registry/metadata/v1/instruments/{instrumentId} operation changed in this snapshot.", + "summary": "The GET /registry/metadata/v1/instruments/{instrumentId} operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -4258,7 +4371,7 @@ }, { "version": "0.6.12", - "summary": "The GET /registry/metadata/v1/instruments/{instrumentId} operation changed in this snapshot.", + "summary": "The GET /registry/metadata/v1/instruments/{instrumentId} operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -4284,7 +4397,7 @@ "route": "/reference/splice-token-metadata-service/get-registrymetadatav1info", "location": "token-metadata-v1.yaml: GET /registry/metadata/v1/info", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -4311,7 +4424,7 @@ "route": "/reference/splice-token-metadata-service/get-registrymetadatav1instruments", "location": "token-metadata-v1.yaml: GET /registry/metadata/v1/instruments", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -4326,7 +4439,7 @@ "changes": [ { "version": "0.6.11", - "summary": "The GET /registry/metadata/v1/instruments operation changed in this snapshot.", + "summary": "The GET /registry/metadata/v1/instruments operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -4339,7 +4452,7 @@ }, { "version": "0.6.12", - "summary": "The GET /registry/metadata/v1/instruments operation changed in this snapshot.", + "summary": "The GET /registry/metadata/v1/instruments operation was updated in this snapshot.", "evidence": [ { "kind": "snapshot_diff", @@ -4365,7 +4478,7 @@ "route": "/reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1transfer-factory", "location": "transfer-instruction-v1.yaml: POST /registry/transfer-instruction/v1/transfer-factory", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -4392,7 +4505,7 @@ "route": "/reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1:transferinstructionidchoice-contextsaccept", "location": "transfer-instruction-v1.yaml: POST /registry/transfer-instruction/v1/{transferInstructionId}/choice-contexts/accept", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -4419,7 +4532,7 @@ "route": "/reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1:transferinstructionidchoice-contextsreject", "location": "transfer-instruction-v1.yaml: POST /registry/transfer-instruction/v1/{transferInstructionId}/choice-contexts/reject", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -4446,7 +4559,7 @@ "route": "/reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1:transferinstructionidchoice-contextswithdraw", "location": "transfer-instruction-v1.yaml: POST /registry/transfer-instruction/v1/{transferInstructionId}/choice-contexts/withdraw", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -4473,7 +4586,7 @@ "route": "/reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2transfer-factory", "location": "transfer-instruction-v2.yaml: POST /registry/transfer-instruction/v2/transfer-factory", "first_seen": "0.6.11", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -4500,7 +4613,7 @@ "route": "/reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2:transferinstructionidchoice-contextsaccept", "location": "transfer-instruction-v2.yaml: POST /registry/transfer-instruction/v2/{transferInstructionId}/choice-contexts/accept", "first_seen": "0.6.11", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -4527,7 +4640,7 @@ "route": "/reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2:transferinstructionidchoice-contextsreject", "location": "transfer-instruction-v2.yaml: POST /registry/transfer-instruction/v2/{transferInstructionId}/choice-contexts/reject", "first_seen": "0.6.11", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -4554,7 +4667,7 @@ "route": "/reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2:transferinstructionidchoice-contextswithdraw", "location": "transfer-instruction-v2.yaml: POST /registry/transfer-instruction/v2/{transferInstructionId}/choice-contexts/withdraw", "first_seen": "0.6.11", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -4581,7 +4694,7 @@ "route": "/reference/splice-wallet-api-external/post-v0walletbuy-traffic-requests", "location": "wallet-external.yaml: POST /v0/wallet/buy-traffic-requests", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -4608,7 +4721,7 @@ "route": "/reference/splice-wallet-api-external/post-v0wallettransfer-offers", "location": "wallet-external.yaml: POST /v0/wallet/transfer-offers", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -4635,7 +4748,7 @@ "route": "/reference/splice-wallet-api-external/post-v0walletbuy-traffic-requests:tracking_idstatus", "location": "wallet-external.yaml: POST /v0/wallet/buy-traffic-requests/{tracking_id}/status", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -4662,7 +4775,7 @@ "route": "/reference/splice-wallet-api-external/post-v0wallettransfer-offers:tracking_idstatus", "location": "wallet-external.yaml: POST /v0/wallet/transfer-offers/{tracking_id}/status", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", @@ -4689,7 +4802,7 @@ "route": "/reference/splice-wallet-api-external/get-v0wallettransfer-offers", "location": "wallet-external.yaml: GET /v0/wallet/transfer-offers", "first_seen": "0.5.10", - "last_seen": "0.7.4", + "last_seen": "0.7.5", "current_present": true, "introduction_evidence": { "kind": "snapshot", diff --git a/docs-main/openapi/splice/scan/scan.yaml b/docs-main/openapi/splice/scan/scan.yaml index 9bae172fe..dfedc901a 100644 --- a/docs-main/openapi/splice/scan/scan.yaml +++ b/docs-main/openapi/splice/scan/scan.yaml @@ -720,12 +720,16 @@ paths: /v1/state/acs: post: summary: "POST /v1/state/acs" + deprecated: true tags: - external - scan x-jvm-package: scan operationId: getAcsSnapshotAtV1 description: | + Deprecated. Please use /v2/state/acs instead. + The only difference with this endpoint and that one is the type of the `after`/`next_page_token` pagination token. + Returns the ACS in creation date ascending order, paged, for a given migration id and record time. Unlike /v0/state/acs, every contract is identified by an (optional) update_id (as opposed to the event ID in /v0/state/acs, which was not BFT-safe). @@ -750,6 +754,39 @@ paths: $ref: '#/components/responses/404' '500': $ref: '#/components/responses/500' + /v2/state/acs: + post: + summary: "POST /v2/state/acs" + tags: + - external + - scan + x-jvm-package: scan + operationId: getAcsSnapshotAtV2 + description: | + Returns the ACS in creation date ascending order, paged, for a given migration id and record time. + Unlike /v0/state/acs, every contract is identified by an (optional) update_id + (as opposed to the event ID in /v0/state/acs, which was not BFT-safe). + The update_id is the ID of the update in which the contract was created, and can be used to correlate with updates returned by /v2/updates. + For contracts created in an earlier migration ID, the update_id will be absent. + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/AcsRequestV2' + responses: + '200': + description: ok + content: + application/json: + schema: + $ref: '#/components/schemas/AcsResponseV2' + '400': + $ref: '#/components/responses/400' + '404': + $ref: '#/components/responses/404' + '500': + $ref: '#/components/responses/500' /v0/state/acs/force: post: summary: "POST /v0/state/acs/force" @@ -806,12 +843,16 @@ paths: /v1/holdings/state: post: summary: "POST /v1/holdings/state" + deprecated: true tags: - external - scan x-jvm-package: scan operationId: getHoldingsStateAtV1 description: | + Deprecated. Please use /v2/holdings/state instead. + The only difference with this endpoint and that one is the type of the `after`/`next_page_token` pagination token. + Returns the active amulet contracts for a given migration id and record time, in creation date ascending order, paged. requestBody: required: true @@ -832,6 +873,35 @@ paths: $ref: '#/components/responses/404' '500': $ref: '#/components/responses/500' + /v2/holdings/state: + post: + summary: "POST /v2/holdings/state" + tags: + - external + - scan + x-jvm-package: scan + operationId: getHoldingsStateAtV2 + description: | + Returns the active amulet contracts for a given migration id and record time, in creation date ascending order, paged. + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/HoldingsStateRequestV2' + responses: + '200': + description: ok + content: + application/json: + schema: + $ref: '#/components/schemas/AcsResponseV2' + '400': + $ref: '#/components/responses/400' + '404': + $ref: '#/components/responses/404' + '500': + $ref: '#/components/responses/500' /v0/holdings/summary: post: summary: "POST /v0/holdings/summary" @@ -3034,6 +3104,60 @@ components: type: string description: | Filters the ACS by contracts with these template IDs, specified as "PACKAGE_NAME:MODULE_NAME:ENTITY_NAME". + AcsRequestV2: + type: object + required: + - migration_id + - record_time + - page_size + properties: + migration_id: + type: integer + format: int64 + description: | + The migration id for which to return the ACS. + record_time: + type: string + format: date-time + description: | + The timestamp at which the contract set was active. + This needs to be an exact timestamp, i.e., + needs to correspond to a timestamp reported by `/v0/state/acs/snapshot-timestamp` if `record_time_match` is set to `exact` (which is the default). + If `record_time_match` is set to `at_or_before`, this can be any timestamp, and the most recent snapshot at or before the given `record_time` will be returned. + record_time_match: + type: string + description: | + How to match the record_time. "exact" requires the record_time to match exactly. + "at_or_before" finds the most recent snapshot at or before the given record_time. + enum: + - exact + - at_or_before + default: exact + after: + type: string + description: | + Pagination token for the next page of results. For this to be valid, + this must be the `next_page_token` from a prior request with identical + parameters aside from `after` and `page_size`; the response may be + invalid otherwise. + This token is opaque and not meant to be edited by users. + page_size: + description: | + The maximum number of created events returned for this request. + type: integer + format: int32 + party_ids: + type: array + items: + type: string + description: | + Filters the ACS by contracts in which these party IDs are stakeholders. + templates: + type: array + items: + type: string + description: | + Filters the ACS by contracts with these template IDs, specified as "PACKAGE_NAME:MODULE_NAME:ENTITY_NAME". HoldingsStateRequest: type: object required: @@ -3081,6 +3205,53 @@ components: minItems: 1 description: | Filters by contracts in which these party_ids are the owners of the amulets. + HoldingsStateRequestV2: + type: object + required: + - migration_id + - record_time + - page_size + - owner_party_ids + properties: + migration_id: + type: integer + format: int64 + description: | + The migration id for which to return the ACS. + record_time: + type: string + format: date-time + description: | + The timestamp at which the contract set was active. + This needs to be an exact timestamp, i.e., + needs to correspond to a timestamp reported by `/v0/state/acs/snapshot-timestamp` if `record_time_match` is set to `exact` (which is the default). + If `record_time_match` is set to `at_or_before`, this can be any timestamp, and the most recent snapshot at or before the given `record_time` will be returned. + record_time_match: + type: string + description: | + How to match the record_time. "exact" requires the record_time to match exactly. + "at_or_before" finds the most recent snapshot at or before the given record_time. + enum: + - exact + - at_or_before + default: exact + after: + type: string + description: | + Pagination token for the next page of results. + This token is opaque and not meant to be edited by users. + page_size: + description: | + The maximum number of created events returned for this request. + type: integer + format: int32 + owner_party_ids: + type: array + items: + type: string + minItems: 1 + description: | + Filters by contracts in which these party_ids are the owners of the amulets. HoldingsSummaryRequest: type: object required: @@ -3231,6 +3402,35 @@ components: When requesting the next page of results, pass this as `after` to the `AcsRequest` or `HoldingsStateRequest`. Will be absent when there are no more pages. + AcsResponseV2: + type: object + required: + - record_time + - migration_id + - created_events + properties: + record_time: + description: The same `record_time` as in the request. + type: string + format: date-time + migration_id: + description: The same `migration_id` as in the request. + type: integer + format: int64 + created_events: + description: | + Up to `page_size` contracts in the ACS. + `create_arguments` are always encoded as `compact_json`. + type: array + items: + $ref: '#/components/schemas/ActiveContract' + next_page_token: + type: string + description: | + When requesting the next page of results, pass this as `after` + to the `AcsRequestV2` or `HoldingsStateRequestV2`. + Will be absent when there are no more pages. + This token is opaque and not meant to be edited by users. HoldingsSummaryResponse: type: object required: diff --git a/docs-main/reference/json-api-reference/delete-v2idps:idp-id.mdx b/docs-main/reference/json-api-reference/delete-v2idps:idp-id.mdx index 1ee29b07b..9f13d4fb6 100644 --- a/docs-main/reference/json-api-reference/delete-v2idps:idp-id.mdx +++ b/docs-main/reference/json-api-reference/delete-v2idps:idp-id.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -204,19 +204,19 @@ Does not (yet) contain any data.
-
+
- Changed + Updated 3.5
-

The DELETE /v2/idps/{idp-id} operation changed in this snapshot.

+

The DELETE /v2/idps/{idp-id} operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/delete-v2users:user-id.mdx b/docs-main/reference/json-api-reference/delete-v2users:user-id.mdx index d0fe8bb6f..19f7b4572 100644 --- a/docs-main/reference/json-api-reference/delete-v2users:user-id.mdx +++ b/docs-main/reference/json-api-reference/delete-v2users:user-id.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -202,19 +202,19 @@ Delete an existing user and all its rights.
-
+
- Changed + Updated 3.5
-

The DELETE /v2/users/{user-id} operation changed in this snapshot.

+

The DELETE /v2/users/{user-id} operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/get-livez.mdx b/docs-main/reference/json-api-reference/get-livez.mdx index bfb3362e5..ae0ffdb52 100644 --- a/docs-main/reference/json-api-reference/get-livez.mdx +++ b/docs-main/reference/json-api-reference/get-livez.mdx @@ -22,7 +22,7 @@ playground: "interactive" OpenAPI - Since 3.5 + Added 3.5
@@ -166,9 +166,9 @@ Checks if the service is alive
-
+
- Introduced + Added 3.5
diff --git a/docs-main/reference/json-api-reference/get-readyz.mdx b/docs-main/reference/json-api-reference/get-readyz.mdx index 0f2b881b2..a521fdf07 100644 --- a/docs-main/reference/json-api-reference/get-readyz.mdx +++ b/docs-main/reference/json-api-reference/get-readyz.mdx @@ -22,7 +22,7 @@ playground: "interactive" OpenAPI - Since 3.5 + Added 3.5
@@ -182,9 +182,9 @@ Checks if the service is ready to serve requests
-
+
- Introduced + Added 3.5
diff --git a/docs-main/reference/json-api-reference/get-v2authenticated-user.mdx b/docs-main/reference/json-api-reference/get-v2authenticated-user.mdx index d6fefc1df..15ca59172 100644 --- a/docs-main/reference/json-api-reference/get-v2authenticated-user.mdx +++ b/docs-main/reference/json-api-reference/get-v2authenticated-user.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -204,19 +204,19 @@ Users and rights ///////////////// Users are used to dynamically manage the righ
-
+
- Changed + Updated 3.5
-

The GET /v2/authenticated-user operation changed in this snapshot.

+

The GET /v2/authenticated-user operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/get-v2idps.mdx b/docs-main/reference/json-api-reference/get-v2idps.mdx index a2f9429b1..5f6ad70ae 100644 --- a/docs-main/reference/json-api-reference/get-v2idps.mdx +++ b/docs-main/reference/json-api-reference/get-v2idps.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -186,19 +186,19 @@ The list of identity provider configs Required: must be non-empty
-
+
- Changed + Updated 3.5
-

The GET /v2/idps operation changed in this snapshot.

+

The GET /v2/idps operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/get-v2idps:idp-id.mdx b/docs-main/reference/json-api-reference/get-v2idps:idp-id.mdx index 6b99e59c1..d014b2536 100644 --- a/docs-main/reference/json-api-reference/get-v2idps:idp-id.mdx +++ b/docs-main/reference/json-api-reference/get-v2idps:idp-id.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -202,19 +202,19 @@ Get the identity provider configuration data by id.
-
+
- Changed + Updated 3.5
-

The GET /v2/idps/{idp-id} operation changed in this snapshot.

+

The GET /v2/idps/{idp-id} operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/get-v2interactive-submissionpreferred-package-version.mdx b/docs-main/reference/json-api-reference/get-v2interactive-submissionpreferred-package-version.mdx index e3d50228f..6875f7385 100644 --- a/docs-main/reference/json-api-reference/get-v2interactive-submissionpreferred-package-version.mdx +++ b/docs-main/reference/json-api-reference/get-v2interactive-submissionpreferred-package-version.mdx @@ -22,9 +22,11 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5 + + Deprecated 3.5
@@ -219,7 +221,7 @@ OpenAPI type: `string (date-time)`.
-
+
Deprecated 3.5 @@ -227,19 +229,19 @@ OpenAPI type: `string (date-time)`.
-
+
- Changed + Updated 3.5
-

The GET /v2/interactive-submission/preferred-package-version operation changed in this snapshot.

+

The GET /v2/interactive-submission/preferred-package-version operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/get-v2package-vetting.mdx b/docs-main/reference/json-api-reference/get-v2package-vetting.mdx index c9d01d3eb..94c9dd515 100644 --- a/docs-main/reference/json-api-reference/get-v2package-vetting.mdx +++ b/docs-main/reference/json-api-reference/get-v2package-vetting.mdx @@ -22,9 +22,11 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5 + + Deprecated 3.4
@@ -246,17 +248,17 @@ Pagination token to retrieve the next page. Empty string if there are no further
-
+
- Changed + Updated 3.5
-

The GET /v2/package-vetting operation changed in this snapshot.

+

The GET /v2/package-vetting operation was updated in this snapshot.

-
+
Deprecated 3.4 @@ -264,9 +266,9 @@ Pagination token to retrieve the next page. Empty string if there are no further
-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/get-v2packages.mdx b/docs-main/reference/json-api-reference/get-v2packages.mdx index 8bffef001..9545cb2d5 100644 --- a/docs-main/reference/json-api-reference/get-v2packages.mdx +++ b/docs-main/reference/json-api-reference/get-v2packages.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -186,19 +186,19 @@ The IDs of all Daml-LF packages supported by the server. Each element must be a
-
+
- Changed + Updated 3.5
-

The GET /v2/packages operation changed in this snapshot.

+

The GET /v2/packages operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/get-v2packages:package-id.mdx b/docs-main/reference/json-api-reference/get-v2packages:package-id.mdx index 8c02b7d7c..ae86eb555 100644 --- a/docs-main/reference/json-api-reference/get-v2packages:package-id.mdx +++ b/docs-main/reference/json-api-reference/get-v2packages:package-id.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -202,19 +202,19 @@ Returns the contents of a single package.
-
+
- Changed + Updated 3.5
-

The GET /v2/packages/{package-id} operation changed in this snapshot.

+

The GET /v2/packages/{package-id} operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/get-v2packages:package-idstatus.mdx b/docs-main/reference/json-api-reference/get-v2packages:package-idstatus.mdx index 4b187d10c..be62248c6 100644 --- a/docs-main/reference/json-api-reference/get-v2packages:package-idstatus.mdx +++ b/docs-main/reference/json-api-reference/get-v2packages:package-idstatus.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -204,19 +204,19 @@ The status of the package. Required
-
+
- Changed + Updated 3.5
-

The GET /v2/packages/{package-id}/status operation changed in this snapshot.

+

The GET /v2/packages/{package-id}/status operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/get-v2parties.mdx b/docs-main/reference/json-api-reference/get-v2parties.mdx index 86e5b2e86..232e7d771 100644 --- a/docs-main/reference/json-api-reference/get-v2parties.mdx +++ b/docs-main/reference/json-api-reference/get-v2parties.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -230,19 +230,19 @@ Pagination token to retrieve the next page. Empty, if there are no further resul
-
+
- Changed + Updated 3.5
-

The GET /v2/parties operation changed in this snapshot.

+

The GET /v2/parties operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/get-v2parties:party.mdx b/docs-main/reference/json-api-reference/get-v2parties:party.mdx index 9b1cbd547..993b8be55 100644 --- a/docs-main/reference/json-api-reference/get-v2parties:party.mdx +++ b/docs-main/reference/json-api-reference/get-v2parties:party.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -226,19 +226,19 @@ The details of the requested Daml parties by the participant, if known. The part
-
+
- Changed + Updated 3.5
-

The GET /v2/parties/{party} operation changed in this snapshot.

+

The GET /v2/parties/{party} operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/get-v2partiesparticipant-id.mdx b/docs-main/reference/json-api-reference/get-v2partiesparticipant-id.mdx index a5b9c1a45..14cec7a5a 100644 --- a/docs-main/reference/json-api-reference/get-v2partiesparticipant-id.mdx +++ b/docs-main/reference/json-api-reference/get-v2partiesparticipant-id.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -186,19 +186,19 @@ Identifier of the participant, which SHOULD be globally unique. Must be a valid
-
+
- Changed + Updated 3.5
-

The GET /v2/parties/participant-id operation changed in this snapshot.

+

The GET /v2/parties/participant-id operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/get-v2stateactive-contracts-page.mdx b/docs-main/reference/json-api-reference/get-v2stateactive-contracts-page.mdx index c8780f477..84aa9f8fa 100644 --- a/docs-main/reference/json-api-reference/get-v2stateactive-contracts-page.mdx +++ b/docs-main/reference/json-api-reference/get-v2stateactive-contracts-page.mdx @@ -22,7 +22,9 @@ playground: "interactive" OpenAPI - Since 3.5 + Added 3.5 + + Deprecated 3.5
@@ -250,7 +252,7 @@ If not present this is the last page. If present, this token must be used to get
-
+
Deprecated 3.5 @@ -258,9 +260,9 @@ If not present this is the last page. If present, this token must be used to get
-
+
- Introduced + Added 3.5
diff --git a/docs-main/reference/json-api-reference/get-v2stateconnected-synchronizers.mdx b/docs-main/reference/json-api-reference/get-v2stateconnected-synchronizers.mdx index fc6ea4e1d..a7f70911e 100644 --- a/docs-main/reference/json-api-reference/get-v2stateconnected-synchronizers.mdx +++ b/docs-main/reference/json-api-reference/get-v2stateconnected-synchronizers.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -212,19 +212,19 @@ Optional: can be empty
-
+
- Changed + Updated 3.5
-

The GET /v2/state/connected-synchronizers operation changed in this snapshot.

+

The GET /v2/state/connected-synchronizers operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/get-v2statelatest-pruned-offsets.mdx b/docs-main/reference/json-api-reference/get-v2statelatest-pruned-offsets.mdx index 5cf58b04e..0d0f5ab16 100644 --- a/docs-main/reference/json-api-reference/get-v2statelatest-pruned-offsets.mdx +++ b/docs-main/reference/json-api-reference/get-v2statelatest-pruned-offsets.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -192,19 +192,19 @@ It will always be a non-negative integer. If positive, the absolute offset up to
-
+
- Changed + Updated 3.5
-

The GET /v2/state/latest-pruned-offsets operation changed in this snapshot.

+

The GET /v2/state/latest-pruned-offsets operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/get-v2stateledger-end.mdx b/docs-main/reference/json-api-reference/get-v2stateledger-end.mdx index 191a0b1f7..0b4459350 100644 --- a/docs-main/reference/json-api-reference/get-v2stateledger-end.mdx +++ b/docs-main/reference/json-api-reference/get-v2stateledger-end.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -186,19 +186,19 @@ It will always be a non-negative integer. If zero, the participant view of the l
-
+
- Changed + Updated 3.5
-

The GET /v2/state/ledger-end operation changed in this snapshot.

+

The GET /v2/state/ledger-end operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/get-v2updatestransaction-tree-by-id:update-id.mdx b/docs-main/reference/json-api-reference/get-v2updatestransaction-tree-by-id:update-id.mdx index 2a5355d90..208532b4c 100644 --- a/docs-main/reference/json-api-reference/get-v2updatestransaction-tree-by-id:update-id.mdx +++ b/docs-main/reference/json-api-reference/get-v2updatestransaction-tree-by-id:update-id.mdx @@ -22,11 +22,13 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5 - Remove as of 3.5.0 + Deprecated 3.4 + + Removal scheduled 3.5.0
@@ -224,25 +226,25 @@ Provided for backwards compatibility, it will be removed in the Canton version 3
-
+
- Remove as of + Removal scheduled 3.5.0
-
+
- Changed + Updated 3.5
-

The GET /v2/updates/transaction-tree-by-id/{update-id} operation changed in this snapshot.

+

The GET /v2/updates/transaction-tree-by-id/{update-id} operation was updated in this snapshot.

-
+
Deprecated 3.4 @@ -250,9 +252,9 @@ Provided for backwards compatibility, it will be removed in the Canton version 3
-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/get-v2updatestransaction-tree-by-offset:offset.mdx b/docs-main/reference/json-api-reference/get-v2updatestransaction-tree-by-offset:offset.mdx index 35140b03c..3a6f17ef5 100644 --- a/docs-main/reference/json-api-reference/get-v2updatestransaction-tree-by-offset:offset.mdx +++ b/docs-main/reference/json-api-reference/get-v2updatestransaction-tree-by-offset:offset.mdx @@ -22,11 +22,13 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5 - Remove as of 3.5.0 + Deprecated 3.4 + + Removal scheduled 3.5.0
@@ -229,25 +231,25 @@ Provided for backwards compatibility, it will be removed in the Canton version 3
-
+
- Remove as of + Removal scheduled 3.5.0
-
+
- Changed + Updated 3.5
-

The GET /v2/updates/transaction-tree-by-offset/{offset} operation changed in this snapshot.

+

The GET /v2/updates/transaction-tree-by-offset/{offset} operation was updated in this snapshot.

-
+
Deprecated 3.4 @@ -255,9 +257,9 @@ Provided for backwards compatibility, it will be removed in the Canton version 3
-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/get-v2users.mdx b/docs-main/reference/json-api-reference/get-v2users.mdx index 3eb50fafb..0f197c804 100644 --- a/docs-main/reference/json-api-reference/get-v2users.mdx +++ b/docs-main/reference/json-api-reference/get-v2users.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -222,19 +222,19 @@ Pagination token to retrieve the next page. Empty, if there are no further resul
-
+
- Changed + Updated 3.5
-

The GET /v2/users operation changed in this snapshot.

+

The GET /v2/users operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/get-v2users:user-id.mdx b/docs-main/reference/json-api-reference/get-v2users:user-id.mdx index e770abc25..71b9077aa 100644 --- a/docs-main/reference/json-api-reference/get-v2users:user-id.mdx +++ b/docs-main/reference/json-api-reference/get-v2users:user-id.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -222,19 +222,19 @@ Users and rights ///////////////// Users are used to dynamically manage the righ
-
+
- Changed + Updated 3.5
-

The GET /v2/users/{user-id} operation changed in this snapshot.

+

The GET /v2/users/{user-id} operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/get-v2users:user-idrights.mdx b/docs-main/reference/json-api-reference/get-v2users:user-idrights.mdx index df2b3d83e..8c6b8e0dd 100644 --- a/docs-main/reference/json-api-reference/get-v2users:user-idrights.mdx +++ b/docs-main/reference/json-api-reference/get-v2users:user-idrights.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -204,19 +204,19 @@ All rights of the user. Optional: can be empty
-
+
- Changed + Updated 3.5
-

The GET /v2/users/{user-id}/rights operation changed in this snapshot.

+

The GET /v2/users/{user-id}/rights operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/get-v2version.mdx b/docs-main/reference/json-api-reference/get-v2version.mdx index 340412fc7..3f368e76c 100644 --- a/docs-main/reference/json-api-reference/get-v2version.mdx +++ b/docs-main/reference/json-api-reference/get-v2version.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -190,19 +190,19 @@ The version of the ledger API. Required
-
+
- Changed + Updated 3.5
-

The GET /v2/version operation changed in this snapshot.

+

The GET /v2/version operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/patch-v2idps:idp-id.mdx b/docs-main/reference/json-api-reference/patch-v2idps:idp-id.mdx index 5970b00e9..4d75b2070 100644 --- a/docs-main/reference/json-api-reference/patch-v2idps:idp-id.mdx +++ b/docs-main/reference/json-api-reference/patch-v2idps:idp-id.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -240,19 +240,19 @@ OpenAPI type: `FieldMask`.
-
+
- Changed + Updated 3.5
-

The PATCH /v2/idps/{idp-id} operation changed in this snapshot.

+

The PATCH /v2/idps/{idp-id} operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/patch-v2parties:party.mdx b/docs-main/reference/json-api-reference/patch-v2parties:party.mdx index 81c07094a..2fdf8955b 100644 --- a/docs-main/reference/json-api-reference/patch-v2parties:party.mdx +++ b/docs-main/reference/json-api-reference/patch-v2parties:party.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -240,19 +240,19 @@ OpenAPI type: `FieldMask`.
-
+
- Changed + Updated 3.5
-

The PATCH /v2/parties/{party} operation changed in this snapshot.

+

The PATCH /v2/parties/{party} operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/patch-v2users:user-id.mdx b/docs-main/reference/json-api-reference/patch-v2users:user-id.mdx index 1c3223e47..ee56f5ca0 100644 --- a/docs-main/reference/json-api-reference/patch-v2users:user-id.mdx +++ b/docs-main/reference/json-api-reference/patch-v2users:user-id.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -242,19 +242,19 @@ Users and rights ///////////////// Users are used to dynamically manage the righ
-
+
- Changed + Updated 3.5
-

The PATCH /v2/users/{user-id} operation changed in this snapshot.

+

The PATCH /v2/users/{user-id} operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/patch-v2users:user-ididentity-provider-id.mdx b/docs-main/reference/json-api-reference/patch-v2users:user-ididentity-provider-id.mdx index 929af2a0a..e2d060934 100644 --- a/docs-main/reference/json-api-reference/patch-v2users:user-ididentity-provider-id.mdx +++ b/docs-main/reference/json-api-reference/patch-v2users:user-ididentity-provider-id.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -243,19 +243,19 @@ Target identity provider ID of the user If omitted, the default IDP is assumed O
-
+
- Changed + Updated 3.5
-

The PATCH /v2/users/{user-id}/identity-provider-id operation changed in this snapshot.

+

The PATCH /v2/users/{user-id}/identity-provider-id operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/patch-v2users:user-idrights.mdx b/docs-main/reference/json-api-reference/patch-v2users:user-idrights.mdx index 51f7df75f..868cbf719 100644 --- a/docs-main/reference/json-api-reference/patch-v2users:user-idrights.mdx +++ b/docs-main/reference/json-api-reference/patch-v2users:user-idrights.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -247,19 +247,19 @@ The rights that were actually revoked by the request. Optional: can be empty
-
+
- Changed + Updated 3.5
-

The PATCH /v2/users/{user-id}/rights operation changed in this snapshot.

+

The PATCH /v2/users/{user-id}/rights operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/post-v2commandsasyncsubmit-reassignment.mdx b/docs-main/reference/json-api-reference/post-v2commandsasyncsubmit-reassignment.mdx index 15f09162d..8ff8dcbfb 100644 --- a/docs-main/reference/json-api-reference/post-v2commandsasyncsubmit-reassignment.mdx +++ b/docs-main/reference/json-api-reference/post-v2commandsasyncsubmit-reassignment.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -213,19 +213,19 @@ OpenAPI type: `ReassignmentCommands`.
-
+
- Changed + Updated 3.5
-

The POST /v2/commands/async/submit-reassignment operation changed in this snapshot.

+

The POST /v2/commands/async/submit-reassignment operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/post-v2commandsasyncsubmit.mdx b/docs-main/reference/json-api-reference/post-v2commandsasyncsubmit.mdx index b31db2d54..00085021f 100644 --- a/docs-main/reference/json-api-reference/post-v2commandsasyncsubmit.mdx +++ b/docs-main/reference/json-api-reference/post-v2commandsasyncsubmit.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -321,19 +321,19 @@ The maximum number of passes for the Topology-Aware Package Selection (TAPS). Hi
-
+
- Changed + Updated 3.5
-

The POST /v2/commands/async/submit operation changed in this snapshot.

+

The POST /v2/commands/async/submit operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/post-v2commandscommand-completions.mdx b/docs-main/reference/json-api-reference/post-v2commandscommand-completions.mdx index e82636dff..bded39edf 100644 --- a/docs-main/reference/json-api-reference/post-v2commandscommand-completions.mdx +++ b/docs-main/reference/json-api-reference/post-v2commandscommand-completions.mdx @@ -22,7 +22,7 @@ playground: "interactive" OpenAPI - Since 3.5 + Added 3.5
@@ -250,9 +250,9 @@ This optional field indicates the minimum offset for completions. This can be us
-
+
- Introduced + Added 3.5
diff --git a/docs-main/reference/json-api-reference/post-v2commandscompletions.mdx b/docs-main/reference/json-api-reference/post-v2commandscompletions.mdx index 9fba3b26e..cea2c39b5 100644 --- a/docs-main/reference/json-api-reference/post-v2commandscompletions.mdx +++ b/docs-main/reference/json-api-reference/post-v2commandscompletions.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -259,19 +259,19 @@ This optional field indicates the minimum offset for completions. This can be us
-
+
- Changed + Updated 3.5
-

The POST /v2/commands/completions operation changed in this snapshot.

+

The POST /v2/commands/completions operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait-for-reassignment.mdx b/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait-for-reassignment.mdx index 08d7ea889..8ce97d555 100644 --- a/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait-for-reassignment.mdx +++ b/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait-for-reassignment.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -224,19 +224,19 @@ Complete view of an on-ledger reassignment.
-
+
- Changed + Updated 3.5
-

The POST /v2/commands/submit-and-wait-for-reassignment operation changed in this snapshot.

+

The POST /v2/commands/submit-and-wait-for-reassignment operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait-for-transaction-tree.mdx b/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait-for-transaction-tree.mdx index 8d02d8f32..437b4895e 100644 --- a/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait-for-transaction-tree.mdx +++ b/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait-for-transaction-tree.mdx @@ -22,11 +22,13 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5 - Remove as of 3.5.0 + Deprecated 3.4 + + Removal scheduled 3.5.0
@@ -325,25 +327,25 @@ Provided for backwards compatibility, it will be removed in the Canton version 3
-
+
- Remove as of + Removal scheduled 3.5.0
-
+
- Changed + Updated 3.5
-

The POST /v2/commands/submit-and-wait-for-transaction-tree operation changed in this snapshot.

+

The POST /v2/commands/submit-and-wait-for-transaction-tree operation was updated in this snapshot.

-
+
Deprecated 3.4 @@ -351,9 +353,9 @@ Provided for backwards compatibility, it will be removed in the Canton version 3
-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait-for-transaction.mdx b/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait-for-transaction.mdx index 78714caca..3383252eb 100644 --- a/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait-for-transaction.mdx +++ b/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait-for-transaction.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -224,19 +224,19 @@ Filtered view of an on-ledger transaction's create and archive events.
-
+
- Changed + Updated 3.5
-

The POST /v2/commands/submit-and-wait-for-transaction operation changed in this snapshot.

+

The POST /v2/commands/submit-and-wait-for-transaction operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait.mdx b/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait.mdx index 1d7218ed5..c131c33e4 100644 --- a/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait.mdx +++ b/docs-main/reference/json-api-reference/post-v2commandssubmit-and-wait.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -329,19 +329,19 @@ The details of the offset field are described in ``community/ledger-api/README.m
-
+
- Changed + Updated 3.5
-

The POST /v2/commands/submit-and-wait operation changed in this snapshot.

+

The POST /v2/commands/submit-and-wait operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/post-v2contractscontract-by-id.mdx b/docs-main/reference/json-api-reference/post-v2contractscontract-by-id.mdx index cffe1fbda..dc1ceea08 100644 --- a/docs-main/reference/json-api-reference/post-v2contractscontract-by-id.mdx +++ b/docs-main/reference/json-api-reference/post-v2contractscontract-by-id.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -220,19 +220,19 @@ Records that a contract has been created, and choices may now be exercised on it
-
+
- Changed + Updated 3.5
-

The POST /v2/contracts/contract-by-id operation changed in this snapshot.

+

The POST /v2/contracts/contract-by-id operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/post-v2dars.mdx b/docs-main/reference/json-api-reference/post-v2dars.mdx index ab3be3b4d..fa966b7d3 100644 --- a/docs-main/reference/json-api-reference/post-v2dars.mdx +++ b/docs-main/reference/json-api-reference/post-v2dars.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -237,19 +237,19 @@ A message that is received when the upload operation succeeded.
-
+
- Changed + Updated 3.5
-

The POST /v2/dars operation changed in this snapshot.

+

The POST /v2/dars operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/post-v2darsvalidate.mdx b/docs-main/reference/json-api-reference/post-v2darsvalidate.mdx index de02a2af6..67a9ef318 100644 --- a/docs-main/reference/json-api-reference/post-v2darsvalidate.mdx +++ b/docs-main/reference/json-api-reference/post-v2darsvalidate.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -215,19 +215,19 @@ OpenAPI type: `string (binary)`.
-
+
- Changed + Updated 3.5
-

The POST /v2/dars/validate operation changed in this snapshot.

+

The POST /v2/dars/validate operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/post-v2eventsevents-by-contract-id.mdx b/docs-main/reference/json-api-reference/post-v2eventsevents-by-contract-id.mdx index 6b9cef995..86901f17b 100644 --- a/docs-main/reference/json-api-reference/post-v2eventsevents-by-contract-id.mdx +++ b/docs-main/reference/json-api-reference/post-v2eventsevents-by-contract-id.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -224,19 +224,19 @@ A format for events which defines both which events should be included and what
-
+
- Changed + Updated 3.5
-

The POST /v2/events/events-by-contract-id operation changed in this snapshot.

+

The POST /v2/events/events-by-contract-id operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/post-v2idps.mdx b/docs-main/reference/json-api-reference/post-v2idps.mdx index fe8ce2637..5840735b6 100644 --- a/docs-main/reference/json-api-reference/post-v2idps.mdx +++ b/docs-main/reference/json-api-reference/post-v2idps.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -213,19 +213,19 @@ OpenAPI type: `IdentityProviderConfig`.
-
+
- Changed + Updated 3.5
-

The POST /v2/idps operation changed in this snapshot.

+

The POST /v2/idps operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/post-v2interactive-submissionexecute.mdx b/docs-main/reference/json-api-reference/post-v2interactive-submissionexecute.mdx index de2c27c6a..fc5284a93 100644 --- a/docs-main/reference/json-api-reference/post-v2interactive-submissionexecute.mdx +++ b/docs-main/reference/json-api-reference/post-v2interactive-submissionexecute.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -259,19 +259,19 @@ OpenAPI type: `MinLedgerTime`.
-
+
- Changed + Updated 3.5
-

The POST /v2/interactive-submission/execute operation changed in this snapshot.

+

The POST /v2/interactive-submission/execute operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/post-v2interactive-submissionexecuteandwait.mdx b/docs-main/reference/json-api-reference/post-v2interactive-submissionexecuteandwait.mdx index 5fb856a80..09a1982c0 100644 --- a/docs-main/reference/json-api-reference/post-v2interactive-submissionexecuteandwait.mdx +++ b/docs-main/reference/json-api-reference/post-v2interactive-submissionexecuteandwait.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -267,19 +267,19 @@ The details of the offset field are described in ``community/ledger-api/README.m
-
+
- Changed + Updated 3.5
-

The POST /v2/interactive-submission/executeAndWait operation changed in this snapshot.

+

The POST /v2/interactive-submission/executeAndWait operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/post-v2interactive-submissionexecuteandwaitfortransaction.mdx b/docs-main/reference/json-api-reference/post-v2interactive-submissionexecuteandwaitfortransaction.mdx index 038f74b23..2bb31eb55 100644 --- a/docs-main/reference/json-api-reference/post-v2interactive-submissionexecuteandwaitfortransaction.mdx +++ b/docs-main/reference/json-api-reference/post-v2interactive-submissionexecuteandwaitfortransaction.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -270,19 +270,19 @@ Filtered view of an on-ledger transaction's create and archive events.
-
+
- Changed + Updated 3.5
-

The POST /v2/interactive-submission/executeAndWaitForTransaction operation changed in this snapshot.

+

The POST /v2/interactive-submission/executeAndWaitForTransaction operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/post-v2interactive-submissionpreferred-packages.mdx b/docs-main/reference/json-api-reference/post-v2interactive-submissionpreferred-packages.mdx index 6399d7373..ecbc2d16a 100644 --- a/docs-main/reference/json-api-reference/post-v2interactive-submissionpreferred-packages.mdx +++ b/docs-main/reference/json-api-reference/post-v2interactive-submissionpreferred-packages.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -235,19 +235,19 @@ The synchronizer for which the package preferences are computed. If the synchron
-
+
- Changed + Updated 3.5
-

The POST /v2/interactive-submission/preferred-packages operation changed in this snapshot.

+

The POST /v2/interactive-submission/preferred-packages operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/post-v2interactive-submissionprepare.mdx b/docs-main/reference/json-api-reference/post-v2interactive-submissionprepare.mdx index f901ab177..092d959ba 100644 --- a/docs-main/reference/json-api-reference/post-v2interactive-submissionprepare.mdx +++ b/docs-main/reference/json-api-reference/post-v2interactive-submissionprepare.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -347,19 +347,19 @@ Estimation of the cost of submitting the prepared transaction The estimation is
-
+
- Changed + Updated 3.5
-

The POST /v2/interactive-submission/prepare operation changed in this snapshot.

+

The POST /v2/interactive-submission/prepare operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/post-v2package-vetting.mdx b/docs-main/reference/json-api-reference/post-v2package-vetting.mdx index 9ec5878d2..936310d34 100644 --- a/docs-main/reference/json-api-reference/post-v2package-vetting.mdx +++ b/docs-main/reference/json-api-reference/post-v2package-vetting.mdx @@ -22,9 +22,11 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5 + + Deprecated 3.4
@@ -251,17 +253,17 @@ The list of packages vetted on a given participant and synchronizer, modelled af
-
+
- Changed + Updated 3.5
-

The POST /v2/package-vetting operation changed in this snapshot.

+

The POST /v2/package-vetting operation was updated in this snapshot.

-
+
Deprecated 3.4 @@ -269,9 +271,9 @@ The list of packages vetted on a given participant and synchronizer, modelled af
-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/post-v2package-vettinglist.mdx b/docs-main/reference/json-api-reference/post-v2package-vettinglist.mdx index 3774cae85..b02e1dfbb 100644 --- a/docs-main/reference/json-api-reference/post-v2package-vettinglist.mdx +++ b/docs-main/reference/json-api-reference/post-v2package-vettinglist.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -246,19 +246,19 @@ Pagination token to retrieve the next page. Empty string if there are no further
-
+
- Changed + Updated 3.5
-

The POST /v2/package-vetting/list operation changed in this snapshot.

+

The POST /v2/package-vetting/list operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/post-v2package-vettingupdate.mdx b/docs-main/reference/json-api-reference/post-v2package-vettingupdate.mdx index ceb189bef..48bd9ec52 100644 --- a/docs-main/reference/json-api-reference/post-v2package-vettingupdate.mdx +++ b/docs-main/reference/json-api-reference/post-v2package-vettingupdate.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -251,19 +251,19 @@ The list of packages vetted on a given participant and synchronizer, modelled af
-
+
- Changed + Updated 3.5
-

The POST /v2/package-vetting/update operation changed in this snapshot.

+

The POST /v2/package-vetting/update operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/post-v2packages.mdx b/docs-main/reference/json-api-reference/post-v2packages.mdx index 055ddd785..1248c004d 100644 --- a/docs-main/reference/json-api-reference/post-v2packages.mdx +++ b/docs-main/reference/json-api-reference/post-v2packages.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -237,19 +237,19 @@ A message that is received when the upload operation succeeded.
-
+
- Changed + Updated 3.5
-

The POST /v2/packages operation changed in this snapshot.

+

The POST /v2/packages operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/post-v2parties.mdx b/docs-main/reference/json-api-reference/post-v2parties.mdx index 1d6b177fd..b47d2d10a 100644 --- a/docs-main/reference/json-api-reference/post-v2parties.mdx +++ b/docs-main/reference/json-api-reference/post-v2parties.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -241,19 +241,19 @@ The user who will get the act_as rights to the newly allocated party. If set to
-
+
- Changed + Updated 3.5
-

The POST /v2/parties operation changed in this snapshot.

+

The POST /v2/parties operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/post-v2partiesexternalallocate.mdx b/docs-main/reference/json-api-reference/post-v2partiesexternalallocate.mdx index 3d3ca6eb3..03fae3a48 100644 --- a/docs-main/reference/json-api-reference/post-v2partiesexternalallocate.mdx +++ b/docs-main/reference/json-api-reference/post-v2partiesexternalallocate.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -252,19 +252,19 @@ The allocated party id Required
-
+
- Changed + Updated 3.5
-

The POST /v2/parties/external/allocate operation changed in this snapshot.

+

The POST /v2/parties/external/allocate operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/post-v2partiesexternalgenerate-topology.mdx b/docs-main/reference/json-api-reference/post-v2partiesexternalgenerate-topology.mdx index 354b5b277..53eab9f01 100644 --- a/docs-main/reference/json-api-reference/post-v2partiesexternalgenerate-topology.mdx +++ b/docs-main/reference/json-api-reference/post-v2partiesexternalgenerate-topology.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -277,19 +277,19 @@ the multi-hash which may be signed instead of each individual transaction Requir
-
+
- Changed + Updated 3.5
-

The POST /v2/parties/external/generate-topology operation changed in this snapshot.

+

The POST /v2/parties/external/generate-topology operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/post-v2stateactive-contracts-page.mdx b/docs-main/reference/json-api-reference/post-v2stateactive-contracts-page.mdx index 35042b83f..d3d1cbfe1 100644 --- a/docs-main/reference/json-api-reference/post-v2stateactive-contracts-page.mdx +++ b/docs-main/reference/json-api-reference/post-v2stateactive-contracts-page.mdx @@ -22,7 +22,7 @@ playground: "interactive" OpenAPI - Since 3.5 + Added 3.5
@@ -250,9 +250,9 @@ If not present this is the last page. If present, this token must be used to get
-
+
- Introduced + Added 3.5
diff --git a/docs-main/reference/json-api-reference/post-v2stateactive-contracts.mdx b/docs-main/reference/json-api-reference/post-v2stateactive-contracts.mdx index f39e35ff3..992e9e262 100644 --- a/docs-main/reference/json-api-reference/post-v2stateactive-contracts.mdx +++ b/docs-main/reference/json-api-reference/post-v2stateactive-contracts.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -277,19 +277,19 @@ Opaque representation of a continuation token defining a position in the active
-
+
- Changed + Updated 3.5
-

The POST /v2/state/active-contracts operation changed in this snapshot.

+

The POST /v2/state/active-contracts operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/post-v2updates.mdx b/docs-main/reference/json-api-reference/post-v2updates.mdx index 3d109a835..6e4c25e5c 100644 --- a/docs-main/reference/json-api-reference/post-v2updates.mdx +++ b/docs-main/reference/json-api-reference/post-v2updates.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -286,19 +286,19 @@ If set, the stream will populate the elements in descending order. Optional
-
+
- Changed + Updated 3.5
-

The POST /v2/updates operation changed in this snapshot.

+

The POST /v2/updates operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/post-v2updatesflats.mdx b/docs-main/reference/json-api-reference/post-v2updatesflats.mdx index 0e2097450..1ba602a2b 100644 --- a/docs-main/reference/json-api-reference/post-v2updatesflats.mdx +++ b/docs-main/reference/json-api-reference/post-v2updatesflats.mdx @@ -22,11 +22,13 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5 - Remove as of 3.5.0 + Deprecated 3.4 + + Removal scheduled 3.5.0
@@ -288,25 +290,25 @@ If set, the stream will populate the elements in descending order. Optional
-
+
- Remove as of + Removal scheduled 3.5.0
-
+
- Changed + Updated 3.5
-

The POST /v2/updates/flats operation changed in this snapshot.

+

The POST /v2/updates/flats operation was updated in this snapshot.

-
+
Deprecated 3.4 @@ -314,9 +316,9 @@ If set, the stream will populate the elements in descending order. Optional
-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/post-v2updatesget-updates-page.mdx b/docs-main/reference/json-api-reference/post-v2updatesget-updates-page.mdx index a111a1ef4..e3fd1fc5d 100644 --- a/docs-main/reference/json-api-reference/post-v2updatesget-updates-page.mdx +++ b/docs-main/reference/json-api-reference/post-v2updatesget-updates-page.mdx @@ -22,7 +22,7 @@ playground: "interactive" OpenAPI - Since 3.5 + Added 3.5
@@ -272,9 +272,9 @@ If the value is not populated, this is the last page. If the value is populated,
-
+
- Introduced + Added 3.5
diff --git a/docs-main/reference/json-api-reference/post-v2updatestransaction-by-id.mdx b/docs-main/reference/json-api-reference/post-v2updatestransaction-by-id.mdx index a738f4abd..3266fd5d1 100644 --- a/docs-main/reference/json-api-reference/post-v2updatestransaction-by-id.mdx +++ b/docs-main/reference/json-api-reference/post-v2updatestransaction-by-id.mdx @@ -22,11 +22,13 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5 - Remove as of 3.5.0 + Deprecated 3.4 + + Removal scheduled 3.5.0
@@ -231,25 +233,25 @@ Filtered view of an on-ledger transaction's create and archive events.
-
+
- Remove as of + Removal scheduled 3.5.0
-
+
- Changed + Updated 3.5
-

The POST /v2/updates/transaction-by-id operation changed in this snapshot.

+

The POST /v2/updates/transaction-by-id operation was updated in this snapshot.

-
+
Deprecated 3.4 @@ -257,9 +259,9 @@ Filtered view of an on-ledger transaction's create and archive events.
-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/post-v2updatestransaction-by-offset.mdx b/docs-main/reference/json-api-reference/post-v2updatestransaction-by-offset.mdx index c8ef07216..aa74fbbc4 100644 --- a/docs-main/reference/json-api-reference/post-v2updatestransaction-by-offset.mdx +++ b/docs-main/reference/json-api-reference/post-v2updatestransaction-by-offset.mdx @@ -22,11 +22,13 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5 - Remove as of 3.5.0 + Deprecated 3.4 + + Removal scheduled 3.5.0
@@ -233,25 +235,25 @@ Filtered view of an on-ledger transaction's create and archive events.
-
+
- Remove as of + Removal scheduled 3.5.0
-
+
- Changed + Updated 3.5
-

The POST /v2/updates/transaction-by-offset operation changed in this snapshot.

+

The POST /v2/updates/transaction-by-offset operation was updated in this snapshot.

-
+
Deprecated 3.4 @@ -259,9 +261,9 @@ Filtered view of an on-ledger transaction's create and archive events.
-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/post-v2updatestrees.mdx b/docs-main/reference/json-api-reference/post-v2updatestrees.mdx index 417447284..daee2c464 100644 --- a/docs-main/reference/json-api-reference/post-v2updatestrees.mdx +++ b/docs-main/reference/json-api-reference/post-v2updatestrees.mdx @@ -22,11 +22,13 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5 - Remove as of 3.5.0 + Deprecated 3.4 + + Removal scheduled 3.5.0
@@ -288,25 +290,25 @@ If set, the stream will populate the elements in descending order. Optional
-
+
- Remove as of + Removal scheduled 3.5.0
-
+
- Changed + Updated 3.5
-

The POST /v2/updates/trees operation changed in this snapshot.

+

The POST /v2/updates/trees operation was updated in this snapshot.

-
+
Deprecated 3.4 @@ -314,9 +316,9 @@ If set, the stream will populate the elements in descending order. Optional
-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/post-v2updatesupdate-by-id.mdx b/docs-main/reference/json-api-reference/post-v2updatesupdate-by-id.mdx index d9918a991..06c636944 100644 --- a/docs-main/reference/json-api-reference/post-v2updatesupdate-by-id.mdx +++ b/docs-main/reference/json-api-reference/post-v2updatesupdate-by-id.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -220,19 +220,19 @@ A format specifying what updates to include and how to render them.
-
+
- Changed + Updated 3.5
-

The POST /v2/updates/update-by-id operation changed in this snapshot.

+

The POST /v2/updates/update-by-id operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/post-v2updatesupdate-by-offset.mdx b/docs-main/reference/json-api-reference/post-v2updatesupdate-by-offset.mdx index 97ae17937..6d7135a2f 100644 --- a/docs-main/reference/json-api-reference/post-v2updatesupdate-by-offset.mdx +++ b/docs-main/reference/json-api-reference/post-v2updatesupdate-by-offset.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -222,19 +222,19 @@ A format specifying what updates to include and how to render them.
-
+
- Changed + Updated 3.5
-

The POST /v2/updates/update-by-offset operation changed in this snapshot.

+

The POST /v2/updates/update-by-offset operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/post-v2users.mdx b/docs-main/reference/json-api-reference/post-v2users.mdx index 45828b137..eac42806c 100644 --- a/docs-main/reference/json-api-reference/post-v2users.mdx +++ b/docs-main/reference/json-api-reference/post-v2users.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -224,19 +224,19 @@ Users and rights ///////////////// Users are used to dynamically manage the righ
-
+
- Changed + Updated 3.5
-

The POST /v2/users operation changed in this snapshot.

+

The POST /v2/users operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/json-api-reference/post-v2users:user-idrights.mdx b/docs-main/reference/json-api-reference/post-v2users:user-idrights.mdx index d6790a4c9..42ae2fc6a 100644 --- a/docs-main/reference/json-api-reference/post-v2users:user-idrights.mdx +++ b/docs-main/reference/json-api-reference/post-v2users:user-idrights.mdx @@ -22,9 +22,9 @@ playground: "interactive" OpenAPI - Since 3.4 + Added 3.4 - Changed 3.5 + Updated 3.5
@@ -247,19 +247,19 @@ The rights that were newly granted by the request. Optional: can be empty
-
+
- Changed + Updated 3.5
-

The POST /v2/users/{user-id}/rights operation changed in this snapshot.

+

The POST /v2/users/{user-id}/rights operation was updated in this snapshot.

-
+
- Introduced + Added 3.4
diff --git a/docs-main/reference/splice-allocation-api/post-registryallocationsv1:allocationidchoice-contextscancel.mdx b/docs-main/reference/splice-allocation-api/post-registryallocationsv1:allocationidchoice-contextscancel.mdx index 2f61db3b3..e33aaaeea 100644 --- a/docs-main/reference/splice-allocation-api/post-registryallocationsv1:allocationidchoice-contextscancel.mdx +++ b/docs-main/reference/splice-allocation-api/post-registryallocationsv1:allocationidchoice-contextscancel.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -43,7 +43,7 @@ Get the choice context to cancel an allocation.
Published - 0.7.4 + 0.7.5
@@ -208,9 +208,9 @@ The contracts that are required to be disclosed to the participant node for exer
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-allocation-api/post-registryallocationsv1:allocationidchoice-contextsexecute-transfer.mdx b/docs-main/reference/splice-allocation-api/post-registryallocationsv1:allocationidchoice-contextsexecute-transfer.mdx index 64736d56c..9a5b97e86 100644 --- a/docs-main/reference/splice-allocation-api/post-registryallocationsv1:allocationidchoice-contextsexecute-transfer.mdx +++ b/docs-main/reference/splice-allocation-api/post-registryallocationsv1:allocationidchoice-contextsexecute-transfer.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -43,7 +43,7 @@ Get the choice context to execute a transfer on an allocation.
Published - 0.7.4 + 0.7.5
@@ -208,9 +208,9 @@ The contracts that are required to be disclosed to the participant node for exer
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-allocation-api/post-registryallocationsv1:allocationidchoice-contextswithdraw.mdx b/docs-main/reference/splice-allocation-api/post-registryallocationsv1:allocationidchoice-contextswithdraw.mdx index 4a05436f2..fc307077d 100644 --- a/docs-main/reference/splice-allocation-api/post-registryallocationsv1:allocationidchoice-contextswithdraw.mdx +++ b/docs-main/reference/splice-allocation-api/post-registryallocationsv1:allocationidchoice-contextswithdraw.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -43,7 +43,7 @@ Get the choice context to withdraw an allocation.
Published - 0.7.4 + 0.7.5
@@ -208,9 +208,9 @@ The contracts that are required to be disclosed to the participant node for exer
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-allocation-instruction-api/post-registryallocation-instructionv1allocation-factory.mdx b/docs-main/reference/splice-allocation-instruction-api/post-registryallocation-instructionv1allocation-factory.mdx index a26e1f261..886482f37 100644 --- a/docs-main/reference/splice-allocation-instruction-api/post-registryallocation-instructionv1allocation-factory.mdx +++ b/docs-main/reference/splice-allocation-instruction-api/post-registryallocation-instructionv1allocation-factory.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -43,7 +43,7 @@ Get the factory and choice context for creating allocations using the `Allocatio
Published - 0.7.4 + 0.7.5
@@ -187,9 +187,9 @@ The context required to exercise a choice on a contract via an interface. Used t
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-allocation-instruction-v2-api/post-registryallocation-instructionv2:allocationinstructionidchoice-contextsaccept.mdx b/docs-main/reference/splice-allocation-instruction-v2-api/post-registryallocation-instructionv2:allocationinstructionidchoice-contextsaccept.mdx index b420f4d69..a485f5f88 100644 --- a/docs-main/reference/splice-allocation-instruction-v2-api/post-registryallocation-instructionv2:allocationinstructionidchoice-contextsaccept.mdx +++ b/docs-main/reference/splice-allocation-instruction-v2-api/post-registryallocation-instructionv2:allocationinstructionidchoice-contextsaccept.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.6.11 + Added 0.6.11
@@ -43,7 +43,7 @@ Get the choice context to accept an allocation instruction.
Published - 0.7.4 + 0.7.5
@@ -232,9 +232,9 @@ The contracts that are required to be disclosed to the participant node for exer
-
+
- Introduced + Added 0.6.11
diff --git a/docs-main/reference/splice-allocation-instruction-v2-api/post-registryallocation-instructionv2:allocationinstructionidchoice-contextswithdraw.mdx b/docs-main/reference/splice-allocation-instruction-v2-api/post-registryallocation-instructionv2:allocationinstructionidchoice-contextswithdraw.mdx index b30ba8a6c..540b41e25 100644 --- a/docs-main/reference/splice-allocation-instruction-v2-api/post-registryallocation-instructionv2:allocationinstructionidchoice-contextswithdraw.mdx +++ b/docs-main/reference/splice-allocation-instruction-v2-api/post-registryallocation-instructionv2:allocationinstructionidchoice-contextswithdraw.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.6.11 + Added 0.6.11
@@ -43,7 +43,7 @@ Get the choice context to withdraw an allocation instruction.
Published - 0.7.4 + 0.7.5
@@ -232,9 +232,9 @@ The contracts that are required to be disclosed to the participant node for exer
-
+
- Introduced + Added 0.6.11
diff --git a/docs-main/reference/splice-allocation-instruction-v2-api/post-registryallocation-instructionv2allocation-factory.mdx b/docs-main/reference/splice-allocation-instruction-v2-api/post-registryallocation-instructionv2allocation-factory.mdx index 0dadb4b38..8c747c94f 100644 --- a/docs-main/reference/splice-allocation-instruction-v2-api/post-registryallocation-instructionv2allocation-factory.mdx +++ b/docs-main/reference/splice-allocation-instruction-v2-api/post-registryallocation-instructionv2allocation-factory.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.6.11 + Added 0.6.11
@@ -43,7 +43,7 @@ Get the factory and choice context for creating allocations using the `Allocatio
Published - 0.7.4 + 0.7.5
@@ -211,9 +211,9 @@ The context required to exercise a choice on a contract via an interface. Used t
-
+
- Introduced + Added 0.6.11
diff --git a/docs-main/reference/splice-allocation-v2-api/post-registryallocationsv2:allocationidchoice-contextscancel.mdx b/docs-main/reference/splice-allocation-v2-api/post-registryallocationsv2:allocationidchoice-contextscancel.mdx index 05256faa3..6d7de99ff 100644 --- a/docs-main/reference/splice-allocation-v2-api/post-registryallocationsv2:allocationidchoice-contextscancel.mdx +++ b/docs-main/reference/splice-allocation-v2-api/post-registryallocationsv2:allocationidchoice-contextscancel.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.6.11 + Added 0.6.11
@@ -43,7 +43,7 @@ Get the choice context to cancel an allocation.
Published - 0.7.4 + 0.7.5
@@ -232,9 +232,9 @@ The contracts that are required to be disclosed to the participant node for exer
-
+
- Introduced + Added 0.6.11
diff --git a/docs-main/reference/splice-allocation-v2-api/post-registryallocationsv2:allocationidchoice-contextswithdraw.mdx b/docs-main/reference/splice-allocation-v2-api/post-registryallocationsv2:allocationidchoice-contextswithdraw.mdx index 6b72771cd..3df1eee44 100644 --- a/docs-main/reference/splice-allocation-v2-api/post-registryallocationsv2:allocationidchoice-contextswithdraw.mdx +++ b/docs-main/reference/splice-allocation-v2-api/post-registryallocationsv2:allocationidchoice-contextswithdraw.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.6.11 + Added 0.6.11
@@ -43,7 +43,7 @@ Get the choice context to withdraw an allocation.
Published - 0.7.4 + 0.7.5
@@ -232,9 +232,9 @@ The contracts that are required to be disclosed to the participant node for exer
-
+
- Introduced + Added 0.6.11
diff --git a/docs-main/reference/splice-allocation-v2-api/post-registryallocationv2settlement-factory.mdx b/docs-main/reference/splice-allocation-v2-api/post-registryallocationv2settlement-factory.mdx index 220cf3198..0fb7e876c 100644 --- a/docs-main/reference/splice-allocation-v2-api/post-registryallocationv2settlement-factory.mdx +++ b/docs-main/reference/splice-allocation-v2-api/post-registryallocationv2settlement-factory.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.6.11 + Added 0.6.11
@@ -43,7 +43,7 @@ Get the factory and choice context for settling allocations using the `Settlemen
Published - 0.7.4 + 0.7.5
@@ -211,9 +211,9 @@ The context required to exercise a choice on a contract via an interface. Used t
-
+
- Introduced + Added 0.6.11
diff --git a/docs-main/reference/splice-ans-api/get-v0entryall.mdx b/docs-main/reference/splice-ans-api/get-v0entryall.mdx index 58263b7cf..d883e9b1c 100644 --- a/docs-main/reference/splice-ans-api/get-v0entryall.mdx +++ b/docs-main/reference/splice-ans-api/get-v0entryall.mdx @@ -22,7 +22,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -49,7 +49,7 @@ Lists all ANS entries owned by the user. Expired entries are not included in the
Published - 0.7.4 + 0.7.5
@@ -151,9 +151,9 @@ Lists all ANS entries owned by the user. Expired entries are not included in the
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-ans-api/post-v0entrycreate.mdx b/docs-main/reference/splice-ans-api/post-v0entrycreate.mdx index c384a14ac..040cfbb7d 100644 --- a/docs-main/reference/splice-ans-api/post-v0entrycreate.mdx +++ b/docs-main/reference/splice-ans-api/post-v0entrycreate.mdx @@ -22,7 +22,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -49,7 +49,7 @@ Requests the creation of a new ANS entry. ANS entries need to be paid and renewe
Published - 0.7.4 + 0.7.5
@@ -214,9 +214,9 @@ The description of the ANS entry, as specified in the request.
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/get-livez.mdx b/docs-main/reference/splice-scan-api/get-livez.mdx index de74bd417..bf10151cf 100644 --- a/docs-main/reference/splice-scan-api/get-livez.mdx +++ b/docs-main/reference/splice-scan-api/get-livez.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -41,7 +41,7 @@ playground: "interactive"
Published - 0.7.4 + 0.7.5
@@ -87,9 +87,9 @@ playground: "interactive"
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/get-readyz.mdx b/docs-main/reference/splice-scan-api/get-readyz.mdx index d35fd48fc..a52a355ed 100644 --- a/docs-main/reference/splice-scan-api/get-readyz.mdx +++ b/docs-main/reference/splice-scan-api/get-readyz.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -41,7 +41,7 @@ playground: "interactive"
Published - 0.7.4 + 0.7.5
@@ -87,9 +87,9 @@ playground: "interactive"
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/get-status.mdx b/docs-main/reference/splice-scan-api/get-status.mdx index 71506cae7..d152becb9 100644 --- a/docs-main/reference/splice-scan-api/get-status.mdx +++ b/docs-main/reference/splice-scan-api/get-status.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -41,7 +41,7 @@ playground: "interactive"
Published - 0.7.4 + 0.7.5
@@ -95,9 +95,9 @@ playground: "interactive"
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/get-v0acs:party.mdx b/docs-main/reference/splice-scan-api/get-v0acs:party.mdx index 7d3ffd963..c44cfad86 100644 --- a/docs-main/reference/splice-scan-api/get-v0acs:party.mdx +++ b/docs-main/reference/splice-scan-api/get-v0acs:party.mdx @@ -21,7 +21,9 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10 + + Deprecated 0.5.10
@@ -43,7 +45,7 @@ playground: "interactive"
Published - 0.7.4 + 0.7.5
@@ -135,7 +137,7 @@ base64-encoded ACS snapshot for the intersection of the DSO party and the reques
-
+
Deprecated 0.5.10 @@ -143,9 +145,9 @@ base64-encoded ACS snapshot for the intersection of the DSO party and the reques
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/get-v0active-synchronizer-serial.mdx b/docs-main/reference/splice-scan-api/get-v0active-synchronizer-serial.mdx index 0b183feea..87bea1e51 100644 --- a/docs-main/reference/splice-scan-api/get-v0active-synchronizer-serial.mdx +++ b/docs-main/reference/splice-scan-api/get-v0active-synchronizer-serial.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.6.0 + Added 0.6.0
@@ -43,7 +43,7 @@ Get the current physical synchronizer serial as reported by the SV participant.
Published - 0.7.4 + 0.7.5
@@ -147,9 +147,9 @@ The current physical synchronizer serial as reported by the SV participant.
-
+
- Introduced + Added 0.6.0
diff --git a/docs-main/reference/splice-scan-api/get-v0adminsvvoterequests.mdx b/docs-main/reference/splice-scan-api/get-v0adminsvvoterequests.mdx index 8ecad6d84..941be100e 100644 --- a/docs-main/reference/splice-scan-api/get-v0adminsvvoterequests.mdx +++ b/docs-main/reference/splice-scan-api/get-v0adminsvvoterequests.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -43,7 +43,7 @@ List all active `VoteRequest`\ s.
Published - 0.7.4 + 0.7.5
@@ -97,9 +97,9 @@ List all active `VoteRequest`\ s.
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/get-v0adminvalidatorlicenses.mdx b/docs-main/reference/splice-scan-api/get-v0adminvalidatorlicenses.mdx index 843af8e4e..d46df9242 100644 --- a/docs-main/reference/splice-scan-api/get-v0adminvalidatorlicenses.mdx +++ b/docs-main/reference/splice-scan-api/get-v0adminvalidatorlicenses.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -43,7 +43,7 @@ List all validators currently approved by members of the DSO, paginated, sorted
Published - 0.7.4 + 0.7.5
@@ -137,9 +137,9 @@ When requesting the next page of results, pass this as URL query parameter `afte
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/get-v0amulet-config-for-round.mdx b/docs-main/reference/splice-scan-api/get-v0amulet-config-for-round.mdx index 82a994120..5b9cae0cd 100644 --- a/docs-main/reference/splice-scan-api/get-v0amulet-config-for-round.mdx +++ b/docs-main/reference/splice-scan-api/get-v0amulet-config-for-round.mdx @@ -21,7 +21,9 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10 + + Deprecated 0.5.10
@@ -43,7 +45,7 @@ playground: "interactive"
Published - 0.7.4 + 0.7.5
@@ -156,7 +158,7 @@ OpenAPI type: `integer (int64)`.
-
+
Deprecated 0.5.10 @@ -164,9 +166,9 @@ OpenAPI type: `integer (int64)`.
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/get-v0amulet-pricevotes.mdx b/docs-main/reference/splice-scan-api/get-v0amulet-pricevotes.mdx index 437369e12..9e7da869a 100644 --- a/docs-main/reference/splice-scan-api/get-v0amulet-pricevotes.mdx +++ b/docs-main/reference/splice-scan-api/get-v0amulet-pricevotes.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -43,7 +43,7 @@ Retrieve a list of the latest amulet price votes
Published - 0.7.4 + 0.7.5
@@ -97,9 +97,9 @@ Retrieve a list of the latest amulet price votes
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/get-v0ans-entries.mdx b/docs-main/reference/splice-scan-api/get-v0ans-entries.mdx index d0d4547de..3b0deade8 100644 --- a/docs-main/reference/splice-scan-api/get-v0ans-entries.mdx +++ b/docs-main/reference/splice-scan-api/get-v0ans-entries.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -43,7 +43,7 @@ Lists all non-expired ANS entries whose names are prefixed with the `name_prefix
Published - 0.7.4 + 0.7.5
@@ -127,9 +127,9 @@ The maximum number of results returned. Older (but still non-expired) results ar
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/get-v0ans-entriesby-name:name.mdx b/docs-main/reference/splice-scan-api/get-v0ans-entriesby-name:name.mdx index 4e2ee3603..8799351a0 100644 --- a/docs-main/reference/splice-scan-api/get-v0ans-entriesby-name:name.mdx +++ b/docs-main/reference/splice-scan-api/get-v0ans-entriesby-name:name.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -43,7 +43,7 @@ If present, the ANS entry named exactly `name`.
Published - 0.7.4 + 0.7.5
@@ -139,9 +139,9 @@ If present, the ANS entry named exactly `name`.
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/get-v0ans-entriesby-party:party.mdx b/docs-main/reference/splice-scan-api/get-v0ans-entriesby-party:party.mdx index f3ef15504..af7c8bb07 100644 --- a/docs-main/reference/splice-scan-api/get-v0ans-entriesby-party:party.mdx +++ b/docs-main/reference/splice-scan-api/get-v0ans-entriesby-party:party.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -43,7 +43,7 @@ If present, the first ANS entry for user `party` according to `name` lexicograph
Published - 0.7.4 + 0.7.5
@@ -142,9 +142,9 @@ The user party ID that holds the ANS entry.
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/get-v0backfillingstatus.mdx b/docs-main/reference/splice-scan-api/get-v0backfillingstatus.mdx index ce7dd15f0..9e3aaea56 100644 --- a/docs-main/reference/splice-scan-api/get-v0backfillingstatus.mdx +++ b/docs-main/reference/splice-scan-api/get-v0backfillingstatus.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -43,7 +43,7 @@ Retrieve the status of the backfilling process.
Published - 0.7.4 + 0.7.5
@@ -99,9 +99,9 @@ True if ALL backfilling processes are complete, false otherwise. Some scan endpo
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/get-v0closed-rounds.mdx b/docs-main/reference/splice-scan-api/get-v0closed-rounds.mdx index f983d65e4..cd1bb45cd 100644 --- a/docs-main/reference/splice-scan-api/get-v0closed-rounds.mdx +++ b/docs-main/reference/splice-scan-api/get-v0closed-rounds.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -43,7 +43,7 @@ Every closed mining round on the ledger still in post-close process for the conn
Published - 0.7.4 + 0.7.5
@@ -99,9 +99,9 @@ Contracts of the Daml template `Splice.Round:ClosedMiningRound`, one for every c
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/get-v0domains:domain_idmembers:member_idtraffic-status.mdx b/docs-main/reference/splice-scan-api/get-v0domains:domain_idmembers:member_idtraffic-status.mdx index 4caf6a2b6..650c5589f 100644 --- a/docs-main/reference/splice-scan-api/get-v0domains:domain_idmembers:member_idtraffic-status.mdx +++ b/docs-main/reference/splice-scan-api/get-v0domains:domain_idmembers:member_idtraffic-status.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -43,7 +43,7 @@ Get a member's traffic status as reported by the sequencer, according to ledger
Published - 0.7.4 + 0.7.5
@@ -197,9 +197,9 @@ The participant or mediator whose traffic to look up, in the format `code::id::f
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/get-v0domains:domain_idparties:party_idparticipant-id.mdx b/docs-main/reference/splice-scan-api/get-v0domains:domain_idparties:party_idparticipant-id.mdx index 61804d8fb..547d2168e 100644 --- a/docs-main/reference/splice-scan-api/get-v0domains:domain_idparties:party_idparticipant-id.mdx +++ b/docs-main/reference/splice-scan-api/get-v0domains:domain_idparties:party_idparticipant-id.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -43,7 +43,7 @@ Get the ID of the participant hosting a given party. This will fail if there are
Published - 0.7.4 + 0.7.5
@@ -175,9 +175,9 @@ ID of the participant hosting the provided party, in the form `PAR::id::fingerpr
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/get-v0dso-party-id.mdx b/docs-main/reference/splice-scan-api/get-v0dso-party-id.mdx index 8732f432c..2fdc81e55 100644 --- a/docs-main/reference/splice-scan-api/get-v0dso-party-id.mdx +++ b/docs-main/reference/splice-scan-api/get-v0dso-party-id.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -43,7 +43,7 @@ The party ID of the DSO for the Splice network connected by this Scan app.
Published - 0.7.4 + 0.7.5
@@ -97,9 +97,9 @@ The party ID of the DSO for the Splice network connected by this Scan app.
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/get-v0dso-sequencers.mdx b/docs-main/reference/splice-scan-api/get-v0dso-sequencers.mdx index 5df6aee12..dcd8f8854 100644 --- a/docs-main/reference/splice-scan-api/get-v0dso-sequencers.mdx +++ b/docs-main/reference/splice-scan-api/get-v0dso-sequencers.mdx @@ -21,9 +21,9 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10 - Changed 0.6.0 + Updated 0.6.0
@@ -45,7 +45,7 @@ Retrieve Canton sequencer configuration for all SVs, grouped by connected synchr
Published - 0.7.4 + 0.7.5
@@ -99,19 +99,19 @@ Retrieve Canton sequencer configuration for all SVs, grouped by connected synchr
-
+
- Changed + Updated 0.6.0
-

The GET /v0/dso-sequencers operation changed in this snapshot.

+

The GET /v0/dso-sequencers operation was updated in this snapshot.

-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/get-v0dso.mdx b/docs-main/reference/splice-scan-api/get-v0dso.mdx index 25fe6a2c9..0e2fe44df 100644 --- a/docs-main/reference/splice-scan-api/get-v0dso.mdx +++ b/docs-main/reference/splice-scan-api/get-v0dso.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -41,7 +41,7 @@ playground: "interactive"
Published - 0.7.4 + 0.7.5
@@ -139,9 +139,9 @@ Initial round from which the network bootstraps
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/get-v0events:update_id.mdx b/docs-main/reference/splice-scan-api/get-v0events:update_id.mdx index 8f2bdfc14..85fc7636d 100644 --- a/docs-main/reference/splice-scan-api/get-v0events:update_id.mdx +++ b/docs-main/reference/splice-scan-api/get-v0events:update_id.mdx @@ -21,9 +21,9 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10 - Changed 0.6.10 + Updated 0.6.10
@@ -45,7 +45,7 @@ Returns the event with the given update_id. An event bears some combination of a
Published - 0.7.4 + 0.7.5
@@ -230,49 +230,49 @@ App activity record computed from verdicts and traffic summaries as per [CIP-104
-
+
- Changed + Updated 0.6.10
-

The GET /v0/events/{update_id} operation changed in this snapshot.

+

The GET /v0/events/{update_id} operation was updated in this snapshot.

-
+
- Changed + Updated 0.6.0
-

The GET /v0/events/{update_id} operation changed in this snapshot.

+

The GET /v0/events/{update_id} operation was updated in this snapshot.

-
+
- Changed + Updated 0.5.17
-

The GET /v0/events/{update_id} operation changed in this snapshot.

+

The GET /v0/events/{update_id} operation was updated in this snapshot.

-
+
- Changed + Updated 0.5.15
-

The GET /v0/events/{update_id} operation changed in this snapshot.

+

The GET /v0/events/{update_id} operation was updated in this snapshot.

-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/get-v0feature-support.mdx b/docs-main/reference/splice-scan-api/get-v0feature-support.mdx index a3a6f6fd5..0e7ce7650 100644 --- a/docs-main/reference/splice-scan-api/get-v0feature-support.mdx +++ b/docs-main/reference/splice-scan-api/get-v0feature-support.mdx @@ -21,9 +21,9 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10 - Changed 0.5.16 + Updated 0.5.16
@@ -43,7 +43,7 @@ playground: "interactive"
Published - 0.7.4 + 0.7.5
@@ -121,19 +121,19 @@ playground: "interactive"
-
+
- Changed + Updated 0.5.16
-

The GET /v0/feature-support operation changed in this snapshot.

+

The GET /v0/feature-support operation was updated in this snapshot.

-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/get-v0featured-apps.mdx b/docs-main/reference/splice-scan-api/get-v0featured-apps.mdx index 96837b25b..e1dab10df 100644 --- a/docs-main/reference/splice-scan-api/get-v0featured-apps.mdx +++ b/docs-main/reference/splice-scan-api/get-v0featured-apps.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -43,7 +43,7 @@ List every `FeaturedAppRight` registered with the DSO on the ledger.
Published - 0.7.4 + 0.7.5
@@ -97,9 +97,9 @@ List every `FeaturedAppRight` registered with the DSO on the ledger.
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/get-v0featured-apps:provider_party_id.mdx b/docs-main/reference/splice-scan-api/get-v0featured-apps:provider_party_id.mdx index 2ead1a697..f7b45515e 100644 --- a/docs-main/reference/splice-scan-api/get-v0featured-apps:provider_party_id.mdx +++ b/docs-main/reference/splice-scan-api/get-v0featured-apps:provider_party_id.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -43,7 +43,7 @@ If `provider_party_id` has a `FeaturedAppRight` registered with the DSO, return
Published - 0.7.4 + 0.7.5
@@ -115,9 +115,9 @@ If `provider_party_id` has a `FeaturedAppRight` registered with the DSO, return
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/get-v0featured-appsby-contract-id:contract_id.mdx b/docs-main/reference/splice-scan-api/get-v0featured-appsby-contract-id:contract_id.mdx index 5567665ba..d39744a3f 100644 --- a/docs-main/reference/splice-scan-api/get-v0featured-appsby-contract-id:contract_id.mdx +++ b/docs-main/reference/splice-scan-api/get-v0featured-appsby-contract-id:contract_id.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.6.0 + Added 0.6.0
@@ -43,7 +43,7 @@ Look up a `FeaturedAppRight` contract by its contract ID. Returns `featured_app_
Published - 0.7.4 + 0.7.5
@@ -115,9 +115,9 @@ Look up a `FeaturedAppRight` contract by its contract ID. Returns `featured_app_
-
+
- Introduced + Added 0.6.0
diff --git a/docs-main/reference/splice-scan-api/get-v0featured-appsby-provider:provider_party_id.mdx b/docs-main/reference/splice-scan-api/get-v0featured-appsby-provider:provider_party_id.mdx index 4128cd1b6..1ac261e7a 100644 --- a/docs-main/reference/splice-scan-api/get-v0featured-appsby-provider:provider_party_id.mdx +++ b/docs-main/reference/splice-scan-api/get-v0featured-appsby-provider:provider_party_id.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.6.0 + Added 0.6.0
@@ -43,7 +43,7 @@ List all `FeaturedAppRight` contracts for the given provider.
Published - 0.7.4 + 0.7.5
@@ -115,9 +115,9 @@ List all `FeaturedAppRight` contracts for the given provider.
-
+
- Introduced + Added 0.6.0
diff --git a/docs-main/reference/splice-scan-api/get-v0historybulkacs.mdx b/docs-main/reference/splice-scan-api/get-v0historybulkacs.mdx index 9dfb38f1d..2eb0eabe9 100644 --- a/docs-main/reference/splice-scan-api/get-v0historybulkacs.mdx +++ b/docs-main/reference/splice-scan-api/get-v0historybulkacs.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.17 + Added 0.5.17
@@ -43,7 +43,7 @@ playground: "interactive"
Published - 0.7.4 + 0.7.5
@@ -176,9 +176,9 @@ The list of references to the bulk storage objects containing the ACS snapshot d
-
+
- Introduced + Added 0.5.17
diff --git a/docs-main/reference/splice-scan-api/get-v0internalreward-accounting-processrounds:round_numberactivity-totals.mdx b/docs-main/reference/splice-scan-api/get-v0internalreward-accounting-processrounds:round_numberactivity-totals.mdx index a8a6a1260..49e52740c 100644 --- a/docs-main/reference/splice-scan-api/get-v0internalreward-accounting-processrounds:round_numberactivity-totals.mdx +++ b/docs-main/reference/splice-scan-api/get-v0internalreward-accounting-processrounds:round_numberactivity-totals.mdx @@ -21,9 +21,9 @@ playground: "interactive" OpenAPI - Since 0.6.0 + Added 0.6.0 - Changed 0.6.9 + Updated 0.6.9
@@ -45,7 +45,7 @@ SV node internal API (CIP-0104, subject to change). Return the CIP-0104 per-roun
Published - 0.7.4 + 0.7.5
@@ -122,19 +122,19 @@ OpenAPI type: `integer (int64)`.
-
+
- Changed + Updated 0.6.9
-

The GET /v0/internal/reward-accounting-process/rounds/{round_number}/activity-totals operation changed in this snapshot.

+

The GET /v0/internal/reward-accounting-process/rounds/{round_number}/activity-totals operation was updated in this snapshot.

-
+
- Changed + Updated 0.6.5
@@ -142,9 +142,9 @@ OpenAPI type: `integer (int64)`.
-
+
- Introduced + Added 0.6.0
diff --git a/docs-main/reference/splice-scan-api/get-v0internalreward-accounting-processrounds:round_numberbatches:batch_hash.mdx b/docs-main/reference/splice-scan-api/get-v0internalreward-accounting-processrounds:round_numberbatches:batch_hash.mdx index 94ffa3323..caa9ead31 100644 --- a/docs-main/reference/splice-scan-api/get-v0internalreward-accounting-processrounds:round_numberbatches:batch_hash.mdx +++ b/docs-main/reference/splice-scan-api/get-v0internalreward-accounting-processrounds:round_numberbatches:batch_hash.mdx @@ -21,9 +21,9 @@ playground: "interactive" OpenAPI - Since 0.6.0 + Added 0.6.0 - Changed 0.6.5 + Updated 0.6.5
@@ -45,7 +45,7 @@ SV node internal API (CIP-0104, subject to change). Returns the contents of a re
Published - 0.7.4 + 0.7.5
@@ -150,9 +150,9 @@ OpenAPI type: `integer (int64)`.
-
+
- Changed + Updated 0.6.5
@@ -160,9 +160,9 @@ OpenAPI type: `integer (int64)`.
-
+
- Introduced + Added 0.6.0
diff --git a/docs-main/reference/splice-scan-api/get-v0internalreward-accounting-processrounds:round_numberroot-hash.mdx b/docs-main/reference/splice-scan-api/get-v0internalreward-accounting-processrounds:round_numberroot-hash.mdx index a866e36eb..c62c72b89 100644 --- a/docs-main/reference/splice-scan-api/get-v0internalreward-accounting-processrounds:round_numberroot-hash.mdx +++ b/docs-main/reference/splice-scan-api/get-v0internalreward-accounting-processrounds:round_numberroot-hash.mdx @@ -21,9 +21,9 @@ playground: "interactive" OpenAPI - Since 0.6.0 + Added 0.6.0 - Changed 0.6.5 + Updated 0.6.5
@@ -45,7 +45,7 @@ SV node internal API (CIP-0104, subject to change). Returns the root hash comput
Published - 0.7.4 + 0.7.5
@@ -122,9 +122,9 @@ OpenAPI type: `integer (int64)`.
-
+
- Changed + Updated 0.6.5
@@ -132,9 +132,9 @@ OpenAPI type: `integer (int64)`.
-
+
- Introduced + Added 0.6.0
diff --git a/docs-main/reference/splice-scan-api/get-v0internalreward-accounting-processroundsearliest-available.mdx b/docs-main/reference/splice-scan-api/get-v0internalreward-accounting-processroundsearliest-available.mdx index b0ba5d66a..255d64828 100644 --- a/docs-main/reference/splice-scan-api/get-v0internalreward-accounting-processroundsearliest-available.mdx +++ b/docs-main/reference/splice-scan-api/get-v0internalreward-accounting-processroundsearliest-available.mdx @@ -21,9 +21,9 @@ playground: "interactive" OpenAPI - Since 0.6.0 + Added 0.6.0 - Changed 0.6.5 + Updated 0.6.5
@@ -45,7 +45,7 @@ SV node internal API (CIP-0104, subject to change). Returns the earliest round f
Published - 0.7.4 + 0.7.5
@@ -123,9 +123,9 @@ SV node internal API (CIP-0104, subject to change). Returns the earliest round f
-
+
- Changed + Updated 0.6.5
@@ -133,9 +133,9 @@ SV node internal API (CIP-0104, subject to change). Returns the earliest round f
-
+
- Introduced + Added 0.6.0
diff --git a/docs-main/reference/splice-scan-api/get-v0lsu.mdx b/docs-main/reference/splice-scan-api/get-v0lsu.mdx index a6a20650e..536743ff9 100644 --- a/docs-main/reference/splice-scan-api/get-v0lsu.mdx +++ b/docs-main/reference/splice-scan-api/get-v0lsu.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.6.11 + Added 0.6.11
@@ -43,7 +43,7 @@ Retrieve information on the next logical synchronizer upgrade (LSU)
Published - 0.7.4 + 0.7.5
@@ -97,9 +97,9 @@ Retrieve information on the next logical synchronizer upgrade (LSU)
-
+
- Introduced + Added 0.6.11
diff --git a/docs-main/reference/splice-scan-api/get-v0migrationslast.mdx b/docs-main/reference/splice-scan-api/get-v0migrationslast.mdx index 0ac2c37ba..44368c377 100644 --- a/docs-main/reference/splice-scan-api/get-v0migrationslast.mdx +++ b/docs-main/reference/splice-scan-api/get-v0migrationslast.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.6.8 + Added 0.6.8
@@ -43,7 +43,7 @@ Returns the last migration id that was configured for the synchronizer upgrades.
Published - 0.7.4 + 0.7.5
@@ -97,9 +97,9 @@ Returns the last migration id that was configured for the synchronizer upgrades.
-
+
- Introduced + Added 0.6.8
diff --git a/docs-main/reference/splice-scan-api/get-v0migrationsschedule.mdx b/docs-main/reference/splice-scan-api/get-v0migrationsschedule.mdx index be8049d32..2e0d5bc0b 100644 --- a/docs-main/reference/splice-scan-api/get-v0migrationsschedule.mdx +++ b/docs-main/reference/splice-scan-api/get-v0migrationsschedule.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -43,7 +43,7 @@ If the DSO has scheduled a synchronizer upgrade, return its planned time and the
Published - 0.7.4 + 0.7.5
@@ -109,9 +109,9 @@ If the DSO has scheduled a synchronizer upgrade, return its planned time and the
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/get-v0roll-forward-lsu.mdx b/docs-main/reference/splice-scan-api/get-v0roll-forward-lsu.mdx index 4934b7344..b3110adc7 100644 --- a/docs-main/reference/splice-scan-api/get-v0roll-forward-lsu.mdx +++ b/docs-main/reference/splice-scan-api/get-v0roll-forward-lsu.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.6.0 + Added 0.6.0
@@ -43,7 +43,7 @@ Retrieve information on a roll-forward LSU
Published - 0.7.4 + 0.7.5
@@ -97,9 +97,9 @@ Retrieve information on a roll-forward LSU
-
+
- Introduced + Added 0.6.0
diff --git a/docs-main/reference/splice-scan-api/get-v0scans.mdx b/docs-main/reference/splice-scan-api/get-v0scans.mdx index 194e96e81..0b069db0e 100644 --- a/docs-main/reference/splice-scan-api/get-v0scans.mdx +++ b/docs-main/reference/splice-scan-api/get-v0scans.mdx @@ -22,7 +22,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -44,7 +44,7 @@ Retrieve Canton scan configuration for all SVs, grouped by connected synchronize
Published - 0.7.4 + 0.7.5
@@ -98,9 +98,9 @@ Retrieve Canton scan configuration for all SVs, grouped by connected synchronize
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/get-v0splice-instance-names.mdx b/docs-main/reference/splice-scan-api/get-v0splice-instance-names.mdx index 1d5583610..579277646 100644 --- a/docs-main/reference/splice-scan-api/get-v0splice-instance-names.mdx +++ b/docs-main/reference/splice-scan-api/get-v0splice-instance-names.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -43,7 +43,7 @@ Retrieve the UI names of various elements of this Splice network.
Published - 0.7.4 + 0.7.5
@@ -153,9 +153,9 @@ The acronym for `name_service_name`.
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/get-v0stateacssnapshot-timestamp-after.mdx b/docs-main/reference/splice-scan-api/get-v0stateacssnapshot-timestamp-after.mdx index 818b00779..562b25f12 100644 --- a/docs-main/reference/splice-scan-api/get-v0stateacssnapshot-timestamp-after.mdx +++ b/docs-main/reference/splice-scan-api/get-v0stateacssnapshot-timestamp-after.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -43,7 +43,7 @@ Returns the timestamp of the first snapshot after the given date, for the given
Published - 0.7.4 + 0.7.5
@@ -203,9 +203,9 @@ The record time of the last transaction in the snapshot.
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/get-v0stateacssnapshot-timestamp.mdx b/docs-main/reference/splice-scan-api/get-v0stateacssnapshot-timestamp.mdx index 84ab53a59..e09e260f1 100644 --- a/docs-main/reference/splice-scan-api/get-v0stateacssnapshot-timestamp.mdx +++ b/docs-main/reference/splice-scan-api/get-v0stateacssnapshot-timestamp.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -43,7 +43,7 @@ Returns the timestamp of the most recent snapshot before the given date, for the
Published - 0.7.4 + 0.7.5
@@ -203,9 +203,9 @@ The record time of the last transaction in the snapshot.
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/get-v0sv-bft-sequencers.mdx b/docs-main/reference/splice-scan-api/get-v0sv-bft-sequencers.mdx index d457b938f..936baf9b4 100644 --- a/docs-main/reference/splice-scan-api/get-v0sv-bft-sequencers.mdx +++ b/docs-main/reference/splice-scan-api/get-v0sv-bft-sequencers.mdx @@ -21,9 +21,9 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10 - Changed 0.6.0 + Updated 0.6.0
@@ -45,7 +45,7 @@ Retrieve Canton BFT sequencer configuration for this SV, for each configured Syn
Published - 0.7.4 + 0.7.5
@@ -99,19 +99,19 @@ Retrieve Canton BFT sequencer configuration for this SV, for each configured Syn
-
+
- Changed + Updated 0.6.0
-

The GET /v0/sv-bft-sequencers operation changed in this snapshot.

+

The GET /v0/sv-bft-sequencers operation was updated in this snapshot.

-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/get-v0synchronizer-bootstrapping-transactions:domain_id_prefix.mdx b/docs-main/reference/splice-scan-api/get-v0synchronizer-bootstrapping-transactions:domain_id_prefix.mdx index ab0785914..6ffd15880 100644 --- a/docs-main/reference/splice-scan-api/get-v0synchronizer-bootstrapping-transactions:domain_id_prefix.mdx +++ b/docs-main/reference/splice-scan-api/get-v0synchronizer-bootstrapping-transactions:domain_id_prefix.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -41,7 +41,7 @@ playground: "interactive"
Published - 0.7.4 + 0.7.5
@@ -145,9 +145,9 @@ playground: "interactive"
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/get-v0synchronizer-identities:domain_id_prefix.mdx b/docs-main/reference/splice-scan-api/get-v0synchronizer-identities:domain_id_prefix.mdx index 7468cbbc8..5c8a0b7df 100644 --- a/docs-main/reference/splice-scan-api/get-v0synchronizer-identities:domain_id_prefix.mdx +++ b/docs-main/reference/splice-scan-api/get-v0synchronizer-identities:domain_id_prefix.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -41,7 +41,7 @@ playground: "interactive"
Published - 0.7.4 + 0.7.5
@@ -149,9 +149,9 @@ playground: "interactive"
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/get-v0transfer-command-counter:party.mdx b/docs-main/reference/splice-scan-api/get-v0transfer-command-counter:party.mdx index b9fc1e238..4e459c4e9 100644 --- a/docs-main/reference/splice-scan-api/get-v0transfer-command-counter:party.mdx +++ b/docs-main/reference/splice-scan-api/get-v0transfer-command-counter:party.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -43,7 +43,7 @@ Lookup a TransferCommandCounter by the receiver party.
Published - 0.7.4 + 0.7.5
@@ -139,9 +139,9 @@ Lookup a TransferCommandCounter by the receiver party.
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/get-v0transfer-commandstatus.mdx b/docs-main/reference/splice-scan-api/get-v0transfer-commandstatus.mdx index 6451246db..126b24e0b 100644 --- a/docs-main/reference/splice-scan-api/get-v0transfer-commandstatus.mdx +++ b/docs-main/reference/splice-scan-api/get-v0transfer-commandstatus.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -43,7 +43,7 @@ Retrieve the status of all transfer commands (up to a limit of 100) of the given
Published - 0.7.4 + 0.7.5
@@ -148,9 +148,9 @@ OpenAPI type: `integer (int64)`.
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/get-v0transfer-preapprovalsby-party:party.mdx b/docs-main/reference/splice-scan-api/get-v0transfer-preapprovalsby-party:party.mdx index 351923204..1babba03f 100644 --- a/docs-main/reference/splice-scan-api/get-v0transfer-preapprovalsby-party:party.mdx +++ b/docs-main/reference/splice-scan-api/get-v0transfer-preapprovalsby-party:party.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -43,7 +43,7 @@ Lookup a TransferPreapproval by the receiver party.
Published - 0.7.4 + 0.7.5
@@ -139,9 +139,9 @@ Lookup a TransferPreapproval by the receiver party.
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/get-v0unclaimed-development-fund-coupons.mdx b/docs-main/reference/splice-scan-api/get-v0unclaimed-development-fund-coupons.mdx index 808279a8f..7adb30675 100644 --- a/docs-main/reference/splice-scan-api/get-v0unclaimed-development-fund-coupons.mdx +++ b/docs-main/reference/splice-scan-api/get-v0unclaimed-development-fund-coupons.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -43,7 +43,7 @@ List all unclaimed development fund coupons.
Published - 0.7.4 + 0.7.5
@@ -123,9 +123,9 @@ Contracts of the Daml template `Splice.Amulet:UnclaimedDevelopmentFundCoupon`.
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/get-v0updates:update_id.mdx b/docs-main/reference/splice-scan-api/get-v0updates:update_id.mdx index 1036050d8..600f8b31d 100644 --- a/docs-main/reference/splice-scan-api/get-v0updates:update_id.mdx +++ b/docs-main/reference/splice-scan-api/get-v0updates:update_id.mdx @@ -21,9 +21,11 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10 - Changed 0.6.0 + Updated 0.6.0 + + Deprecated 0.5.10
@@ -45,7 +47,7 @@ playground: "interactive"
Published - 0.7.4 + 0.7.5
@@ -212,27 +214,27 @@ An individual item in the update history. May be a transaction or a contract rea
-
+
- Changed + Updated 0.6.0
-

The GET /v0/updates/{update_id} operation changed in this snapshot.

+

The GET /v0/updates/{update_id} operation was updated in this snapshot.

-
+
- Changed + Updated 0.5.17
-

The GET /v0/updates/{update_id} operation changed in this snapshot.

+

The GET /v0/updates/{update_id} operation was updated in this snapshot.

-
+
Deprecated 0.5.10 @@ -240,9 +242,9 @@ An individual item in the update history. May be a transaction or a contract rea
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/get-v0validatorsvalidator-faucets.mdx b/docs-main/reference/splice-scan-api/get-v0validatorsvalidator-faucets.mdx index 2a27707a6..a891d179d 100644 --- a/docs-main/reference/splice-scan-api/get-v0validatorsvalidator-faucets.mdx +++ b/docs-main/reference/splice-scan-api/get-v0validatorsvalidator-faucets.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -43,7 +43,7 @@ For every argument that is a valid onboarded validator, return statistics on its
Published - 0.7.4 + 0.7.5
@@ -168,9 +168,9 @@ Statistics for any party ID arguments found to have valid onboarding licenses; t
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/get-v0voterequests:vote_request_contract_id.mdx b/docs-main/reference/splice-scan-api/get-v0voterequests:vote_request_contract_id.mdx index d021f0217..b2bda62ce 100644 --- a/docs-main/reference/splice-scan-api/get-v0voterequests:vote_request_contract_id.mdx +++ b/docs-main/reference/splice-scan-api/get-v0voterequests:vote_request_contract_id.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -43,7 +43,7 @@ Look up a `VoteRequest` by contract ID.
Published - 0.7.4 + 0.7.5
@@ -139,9 +139,9 @@ Look up a `VoteRequest` by contract ID.
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/get-v1domains:domain_idparties:party_idparticipant-id.mdx b/docs-main/reference/splice-scan-api/get-v1domains:domain_idparties:party_idparticipant-id.mdx index 4373c1c68..242f53d6d 100644 --- a/docs-main/reference/splice-scan-api/get-v1domains:domain_idparties:party_idparticipant-id.mdx +++ b/docs-main/reference/splice-scan-api/get-v1domains:domain_idparties:party_idparticipant-id.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.17 + Added 0.5.17
@@ -43,7 +43,7 @@ Get the IDs of the participants hosting a given party. Unlike /v0, this endpoint
Published - 0.7.4 + 0.7.5
@@ -175,9 +175,9 @@ IDs of the participants hosting the provided party, each in the form `PAR::id::f
-
+
- Introduced + Added 0.5.17
diff --git a/docs-main/reference/splice-scan-api/get-v1updates:update_id.mdx b/docs-main/reference/splice-scan-api/get-v1updates:update_id.mdx index 23714786d..6433349c9 100644 --- a/docs-main/reference/splice-scan-api/get-v1updates:update_id.mdx +++ b/docs-main/reference/splice-scan-api/get-v1updates:update_id.mdx @@ -21,9 +21,11 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10 - Changed 0.6.0 + Updated 0.6.0 + + Deprecated 0.5.10
@@ -45,7 +47,7 @@ Returns the update with the given update_id. Unlike /v0/updates/{update_id}, thi
Published - 0.7.4 + 0.7.5
@@ -214,27 +216,27 @@ An individual item in the update history. May be a transaction or a contract rea
-
+
- Changed + Updated 0.6.0
-

The GET /v1/updates/{update_id} operation changed in this snapshot.

+

The GET /v1/updates/{update_id} operation was updated in this snapshot.

-
+
- Changed + Updated 0.5.17
-

The GET /v1/updates/{update_id} operation changed in this snapshot.

+

The GET /v1/updates/{update_id} operation was updated in this snapshot.

-
+
Deprecated 0.5.10 @@ -242,9 +244,9 @@ An individual item in the update history. May be a transaction or a contract rea
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/get-v2updates:update_id.mdx b/docs-main/reference/splice-scan-api/get-v2updates:update_id.mdx index ace19370f..b275abb21 100644 --- a/docs-main/reference/splice-scan-api/get-v2updates:update_id.mdx +++ b/docs-main/reference/splice-scan-api/get-v2updates:update_id.mdx @@ -21,9 +21,9 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10 - Changed 0.6.0 + Updated 0.6.0
@@ -45,7 +45,7 @@ Returns the update with the given update_id. Compared to `/v1/updates/{update_id
Published - 0.7.4 + 0.7.5
@@ -214,29 +214,29 @@ An individual item in the update history. May be a transaction or a contract rea
-
+
- Changed + Updated 0.6.0
-

The GET /v2/updates/{update_id} operation changed in this snapshot.

+

The GET /v2/updates/{update_id} operation was updated in this snapshot.

-
+
- Changed + Updated 0.5.17
-

The GET /v2/updates/{update_id} operation changed in this snapshot.

+

The GET /v2/updates/{update_id} operation was updated in this snapshot.

-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/get-v2updateshash:hash.mdx b/docs-main/reference/splice-scan-api/get-v2updateshash:hash.mdx index 893a37862..30313a095 100644 --- a/docs-main/reference/splice-scan-api/get-v2updateshash:hash.mdx +++ b/docs-main/reference/splice-scan-api/get-v2updateshash:hash.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.6.0 + Added 0.6.0
@@ -43,7 +43,7 @@ Returns the update associated with the given hash of the prepared transaction. T
Published - 0.7.4 + 0.7.5
@@ -212,9 +212,9 @@ An individual item in the update history. May be a transaction or a contract rea
-
+
- Introduced + Added 0.6.0
diff --git a/docs-main/reference/splice-scan-api/get-version.mdx b/docs-main/reference/splice-scan-api/get-version.mdx index 8f745f62d..d093e42e2 100644 --- a/docs-main/reference/splice-scan-api/get-version.mdx +++ b/docs-main/reference/splice-scan-api/get-version.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -41,7 +41,7 @@ playground: "interactive"
Published - 0.7.4 + 0.7.5
@@ -99,9 +99,9 @@ playground: "interactive"
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/post-v0adminsvprevious-sv-reward-weight.mdx b/docs-main/reference/splice-scan-api/post-v0adminsvprevious-sv-reward-weight.mdx index dad205b5c..08c641545 100644 --- a/docs-main/reference/splice-scan-api/post-v0adminsvprevious-sv-reward-weight.mdx +++ b/docs-main/reference/splice-scan-api/post-v0adminsvprevious-sv-reward-weight.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.6.9 + Added 0.6.9
@@ -41,7 +41,7 @@ playground: "interactive"
Published - 0.7.4 + 0.7.5
@@ -128,9 +128,9 @@ The SV's reward weight set by the most recent accepted `UpdateSvRewardWeigh
-
+
- Introduced + Added 0.6.9
diff --git a/docs-main/reference/splice-scan-api/post-v0adminsvvoteresults.mdx b/docs-main/reference/splice-scan-api/post-v0adminsvvoteresults.mdx index f13fad001..46d1a32e2 100644 --- a/docs-main/reference/splice-scan-api/post-v0adminsvvoteresults.mdx +++ b/docs-main/reference/splice-scan-api/post-v0adminsvvoteresults.mdx @@ -21,9 +21,9 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10 - Changed 0.6.10 + Updated 0.6.10
@@ -43,7 +43,7 @@ playground: "interactive"
Published - 0.7.4 + 0.7.5
@@ -161,49 +161,49 @@ Cursor for the next page of results. Pass this as `pageToken` in the request. If
-
+
- Changed + Updated 0.6.10
-

The POST /v0/admin/sv/voteresults operation changed in this snapshot.

+

The POST /v0/admin/sv/voteresults operation was updated in this snapshot.

-
+
- Changed + Updated 0.6.4
-

The POST /v0/admin/sv/voteresults operation changed in this snapshot.

+

The POST /v0/admin/sv/voteresults operation was updated in this snapshot.

-
+
- Changed + Updated 0.6.1
-

The POST /v0/admin/sv/voteresults operation changed in this snapshot.

+

The POST /v0/admin/sv/voteresults operation was updated in this snapshot.

-
+
- Changed + Updated 0.6.0
-

The POST /v0/admin/sv/voteresults operation changed in this snapshot.

+

The POST /v0/admin/sv/voteresults operation was updated in this snapshot.

-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/post-v0adminsvvoteresultscount.mdx b/docs-main/reference/splice-scan-api/post-v0adminsvvoteresultscount.mdx index ce9199ea8..d67331f20 100644 --- a/docs-main/reference/splice-scan-api/post-v0adminsvvoteresultscount.mdx +++ b/docs-main/reference/splice-scan-api/post-v0adminsvvoteresultscount.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.6.13 + Added 0.6.13
@@ -43,7 +43,7 @@ Count all vote results matching the request filters.
Published - 0.7.4 + 0.7.5
@@ -139,9 +139,9 @@ Total number of vote results matching the request filters.
-
+
- Introduced + Added 0.6.13
diff --git a/docs-main/reference/splice-scan-api/post-v0amulet-rules.mdx b/docs-main/reference/splice-scan-api/post-v0amulet-rules.mdx index b445903dc..7f4d58404 100644 --- a/docs-main/reference/splice-scan-api/post-v0amulet-rules.mdx +++ b/docs-main/reference/splice-scan-api/post-v0amulet-rules.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -41,7 +41,7 @@ playground: "interactive"
Published - 0.7.4 + 0.7.5
@@ -128,9 +128,9 @@ OpenAPI type: `ContractId`.
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/post-v0ans-rules.mdx b/docs-main/reference/splice-scan-api/post-v0ans-rules.mdx index e7190e5c2..ab5cb7a2b 100644 --- a/docs-main/reference/splice-scan-api/post-v0ans-rules.mdx +++ b/docs-main/reference/splice-scan-api/post-v0ans-rules.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -41,7 +41,7 @@ playground: "interactive"
Published - 0.7.4 + 0.7.5
@@ -128,9 +128,9 @@ OpenAPI type: `ContractId`.
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/post-v0backfillingimport-updates.mdx b/docs-main/reference/splice-scan-api/post-v0backfillingimport-updates.mdx index 9654f0f78..5f4756930 100644 --- a/docs-main/reference/splice-scan-api/post-v0backfillingimport-updates.mdx +++ b/docs-main/reference/splice-scan-api/post-v0backfillingimport-updates.mdx @@ -21,9 +21,9 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10 - Changed 0.6.0 + Updated 0.6.0
@@ -43,7 +43,7 @@ playground: "interactive"
Published - 0.7.4 + 0.7.5
@@ -166,29 +166,29 @@ Return at most this many updates. The actual number of updates returned may be s
-
+
- Changed + Updated 0.6.0
-

The POST /v0/backfilling/import-updates operation changed in this snapshot.

+

The POST /v0/backfilling/import-updates operation was updated in this snapshot.

-
+
- Changed + Updated 0.5.17
-

The POST /v0/backfilling/import-updates operation changed in this snapshot.

+

The POST /v0/backfilling/import-updates operation was updated in this snapshot.

-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/post-v0backfillingmigration-info.mdx b/docs-main/reference/splice-scan-api/post-v0backfillingmigration-info.mdx index 2c80306cb..5db95356f 100644 --- a/docs-main/reference/splice-scan-api/post-v0backfillingmigration-info.mdx +++ b/docs-main/reference/splice-scan-api/post-v0backfillingmigration-info.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -43,7 +43,7 @@ List all previous synchronizer migrations in this Splice network's history.
Published - 0.7.4 + 0.7.5
@@ -176,9 +176,9 @@ True if this scan has all import updates for the given migration id
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/post-v0backfillingupdates-before.mdx b/docs-main/reference/splice-scan-api/post-v0backfillingupdates-before.mdx index e379c1d03..fec177183 100644 --- a/docs-main/reference/splice-scan-api/post-v0backfillingupdates-before.mdx +++ b/docs-main/reference/splice-scan-api/post-v0backfillingupdates-before.mdx @@ -21,9 +21,9 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10 - Changed 0.6.0 + Updated 0.6.0
@@ -45,7 +45,7 @@ Retrieve transactions and synchronizer reassignments prior to the request's spec
Published - 0.7.4 + 0.7.5
@@ -183,29 +183,29 @@ Return at most this many updates. The actual number of updates returned may be s
-
+
- Changed + Updated 0.6.0
-

The POST /v0/backfilling/updates-before operation changed in this snapshot.

+

The POST /v0/backfilling/updates-before operation was updated in this snapshot.

-
+
- Changed + Updated 0.5.17
-

The POST /v0/backfilling/updates-before operation changed in this snapshot.

+

The POST /v0/backfilling/updates-before operation was updated in this snapshot.

-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/post-v0events.mdx b/docs-main/reference/splice-scan-api/post-v0events.mdx index 226075381..6e306d363 100644 --- a/docs-main/reference/splice-scan-api/post-v0events.mdx +++ b/docs-main/reference/splice-scan-api/post-v0events.mdx @@ -21,9 +21,9 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10 - Changed 0.6.10 + Updated 0.6.10
@@ -45,7 +45,7 @@ Returns the event history in ascending order, paged, from ledger begin or option
Published - 0.7.4 + 0.7.5
@@ -194,49 +194,49 @@ How daml values should be encoded in the response. "compact_json" is a
-
+
- Changed + Updated 0.6.10
-

The POST /v0/events operation changed in this snapshot.

+

The POST /v0/events operation was updated in this snapshot.

-
+
- Changed + Updated 0.6.0
-

The POST /v0/events operation changed in this snapshot.

+

The POST /v0/events operation was updated in this snapshot.

-
+
- Changed + Updated 0.5.17
-

The POST /v0/events operation changed in this snapshot.

+

The POST /v0/events operation was updated in this snapshot.

-
+
- Changed + Updated 0.5.15
-

The POST /v0/events operation changed in this snapshot.

+

The POST /v0/events operation was updated in this snapshot.

-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/post-v0external-party-amulet-rules.mdx b/docs-main/reference/splice-scan-api/post-v0external-party-amulet-rules.mdx index 85a4b6e64..fcd4415db 100644 --- a/docs-main/reference/splice-scan-api/post-v0external-party-amulet-rules.mdx +++ b/docs-main/reference/splice-scan-api/post-v0external-party-amulet-rules.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -41,7 +41,7 @@ playground: "interactive"
Published - 0.7.4 + 0.7.5
@@ -128,9 +128,9 @@ OpenAPI type: `ContractId`.
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/post-v0historybulkchecksums.mdx b/docs-main/reference/splice-scan-api/post-v0historybulkchecksums.mdx index d14913aaf..8cd77a1f8 100644 --- a/docs-main/reference/splice-scan-api/post-v0historybulkchecksums.mdx +++ b/docs-main/reference/splice-scan-api/post-v0historybulkchecksums.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.7.4 + Added 0.7.4
@@ -43,7 +43,7 @@ playground: "interactive"
Published - 0.7.4 + 0.7.5
@@ -150,9 +150,9 @@ The list of checksums for the requested bulk storage objects (in the same order
-
+
- Introduced + Added 0.7.4
diff --git a/docs-main/reference/splice-scan-api/post-v0historybulkupdates.mdx b/docs-main/reference/splice-scan-api/post-v0historybulkupdates.mdx index 2da9ff077..8111e3765 100644 --- a/docs-main/reference/splice-scan-api/post-v0historybulkupdates.mdx +++ b/docs-main/reference/splice-scan-api/post-v0historybulkupdates.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.18 + Added 0.5.18
@@ -43,7 +43,7 @@ playground: "interactive"
Published - 0.7.4 + 0.7.5
@@ -231,9 +231,9 @@ When requesting the next page of results, pass this as `after` to the next `List
-
+
- Introduced + Added 0.5.18
diff --git a/docs-main/reference/splice-scan-api/post-v0holdingsstate.mdx b/docs-main/reference/splice-scan-api/post-v0holdingsstate.mdx index 48d0454b9..4f0adcfe8 100644 --- a/docs-main/reference/splice-scan-api/post-v0holdingsstate.mdx +++ b/docs-main/reference/splice-scan-api/post-v0holdingsstate.mdx @@ -21,9 +21,9 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10 - Changed 0.6.0 + Updated 0.6.0
@@ -45,7 +45,7 @@ Deprecated. Please use /v1/holdings/state instead. Returns the active amulet con
Published - 0.7.4 + 0.7.5
@@ -261,19 +261,19 @@ When requesting the next page of results, pass this as `after` to the `AcsReques
-
+
- Changed + Updated 0.6.0
-

The POST /v0/holdings/state operation changed in this snapshot.

+

The POST /v0/holdings/state operation was updated in this snapshot.

-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/post-v0holdingssummary.mdx b/docs-main/reference/splice-scan-api/post-v0holdingssummary.mdx index 109222ffc..117b82f07 100644 --- a/docs-main/reference/splice-scan-api/post-v0holdingssummary.mdx +++ b/docs-main/reference/splice-scan-api/post-v0holdingssummary.mdx @@ -21,9 +21,11 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10 - Changed 0.6.3 + Updated 0.6.3 + + Deprecated 0.6.3
@@ -45,7 +47,7 @@ Deprecated. Please use /v1/holdings/summary instead. Returns the summary of acti
Published - 0.7.4 + 0.7.5
@@ -250,7 +252,7 @@ The same `as_of_round` as in the request, with the same default.
-
+
Deprecated 0.6.3 @@ -258,19 +260,19 @@ The same `as_of_round` as in the request, with the same default.
-
+
- Changed + Updated 0.6.3
-

The POST /v0/holdings/summary operation changed in this snapshot.

+

The POST /v0/holdings/summary operation was updated in this snapshot.

-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/post-v0open-and-issuing-mining-rounds.mdx b/docs-main/reference/splice-scan-api/post-v0open-and-issuing-mining-rounds.mdx index cacabc8cb..4f9e0acd6 100644 --- a/docs-main/reference/splice-scan-api/post-v0open-and-issuing-mining-rounds.mdx +++ b/docs-main/reference/splice-scan-api/post-v0open-and-issuing-mining-rounds.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -43,7 +43,7 @@ All current open and issuing mining rounds, if the request is empty; passing con
Published - 0.7.4 + 0.7.5
@@ -149,9 +149,9 @@ Always created with respect to an input set of contract IDs. If an input contrac
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/post-v0stateacs.mdx b/docs-main/reference/splice-scan-api/post-v0stateacs.mdx index 597c58f0e..bec63da43 100644 --- a/docs-main/reference/splice-scan-api/post-v0stateacs.mdx +++ b/docs-main/reference/splice-scan-api/post-v0stateacs.mdx @@ -21,9 +21,11 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10 - Changed 0.6.0 + Updated 0.6.0 + + Deprecated 0.6.0
@@ -45,7 +47,7 @@ Deprecated. Please use /v1/state/acs instead. Returns the ACS in creation date a
Published - 0.7.4 + 0.7.5
@@ -268,7 +270,7 @@ When requesting the next page of results, pass this as `after` to the `AcsReques
-
+
Deprecated 0.6.0 @@ -276,19 +278,19 @@ When requesting the next page of results, pass this as `after` to the `AcsReques
-
+
- Changed + Updated 0.6.0
-

The POST /v0/state/acs operation changed in this snapshot.

+

The POST /v0/state/acs operation was updated in this snapshot.

-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/post-v0stateacsforce.mdx b/docs-main/reference/splice-scan-api/post-v0stateacsforce.mdx index 72c196e98..43297132a 100644 --- a/docs-main/reference/splice-scan-api/post-v0stateacsforce.mdx +++ b/docs-main/reference/splice-scan-api/post-v0stateacsforce.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -43,7 +43,7 @@ Takes a snapshot of the ACS at the current time. The responses can be used as pa
Published - 0.7.4 + 0.7.5
@@ -153,9 +153,9 @@ The current migration ID of the Scan.
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/post-v0updates.mdx b/docs-main/reference/splice-scan-api/post-v0updates.mdx index 6779e3850..6a55d84a1 100644 --- a/docs-main/reference/splice-scan-api/post-v0updates.mdx +++ b/docs-main/reference/splice-scan-api/post-v0updates.mdx @@ -21,9 +21,11 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10 - Changed 0.6.0 + Updated 0.6.0 + + Deprecated 0.5.10
@@ -45,7 +47,7 @@ playground: "interactive"
Published - 0.7.4 + 0.7.5
@@ -192,27 +194,27 @@ Whether contract payload should be encoded into json using a lossless, but much
-
+
- Changed + Updated 0.6.0
-

The POST /v0/updates operation changed in this snapshot.

+

The POST /v0/updates operation was updated in this snapshot.

-
+
- Changed + Updated 0.5.17
-

The POST /v0/updates operation changed in this snapshot.

+

The POST /v0/updates operation was updated in this snapshot.

-
+
Deprecated 0.5.10 @@ -220,9 +222,9 @@ Whether contract payload should be encoded into json using a lossless, but much
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/post-v0voterequest.mdx b/docs-main/reference/splice-scan-api/post-v0voterequest.mdx index 5bac3e953..3d52b73ba 100644 --- a/docs-main/reference/splice-scan-api/post-v0voterequest.mdx +++ b/docs-main/reference/splice-scan-api/post-v0voterequest.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -43,7 +43,7 @@ Look up several `VoteRequest`\ s at once by their contract IDs.
Published - 0.7.4 + 0.7.5
@@ -126,9 +126,9 @@ Contracts of Daml template `Splice.DsoRules:VoteRequest` that match `vote_reques
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/post-v1holdingsstate.mdx b/docs-main/reference/splice-scan-api/post-v1holdingsstate.mdx index 9b841ea1a..1bee9376b 100644 --- a/docs-main/reference/splice-scan-api/post-v1holdingsstate.mdx +++ b/docs-main/reference/splice-scan-api/post-v1holdingsstate.mdx @@ -1,5 +1,5 @@ --- -title: "Holdings state at v1" +title: "Deprecated" api: "POST https://scan.sv-1.global.canton.network.sync.global/api/scan/v1/holdings/state" playground: "interactive" --- @@ -13,7 +13,7 @@ playground: "interactive"

Scan API

-

Holdings state at v1

+

Deprecated

@@ -21,14 +21,18 @@ playground: "interactive" OpenAPI - Since 0.6.0 + Added 0.6.0 + + Updated 0.7.5 + + Deprecated 0.7.5
-Returns the active amulet contracts for a given migration id and record time, in creation date ascending order, paged. +Deprecated. Please use /v2/holdings/state instead. The only difference with this endpoint and that one is the type of the `after`/`next_page_token` pagination token. Returns the active amulet contracts for a given migration id and record time, in creation date ascending order, paged. ## Protocol Details @@ -43,7 +47,7 @@ Returns the active amulet contracts for a given migration id and record time, in
Published - 0.7.4 + 0.7.5
@@ -259,9 +263,27 @@ When requesting the next page of results, pass this as `after` to the `AcsReques
-
+
+
+ Deprecated + 0.7.5 +
+ +
+ +
+
+ Updated + 0.7.5 +
+ +

The POST /v1/holdings/state operation was updated in this snapshot.

+ +
+ +
- Introduced + Added 0.6.0
diff --git a/docs-main/reference/splice-scan-api/post-v1holdingssummary.mdx b/docs-main/reference/splice-scan-api/post-v1holdingssummary.mdx index ba5f526f5..b1b55f3df 100644 --- a/docs-main/reference/splice-scan-api/post-v1holdingssummary.mdx +++ b/docs-main/reference/splice-scan-api/post-v1holdingssummary.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.6.3 + Added 0.6.3
@@ -43,7 +43,7 @@ Returns the summary of active amulet contracts for a given migration id and reco
Published - 0.7.4 + 0.7.5
@@ -233,9 +233,9 @@ The same `migration_id` as in the request.
-
+
- Introduced + Added 0.6.3
diff --git a/docs-main/reference/splice-scan-api/post-v1stateacs.mdx b/docs-main/reference/splice-scan-api/post-v1stateacs.mdx index 398c05d59..70a37be3d 100644 --- a/docs-main/reference/splice-scan-api/post-v1stateacs.mdx +++ b/docs-main/reference/splice-scan-api/post-v1stateacs.mdx @@ -1,5 +1,5 @@ --- -title: "Acs snapshot at v1" +title: "Deprecated" api: "POST https://scan.sv-1.global.canton.network.sync.global/api/scan/v1/state/acs" playground: "interactive" --- @@ -13,7 +13,7 @@ playground: "interactive"

Scan API

-

Acs snapshot at v1

+

Deprecated

@@ -21,14 +21,18 @@ playground: "interactive" OpenAPI - Since 0.6.0 + Added 0.6.0 + + Updated 0.7.5 + + Deprecated 0.7.5
-Returns the ACS in creation date ascending order, paged, for a given migration id and record time. Unlike /v0/state/acs, every contract is identified by an (optional) update_id (as opposed to the event ID in /v0/state/acs, which was not BFT-safe). The update_id is the ID of the update in which the contract was created, and can be used to correlate with updates returned by /v2/updates. +Deprecated. Please use /v2/state/acs instead. The only difference with this endpoint and that one is the type of the `after`/`next_page_token` pagination token. Returns the ACS in creation date ascending order, paged, for a given migration id and record time. Unlike /v0/state/acs, every contract is identified by an (optional) update_id (as opposed to the event ID in /v0/state/acs, which was not BFT-safe). ## Protocol Details @@ -43,7 +47,7 @@ Returns the ACS in creation date ascending order, paged, for a given migration i
Published - 0.7.4 + 0.7.5
@@ -266,9 +270,27 @@ When requesting the next page of results, pass this as `after` to the `AcsReques
-
+
+
+ Deprecated + 0.7.5 +
+ +
+ +
+
+ Updated + 0.7.5 +
+ +

The POST /v1/state/acs operation was updated in this snapshot.

+ +
+ +
- Introduced + Added 0.6.0
diff --git a/docs-main/reference/splice-scan-api/post-v1updates.mdx b/docs-main/reference/splice-scan-api/post-v1updates.mdx index a53325cb5..c7ec73ec2 100644 --- a/docs-main/reference/splice-scan-api/post-v1updates.mdx +++ b/docs-main/reference/splice-scan-api/post-v1updates.mdx @@ -21,9 +21,11 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10 - Changed 0.6.0 + Updated 0.6.0 + + Deprecated 0.5.10
@@ -45,7 +47,7 @@ Returns the update history in ascending order, paged, from ledger begin or optio
Published - 0.7.4 + 0.7.5
@@ -194,27 +196,27 @@ How daml values should be encoded in the response. "compact_json" is a
-
+
- Changed + Updated 0.6.0
-

The POST /v1/updates operation changed in this snapshot.

+

The POST /v1/updates operation was updated in this snapshot.

-
+
- Changed + Updated 0.5.17
-

The POST /v1/updates operation changed in this snapshot.

+

The POST /v1/updates operation was updated in this snapshot.

-
+
Deprecated 0.5.10 @@ -222,9 +224,9 @@ How daml values should be encoded in the response. "compact_json" is a
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-api/post-v2holdingsstate.mdx b/docs-main/reference/splice-scan-api/post-v2holdingsstate.mdx new file mode 100644 index 000000000..786aecc78 --- /dev/null +++ b/docs-main/reference/splice-scan-api/post-v2holdingsstate.mdx @@ -0,0 +1,298 @@ +--- +title: "Holdings state at v2" +api: "POST https://scan.sv-1.global.canton.network.sync.global/api/scan/v2/holdings/state" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Holdings state at v2

+ + + +
+ + OpenAPI + + Added 0.7.5 + +
+ + +
+ +Returns the active amulet contracts for a given migration id and record time, in creation date ascending order, paged. + +## Protocol Details + + + +
+ +
+ Operation ID + getHoldingsStateAtV2 +
+ +
+ Published + 0.7.5 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `integer (int64)`. + + +The migration id for which to return the ACS. + + + + + +OpenAPI type: `string (date-time)`. + + +The timestamp at which the contract set was active. This needs to be an exact timestamp, i.e., needs to correspond to a timestamp reported by `/v0/state/acs/snapshot-timestamp` if `record_time_match` is set to `exact` (which is the default). If `record_time_match` is set to `at_or_before`, this can be any timestamp, and the most recent snapshot at or before the given `record_time` will be returned. + + + + + + +How to match the record_time. "exact" requires the record_time to match exactly. "at_or_before" finds the most recent snapshot at or before the given record_time. + + + + + + +Pagination token for the next page of results. This token is opaque and not meant to be edited by users. + + + + + +OpenAPI type: `integer (int32)`. + + +The maximum number of created events returned for this request. + + + + + + +Filters by contracts in which these party_ids are the owners of the amulets. + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The same `record_time` as in the request. + + + + + +The same `migration_id` as in the request. + + + + + +Up to `page_size` contracts in the ACS. `create_arguments` are always encoded as `compact_json`. + + + + + +When requesting the next page of results, pass this as `after` to the `AcsRequestV2` or `HoldingsStateRequestV2`. Will be absent when there are no more pages. This token is opaque and not meant to be edited by users. + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 500 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Added + 0.7.5 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v2/holdings/state' \ + --header 'Content-Type: application/json' \ + --data '{"migration_id":0,"record_time":"2026-01-01T00:00:00Z","record_time_match":"exact","after":"string","page_size":0,"owner_party_ids":["string"]}' +``` + + + + + + +```json 200 response +{ + "record_time": "2026-01-01T00:00:00Z", + "migration_id": 0, + "created_events": [ + {} + ], + "next_page_token": "string" +} +``` + + diff --git a/docs-main/reference/splice-scan-api/post-v2stateacs.mdx b/docs-main/reference/splice-scan-api/post-v2stateacs.mdx new file mode 100644 index 000000000..97dcfc28b --- /dev/null +++ b/docs-main/reference/splice-scan-api/post-v2stateacs.mdx @@ -0,0 +1,305 @@ +--- +title: "Acs snapshot at v2" +api: "POST https://scan.sv-1.global.canton.network.sync.global/api/scan/v2/state/acs" +playground: "interactive" +--- + +
+ + + +
+ +

Scan API

+ + +

Acs snapshot at v2

+ + + +
+ + OpenAPI + + Added 0.7.5 + +
+ + +
+ +Returns the ACS in creation date ascending order, paged, for a given migration id and record time. Unlike /v0/state/acs, every contract is identified by an (optional) update_id (as opposed to the event ID in /v0/state/acs, which was not BFT-safe). The update_id is the ID of the update in which the contract was created, and can be used to correlate with updates returned by /v2/updates. + +## Protocol Details + + + +
+ +
+ Operation ID + getAcsSnapshotAtV2 +
+ +
+ Published + 0.7.5 +
+ +
+ Specification + Download OpenAPI +
+ +
+ + + +## Inputs + + + +### Request body + + +
+ + application/json + +
+ + + + + + + +OpenAPI type: `integer (int64)`. + + +The migration id for which to return the ACS. + + + + + +OpenAPI type: `string (date-time)`. + + +The timestamp at which the contract set was active. This needs to be an exact timestamp, i.e., needs to correspond to a timestamp reported by `/v0/state/acs/snapshot-timestamp` if `record_time_match` is set to `exact` (which is the default). If `record_time_match` is set to `at_or_before`, this can be any timestamp, and the most recent snapshot at or before the given `record_time` will be returned. + + + + + + +How to match the record_time. "exact" requires the record_time to match exactly. "at_or_before" finds the most recent snapshot at or before the given record_time. + + + + + + +Pagination token for the next page of results. For this to be valid, this must be the `next_page_token` from a prior request with identical parameters aside from `after` and `page_size`; the response may be invalid otherwise. This token is opaque and not meant to be edited by users. + + + + + +OpenAPI type: `integer (int32)`. + + +The maximum number of created events returned for this request. + + + + + + +Filters the ACS by contracts in which these party IDs are stakeholders. + + + + + + +Filters the ACS by contracts with these template IDs, specified as "PACKAGE_NAME:MODULE_NAME:ENTITY_NAME". + + + + + + + + + + +## Outputs + + + +### 200 + + +
+ + application/json + +
+ + + + + + + +The same `record_time` as in the request. + + + + + +The same `migration_id` as in the request. + + + + + +Up to `page_size` contracts in the ACS. `create_arguments` are always encoded as `compact_json`. + + + + + +When requesting the next page of results, pass this as `after` to the `AcsRequestV2` or `HoldingsStateRequestV2`. Will be absent when there are no more pages. This token is opaque and not meant to be edited by users. + + + + + + + + + + +### 400 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 404 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + +### 500 + + +
+ + application/json + +
+ + + + + + + + + + + + + + + + + + + + + + +## History + +
+ +
+
+ Added + 0.7.5 +
+ +
+ +
+ + + + + + +```bash Request +curl --request POST \ + --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v2/state/acs' \ + --header 'Content-Type: application/json' \ + --data '{"migration_id":0,"record_time":"2026-01-01T00:00:00Z","record_time_match":"exact","after":"string","page_size":0,"party_ids":["string"],"templates":["string"]}' +``` + + + + + + +```json 200 response +{ + "record_time": "2026-01-01T00:00:00Z", + "migration_id": 0, + "created_events": [ + {} + ], + "next_page_token": "string" +} +``` + + diff --git a/docs-main/reference/splice-scan-api/post-v2updates.mdx b/docs-main/reference/splice-scan-api/post-v2updates.mdx index aba1728ea..0559bd677 100644 --- a/docs-main/reference/splice-scan-api/post-v2updates.mdx +++ b/docs-main/reference/splice-scan-api/post-v2updates.mdx @@ -21,9 +21,9 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10 - Changed 0.6.0 + Updated 0.6.0
@@ -45,7 +45,7 @@ Returns the update history in ascending order, paged, from ledger begin or optio
Published - 0.7.4 + 0.7.5
@@ -194,29 +194,29 @@ How daml values should be encoded in the response. "compact_json" is a
-
+
- Changed + Updated 0.6.0
-

The POST /v2/updates operation changed in this snapshot.

+

The POST /v2/updates operation was updated in this snapshot.

-
+
- Changed + Updated 0.5.17
-

The POST /v2/updates operation changed in this snapshot.

+

The POST /v2/updates operation was updated in this snapshot.

-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyamulet-rules.mdx b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyamulet-rules.mdx index 567ebc4f5..eefd52cff 100644 --- a/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyamulet-rules.mdx +++ b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyamulet-rules.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -41,7 +41,7 @@ playground: "interactive"
Published - 0.7.4 + 0.7.5
@@ -95,9 +95,9 @@ playground: "interactive"
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyans-entries.mdx b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyans-entries.mdx index bf74446d0..e1d9440bc 100644 --- a/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyans-entries.mdx +++ b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyans-entries.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -41,7 +41,7 @@ playground: "interactive"
Published - 0.7.4 + 0.7.5
@@ -122,9 +122,9 @@ OpenAPI type: `integer (int32)`.
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyans-entriesby-name:name.mdx b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyans-entriesby-name:name.mdx index ba1c1d6b4..557262fbd 100644 --- a/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyans-entriesby-name:name.mdx +++ b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyans-entriesby-name:name.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -41,7 +41,7 @@ playground: "interactive"
Published - 0.7.4 + 0.7.5
@@ -137,9 +137,9 @@ playground: "interactive"
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyans-entriesby-party:party.mdx b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyans-entriesby-party:party.mdx index c745c6453..396367ac2 100644 --- a/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyans-entriesby-party:party.mdx +++ b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyans-entriesby-party:party.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -41,7 +41,7 @@ playground: "interactive"
Published - 0.7.4 + 0.7.5
@@ -137,9 +137,9 @@ playground: "interactive"
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxydso-party-id.mdx b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxydso-party-id.mdx index 1fc46778f..347a95aa0 100644 --- a/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxydso-party-id.mdx +++ b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxydso-party-id.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -41,7 +41,7 @@ playground: "interactive"
Published - 0.7.4 + 0.7.5
@@ -95,9 +95,9 @@ playground: "interactive"
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxydso.mdx b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxydso.mdx index 61b8ab8d4..7c8708489 100644 --- a/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxydso.mdx +++ b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxydso.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -41,7 +41,7 @@ playground: "interactive"
Published - 0.7.4 + 0.7.5
@@ -139,9 +139,9 @@ Initial round from which the network bootstraps
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyfeatured-apps:provider_party_id.mdx b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyfeatured-apps:provider_party_id.mdx index 3ff3a69ef..cae89afeb 100644 --- a/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyfeatured-apps:provider_party_id.mdx +++ b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyfeatured-apps:provider_party_id.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -41,7 +41,7 @@ playground: "interactive"
Published - 0.7.4 + 0.7.5
@@ -113,9 +113,9 @@ playground: "interactive"
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyopen-and-issuing-mining-rounds.mdx b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyopen-and-issuing-mining-rounds.mdx index bf3081d06..27ed32fba 100644 --- a/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyopen-and-issuing-mining-rounds.mdx +++ b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyopen-and-issuing-mining-rounds.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -41,7 +41,7 @@ playground: "interactive"
Published - 0.7.4 + 0.7.5
@@ -99,9 +99,9 @@ playground: "interactive"
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxytransfer-command-counter:party.mdx b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxytransfer-command-counter:party.mdx index e7e6fb20a..3ba8ae68d 100644 --- a/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxytransfer-command-counter:party.mdx +++ b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxytransfer-command-counter:party.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -41,7 +41,7 @@ playground: "interactive"
Published - 0.7.4 + 0.7.5
@@ -137,9 +137,9 @@ playground: "interactive"
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxytransfer-commandstatus.mdx b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxytransfer-commandstatus.mdx index 2fd8f9558..8235fc620 100644 --- a/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxytransfer-commandstatus.mdx +++ b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxytransfer-commandstatus.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -43,7 +43,7 @@ Retrieve the status of all transfer commands of the given sender for the specifi
Published - 0.7.4 + 0.7.5
@@ -148,9 +148,9 @@ OpenAPI type: `integer (int64)`.
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxytransfer-preapprovalsby-party:party.mdx b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxytransfer-preapprovalsby-party:party.mdx index a64375d36..8e46bb242 100644 --- a/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxytransfer-preapprovalsby-party:party.mdx +++ b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxytransfer-preapprovalsby-party:party.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -41,7 +41,7 @@ playground: "interactive"
Published - 0.7.4 + 0.7.5
@@ -137,9 +137,9 @@ playground: "interactive"
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyunclaimed-development-fund-coupons.mdx b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyunclaimed-development-fund-coupons.mdx index 10e338c95..d70dd7d15 100644 --- a/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyunclaimed-development-fund-coupons.mdx +++ b/docs-main/reference/splice-scan-proxy-api/get-v0scan-proxyunclaimed-development-fund-coupons.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.11 + Added 0.5.11
@@ -43,7 +43,7 @@ List all unclaimed development fund coupons.
Published - 0.7.4 + 0.7.5
@@ -99,9 +99,9 @@ Contracts of the Daml template `Splice.Amulet:UnclaimedDevelopmentFundCoupon`.
-
+
- Introduced + Added 0.5.11
diff --git a/docs-main/reference/splice-scan-proxy-api/post-v0scan-proxyans-rules.mdx b/docs-main/reference/splice-scan-proxy-api/post-v0scan-proxyans-rules.mdx index 508bfd82b..f74962fb8 100644 --- a/docs-main/reference/splice-scan-proxy-api/post-v0scan-proxyans-rules.mdx +++ b/docs-main/reference/splice-scan-proxy-api/post-v0scan-proxyans-rules.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -41,7 +41,7 @@ playground: "interactive"
Published - 0.7.4 + 0.7.5
@@ -128,9 +128,9 @@ OpenAPI type: `ContractId`.
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-proxy-api/post-v0scan-proxyholdingssummary.mdx b/docs-main/reference/splice-scan-proxy-api/post-v0scan-proxyholdingssummary.mdx index 11d0fc0f0..c1d9ea0a1 100644 --- a/docs-main/reference/splice-scan-proxy-api/post-v0scan-proxyholdingssummary.mdx +++ b/docs-main/reference/splice-scan-proxy-api/post-v0scan-proxyholdingssummary.mdx @@ -21,9 +21,11 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10 - Changed 0.6.3 + Updated 0.6.3 + + Deprecated 0.6.3
@@ -45,7 +47,7 @@ Deprecated. Please use /v1/scan-proxy/holdings/summary instead. Returns the summ
Published - 0.7.4 + 0.7.5
@@ -250,7 +252,7 @@ The same `as_of_round` as in the request, with the same default.
-
+
Deprecated 0.6.3 @@ -258,19 +260,19 @@ The same `as_of_round` as in the request, with the same default.
-
+
- Changed + Updated 0.6.3
-

The POST /v0/scan-proxy/holdings/summary operation changed in this snapshot.

+

The POST /v0/scan-proxy/holdings/summary operation was updated in this snapshot.

-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-scan-proxy-api/post-v1scan-proxyholdingssummary.mdx b/docs-main/reference/splice-scan-proxy-api/post-v1scan-proxyholdingssummary.mdx index 2903ce2c8..17c92e642 100644 --- a/docs-main/reference/splice-scan-proxy-api/post-v1scan-proxyholdingssummary.mdx +++ b/docs-main/reference/splice-scan-proxy-api/post-v1scan-proxyholdingssummary.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.6.3 + Added 0.6.3
@@ -43,7 +43,7 @@ Returns the summary of active amulet contracts for a given migration id and reco
Published - 0.7.4 + 0.7.5
@@ -233,9 +233,9 @@ The same `migration_id` as in the request.
-
+
- Introduced + Added 0.6.3
diff --git a/docs-main/reference/splice-scan-streaming-api/get-v0historybulkdownload:object_key.mdx b/docs-main/reference/splice-scan-streaming-api/get-v0historybulkdownload:object_key.mdx index 117fee966..1cfc074bb 100644 --- a/docs-main/reference/splice-scan-streaming-api/get-v0historybulkdownload:object_key.mdx +++ b/docs-main/reference/splice-scan-streaming-api/get-v0historybulkdownload:object_key.mdx @@ -21,9 +21,9 @@ playground: "interactive" OpenAPI - Since 0.5.16 + Added 0.5.16 - Changed 0.5.17 + Updated 0.5.17
@@ -45,7 +45,7 @@ Download a bulk storage object
Published - 0.7.4 + 0.7.5
@@ -141,19 +141,19 @@ Download a bulk storage object
-
+
- Changed + Updated 0.5.17
-

The GET /v0/history/bulk/download/{object_key} operation changed in this snapshot.

+

The GET /v0/history/bulk/download/{object_key} operation was updated in this snapshot.

-
+
- Introduced + Added 0.5.16
diff --git a/docs-main/reference/splice-token-metadata-service/get-registrymetadatav1info.mdx b/docs-main/reference/splice-token-metadata-service/get-registrymetadatav1info.mdx index 0a771d795..a7775928e 100644 --- a/docs-main/reference/splice-token-metadata-service/get-registrymetadatav1info.mdx +++ b/docs-main/reference/splice-token-metadata-service/get-registrymetadatav1info.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -43,7 +43,7 @@ Get information about the registry. The response includes the standards supporte
Published - 0.7.4 + 0.7.5
@@ -153,9 +153,9 @@ Map from token standard API name to the minor version of the API supported, e.g.
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-token-metadata-service/get-registrymetadatav1instruments.mdx b/docs-main/reference/splice-token-metadata-service/get-registrymetadatav1instruments.mdx index ce4910b5d..a489f5c5a 100644 --- a/docs-main/reference/splice-token-metadata-service/get-registrymetadatav1instruments.mdx +++ b/docs-main/reference/splice-token-metadata-service/get-registrymetadatav1instruments.mdx @@ -21,9 +21,9 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10 - Changed 0.6.12 + Updated 0.6.12
@@ -45,7 +45,7 @@ List all instruments managed by this instrument admin.
Published - 0.7.4 + 0.7.5
@@ -183,29 +183,29 @@ The token for the next page of results, to be used as the lastInstrumentId for t
-
+
- Changed + Updated 0.6.12
-

The GET /registry/metadata/v1/instruments operation changed in this snapshot.

+

The GET /registry/metadata/v1/instruments operation was updated in this snapshot.

-
+
- Changed + Updated 0.6.11
-

The GET /registry/metadata/v1/instruments operation changed in this snapshot.

+

The GET /registry/metadata/v1/instruments operation was updated in this snapshot.

-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-token-metadata-service/get-registrymetadatav1instruments:instrumentid.mdx b/docs-main/reference/splice-token-metadata-service/get-registrymetadatav1instruments:instrumentid.mdx index d2fee5d22..d93a08f1e 100644 --- a/docs-main/reference/splice-token-metadata-service/get-registrymetadatav1instruments:instrumentid.mdx +++ b/docs-main/reference/splice-token-metadata-service/get-registrymetadatav1instruments:instrumentid.mdx @@ -21,9 +21,9 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10 - Changed 0.6.12 + Updated 0.6.12
@@ -45,7 +45,7 @@ Retrieve an instrument's metadata.
Published - 0.7.4 + 0.7.5
@@ -227,29 +227,29 @@ Which account input field(s) wallets should show in forms.
-
+
- Changed + Updated 0.6.12
-

The GET /registry/metadata/v1/instruments/{instrumentId} operation changed in this snapshot.

+

The GET /registry/metadata/v1/instruments/{instrumentId} operation was updated in this snapshot.

-
+
- Changed + Updated 0.6.11
-

The GET /registry/metadata/v1/instruments/{instrumentId} operation changed in this snapshot.

+

The GET /registry/metadata/v1/instruments/{instrumentId} operation was updated in this snapshot.

-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1:transferinstructionidchoice-contextsaccept.mdx b/docs-main/reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1:transferinstructionidchoice-contextsaccept.mdx index a7d1e9dab..60dd4d2d1 100644 --- a/docs-main/reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1:transferinstructionidchoice-contextsaccept.mdx +++ b/docs-main/reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1:transferinstructionidchoice-contextsaccept.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -43,7 +43,7 @@ Get the choice context to accept a transfer instruction.
Published - 0.7.4 + 0.7.5
@@ -208,9 +208,9 @@ The contracts that are required to be disclosed to the participant node for exer
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1:transferinstructionidchoice-contextsreject.mdx b/docs-main/reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1:transferinstructionidchoice-contextsreject.mdx index d3bcfb9a8..22511193d 100644 --- a/docs-main/reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1:transferinstructionidchoice-contextsreject.mdx +++ b/docs-main/reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1:transferinstructionidchoice-contextsreject.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -43,7 +43,7 @@ Get the choice context to reject a transfer instruction.
Published - 0.7.4 + 0.7.5
@@ -208,9 +208,9 @@ The contracts that are required to be disclosed to the participant node for exer
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1:transferinstructionidchoice-contextswithdraw.mdx b/docs-main/reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1:transferinstructionidchoice-contextswithdraw.mdx index 5bb622b7b..7d4e1d3e5 100644 --- a/docs-main/reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1:transferinstructionidchoice-contextswithdraw.mdx +++ b/docs-main/reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1:transferinstructionidchoice-contextswithdraw.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -43,7 +43,7 @@ Get the choice context to withdraw a transfer instruction.
Published - 0.7.4 + 0.7.5
@@ -208,9 +208,9 @@ The contracts that are required to be disclosed to the participant node for exer
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1transfer-factory.mdx b/docs-main/reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1transfer-factory.mdx index c49fa4036..ed5ac7fbb 100644 --- a/docs-main/reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1transfer-factory.mdx +++ b/docs-main/reference/splice-transfer-instruction-api/post-registrytransfer-instructionv1transfer-factory.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -43,7 +43,7 @@ Get the factory and choice context for executing a direct transfer.
Published - 0.7.4 + 0.7.5
@@ -193,9 +193,9 @@ The context required to exercise a choice on a contract via an interface. Used t
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2:transferinstructionidchoice-contextsaccept.mdx b/docs-main/reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2:transferinstructionidchoice-contextsaccept.mdx index 9c678bfae..b0e20bc6f 100644 --- a/docs-main/reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2:transferinstructionidchoice-contextsaccept.mdx +++ b/docs-main/reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2:transferinstructionidchoice-contextsaccept.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.6.11 + Added 0.6.11
@@ -43,7 +43,7 @@ Get the choice context to accept a transfer instruction.
Published - 0.7.4 + 0.7.5
@@ -232,9 +232,9 @@ The contracts that are required to be disclosed to the participant node for exer
-
+
- Introduced + Added 0.6.11
diff --git a/docs-main/reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2:transferinstructionidchoice-contextsreject.mdx b/docs-main/reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2:transferinstructionidchoice-contextsreject.mdx index 4054ca090..0eee39ea8 100644 --- a/docs-main/reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2:transferinstructionidchoice-contextsreject.mdx +++ b/docs-main/reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2:transferinstructionidchoice-contextsreject.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.6.11 + Added 0.6.11
@@ -43,7 +43,7 @@ Get the choice context to reject a transfer instruction.
Published - 0.7.4 + 0.7.5
@@ -232,9 +232,9 @@ The contracts that are required to be disclosed to the participant node for exer
-
+
- Introduced + Added 0.6.11
diff --git a/docs-main/reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2:transferinstructionidchoice-contextswithdraw.mdx b/docs-main/reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2:transferinstructionidchoice-contextswithdraw.mdx index 662d19830..4b3e85794 100644 --- a/docs-main/reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2:transferinstructionidchoice-contextswithdraw.mdx +++ b/docs-main/reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2:transferinstructionidchoice-contextswithdraw.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.6.11 + Added 0.6.11
@@ -43,7 +43,7 @@ Get the choice context to withdraw a transfer instruction.
Published - 0.7.4 + 0.7.5
@@ -232,9 +232,9 @@ The contracts that are required to be disclosed to the participant node for exer
-
+
- Introduced + Added 0.6.11
diff --git a/docs-main/reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2transfer-factory.mdx b/docs-main/reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2transfer-factory.mdx index 850933236..646132ced 100644 --- a/docs-main/reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2transfer-factory.mdx +++ b/docs-main/reference/splice-transfer-instruction-v2-api/post-registrytransfer-instructionv2transfer-factory.mdx @@ -21,7 +21,7 @@ playground: "interactive" OpenAPI - Since 0.6.11 + Added 0.6.11
@@ -43,7 +43,7 @@ Get the factory and choice context for initiating a transfer workflow.
Published - 0.7.4 + 0.7.5
@@ -217,9 +217,9 @@ The context required to exercise a choice on a contract via an interface. Used t
-
+
- Introduced + Added 0.6.11
diff --git a/docs-main/reference/splice-wallet-api-external/get-v0wallettransfer-offers.mdx b/docs-main/reference/splice-wallet-api-external/get-v0wallettransfer-offers.mdx index b770ace06..73417ca7b 100644 --- a/docs-main/reference/splice-wallet-api-external/get-v0wallettransfer-offers.mdx +++ b/docs-main/reference/splice-wallet-api-external/get-v0wallettransfer-offers.mdx @@ -22,7 +22,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -49,7 +49,7 @@ List all open transfer offers where the user is either sender or receiver.
Published - 0.7.4 + 0.7.5
@@ -151,9 +151,9 @@ List all open transfer offers where the user is either sender or receiver.
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-wallet-api-external/post-v0walletbuy-traffic-requests.mdx b/docs-main/reference/splice-wallet-api-external/post-v0walletbuy-traffic-requests.mdx index 56224f332..ab249d0b1 100644 --- a/docs-main/reference/splice-wallet-api-external/post-v0walletbuy-traffic-requests.mdx +++ b/docs-main/reference/splice-wallet-api-external/post-v0walletbuy-traffic-requests.mdx @@ -22,7 +22,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -49,7 +49,7 @@ Create a request to buy traffic. Note that this only creates the request to do s
Published - 0.7.4 + 0.7.5
@@ -258,9 +258,9 @@ Expiry time of the request to buy traffic as unix timestamp in microseconds. If
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-wallet-api-external/post-v0walletbuy-traffic-requests:tracking_idstatus.mdx b/docs-main/reference/splice-wallet-api-external/post-v0walletbuy-traffic-requests:tracking_idstatus.mdx index 8ae340d72..ec618fbb1 100644 --- a/docs-main/reference/splice-wallet-api-external/post-v0walletbuy-traffic-requests:tracking_idstatus.mdx +++ b/docs-main/reference/splice-wallet-api-external/post-v0walletbuy-traffic-requests:tracking_idstatus.mdx @@ -22,7 +22,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -49,7 +49,7 @@ Check the status of a buy traffic request with a given tracking id.
Published - 0.7.4 + 0.7.5
@@ -145,9 +145,9 @@ Check the status of a buy traffic request with a given tracking id.
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-wallet-api-external/post-v0wallettransfer-offers.mdx b/docs-main/reference/splice-wallet-api-external/post-v0wallettransfer-offers.mdx index 19fea1411..ad0477c52 100644 --- a/docs-main/reference/splice-wallet-api-external/post-v0wallettransfer-offers.mdx +++ b/docs-main/reference/splice-wallet-api-external/post-v0wallettransfer-offers.mdx @@ -22,7 +22,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -49,7 +49,7 @@ Create an offer to directly transfer a given amount of Amulet to another party.
Published - 0.7.4 + 0.7.5
@@ -280,9 +280,9 @@ Tracking id to support exactly once submission. Once submitted, all successive c
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/reference/splice-wallet-api-external/post-v0wallettransfer-offers:tracking_idstatus.mdx b/docs-main/reference/splice-wallet-api-external/post-v0wallettransfer-offers:tracking_idstatus.mdx index 851b4cf2f..85b95f4b9 100644 --- a/docs-main/reference/splice-wallet-api-external/post-v0wallettransfer-offers:tracking_idstatus.mdx +++ b/docs-main/reference/splice-wallet-api-external/post-v0wallettransfer-offers:tracking_idstatus.mdx @@ -22,7 +22,7 @@ playground: "interactive" OpenAPI - Since 0.5.10 + Added 0.5.10
@@ -49,7 +49,7 @@ Check the status of a transfer offer with a given tracking id.
Published - 0.7.4 + 0.7.5
@@ -145,9 +145,9 @@ Check the status of a transfer offer with a given tracking id.
-
+
- Introduced + Added 0.5.10
diff --git a/docs-main/styles.css b/docs-main/styles.css index 19a9a995b..3e9969f37 100644 --- a/docs-main/styles.css +++ b/docs-main/styles.css @@ -834,6 +834,18 @@ body:has(.x2mdx-ref-page--operation):not(:has(.x2mdx-ref-page--manual-api)) [ari font-size: 0.76rem; font-weight: 600; line-height: 1.1; + text-decoration: none; +} + +a.x2mdx-ref-badge:hover { + filter: brightness(0.96); + text-decoration: underline; + text-underline-offset: 0.16rem; +} + +a.x2mdx-ref-badge:focus-visible { + outline: 2px solid var(--canton-highlight); + outline-offset: 2px; } .x2mdx-ref-badge--neutral { @@ -989,6 +1001,7 @@ body:has(.x2mdx-ref-page--operation):not(:has(.x2mdx-ref-page--manual-api)) [ari border-left: 3px solid var(--x2mdx-ref-text-muted); border-radius: 0.7rem; background: var(--x2mdx-ref-neutral-soft); + scroll-margin-top: 6rem; } :root.dark .x2mdx-ref-history-event, diff --git a/scripts/generate_splice_mintlify_openapi.py b/scripts/generate_splice_mintlify_openapi.py index dc773b1bc..7665ff1f7 100644 --- a/scripts/generate_splice_mintlify_openapi.py +++ b/scripts/generate_splice_mintlify_openapi.py @@ -797,13 +797,17 @@ def validate_manual_route_baseline( *, families: list[dict[str, Any]], snapshots: dict[str, dict[str, dict[str, Any]]], - publish_version: str, ) -> None: baseline = source_config.get("legacy_manual_route_baseline") if not isinstance(baseline, dict): raise ValueError("legacy_manual_route_baseline must be an object") expected_count = baseline.get("operation_count") expected_sha256 = baseline.get("sha256") + captured_version = baseline.get("captured_version") + if not isinstance(captured_version, str) or not captured_version: + raise ValueError( + "legacy_manual_route_baseline.captured_version must be a non-empty string" + ) if not isinstance(expected_count, int) or expected_count < 0: raise ValueError( "legacy_manual_route_baseline.operation_count must be a non-negative integer" @@ -818,15 +822,16 @@ def validate_manual_route_baseline( routes: list[str] = [] for family in families: for spec_config in family["specs"]: - published = snapshots[spec_config["filename"]].get(publish_version) - if published is None: + captured = snapshots[spec_config["filename"]].get(captured_version) + if captured is None: raise ValueError( - f"Enabled spec {spec_config['filename']} is absent from publish version {publish_version}" + f"Enabled spec {spec_config['filename']} is absent from captured " + f"baseline version {captured_version}" ) routes.extend( f"/{page_ref}" for page_ref in manual_operation_page_refs( - spec=published, + spec=captured, directory=spec_config["directory"], ) ) @@ -1229,7 +1234,6 @@ def main() -> int: source_config, families=navigation_families, snapshots=snapshots, - publish_version=publish_release["version"], ) history_report = build_splice_history_report( source_config=source_config, diff --git a/src/x2mdx/history/__init__.py b/src/x2mdx/history/__init__.py index 6d7a30390..bdd44eca4 100644 --- a/src/x2mdx/history/__init__.py +++ b/src/x2mdx/history/__init__.py @@ -1,6 +1,6 @@ """Shared history contracts for generated reference surfaces.""" -from x2mdx.history.events import history_events_for_item +from x2mdx.history.events import history_event_anchor, history_events_for_item from x2mdx.history.io import ( history_report_from_dict, history_report_to_dict, @@ -43,6 +43,7 @@ "SourceArtifact", "SurfaceHistoryReport", "VersionSelectionPolicy", + "history_event_anchor", "history_events_for_item", "history_report_from_dict", "history_report_to_dict", diff --git a/src/x2mdx/history/events.py b/src/x2mdx/history/events.py index ac9c0eb4c..36fa3b5f7 100644 --- a/src/x2mdx/history/events.py +++ b/src/x2mdx/history/events.py @@ -1,5 +1,6 @@ from __future__ import annotations +import re from functools import cmp_to_key from x2mdx.history.models import ( @@ -20,6 +21,21 @@ } +EVENT_ANCHOR_LABELS = { + HistoryEventKind.REMOVE_AS_OF: "removal-scheduled", + HistoryEventKind.DEPRECATED: "deprecated", + HistoryEventKind.CHANGED: "updated", + HistoryEventKind.INTRODUCED: "added", + HistoryEventKind.REPLACEMENT: "replacement", +} + + +def history_event_anchor(kind: HistoryEventKind, version: str) -> str: + """Return the stable fragment used to link a lifecycle badge to History.""" + version_slug = re.sub(r"[^a-z0-9]+", "-", version.casefold()).strip("-") + return f"history-{EVENT_ANCHOR_LABELS[kind]}-{version_slug or 'unknown'}" + + def history_events_for_item( item: HistoryItem, *, @@ -31,7 +47,7 @@ def history_events_for_item( HistoryEvent( kind=HistoryEventKind.REMOVE_AS_OF, version=item.remove_as_of, - label="Remove as of", + label="Removal scheduled", details=(), evidence=(item.remove_as_of_evidence,), ) @@ -55,7 +71,7 @@ def history_events_for_item( HistoryEvent( kind=HistoryEventKind.CHANGED, version=change.version, - label="Changed", + label="Updated", details=(change.summary,), evidence=change.evidence, ) @@ -65,7 +81,7 @@ def history_events_for_item( HistoryEvent( kind=HistoryEventKind.INTRODUCED, version=item.first_seen, - label="Introduced", + label="Added", details=(), evidence=(item.introduction_evidence,), ) diff --git a/src/x2mdx/openapi/history.py b/src/x2mdx/openapi/history.py index 98affbff9..c9a0bb972 100644 --- a/src/x2mdx/openapi/history.py +++ b/src/x2mdx/openapi/history.py @@ -417,7 +417,7 @@ def _changes( else: summary = ( f"The {observation.method.upper()} {observation.path} operation " - "changed in this snapshot." + "was updated in this snapshot." ) changes.append( ChangeDetail( diff --git a/src/x2mdx/openapi/render.py b/src/x2mdx/openapi/render.py index 1343d7c2e..0680b0fba 100644 --- a/src/x2mdx/openapi/render.py +++ b/src/x2mdx/openapi/render.py @@ -16,6 +16,7 @@ ReferencePanel, ReferenceSchema, json_body, + reference_badges_for_history_events, render_operation_page, ) @@ -586,7 +587,7 @@ def operation_history_events( HistoryEvent( kind=HistoryEventKind.REMOVE_AS_OF, version=remove_as_of, - label="Remove as of", + label="Removal scheduled", details=(), evidence=(evidence,), ) @@ -639,7 +640,7 @@ def operation_history_events( ) else: details = ( - f"The {observed_method.upper()} {observed_path} operation changed " + f"The {observed_method.upper()} {observed_path} operation was updated " "in this snapshot.", ) evidence = Evidence( @@ -652,7 +653,7 @@ def operation_history_events( HistoryEvent( kind=HistoryEventKind.CHANGED, version=version, - label="Changed", + label="Updated", details=details, evidence=(evidence,), ) @@ -671,7 +672,7 @@ def operation_history_events( HistoryEvent( kind=HistoryEventKind.INTRODUCED, version=first_version, - label="Introduced", + label="Added", details=(), evidence=(introduction,), ) @@ -778,35 +779,10 @@ def render_manual_openapi_operation( *response_examples, ] - introduced = next( - event.version - for event in history_events - if event.kind == HistoryEventKind.INTRODUCED + badges = reference_badges_for_history_events( + history_events, + kind_label="OpenAPI", ) - badges = [ - ReferenceBadge("OpenAPI", "protocol"), - ReferenceBadge(f"Since {introduced}", "added"), - ] - changed = next( - ( - event.version - for event in history_events - if event.kind == HistoryEventKind.CHANGED - ), - None, - ) - if changed is not None: - badges.append(ReferenceBadge(f"Changed {changed}", "changed")) - remove_as_of = next( - ( - event.version - for event in history_events - if event.kind == HistoryEventKind.REMOVE_AS_OF - ), - None, - ) - if remove_as_of is not None: - badges.append(ReferenceBadge(f"Remove as of {remove_as_of}", "removed")) api_path = f"{method} {options.server.rstrip('/')}{options.path}" protocol_items = [ diff --git a/src/x2mdx/reference_pages.py b/src/x2mdx/reference_pages.py index dafc6abad..c4a8e9194 100644 --- a/src/x2mdx/reference_pages.py +++ b/src/x2mdx/reference_pages.py @@ -8,7 +8,13 @@ from pathlib import Path from typing import Any -from x2mdx.history.models import HistoryEvent, HistoryItem +from x2mdx.history.events import history_event_anchor +from x2mdx.history.models import ( + HistoryEvent, + HistoryEventKind, + HistoryItem, + LifecycleState, +) from x2mdx.output import FrontmatterValue, Page, RawMarkdown from x2mdx.templating import render_template @@ -17,6 +23,7 @@ class ReferenceBadge: label: str tone: str = "neutral" + href: str | None = None @dataclass(frozen=True) @@ -200,11 +207,72 @@ def reference_badges_for_history_item( kind_label: str, ) -> list[ReferenceBadge]: badges = [ReferenceBadge(kind_label, "protocol")] - badges.append(ReferenceBadge(f"Since {item.first_seen}", "added")) + badges.append( + ReferenceBadge( + f"Added {item.first_seen}", + "added", + f"#{history_event_anchor(HistoryEventKind.INTRODUCED, item.first_seen)}", + ) + ) if item.last_changed is not None: - badges.append(ReferenceBadge(f"Changed {item.last_changed}", "changed")) + badges.append( + ReferenceBadge( + f"Updated {item.last_changed}", + "changed", + f"#{history_event_anchor(HistoryEventKind.CHANGED, item.last_changed)}", + ) + ) + deprecated_transition = next( + ( + transition + for transition in reversed(item.lifecycle_transitions) + if transition.state == LifecycleState.DEPRECATED + ), + None, + ) + if deprecated_transition is not None: + badges.append( + ReferenceBadge( + f"Deprecated {deprecated_transition.version}", + "removed", + f"#{history_event_anchor(HistoryEventKind.DEPRECATED, deprecated_transition.version)}", + ) + ) if item.remove_as_of is not None: - badges.append(ReferenceBadge(f"Remove as of {item.remove_as_of}", "removed")) + badges.append( + ReferenceBadge( + f"Removal scheduled {item.remove_as_of}", + "removed", + f"#{history_event_anchor(HistoryEventKind.REMOVE_AS_OF, item.remove_as_of)}", + ) + ) + return badges + + +def reference_badges_for_history_events( + events: list[HistoryEvent], + *, + kind_label: str, +) -> list[ReferenceBadge]: + """Build reader-facing lifecycle badges from newest-first history events.""" + badges = [ReferenceBadge(kind_label, "protocol")] + definitions = ( + (HistoryEventKind.INTRODUCED, "Added", "added"), + (HistoryEventKind.CHANGED, "Updated", "changed"), + (HistoryEventKind.DEPRECATED, "Deprecated", "removed"), + (HistoryEventKind.REMOVE_AS_OF, "Removal scheduled", "removed"), + ) + for kind, label, tone in definitions: + event = next((candidate for candidate in events if candidate.kind == kind), None) + if event is None: + continue + badges.append( + ReferenceBadge( + f"{label} {event.version}", + tone, + f"#{history_event_anchor(event.kind, event.version)}", + ) + ) return badges diff --git a/src/x2mdx/templates/shared/reference_macros.md.j2 b/src/x2mdx/templates/shared/reference_macros.md.j2 index ea539b647..41095b6bb 100644 --- a/src/x2mdx/templates/shared/reference_macros.md.j2 +++ b/src/x2mdx/templates/shared/reference_macros.md.j2 @@ -38,7 +38,7 @@ {% if badges %}
{% for badge in badges %} - {{ escape_mdx_html_text(inline_text(badge.label)) }} + {% if badge.href %}{{ escape_mdx_html_text(inline_text(badge.label)) }}{% else %}{{ escape_mdx_html_text(inline_text(badge.label)) }}{% endif %} {% endfor %}
{% endif %} @@ -350,7 +350,7 @@
{% for event in events %} -
+
{{ escape_mdx_html_text(inline_text(event.label)) }} {{ escape_mdx_html_text(inline_text(event.version)) }} diff --git a/src/x2mdx/templating.py b/src/x2mdx/templating.py index 87c84a943..53267b31f 100644 --- a/src/x2mdx/templating.py +++ b/src/x2mdx/templating.py @@ -10,6 +10,7 @@ from jinja2 import Environment, PackageLoader, StrictUndefined from x2mdx.output import Page, RawMarkdown +from x2mdx.history.events import history_event_anchor def heading(level: int, text: str) -> str: @@ -189,6 +190,7 @@ def template_environment() -> Environment: compact_version_sequence=compact_version_sequence, render_status_cell=render_status_cell, render_status_legend=render_status_legend, + history_event_anchor=history_event_anchor, ) return environment diff --git a/tests/test_history_contract.py b/tests/test_history_contract.py index ac530069a..525f309c5 100644 --- a/tests/test_history_contract.py +++ b/tests/test_history_contract.py @@ -54,7 +54,13 @@ def test_history_events_are_newest_first_with_remove_as_of_at_the_top() -> None: HistoryEventKind.CHANGED, HistoryEventKind.INTRODUCED, ] - assert events[0].label == "Remove as of" + assert [event.label for event in events] == [ + "Removal scheduled", + "Replacement", + "Deprecated", + "Updated", + "Added", + ] def test_current_item_at_removal_deadline_fails() -> None: diff --git a/tests/test_openapi_manual_render.py b/tests/test_openapi_manual_render.py index 87dab2bc3..7e0c8a0d6 100644 --- a/tests/test_openapi_manual_render.py +++ b/tests/test_openapi_manual_render.py @@ -277,7 +277,15 @@ def test_manual_openapi_page_preserves_playground_and_standard_history_layout() assert "" in rendered assert "x2mdx-ref-operation-shell" not in rendered assert "## History" in rendered - assert "Remove as of" in rendered + history = rendered[rendered.index("## History") :] + assert 'Removal scheduled' in history + assert 'href="#history-added-3-4">Added 3.4' in rendered + assert 'href="#history-updated-3-5">Updated 3.5' in rendered + assert 'href="#history-deprecated-3-5">Deprecated 3.5' in rendered + assert ( + 'href="#history-removal-scheduled-3-5-0">Removal scheduled 3.5.0' + in rendered + ) assert "3.5.0" in rendered assert "details and history" not in rendered.lower() diff --git a/tests/test_reference_page_history.py b/tests/test_reference_page_history.py index 987476263..a26229418 100644 --- a/tests/test_reference_page_history.py +++ b/tests/test_reference_page_history.py @@ -85,14 +85,23 @@ def test_standard_page_puts_contract_badges_near_the_title_in_order() -> None: badge_labels = [ "REST", - "Since 1.0.0", - "Changed 1.1.0", - "Remove as of 2.1.0", + "Added 1.0.0", + "Updated 1.1.0", + "Deprecated 1.1.0", + "Removal scheduled 2.1.0", ] badge_positions = [rendered.index(label) for label in badge_labels] assert badge_positions == sorted(badge_positions) assert badge_positions[-1] < rendered.index('
') + assert 'REST' in rendered + assert 'href="#history-added-1-0-0">Added 1.0.0' in rendered + assert 'href="#history-updated-1-1-0">Updated 1.1.0' in rendered + assert 'href="#history-deprecated-1-1-0">Deprecated 1.1.0' in rendered + assert ( + 'href="#history-removal-scheduled-2-1-0">Removal scheduled 2.1.0' + in rendered + ) def test_history_is_the_final_main_column_section_without_a_count() -> None: @@ -117,15 +126,19 @@ def test_history_renders_newest_first_with_text_bearing_event_labels() -> None: rendered = render_synthetic_operation() history = rendered[rendered.index("## History") :] labels = [ - "Remove as of", + "Removal scheduled", "Replacement", "Deprecated", - "Changed", - "Introduced", + "Updated", + "Added", ] positions = [history.index(label) for label in labels] assert positions == sorted(positions) + assert 'id="history-removal-scheduled-2-1-0"' in history + assert 'id="history-deprecated-1-1-0"' in history + assert 'id="history-updated-1-1-0"' in history + assert 'id="history-added-1-0-0"' in history assert "Replaced by payments.createV2" in history assert "Added an optional idempotency key." in history @@ -137,6 +150,8 @@ def test_history_styles_cover_desktop_dark_mode_and_narrow_layouts() -> None: assert ".x2mdx-ref-history-event" in styles assert '[data-theme="dark"] .x2mdx-ref-history-event' in styles + assert "a.x2mdx-ref-badge:focus-visible" in styles + assert "scroll-margin-top: 6rem;" in styles assert "@media (max-width: 640px)" in styles diff --git a/tests/test_splice_mintlify_openapi.py b/tests/test_splice_mintlify_openapi.py index 1e95c896b..b37d390a4 100644 --- a/tests/test_splice_mintlify_openapi.py +++ b/tests/test_splice_mintlify_openapi.py @@ -65,7 +65,7 @@ def test_checked_in_splice_history_report_is_valid_and_retains_removed_operation assert tuple(artifact.version for artifact in report.source_artifacts) == ( report.comparison_versions ) - assert len(report.current_items()) == 121 + assert report.current_items() assert any(not item.current_present for item in report.items) assert all(item.route is None for item in report.items if not item.current_present) assert all( @@ -494,6 +494,7 @@ def test_splice_openapi_route_baseline_covers_manual_reader_routes() -> None: module.validate_manual_route_baseline( { "legacy_manual_route_baseline": { + "captured_version": "0.7.4", "operation_count": 1, "sha256": hashlib.sha256(route.encode("utf-8")).hexdigest(), } @@ -510,5 +511,46 @@ def test_splice_openapi_route_baseline_covers_manual_reader_routes() -> None: } ], snapshots={"items.yaml": {"0.7.4": spec}}, - publish_version="0.7.4", + ) + + +def test_splice_openapi_route_baseline_allows_newer_additive_routes() -> None: + module = load_script_module("generate_splice_mintlify_openapi.py") + captured = { + "openapi": "3.0.3", + "paths": { + "/v0/items/{item_id}": { + "get": {"operationId": "getItem", "responses": {}} + } + }, + } + latest = { + "openapi": "3.0.3", + "paths": { + **captured["paths"], + "/v1/items": {"post": {"operationId": "createItem", "responses": {}}}, + }, + } + captured_route = "/reference/splice-items/get-v0items:item_id\n" + + module.validate_manual_route_baseline( + { + "legacy_manual_route_baseline": { + "captured_version": "0.7.4", + "operation_count": 1, + "sha256": hashlib.sha256(captured_route.encode("utf-8")).hexdigest(), + } + }, + families=[ + { + "group": "APIs", + "specs": [ + { + "filename": "items.yaml", + "directory": "reference/splice-items", + } + ], + } + ], + snapshots={"items.yaml": {"0.7.4": captured, "0.7.5": latest}}, ) From b30c49b2590a79fd21d2bf9b14f868f520a0bc67 Mon Sep 17 00:00:00 2001 From: danielporterda Date: Thu, 27 Aug 2026 14:24:33 -0400 Subject: [PATCH 14/14] Trigger Mintlify rebuild for lifecycle history Signed-off-by: danielporterda --- .../get-v0historybulkdownload:object_key.mdx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs-main/reference/splice-scan-streaming-api/get-v0historybulkdownload:object_key.mdx b/docs-main/reference/splice-scan-streaming-api/get-v0historybulkdownload:object_key.mdx index 1cfc074bb..c2f70ac33 100644 --- a/docs-main/reference/splice-scan-streaming-api/get-v0historybulkdownload:object_key.mdx +++ b/docs-main/reference/splice-scan-streaming-api/get-v0historybulkdownload:object_key.mdx @@ -4,6 +4,8 @@ api: "GET https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/histor playground: "interactive" --- +{/* Mintlify rebuild marker: linked lifecycle history */} +