{
  "openapi": "3.1.0",
  "jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
  "info": {
    "title": "IceRoot Explorer API",
    "version": "1.0.0-demo",
    "description": "Read-only REST interface for the deterministic bundled IceRoot explorer fixtures. This describes the implemented explorer service, not a Heartwood node REST API. No live chain connection, authentication, transaction signing or broadcast is provided. All documented operations are GET; Axum also handles HEAD without a response body. Unsupported write methods return 405 with error.code=method_not_allowed. OPTIONS handles CORS preflight without credentials; direct browser access uses configurable exact allowed origins. Application success responses include demo metadata, except the unwrapped health checks. Snapshot includes config beside data. Ordinary JSON responses use Cache-Control: no-store and X-Content-Type-Options: nosniff. A 10-second middleware timeout can return 408 without the JSON error envelope. Browser requests to another origin require that API server to allow the documentation origin through CORS; HTTPS pages may not be able to fetch insecure HTTP endpoints."
  },
  "servers": [
    {
      "url": "http://127.0.0.1:3188",
      "description": "Local deterministic demo explorer; not a live network"
    }
  ],
  "security": [],
  "tags": [
    {
      "name": "Service",
      "description": "Process health and bundled configuration."
    },
    {
      "name": "Search",
      "description": "Search across fixture collections."
    },
    {
      "name": "Blocks",
      "description": "Derived fixture blocks."
    },
    {
      "name": "Transactions",
      "description": "Recorded example transactions."
    },
    {
      "name": "Validators",
      "description": "Example validator records and round summaries."
    },
    {
      "name": "Assets",
      "description": "Example assets and derived supplies."
    },
    {
      "name": "Accounts",
      "description": "Derived example account balances and votes."
    },
    {
      "name": "Migrations",
      "description": "Fictional migration records."
    },
    {
      "name": "Routes",
      "description": "Fictional migration routes."
    }
  ],
  "paths": {
    "/api/v1/health": {
      "get": {
        "operationId": "getHealth",
        "summary": "Check API health",
        "description": "Checks whether the demo API process responds. chainConnected remains false. This is an unwrapped object, not a data envelope. Query parameters are ignored.",
        "tags": [
          "Service"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Successful response containing bundled demo data.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                },
                "description": "Responses are not cached."
              },
              "X-Content-Type-Options": {
                "schema": {
                  "type": "string",
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Health"
                },
                "example": {
                  "chainConnected": false,
                  "mode": "demo",
                  "service": "iceroot-explorer-api",
                  "status": "ok"
                }
              }
            }
          },
          "408": {
            "description": "Request timed out after 10 seconds. This middleware response is not guaranteed to have a JSON body."
          }
        }
      }
    },
    "/healthz": {
      "get": {
        "operationId": "getHealthAlias",
        "summary": "Check API health (alias)",
        "description": "Alias of GET /api/v1/health with the same unwrapped response. Query parameters are ignored.",
        "tags": [
          "Service"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Successful response containing bundled demo data.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                },
                "description": "Responses are not cached."
              },
              "X-Content-Type-Options": {
                "schema": {
                  "type": "string",
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Health"
                },
                "example": {
                  "chainConnected": false,
                  "mode": "demo",
                  "service": "iceroot-explorer-api",
                  "status": "ok"
                }
              }
            }
          },
          "408": {
            "description": "Request timed out after 10 seconds. This middleware response is not guaranteed to have a JSON body."
          }
        }
      }
    },
    "/api/v1/status": {
      "get": {
        "operationId": "getStatus",
        "summary": "Read explorer status",
        "description": "Returns fixture range, round and collection counts. readOnly is true and chainConnected is false. updatedAt is null; the API supplies no chain freshness timestamp. Query parameters are ignored.",
        "tags": [
          "Service"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Successful response containing bundled demo data.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                },
                "description": "Responses are not cached."
              },
              "X-Content-Type-Options": {
                "schema": {
                  "type": "string",
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StatusResponse"
                },
                "example": {
                  "data": {
                    "chainConnected": false,
                    "counts": {
                      "accounts": 71,
                      "assets": 5,
                      "blocks": 15,
                      "migrations": 6,
                      "routes": 3,
                      "transactions": 16,
                      "validators": 62
                    },
                    "firstHeight": 20406,
                    "latestHeight": 20420,
                    "readOnly": true,
                    "round": 386
                  },
                  "meta": {
                    "mode": "demo",
                    "source": "bundled-fixtures",
                    "updatedAt": null
                  }
                }
              }
            }
          },
          "408": {
            "description": "Request timed out after 10 seconds. This middleware response is not guaranteed to have a JSON body."
          }
        }
      }
    },
    "/api/v1/config": {
      "get": {
        "operationId": "getConfig",
        "summary": "Read explorer configuration",
        "description": "Returns bundled presentation configuration. Query parameters are ignored.",
        "tags": [
          "Service"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Successful response containing bundled demo data.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                },
                "description": "Responses are not cached."
              },
              "X-Content-Type-Options": {
                "schema": {
                  "type": "string",
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConfigResponse"
                },
                "example": {
                  "data": {
                    "contact": {
                      "generalEmail": null,
                      "securityEmail": null,
                      "securityPolicyUrl": null
                    },
                    "explorer": {
                      "host": "scan.iceroot.com",
                      "live": false,
                      "url": "https://scan.iceroot.com"
                    },
                    "links": {
                      "documentation": null,
                      "repository": null,
                      "specification": null
                    },
                    "status": {
                      "items": [
                        {
                          "label": "Heartwood Core",
                          "state": "In development"
                        },
                        {
                          "label": "IceRoot Network",
                          "state": "Not launched"
                        },
                        {
                          "label": "ROOT",
                          "state": "Not live"
                        },
                        {
                          "label": "Seedbed",
                          "state": "Local preview"
                        },
                        {
                          "label": "Migration routes",
                          "state": "None live"
                        },
                        {
                          "label": "Post-quantum authentication",
                          "state": "Design target"
                        },
                        {
                          "label": "Audits",
                          "state": "None published"
                        }
                      ],
                      "label": "In development",
                      "summary": "IceRoot is in development. There is no live network, token, or migration service yet. Previews on this site run locally in your browser."
                    }
                  },
                  "meta": {
                    "mode": "demo",
                    "source": "bundled-fixtures",
                    "updatedAt": null
                  }
                }
              }
            }
          },
          "408": {
            "description": "Request timed out after 10 seconds. This middleware response is not guaranteed to have a JSON body."
          }
        }
      }
    },
    "/api/v1/snapshot": {
      "get": {
        "operationId": "getSnapshot",
        "summary": "Read full explorer snapshot",
        "description": "Returns the raw bundled fixture document, presentation configuration and demo metadata. The raw fixture fields differ from the derived collection records. Query parameters are ignored.",
        "tags": [
          "Service"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Successful response containing bundled demo data.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                },
                "description": "Responses are not cached."
              },
              "X-Content-Type-Options": {
                "schema": {
                  "type": "string",
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Snapshot"
                }
              }
            }
          },
          "408": {
            "description": "Request timed out after 10 seconds. This middleware response is not guaranteed to have a JSON body."
          }
        }
      }
    },
    "/api/v1/search": {
      "get": {
        "operationId": "searchResources",
        "summary": "Search explorer records",
        "description": "Searches all seven collections. q is required. Only q, limit and offset are accepted; unknown, malformed or unsupported parameters return 400. Results are ordered alphabetically by collection, then by that collection’s fixture order, with no relevance sorting. Blocks use their height as a string ID; validators use their name.",
        "tags": [
          "Search"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Page size. Defaults to 25.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 25,
              "example": 25
            },
            "example": 25
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Number of matching records to skip. Defaults to 0.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0,
              "example": 0
            },
            "example": 0
          },
          {
            "name": "q",
            "in": "query",
            "required": true,
            "description": "Case-insensitive substring over the record fields id, name, symbol, label, account, from, to, validator, ref and height when present. Leading/trailing whitespace is trimmed for matching. The original value must contain 1–256 UTF-8 bytes, must not be blank after trimming and must contain no control characters. This is not a recursive search of recipients.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 256,
              "example": "EXB"
            },
            "example": "EXB"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response containing bundled demo data.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                },
                "description": "Responses are not cached."
              },
              "X-Content-Type-Options": {
                "schema": {
                  "type": "string",
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SearchHitPage"
                },
                "example": {
                  "data": [
                    {
                      "collection": "assets",
                      "id": "EXAMPLE-ASSET-ID-B7E2-0107",
                      "record": {
                        "decimals": 6,
                        "holders": 2,
                        "id": "EXAMPLE-ASSET-ID-B7E2-0107",
                        "name": "Example Asset B",
                        "origin": "migrated",
                        "policy": "Reserve-backed",
                        "route": "r2",
                        "stage": "rooting",
                        "supply": "20000.000000",
                        "supplyNote": "Issued only against units held in the Route 2 reserve on Example Network B.",
                        "symbol": "EXB",
                        "transactionCount": 3
                      }
                    },
                    {
                      "collection": "assets",
                      "id": "EXAMPLE-ASSET-ID-E9A4-5C18",
                      "record": {
                        "decimals": 6,
                        "holders": 2,
                        "id": "EXAMPLE-ASSET-ID-E9A4-5C18",
                        "name": "Example Asset B",
                        "origin": "created",
                        "policy": "Fixed supply",
                        "stage": "active",
                        "supply": "50000000.000000",
                        "supplyNote": "Set at creation. Not backed by any reserve and not connected to Route 2.",
                        "symbol": "EXB",
                        "transactionCount": 2
                      }
                    }
                  ],
                  "pagination": {
                    "limit": 2,
                    "offset": 0,
                    "total": 2,
                    "hasMore": false
                  },
                  "meta": {
                    "mode": "demo",
                    "source": "bundled-fixtures",
                    "updatedAt": null
                  }
                }
              }
            }
          },
          "400": {
            "description": "Malformed query parameters",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "invalid_request",
                    "message": "Malformed query parameters"
                  },
                  "meta": {
                    "mode": "demo"
                  }
                }
              }
            }
          },
          "408": {
            "description": "Request timed out after 10 seconds. This middleware response is not guaranteed to have a JSON body."
          }
        }
      }
    },
    "/api/v1/blocks": {
      "get": {
        "operationId": "listBlocks",
        "summary": "List blocks",
        "description": "Returns matching demo blocks. Newest block first. Missed validator slots do not create blocks. Filters are combined with AND. Only the listed parameters are accepted; unknown, malformed or unsupported parameters return 400. No sort parameter is supported. Pagination total is the count after filtering; an offset beyond the result set returns an empty data array.",
        "tags": [
          "Blocks"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Page size. Defaults to 25.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 25,
              "example": 25
            },
            "example": 25
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Number of matching records to skip. Defaults to 0.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0,
              "example": 0
            },
            "example": 0
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Case-insensitive substring over the record fields id, name, symbol, label, account, from, to, validator, ref and height when present. Leading/trailing whitespace is trimmed for matching. The original value must contain 1–256 UTF-8 bytes, must not be blank after trimming and must contain no control characters. This is not a recursive search of recipients.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 256,
              "example": "20418"
            },
            "example": "20418"
          },
          {
            "name": "validator",
            "in": "query",
            "required": false,
            "description": "Validator name. Exact, case-sensitive match. Must contain 1–200 UTF-8 bytes and no whitespace or control characters. The maxLength below is a character upper bound; the server also enforces the byte limit.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200,
              "example": "ablation"
            },
            "example": "ablation"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response containing bundled demo data.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                },
                "description": "Responses are not cached."
              },
              "X-Content-Type-Options": {
                "schema": {
                  "type": "string",
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BlockPage"
                },
                "example": {
                  "data": [
                    {
                      "height": 20420,
                      "round": 386,
                      "slot": 16,
                      "transactionCount": 0,
                      "transactionIds": [],
                      "validator": "ablation",
                      "validatorAccount": "example-account:ablation-8696"
                    },
                    {
                      "height": 20419,
                      "round": 386,
                      "slot": 15,
                      "transactionCount": 1,
                      "transactionIds": [
                        "EXAMPLE-TX-F7E9-3B15"
                      ],
                      "validator": "rime",
                      "validatorAccount": "example-account:rime-6500"
                    }
                  ],
                  "pagination": {
                    "limit": 2,
                    "offset": 0,
                    "total": 15,
                    "hasMore": true
                  },
                  "meta": {
                    "mode": "demo",
                    "source": "bundled-fixtures",
                    "updatedAt": null
                  }
                }
              }
            }
          },
          "400": {
            "description": "Malformed query parameters",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "invalid_request",
                    "message": "Malformed query parameters"
                  },
                  "meta": {
                    "mode": "demo"
                  }
                }
              }
            }
          },
          "408": {
            "description": "Request timed out after 10 seconds. This middleware response is not guaranteed to have a JSON body."
          }
        }
      }
    },
    "/api/v1/blocks/{id}": {
      "get": {
        "operationId": "getBlock",
        "summary": "Read block",
        "description": "Finds a block by unsigned numeric height. Missing records return 404. Malformed identifiers return 400. Query parameters are ignored.",
        "tags": [
          "Blocks"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Block height parsed as an unsigned 64-bit integer. The decoded path must contain at most 200 UTF-8 bytes.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 18446744073709551615,
              "example": 20420
            },
            "example": 20420
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response containing bundled demo data.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                },
                "description": "Responses are not cached."
              },
              "X-Content-Type-Options": {
                "schema": {
                  "type": "string",
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BlockResponse"
                },
                "example": {
                  "data": {
                    "height": 20420,
                    "round": 386,
                    "slot": 16,
                    "transactionCount": 0,
                    "transactionIds": [],
                    "validator": "ablation",
                    "validatorAccount": "example-account:ablation-8696"
                  },
                  "meta": {
                    "mode": "demo",
                    "source": "bundled-fixtures",
                    "updatedAt": null
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid resource identifier",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "invalid_request",
                    "message": "Invalid resource identifier"
                  },
                  "meta": {
                    "mode": "demo"
                  }
                }
              }
            }
          },
          "404": {
            "description": "No blocks record matches this identifier",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "not_found",
                    "message": "No blocks record matches this identifier"
                  },
                  "meta": {
                    "mode": "demo"
                  }
                }
              }
            }
          },
          "408": {
            "description": "Request timed out after 10 seconds. This middleware response is not guaranteed to have a JSON body."
          }
        }
      }
    },
    "/api/v1/transactions": {
      "get": {
        "operationId": "listTransactions",
        "summary": "List transactions",
        "description": "Returns matching demo transactions. Reverse fixture transaction order (newest first in the bundled fixture). Filters are combined with AND. Only the listed parameters are accepted; unknown, malformed or unsupported parameters return 400. No sort parameter is supported. Pagination total is the count after filtering; an offset beyond the result set returns an empty data array.",
        "tags": [
          "Transactions"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Page size. Defaults to 25.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 25,
              "example": 25
            },
            "example": 25
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Number of matching records to skip. Defaults to 0.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0,
              "example": 0
            },
            "example": 0
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Case-insensitive substring over the record fields id, name, symbol, label, account, from, to, validator, ref and height when present. Leading/trailing whitespace is trimmed for matching. The original value must contain 1–256 UTF-8 bytes, must not be blank after trimming and must contain no control characters. This is not a recursive search of recipients.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 256,
              "example": "Design"
            },
            "example": "Design"
          },
          {
            "name": "asset",
            "in": "query",
            "required": false,
            "description": "Asset ID. Exact, case-sensitive match. Must contain 1–200 UTF-8 bytes and no whitespace or control characters. The maxLength below is a character upper bound; the server also enforces the byte limit.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200,
              "example": "EXAMPLE-ASSET-ID-5D0E-7A31"
            },
            "example": "EXAMPLE-ASSET-ID-5D0E-7A31"
          },
          {
            "name": "account",
            "in": "query",
            "required": false,
            "description": "Matches account, from, to or the account in any recipients tuple. Exact, case-sensitive match. Must contain 1–200 UTF-8 bytes and no whitespace or control characters. The maxLength below is a character upper bound; the server also enforces the byte limit.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200,
              "example": "example-account:ava-0102"
            },
            "example": "example-account:ava-0102"
          },
          {
            "name": "validator",
            "in": "query",
            "required": false,
            "description": "Validator name, normally on a vote transaction. Exact, case-sensitive match. Must contain 1–200 UTF-8 bytes and no whitespace or control characters. The maxLength below is a character upper bound; the server also enforces the byte limit.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200,
              "example": "bergschrund"
            },
            "example": "bergschrund"
          },
          {
            "name": "type",
            "in": "query",
            "required": false,
            "description": "Exact, case-sensitive match. Must contain 1–200 UTF-8 bytes and no whitespace or control characters. The maxLength below is a character upper bound; the server also enforces the byte limit.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200,
              "enum": [
                "create",
                "transfer",
                "multi",
                "migrate-in",
                "migrate-out",
                "vote"
              ],
              "example": "transfer"
            },
            "example": "transfer"
          },
          {
            "name": "block",
            "in": "query",
            "required": false,
            "description": "Unsigned 64-bit block height.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 18446744073709551615,
              "example": 20418
            },
            "example": 20418
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response containing bundled demo data.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                },
                "description": "Responses are not cached."
              },
              "X-Content-Type-Options": {
                "schema": {
                  "type": "string",
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionPage"
                },
                "example": {
                  "data": [
                    {
                      "block": 20419,
                      "from": "example-account:dev-1188",
                      "id": "EXAMPLE-TX-F7E9-3B15",
                      "type": "vote",
                      "validator": "bergschrund"
                    },
                    {
                      "amount": "200.00",
                      "asset": "EXAMPLE-ASSET-ID-5D0E-7A31",
                      "block": 20418,
                      "from": "example-account:ava-0102",
                      "id": "EXAMPLE-TX-B3A5-9D71",
                      "ref": "Design review",
                      "to": "example-account:eli-2051",
                      "type": "transfer"
                    }
                  ],
                  "pagination": {
                    "limit": 2,
                    "offset": 0,
                    "total": 16,
                    "hasMore": true
                  },
                  "meta": {
                    "mode": "demo",
                    "source": "bundled-fixtures",
                    "updatedAt": null
                  }
                }
              }
            }
          },
          "400": {
            "description": "Malformed query parameters",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "invalid_request",
                    "message": "Malformed query parameters"
                  },
                  "meta": {
                    "mode": "demo"
                  }
                }
              }
            }
          },
          "408": {
            "description": "Request timed out after 10 seconds. This middleware response is not guaranteed to have a JSON body."
          }
        }
      }
    },
    "/api/v1/transactions/{id}": {
      "get": {
        "operationId": "getTransaction",
        "summary": "Read transaction",
        "description": "Finds a record by its exact ID. Missing records return 404. Malformed identifiers return 400. Query parameters are ignored.",
        "tags": [
          "Transactions"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Finds a record by its exact ID. The decoded identifier must contain 1–200 UTF-8 bytes and no whitespace or control characters. maxLength is a character upper bound; the byte limit also applies.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200,
              "example": "EXAMPLE-TX-B3A5-9D71"
            },
            "example": "EXAMPLE-TX-B3A5-9D71"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response containing bundled demo data.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                },
                "description": "Responses are not cached."
              },
              "X-Content-Type-Options": {
                "schema": {
                  "type": "string",
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionResponse"
                },
                "example": {
                  "data": {
                    "amount": "200.00",
                    "asset": "EXAMPLE-ASSET-ID-5D0E-7A31",
                    "block": 20418,
                    "from": "example-account:ava-0102",
                    "id": "EXAMPLE-TX-B3A5-9D71",
                    "ref": "Design review",
                    "to": "example-account:eli-2051",
                    "type": "transfer"
                  },
                  "meta": {
                    "mode": "demo",
                    "source": "bundled-fixtures",
                    "updatedAt": null
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid resource identifier",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "invalid_request",
                    "message": "Invalid resource identifier"
                  },
                  "meta": {
                    "mode": "demo"
                  }
                }
              }
            }
          },
          "404": {
            "description": "No transactions record matches this identifier",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "not_found",
                    "message": "No transactions record matches this identifier"
                  },
                  "meta": {
                    "mode": "demo"
                  }
                }
              }
            }
          },
          "408": {
            "description": "Request timed out after 10 seconds. This middleware response is not guaranteed to have a JSON body."
          }
        }
      }
    },
    "/api/v1/validators": {
      "get": {
        "operationId": "listValidators",
        "summary": "List validators",
        "description": "Returns matching demo validators. Bundled validator order. Filters are combined with AND. Only the listed parameters are accepted; unknown, malformed or unsupported parameters return 400. No sort parameter is supported. Pagination total is the count after filtering; an offset beyond the result set returns an empty data array.",
        "tags": [
          "Validators"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Page size. Defaults to 25.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 25,
              "example": 25
            },
            "example": 25
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Number of matching records to skip. Defaults to 0.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0,
              "example": 0
            },
            "example": 0
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Case-insensitive substring over the record fields id, name, symbol, label, account, from, to, validator, ref and height when present. Leading/trailing whitespace is trimmed for matching. The original value must contain 1–256 UTF-8 bytes, must not be blank after trimming and must contain no control characters. This is not a recursive search of recipients.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 256,
              "example": "bergschrund"
            },
            "example": "bergschrund"
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "Exact, case-sensitive match. Must contain 1–200 UTF-8 bytes and no whitespace or control characters. The maxLength below is a character upper bound; the server also enforces the byte limit.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200,
              "enum": [
                "active",
                "standby",
                "resigned"
              ],
              "example": "active"
            },
            "example": "active"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response containing bundled demo data.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                },
                "description": "Responses are not cached."
              },
              "X-Content-Type-Options": {
                "schema": {
                  "type": "string",
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidatorPage"
                },
                "example": {
                  "data": [
                    {
                      "account": "example-account:bergschrund-5275",
                      "missedSlots": [],
                      "name": "bergschrund",
                      "rank": 1,
                      "roundSlot": 38,
                      "status": "active",
                      "validatedBlocks": [],
                      "voters": 1304,
                      "weightBp": 484
                    },
                    {
                      "account": "example-account:kettle-2656",
                      "missedSlots": [],
                      "name": "kettle",
                      "rank": 2,
                      "roundSlot": 36,
                      "status": "active",
                      "validatedBlocks": [],
                      "voters": 1133,
                      "weightBp": 382
                    }
                  ],
                  "pagination": {
                    "limit": 2,
                    "offset": 0,
                    "total": 62,
                    "hasMore": true
                  },
                  "meta": {
                    "mode": "demo",
                    "source": "bundled-fixtures",
                    "updatedAt": null
                  }
                }
              }
            }
          },
          "400": {
            "description": "Malformed query parameters",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "invalid_request",
                    "message": "Malformed query parameters"
                  },
                  "meta": {
                    "mode": "demo"
                  }
                }
              }
            }
          },
          "408": {
            "description": "Request timed out after 10 seconds. This middleware response is not guaranteed to have a JSON body."
          }
        }
      }
    },
    "/api/v1/validators/{id}": {
      "get": {
        "operationId": "getValidator",
        "summary": "Read validator",
        "description": "Finds a validator by name or example account reference; public keys are not lookup identifiers. Missing records return 404. Malformed identifiers return 400. Query parameters are ignored.",
        "tags": [
          "Validators"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Finds a validator by name or example account reference; public keys are not lookup identifiers. The decoded identifier must contain 1–200 UTF-8 bytes and no whitespace or control characters. maxLength is a character upper bound; the byte limit also applies.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200,
              "example": "bergschrund"
            },
            "example": "bergschrund"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response containing bundled demo data.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                },
                "description": "Responses are not cached."
              },
              "X-Content-Type-Options": {
                "schema": {
                  "type": "string",
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidatorResponse"
                },
                "example": {
                  "data": {
                    "account": "example-account:bergschrund-5275",
                    "missedSlots": [],
                    "name": "bergschrund",
                    "rank": 1,
                    "roundSlot": 38,
                    "status": "active",
                    "validatedBlocks": [],
                    "voters": 1304,
                    "weightBp": 484
                  },
                  "meta": {
                    "mode": "demo",
                    "source": "bundled-fixtures",
                    "updatedAt": null
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid resource identifier",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "invalid_request",
                    "message": "Invalid resource identifier"
                  },
                  "meta": {
                    "mode": "demo"
                  }
                }
              }
            }
          },
          "404": {
            "description": "No validators record matches this identifier",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "not_found",
                    "message": "No validators record matches this identifier"
                  },
                  "meta": {
                    "mode": "demo"
                  }
                }
              }
            }
          },
          "408": {
            "description": "Request timed out after 10 seconds. This middleware response is not guaranteed to have a JSON body."
          }
        }
      }
    },
    "/api/v1/assets": {
      "get": {
        "operationId": "listAssets",
        "summary": "List assets",
        "description": "Returns matching demo assets. Bundled asset order. Filters are combined with AND. Only the listed parameters are accepted; unknown, malformed or unsupported parameters return 400. No sort parameter is supported. Pagination total is the count after filtering; an offset beyond the result set returns an empty data array.",
        "tags": [
          "Assets"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Page size. Defaults to 25.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 25,
              "example": 25
            },
            "example": 25
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Number of matching records to skip. Defaults to 0.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0,
              "example": 0
            },
            "example": 0
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Case-insensitive substring over the record fields id, name, symbol, label, account, from, to, validator, ref and height when present. Leading/trailing whitespace is trimmed for matching. The original value must contain 1–256 UTF-8 bytes, must not be blank after trimming and must contain no control characters. This is not a recursive search of recipients.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 256,
              "example": "EXB"
            },
            "example": "EXB"
          },
          {
            "name": "origin",
            "in": "query",
            "required": false,
            "description": "Exact, case-sensitive match. Must contain 1–200 UTF-8 bytes and no whitespace or control characters. The maxLength below is a character upper bound; the server also enforces the byte limit.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200,
              "enum": [
                "created",
                "migrated"
              ],
              "example": "migrated"
            },
            "example": "migrated"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response containing bundled demo data.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                },
                "description": "Responses are not cached."
              },
              "X-Content-Type-Options": {
                "schema": {
                  "type": "string",
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetPage"
                },
                "example": {
                  "data": [
                    {
                      "decimals": 8,
                      "holders": 2,
                      "id": "EXAMPLE-ASSET-ID-A1C9-0042",
                      "name": "Example Asset A",
                      "origin": "migrated",
                      "policy": "Migration-backed",
                      "route": "r1",
                      "stage": "active",
                      "supply": "1200.00000000",
                      "supplyNote": "Issued only against units retired on Example Network A.",
                      "symbol": "EXA",
                      "transactionCount": 2
                    },
                    {
                      "decimals": 6,
                      "holders": 2,
                      "id": "EXAMPLE-ASSET-ID-B7E2-0107",
                      "name": "Example Asset B",
                      "origin": "migrated",
                      "policy": "Reserve-backed",
                      "route": "r2",
                      "stage": "rooting",
                      "supply": "20000.000000",
                      "supplyNote": "Issued only against units held in the Route 2 reserve on Example Network B.",
                      "symbol": "EXB",
                      "transactionCount": 3
                    }
                  ],
                  "pagination": {
                    "limit": 2,
                    "offset": 0,
                    "total": 5,
                    "hasMore": true
                  },
                  "meta": {
                    "mode": "demo",
                    "source": "bundled-fixtures",
                    "updatedAt": null
                  }
                }
              }
            }
          },
          "400": {
            "description": "Malformed query parameters",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "invalid_request",
                    "message": "Malformed query parameters"
                  },
                  "meta": {
                    "mode": "demo"
                  }
                }
              }
            }
          },
          "408": {
            "description": "Request timed out after 10 seconds. This middleware response is not guaranteed to have a JSON body."
          }
        }
      }
    },
    "/api/v1/assets/{id}": {
      "get": {
        "operationId": "getAsset",
        "summary": "Read asset",
        "description": "Finds a record by its exact ID. Missing records return 404. Malformed identifiers return 400. Query parameters are ignored.",
        "tags": [
          "Assets"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Finds a record by its exact ID. The decoded identifier must contain 1–200 UTF-8 bytes and no whitespace or control characters. maxLength is a character upper bound; the byte limit also applies.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200,
              "example": "EXAMPLE-ASSET-ID-A1C9-0042"
            },
            "example": "EXAMPLE-ASSET-ID-A1C9-0042"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response containing bundled demo data.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                },
                "description": "Responses are not cached."
              },
              "X-Content-Type-Options": {
                "schema": {
                  "type": "string",
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetResponse"
                },
                "example": {
                  "data": {
                    "decimals": 8,
                    "holders": 2,
                    "id": "EXAMPLE-ASSET-ID-A1C9-0042",
                    "name": "Example Asset A",
                    "origin": "migrated",
                    "policy": "Migration-backed",
                    "route": "r1",
                    "stage": "active",
                    "supply": "1200.00000000",
                    "supplyNote": "Issued only against units retired on Example Network A.",
                    "symbol": "EXA",
                    "transactionCount": 2
                  },
                  "meta": {
                    "mode": "demo",
                    "source": "bundled-fixtures",
                    "updatedAt": null
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid resource identifier",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "invalid_request",
                    "message": "Invalid resource identifier"
                  },
                  "meta": {
                    "mode": "demo"
                  }
                }
              }
            }
          },
          "404": {
            "description": "No assets record matches this identifier",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "not_found",
                    "message": "No assets record matches this identifier"
                  },
                  "meta": {
                    "mode": "demo"
                  }
                }
              }
            }
          },
          "408": {
            "description": "Request timed out after 10 seconds. This middleware response is not guaranteed to have a JSON body."
          }
        }
      }
    },
    "/api/v1/accounts": {
      "get": {
        "operationId": "listAccounts",
        "summary": "List accounts",
        "description": "Returns matching demo accounts. Lexicographic order by example account ID. Filters are combined with AND. Only the listed parameters are accepted; unknown, malformed or unsupported parameters return 400. No sort parameter is supported. Pagination total is the count after filtering; an offset beyond the result set returns an empty data array.",
        "tags": [
          "Accounts"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Page size. Defaults to 25.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 25,
              "example": 25
            },
            "example": 25
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Number of matching records to skip. Defaults to 0.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0,
              "example": 0
            },
            "example": 0
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Case-insensitive substring over the record fields id, name, symbol, label, account, from, to, validator, ref and height when present. Leading/trailing whitespace is trimmed for matching. The original value must contain 1–256 UTF-8 bytes, must not be blank after trimming and must contain no control characters. This is not a recursive search of recipients.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 256,
              "example": "ava"
            },
            "example": "ava"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response containing bundled demo data.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                },
                "description": "Responses are not cached."
              },
              "X-Content-Type-Options": {
                "schema": {
                  "type": "string",
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountPage"
                },
                "example": {
                  "data": [
                    {
                      "balances": [],
                      "id": "example-account:ablation-8696",
                      "label": null,
                      "transactionCount": 0,
                      "validator": "ablation",
                      "vote": null
                    },
                    {
                      "balances": [],
                      "id": "example-account:alpenglow-9812",
                      "label": null,
                      "transactionCount": 0,
                      "validator": "alpenglow",
                      "vote": null
                    }
                  ],
                  "pagination": {
                    "limit": 2,
                    "offset": 0,
                    "total": 71,
                    "hasMore": true
                  },
                  "meta": {
                    "mode": "demo",
                    "source": "bundled-fixtures",
                    "updatedAt": null
                  }
                }
              }
            }
          },
          "400": {
            "description": "Malformed query parameters",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "invalid_request",
                    "message": "Malformed query parameters"
                  },
                  "meta": {
                    "mode": "demo"
                  }
                }
              }
            }
          },
          "408": {
            "description": "Request timed out after 10 seconds. This middleware response is not guaranteed to have a JSON body."
          }
        }
      }
    },
    "/api/v1/accounts/{id}": {
      "get": {
        "operationId": "getAccount",
        "summary": "Read account",
        "description": "Finds a record by its exact ID. Missing records return 404. Malformed identifiers return 400. Query parameters are ignored.",
        "tags": [
          "Accounts"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Finds a record by its exact ID. The decoded identifier must contain 1–200 UTF-8 bytes and no whitespace or control characters. maxLength is a character upper bound; the byte limit also applies.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200,
              "example": "example-account:ava-0102"
            },
            "example": "example-account:ava-0102"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response containing bundled demo data.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                },
                "description": "Responses are not cached."
              },
              "X-Content-Type-Options": {
                "schema": {
                  "type": "string",
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountResponse"
                },
                "example": {
                  "data": {
                    "balances": [
                      {
                        "assetId": "EXAMPLE-ASSET-ID-5D0E-7A31",
                        "balance": "1300.00",
                        "symbol": "DEMO"
                      },
                      {
                        "assetId": "EXAMPLE-ASSET-ID-A1C9-0042",
                        "balance": "1050.00000000",
                        "symbol": "EXA"
                      }
                    ],
                    "id": "example-account:ava-0102",
                    "label": null,
                    "transactionCount": 5,
                    "validator": null,
                    "vote": "lichen"
                  },
                  "meta": {
                    "mode": "demo",
                    "source": "bundled-fixtures",
                    "updatedAt": null
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid resource identifier",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "invalid_request",
                    "message": "Invalid resource identifier"
                  },
                  "meta": {
                    "mode": "demo"
                  }
                }
              }
            }
          },
          "404": {
            "description": "No accounts record matches this identifier",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "not_found",
                    "message": "No accounts record matches this identifier"
                  },
                  "meta": {
                    "mode": "demo"
                  }
                }
              }
            }
          },
          "408": {
            "description": "Request timed out after 10 seconds. This middleware response is not guaranteed to have a JSON body."
          }
        }
      }
    },
    "/api/v1/migrations": {
      "get": {
        "operationId": "listMigrations",
        "summary": "List migrations",
        "description": "Returns matching demo migrations. Bundled migration order. Filters are combined with AND. Only the listed parameters are accepted; unknown, malformed or unsupported parameters return 400. No sort parameter is supported. Pagination total is the count after filtering; an offset beyond the result set returns an empty data array.",
        "tags": [
          "Migrations"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Page size. Defaults to 25.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 25,
              "example": 25
            },
            "example": 25
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Number of matching records to skip. Defaults to 0.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0,
              "example": 0
            },
            "example": 0
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Case-insensitive substring over the record fields id, name, symbol, label, account, from, to, validator, ref and height when present. Leading/trailing whitespace is trimmed for matching. The original value must contain 1–256 UTF-8 bytes, must not be blank after trimming and must contain no control characters. This is not a recursive search of recipients.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 256,
              "example": "EXAMPLE-MIG"
            },
            "example": "EXAMPLE-MIG"
          },
          {
            "name": "asset",
            "in": "query",
            "required": false,
            "description": "Asset ID. Exact, case-sensitive match. Must contain 1–200 UTF-8 bytes and no whitespace or control characters. The maxLength below is a character upper bound; the server also enforces the byte limit.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200,
              "example": "EXAMPLE-ASSET-ID-A1C9-0042"
            },
            "example": "EXAMPLE-ASSET-ID-A1C9-0042"
          },
          {
            "name": "account",
            "in": "query",
            "required": false,
            "description": "Matches account, from, to or the account in any recipients tuple. Exact, case-sensitive match. Must contain 1–200 UTF-8 bytes and no whitespace or control characters. The maxLength below is a character upper bound; the server also enforces the byte limit.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200,
              "example": "example-account:ava-0102"
            },
            "example": "example-account:ava-0102"
          },
          {
            "name": "direction",
            "in": "query",
            "required": false,
            "description": "Exact, case-sensitive match. Must contain 1–200 UTF-8 bytes and no whitespace or control characters. The maxLength below is a character upper bound; the server also enforces the byte limit.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200,
              "enum": [
                "in",
                "out"
              ],
              "example": "in"
            },
            "example": "in"
          },
          {
            "name": "route",
            "in": "query",
            "required": false,
            "description": "Route ID. Exact, case-sensitive match. Must contain 1–200 UTF-8 bytes and no whitespace or control characters. The maxLength below is a character upper bound; the server also enforces the byte limit.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200,
              "example": "r1"
            },
            "example": "r1"
          },
          {
            "name": "state",
            "in": "query",
            "required": false,
            "description": "Fixture state index: 0 Requested; 1 Awaiting verification; 2 Finalised on IceRoot; 3 Destination pending.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 3,
              "example": 2
            },
            "example": 2
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response containing bundled demo data.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                },
                "description": "Responses are not cached."
              },
              "X-Content-Type-Options": {
                "schema": {
                  "type": "string",
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MigrationPage"
                },
                "example": {
                  "data": [
                    {
                      "account": "example-account:ava-0102",
                      "amount": "1200.00000000",
                      "asset": "EXAMPLE-ASSET-ID-A1C9-0042",
                      "direction": "in",
                      "id": "EXAMPLE-MIG-0001",
                      "route": "r1",
                      "sourceEvent": "example-event:network-a/retirement-00917",
                      "state": 2,
                      "tx": "EXAMPLE-TX-3D08-B614"
                    },
                    {
                      "account": "example-account:foundation-0002",
                      "amount": "25000.000000",
                      "asset": "EXAMPLE-ASSET-ID-B7E2-0107",
                      "direction": "in",
                      "id": "EXAMPLE-MIG-0002",
                      "route": "r2",
                      "sourceEvent": "example-event:network-b/reserve-deposit-04410",
                      "state": 2,
                      "tx": "EXAMPLE-TX-4E6F-2A93"
                    }
                  ],
                  "pagination": {
                    "limit": 2,
                    "offset": 0,
                    "total": 6,
                    "hasMore": true
                  },
                  "meta": {
                    "mode": "demo",
                    "source": "bundled-fixtures",
                    "updatedAt": null
                  }
                }
              }
            }
          },
          "400": {
            "description": "Malformed query parameters",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "invalid_request",
                    "message": "Malformed query parameters"
                  },
                  "meta": {
                    "mode": "demo"
                  }
                }
              }
            }
          },
          "408": {
            "description": "Request timed out after 10 seconds. This middleware response is not guaranteed to have a JSON body."
          }
        }
      }
    },
    "/api/v1/migrations/{id}": {
      "get": {
        "operationId": "getMigration",
        "summary": "Read migration",
        "description": "Finds a record by its exact ID. Missing records return 404. Malformed identifiers return 400. Query parameters are ignored.",
        "tags": [
          "Migrations"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Finds a record by its exact ID. The decoded identifier must contain 1–200 UTF-8 bytes and no whitespace or control characters. maxLength is a character upper bound; the byte limit also applies.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200,
              "example": "EXAMPLE-MIG-0001"
            },
            "example": "EXAMPLE-MIG-0001"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response containing bundled demo data.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                },
                "description": "Responses are not cached."
              },
              "X-Content-Type-Options": {
                "schema": {
                  "type": "string",
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MigrationResponse"
                },
                "example": {
                  "data": {
                    "account": "example-account:ava-0102",
                    "amount": "1200.00000000",
                    "asset": "EXAMPLE-ASSET-ID-A1C9-0042",
                    "direction": "in",
                    "id": "EXAMPLE-MIG-0001",
                    "route": "r1",
                    "sourceEvent": "example-event:network-a/retirement-00917",
                    "state": 2,
                    "tx": "EXAMPLE-TX-3D08-B614"
                  },
                  "meta": {
                    "mode": "demo",
                    "source": "bundled-fixtures",
                    "updatedAt": null
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid resource identifier",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "invalid_request",
                    "message": "Invalid resource identifier"
                  },
                  "meta": {
                    "mode": "demo"
                  }
                }
              }
            }
          },
          "404": {
            "description": "No migrations record matches this identifier",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "not_found",
                    "message": "No migrations record matches this identifier"
                  },
                  "meta": {
                    "mode": "demo"
                  }
                }
              }
            }
          },
          "408": {
            "description": "Request timed out after 10 seconds. This middleware response is not guaranteed to have a JSON body."
          }
        }
      }
    },
    "/api/v1/routes": {
      "get": {
        "operationId": "listRoutes",
        "summary": "List routes",
        "description": "Returns matching demo routes. Bundled route order. Filters are combined with AND. Only the listed parameters are accepted; unknown, malformed or unsupported parameters return 400. No sort parameter is supported. Pagination total is the count after filtering; an offset beyond the result set returns an empty data array.",
        "tags": [
          "Routes"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Page size. Defaults to 25.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 25,
              "example": 25
            },
            "example": 25
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Number of matching records to skip. Defaults to 0.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0,
              "example": 0
            },
            "example": 0
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Case-insensitive substring over the record fields id, name, symbol, label, account, from, to, validator, ref and height when present. Leading/trailing whitespace is trimmed for matching. The original value must contain 1–256 UTF-8 bytes, must not be blank after trimming and must contain no control characters. This is not a recursive search of recipients.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 256,
              "example": "r1"
            },
            "example": "r1"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response containing bundled demo data.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                },
                "description": "Responses are not cached."
              },
              "X-Content-Type-Options": {
                "schema": {
                  "type": "string",
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RoutePage"
                },
                "example": {
                  "data": [
                    {
                      "asset": "Example Asset A · EXA",
                      "assetId": "EXAMPLE-ASSET-ID-A1C9-0042",
                      "destination": "IceRoot Network",
                      "finality": "The retirement must be final under Example Network A’s own consensus, plus a declared confirmation policy.",
                      "id": "r1",
                      "inbound": "Enabled",
                      "issuance": "One migration record per verified retirement event. A retired unit cannot be issued twice.",
                      "method": "Coordinated protocol migration",
                      "outbound": "Not enabled",
                      "reserve": "None. Units are retired on the source network rather than held.",
                      "short": "Route 1",
                      "source": "Example Network A (fictional)",
                      "updates": "A published route revision under the route’s declared rules. A revision can change future verification parameters; it cannot rewrite recorded migrations.",
                      "verifier": "IceRoot validators check a retirement proof defined in both networks’ published migration rules."
                    },
                    {
                      "asset": "Example Asset B · EXB (IceRoot representation)",
                      "assetId": "EXAMPLE-ASSET-ID-B7E2-0107",
                      "destination": "IceRoot Network",
                      "finality": "A declared confirmation depth on Example Network B. Deep reorganisations remain a source-chain risk.",
                      "id": "r2",
                      "inbound": "Enabled",
                      "issuance": "Verified reserve deposits, one-for-one, under the route’s declared rules.",
                      "method": "Reserve-backed transfer",
                      "outbound": "Enabled",
                      "reserve": "Yes. Units stay in a reserve on Example Network B, controlled by an example 3-of-5 multisignature policy. The representation depends on that reserve.",
                      "short": "Route 2",
                      "source": "Example Network B (fictional)",
                      "updates": "Reserve signers and route governance, as declared. An update could change who controls the reserve, so it must be disclosed before it applies.",
                      "verifier": "A connector process observes deposits into the declared reserve and submits evidence to IceRoot."
                    }
                  ],
                  "pagination": {
                    "limit": 2,
                    "offset": 0,
                    "total": 3,
                    "hasMore": true
                  },
                  "meta": {
                    "mode": "demo",
                    "source": "bundled-fixtures",
                    "updatedAt": null
                  }
                }
              }
            }
          },
          "400": {
            "description": "Malformed query parameters",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "invalid_request",
                    "message": "Malformed query parameters"
                  },
                  "meta": {
                    "mode": "demo"
                  }
                }
              }
            }
          },
          "408": {
            "description": "Request timed out after 10 seconds. This middleware response is not guaranteed to have a JSON body."
          }
        }
      }
    },
    "/api/v1/routes/{id}": {
      "get": {
        "operationId": "getRoute",
        "summary": "Read route",
        "description": "Finds a record by its exact ID. Missing records return 404. Malformed identifiers return 400. Query parameters are ignored.",
        "tags": [
          "Routes"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Finds a record by its exact ID. The decoded identifier must contain 1–200 UTF-8 bytes and no whitespace or control characters. maxLength is a character upper bound; the byte limit also applies.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200,
              "example": "r1"
            },
            "example": "r1"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response containing bundled demo data.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                },
                "description": "Responses are not cached."
              },
              "X-Content-Type-Options": {
                "schema": {
                  "type": "string",
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RouteResponse"
                },
                "example": {
                  "data": {
                    "asset": "Example Asset A · EXA",
                    "assetId": "EXAMPLE-ASSET-ID-A1C9-0042",
                    "destination": "IceRoot Network",
                    "finality": "The retirement must be final under Example Network A’s own consensus, plus a declared confirmation policy.",
                    "id": "r1",
                    "inbound": "Enabled",
                    "issuance": "One migration record per verified retirement event. A retired unit cannot be issued twice.",
                    "method": "Coordinated protocol migration",
                    "outbound": "Not enabled",
                    "reserve": "None. Units are retired on the source network rather than held.",
                    "short": "Route 1",
                    "source": "Example Network A (fictional)",
                    "updates": "A published route revision under the route’s declared rules. A revision can change future verification parameters; it cannot rewrite recorded migrations.",
                    "verifier": "IceRoot validators check a retirement proof defined in both networks’ published migration rules."
                  },
                  "meta": {
                    "mode": "demo",
                    "source": "bundled-fixtures",
                    "updatedAt": null
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid resource identifier",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "invalid_request",
                    "message": "Invalid resource identifier"
                  },
                  "meta": {
                    "mode": "demo"
                  }
                }
              }
            }
          },
          "404": {
            "description": "No routes record matches this identifier",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "not_found",
                    "message": "No routes record matches this identifier"
                  },
                  "meta": {
                    "mode": "demo"
                  }
                }
              }
            }
          },
          "408": {
            "description": "Request timed out after 10 seconds. This middleware response is not guaranteed to have a JSON body."
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Meta": {
        "type": "object",
        "properties": {
          "mode": {
            "type": "string",
            "const": "demo"
          },
          "source": {
            "type": "string",
            "const": "bundled-fixtures"
          },
          "updatedAt": {
            "type": "null",
            "description": "No chain timestamp is available for bundled fixtures."
          }
        },
        "required": [
          "mode",
          "source",
          "updatedAt"
        ],
        "description": "Every ordinary success is explicitly marked as deterministic demo data. This metadata is not live chain status."
      },
      "Pagination": {
        "type": "object",
        "properties": {
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100
          },
          "offset": {
            "type": "integer",
            "minimum": 0,
            "maximum": 1000000
          },
          "total": {
            "type": "integer",
            "minimum": 0,
            "description": "Number of matching records before pagination."
          },
          "hasMore": {
            "type": "boolean"
          }
        },
        "required": [
          "limit",
          "offset",
          "total",
          "hasMore"
        ]
      },
      "Error": {
        "type": "object",
        "properties": {
          "error": {
            "type": "object",
            "properties": {
              "code": {
                "type": "string",
                "enum": [
                  "invalid_request",
                  "not_found",
                  "method_not_allowed"
                ]
              },
              "message": {
                "type": "string"
              }
            },
            "required": [
              "code",
              "message"
            ]
          },
          "meta": {
            "type": "object",
            "properties": {
              "mode": {
                "type": "string",
                "const": "demo"
              }
            },
            "required": [
              "mode"
            ]
          }
        },
        "required": [
          "error",
          "meta"
        ],
        "description": "Application errors contain only meta.mode. Middleware timeouts are not guaranteed to use this JSON envelope."
      },
      "Health": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "const": "ok"
          },
          "service": {
            "type": "string",
            "const": "iceroot-explorer-api"
          },
          "mode": {
            "type": "string",
            "const": "demo"
          },
          "chainConnected": {
            "type": "boolean",
            "const": false
          }
        },
        "required": [
          "status",
          "service",
          "mode",
          "chainConnected"
        ],
        "description": "Process health only. The service is not connected to a live blockchain. This response is not wrapped in a data envelope."
      },
      "Status": {
        "type": "object",
        "properties": {
          "chainConnected": {
            "type": "boolean",
            "const": false
          },
          "readOnly": {
            "type": "boolean",
            "const": true
          },
          "firstHeight": {
            "type": "integer",
            "minimum": 0
          },
          "latestHeight": {
            "type": "integer",
            "minimum": 0
          },
          "round": {
            "type": "integer",
            "minimum": 0
          },
          "counts": {
            "type": "object",
            "properties": {
              "blocks": {
                "type": "integer",
                "minimum": 0
              },
              "transactions": {
                "type": "integer",
                "minimum": 0
              },
              "validators": {
                "type": "integer",
                "minimum": 0
              },
              "assets": {
                "type": "integer",
                "minimum": 0
              },
              "accounts": {
                "type": "integer",
                "minimum": 0
              },
              "migrations": {
                "type": "integer",
                "minimum": 0
              },
              "routes": {
                "type": "integer",
                "minimum": 0
              }
            },
            "required": [
              "blocks",
              "transactions",
              "validators",
              "assets",
              "accounts",
              "migrations",
              "routes"
            ]
          }
        },
        "required": [
          "chainConnected",
          "readOnly",
          "firstHeight",
          "latestHeight",
          "round",
          "counts"
        ]
      },
      "DecimalAmount": {
        "type": "string",
        "pattern": "^\\d+(\\.\\d+)?$",
        "description": "Exact nonnegative decimal amount. Preserve as a string; do not parse as a floating-point number. Precision depends on the asset.",
        "examples": [
          "1200.00000000"
        ]
      },
      "Block": {
        "type": "object",
        "properties": {
          "height": {
            "type": "integer",
            "minimum": 0
          },
          "round": {
            "type": "integer",
            "minimum": 0
          },
          "slot": {
            "type": "integer",
            "minimum": 0,
            "description": "One-based fixture slot; missed slots do not create blocks."
          },
          "validator": {
            "type": "string",
            "description": "Validator name."
          },
          "validatorAccount": {
            "type": "string",
            "description": "Example account reference."
          },
          "transactionCount": {
            "type": "integer",
            "minimum": 0
          },
          "transactionIds": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "height",
          "round",
          "slot",
          "validator",
          "validatorAccount",
          "transactionCount",
          "transactionIds"
        ]
      },
      "Recipient": {
        "type": "array",
        "prefixItems": [
          {
            "type": "string",
            "description": "Recipient example account reference."
          },
          {
            "$ref": "#/components/schemas/DecimalAmount"
          },
          {
            "type": "string",
            "description": "Reference text; may be empty."
          }
        ],
        "items": false,
        "minItems": 3,
        "maxItems": 3,
        "description": "Tuple [account, amount, reference], not an object."
      },
      "Transaction": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "block": {
            "type": "integer",
            "minimum": 0
          },
          "type": {
            "type": "string",
            "enum": [
              "create",
              "transfer",
              "multi",
              "migrate-in",
              "migrate-out",
              "vote"
            ]
          },
          "asset": {
            "type": "string",
            "description": "Asset ID. Not included on vote transactions."
          },
          "amount": {
            "$ref": "#/components/schemas/DecimalAmount"
          },
          "from": {
            "type": "string",
            "description": "Sender or creation account reference."
          },
          "to": {
            "type": "string",
            "description": "Recipient account reference."
          },
          "recipients": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Recipient"
            }
          },
          "validator": {
            "type": "string",
            "description": "Validator name on a vote transaction."
          },
          "previous": {
            "type": "string",
            "description": "Previous validator name when the fixture records a changed vote."
          },
          "migration": {
            "type": "string",
            "description": "Related migration record ID."
          },
          "ref": {
            "type": "string",
            "description": "Reference text; may be empty."
          }
        },
        "required": [
          "id",
          "block",
          "type"
        ],
        "description": "Raw fixture transaction. Fields vary by transaction type; there is no signing or broadcast endpoint.",
        "allOf": [
          {
            "if": {
              "properties": {
                "type": {
                  "const": "create"
                }
              }
            },
            "then": {
              "required": [
                "asset",
                "from",
                "amount"
              ]
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "transfer"
                }
              }
            },
            "then": {
              "required": [
                "asset",
                "from",
                "to",
                "amount"
              ]
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "multi"
                }
              }
            },
            "then": {
              "required": [
                "asset",
                "from",
                "recipients"
              ]
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "migrate-in"
                }
              }
            },
            "then": {
              "required": [
                "asset",
                "to",
                "amount"
              ]
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "migrate-out"
                }
              }
            },
            "then": {
              "required": [
                "asset",
                "from",
                "amount"
              ]
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "vote"
                }
              }
            },
            "then": {
              "required": [
                "from",
                "validator"
              ]
            }
          }
        ]
      },
      "Validator": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "account": {
            "type": "string",
            "description": "Example account reference."
          },
          "rank": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0
          },
          "status": {
            "type": "string",
            "enum": [
              "active",
              "standby",
              "resigned"
            ]
          },
          "weightBp": {
            "type": "integer",
            "minimum": 0,
            "description": "Fixture voting weight in basis points."
          },
          "voters": {
            "type": "integer",
            "minimum": 0
          },
          "validatedBlocks": {
            "type": "array",
            "items": {
              "type": "integer",
              "minimum": 0
            }
          },
          "missedSlots": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "round": {
                  "type": "integer",
                  "minimum": 0
                },
                "slot": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "required": [
                "round",
                "slot"
              ]
            }
          },
          "roundSlot": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 1,
            "description": "One-based position in the current fixture round, or null when absent from its order."
          }
        },
        "required": [
          "name",
          "account",
          "rank",
          "status",
          "weightBp",
          "voters",
          "validatedBlocks",
          "missedSlots",
          "roundSlot"
        ]
      },
      "Asset": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "symbol": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "decimals": {
            "type": "integer",
            "minimum": 0,
            "maximum": 18
          },
          "origin": {
            "type": "string",
            "enum": [
              "created",
              "migrated"
            ]
          },
          "route": {
            "type": "string",
            "description": "Related migration route ID, when present."
          },
          "stage": {
            "type": "string",
            "description": "Fixture presentation stage."
          },
          "policy": {
            "type": "string"
          },
          "supplyNote": {
            "type": "string"
          },
          "supply": {
            "$ref": "#/components/schemas/DecimalAmount"
          },
          "holders": {
            "type": "integer",
            "minimum": 0
          },
          "transactionCount": {
            "type": "integer",
            "minimum": 0
          }
        },
        "required": [
          "id",
          "symbol",
          "name",
          "decimals",
          "origin",
          "stage",
          "policy",
          "supplyNote",
          "supply",
          "holders",
          "transactionCount"
        ]
      },
      "Balance": {
        "type": "object",
        "properties": {
          "assetId": {
            "type": "string"
          },
          "symbol": {
            "type": "string"
          },
          "balance": {
            "$ref": "#/components/schemas/DecimalAmount"
          }
        },
        "required": [
          "assetId",
          "symbol",
          "balance"
        ]
      },
      "Account": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "An example-account reference, not a chain address."
          },
          "label": {
            "type": [
              "string",
              "null"
            ]
          },
          "balances": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Balance"
            }
          },
          "vote": {
            "type": [
              "string",
              "null"
            ],
            "description": "Current fixture validator vote, or null."
          },
          "validator": {
            "type": [
              "string",
              "null"
            ],
            "description": "Validator name belonging to this fixture account, or null."
          },
          "transactionCount": {
            "type": "integer",
            "minimum": 0
          }
        },
        "required": [
          "id",
          "label",
          "balances",
          "vote",
          "validator",
          "transactionCount"
        ],
        "description": "Derived by replaying fixture transactions using exact minor-unit arithmetic. Only positive balances are included."
      },
      "Migration": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "route": {
            "type": "string"
          },
          "direction": {
            "type": "string",
            "enum": [
              "in",
              "out"
            ]
          },
          "asset": {
            "type": "string"
          },
          "amount": {
            "$ref": "#/components/schemas/DecimalAmount"
          },
          "account": {
            "type": "string"
          },
          "state": {
            "type": "integer",
            "minimum": 0,
            "maximum": 3,
            "description": "Fixture state index: 0 Requested; 1 Awaiting verification; 2 Finalised on IceRoot; 3 Destination pending."
          },
          "tx": {
            "type": "string",
            "description": "Recorded transaction ID, when present."
          },
          "sourceEvent": {
            "type": "string",
            "description": "Fictional source event reference, when present."
          },
          "attestations": {
            "type": "string",
            "description": "Display text for fixture attestations, when present."
          }
        },
        "required": [
          "id",
          "route",
          "direction",
          "asset",
          "amount",
          "account",
          "state"
        ]
      },
      "Route": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "short": {
            "type": "string"
          },
          "method": {
            "type": "string"
          },
          "source": {
            "type": "string"
          },
          "destination": {
            "type": "string"
          },
          "asset": {
            "type": "string"
          },
          "assetId": {
            "type": "string"
          },
          "verifier": {
            "type": "string"
          },
          "finality": {
            "type": "string"
          },
          "issuance": {
            "type": "string"
          },
          "reserve": {
            "type": "string"
          },
          "inbound": {
            "type": "string"
          },
          "outbound": {
            "type": "string"
          },
          "updates": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "short",
          "method",
          "source",
          "destination",
          "asset",
          "assetId",
          "verifier",
          "finality",
          "issuance",
          "reserve",
          "inbound",
          "outbound",
          "updates"
        ],
        "description": "Fictional migration route. Enabled/Not enabled values describe the example scenario, not a live service."
      },
      "Config": {
        "type": "object",
        "properties": {
          "contact": {
            "type": "object",
            "properties": {
              "generalEmail": {
                "type": "null"
              },
              "securityEmail": {
                "type": "null"
              },
              "securityPolicyUrl": {
                "type": "null"
              }
            },
            "required": [
              "generalEmail",
              "securityEmail",
              "securityPolicyUrl"
            ]
          },
          "explorer": {
            "type": "object",
            "properties": {
              "host": {
                "type": "string"
              },
              "live": {
                "type": "boolean"
              },
              "url": {
                "type": "string"
              }
            },
            "required": [
              "host",
              "live",
              "url"
            ]
          },
          "links": {
            "type": "object",
            "properties": {
              "documentation": {
                "type": "null"
              },
              "repository": {
                "type": "null"
              },
              "specification": {
                "type": "null"
              }
            },
            "required": [
              "documentation",
              "repository",
              "specification"
            ]
          },
          "status": {
            "type": "object",
            "properties": {
              "items": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "label": {
                      "type": "string"
                    },
                    "state": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "label",
                    "state"
                  ]
                }
              },
              "label": {
                "type": "string"
              },
              "summary": {
                "type": "string"
              }
            },
            "required": [
              "items",
              "label",
              "summary"
            ]
          }
        },
        "required": [
          "contact",
          "explorer",
          "links",
          "status"
        ],
        "description": "Bundled explorer presentation configuration. Its wording and links are fixture content, not runtime network health."
      },
      "Fixtures": {
        "type": "object",
        "properties": {
          "asset": {
            "type": "object",
            "properties": {
              "lookalike": {
                "type": "object",
                "properties": {
                  "a": {
                    "type": "object",
                    "properties": {
                      "assetId": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      },
                      "symbol": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "assetId",
                      "name",
                      "symbol"
                    ]
                  },
                  "b": {
                    "type": "object",
                    "properties": {
                      "assetId": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      },
                      "symbol": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "assetId",
                      "name",
                      "symbol"
                    ]
                  }
                },
                "required": [
                  "a",
                  "b"
                ]
              },
              "scenarios": {
                "type": "object",
                "properties": {
                  "migrated": {
                    "type": "object",
                    "properties": {
                      "activity": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "amount": {
                              "type": "string"
                            },
                            "detail": {
                              "type": "string"
                            },
                            "kind": {
                              "type": "string"
                            },
                            "n": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "amount",
                            "detail",
                            "kind",
                            "n"
                          ]
                        }
                      },
                      "assetId": {
                        "type": "string"
                      },
                      "decimals": {
                        "type": "integer"
                      },
                      "label": {
                        "type": "string"
                      },
                      "migration": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      },
                      "network": {
                        "type": "string"
                      },
                      "origin": {
                        "type": "string"
                      },
                      "policy": {
                        "type": "string"
                      },
                      "supply": {
                        "type": "string"
                      },
                      "symbol": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "activity",
                      "assetId",
                      "decimals",
                      "label",
                      "migration",
                      "name",
                      "network",
                      "origin",
                      "policy",
                      "supply",
                      "symbol"
                    ]
                  },
                  "seedbed": {
                    "type": "object",
                    "properties": {
                      "activity": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "amount": {
                              "type": "string"
                            },
                            "detail": {
                              "type": "string"
                            },
                            "kind": {
                              "type": "string"
                            },
                            "n": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "amount",
                            "detail",
                            "kind",
                            "n"
                          ]
                        }
                      },
                      "assetId": {
                        "type": "string"
                      },
                      "decimals": {
                        "type": "integer"
                      },
                      "label": {
                        "type": "string"
                      },
                      "migration": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      },
                      "network": {
                        "type": "string"
                      },
                      "origin": {
                        "type": "string"
                      },
                      "policy": {
                        "type": "string"
                      },
                      "supply": {
                        "type": "string"
                      },
                      "symbol": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "activity",
                      "assetId",
                      "decimals",
                      "label",
                      "migration",
                      "name",
                      "network",
                      "origin",
                      "policy",
                      "supply",
                      "symbol"
                    ]
                  }
                },
                "required": [
                  "migrated",
                  "seedbed"
                ]
              }
            },
            "required": [
              "lookalike",
              "scenarios"
            ]
          },
          "explorer": {
            "type": "object",
            "properties": {
              "assets": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "decimals": {
                      "type": "integer"
                    },
                    "id": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "origin": {
                      "type": "string"
                    },
                    "policy": {
                      "type": "string"
                    },
                    "route": {
                      "type": "string"
                    },
                    "stage": {
                      "type": "string"
                    },
                    "supplyNote": {
                      "type": "string"
                    },
                    "symbol": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "decimals",
                    "id",
                    "name",
                    "origin",
                    "policy",
                    "stage",
                    "supplyNote",
                    "symbol"
                  ]
                }
              },
              "firstHeight": {
                "type": "integer"
              },
              "labels": {
                "type": "object",
                "properties": {
                  "example-account:foundation-0002": {
                    "type": "string"
                  },
                  "example-account:treasury-0001": {
                    "type": "string"
                  }
                },
                "required": [
                  "example-account:foundation-0002",
                  "example-account:treasury-0001"
                ]
              },
              "latestHeight": {
                "type": "integer"
              },
              "migrations": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/Migration"
                }
              },
              "producersPerRound": {
                "type": "integer"
              },
              "searchExamples": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "href": {
                      "type": "string"
                    },
                    "label": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "href",
                    "label"
                  ]
                }
              },
              "txs": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/Transaction"
                }
              },
              "validators": {
                "type": "object",
                "properties": {
                  "list": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "account": {
                          "type": "string"
                        },
                        "name": {
                          "type": "string"
                        },
                        "rank": {
                          "anyOf": [
                            {
                              "type": "integer"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "status": {
                          "type": "string"
                        },
                        "voters": {
                          "type": "integer"
                        },
                        "weightBp": {
                          "type": "integer"
                        }
                      },
                      "required": [
                        "account",
                        "name",
                        "rank",
                        "status",
                        "voters",
                        "weightBp"
                      ]
                    }
                  },
                  "missed": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "name": {
                          "type": "string"
                        },
                        "round": {
                          "type": "integer"
                        },
                        "slot": {
                          "type": "integer"
                        }
                      },
                      "required": [
                        "name",
                        "round",
                        "slot"
                      ]
                    }
                  },
                  "order": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "round": {
                    "type": "integer"
                  }
                },
                "required": [
                  "list",
                  "missed",
                  "order",
                  "round"
                ]
              }
            },
            "required": [
              "assets",
              "firstHeight",
              "labels",
              "latestHeight",
              "migrations",
              "producersPerRound",
              "searchExamples",
              "txs",
              "validators"
            ]
          },
          "migrations": {
            "type": "object",
            "properties": {
              "routes": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/Route"
                }
              },
              "states": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "label": {
                      "type": "string"
                    },
                    "text": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "label",
                    "text"
                  ]
                }
              }
            },
            "required": [
              "routes",
              "states"
            ]
          },
          "seedbed": {
            "type": "object",
            "properties": {
              "accountPattern": {
                "type": "string"
              },
              "accounts": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "label": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "id",
                    "label"
                  ]
                }
              },
              "defaults": {
                "type": "object",
                "properties": {
                  "decimals": {
                    "type": "string"
                  },
                  "name": {
                    "type": "string"
                  },
                  "supply": {
                    "type": "string"
                  },
                  "symbol": {
                    "type": "string"
                  }
                },
                "required": [
                  "decimals",
                  "name",
                  "supply",
                  "symbol"
                ]
              },
              "maxSupplyDigits": {
                "type": "integer"
              },
              "presets": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "csv": {
                      "type": "string"
                    },
                    "key": {
                      "type": "string"
                    },
                    "label": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "csv",
                    "key",
                    "label"
                  ]
                }
              },
              "previewBatchLimit": {
                "type": "integer"
              },
              "referenceLimit": {
                "type": "integer"
              }
            },
            "required": [
              "accountPattern",
              "accounts",
              "defaults",
              "maxSupplyDigits",
              "presets",
              "previewBatchLimit",
              "referenceLimit"
            ]
          }
        },
        "required": [
          "asset",
          "explorer",
          "migrations",
          "seedbed"
        ],
        "description": "The raw bundled fixture document used by the explorer frontend. Unlike collection endpoints, its explorer.assets and explorer.validators.list entries have no derived supply, balances or block summaries. It also includes presentation scenarios and Seedbed preview data."
      },
      "Snapshot": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/Fixtures"
          },
          "config": {
            "$ref": "#/components/schemas/Config"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        },
        "required": [
          "data",
          "config",
          "meta"
        ],
        "description": "Complete bundled presentation snapshot. config is a sibling of data, not nested inside it."
      },
      "SearchHit": {
        "oneOf": [
          {
            "type": "object",
            "properties": {
              "collection": {
                "type": "string",
                "const": "blocks"
              },
              "id": {
                "type": "string",
                "description": "Block height serialized as a string."
              },
              "record": {
                "$ref": "#/components/schemas/Block"
              }
            },
            "required": [
              "collection",
              "id",
              "record"
            ]
          },
          {
            "type": "object",
            "properties": {
              "collection": {
                "type": "string",
                "const": "transactions"
              },
              "id": {
                "type": "string",
                "description": "Record ID."
              },
              "record": {
                "$ref": "#/components/schemas/Transaction"
              }
            },
            "required": [
              "collection",
              "id",
              "record"
            ]
          },
          {
            "type": "object",
            "properties": {
              "collection": {
                "type": "string",
                "const": "validators"
              },
              "id": {
                "type": "string",
                "description": "Validator name."
              },
              "record": {
                "$ref": "#/components/schemas/Validator"
              }
            },
            "required": [
              "collection",
              "id",
              "record"
            ]
          },
          {
            "type": "object",
            "properties": {
              "collection": {
                "type": "string",
                "const": "assets"
              },
              "id": {
                "type": "string",
                "description": "Record ID."
              },
              "record": {
                "$ref": "#/components/schemas/Asset"
              }
            },
            "required": [
              "collection",
              "id",
              "record"
            ]
          },
          {
            "type": "object",
            "properties": {
              "collection": {
                "type": "string",
                "const": "accounts"
              },
              "id": {
                "type": "string",
                "description": "Record ID."
              },
              "record": {
                "$ref": "#/components/schemas/Account"
              }
            },
            "required": [
              "collection",
              "id",
              "record"
            ]
          },
          {
            "type": "object",
            "properties": {
              "collection": {
                "type": "string",
                "const": "migrations"
              },
              "id": {
                "type": "string",
                "description": "Record ID."
              },
              "record": {
                "$ref": "#/components/schemas/Migration"
              }
            },
            "required": [
              "collection",
              "id",
              "record"
            ]
          },
          {
            "type": "object",
            "properties": {
              "collection": {
                "type": "string",
                "const": "routes"
              },
              "id": {
                "type": "string",
                "description": "Record ID."
              },
              "record": {
                "$ref": "#/components/schemas/Route"
              }
            },
            "required": [
              "collection",
              "id",
              "record"
            ]
          }
        ]
      },
      "StatusResponse": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/Status"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        },
        "required": [
          "data",
          "meta"
        ]
      },
      "ConfigResponse": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/Config"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        },
        "required": [
          "data",
          "meta"
        ]
      },
      "BlockResponse": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/Block"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        },
        "required": [
          "data",
          "meta"
        ]
      },
      "TransactionResponse": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/Transaction"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        },
        "required": [
          "data",
          "meta"
        ]
      },
      "ValidatorResponse": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/Validator"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        },
        "required": [
          "data",
          "meta"
        ]
      },
      "AssetResponse": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/Asset"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        },
        "required": [
          "data",
          "meta"
        ]
      },
      "AccountResponse": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/Account"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        },
        "required": [
          "data",
          "meta"
        ]
      },
      "MigrationResponse": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/Migration"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        },
        "required": [
          "data",
          "meta"
        ]
      },
      "RouteResponse": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/Route"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        },
        "required": [
          "data",
          "meta"
        ]
      },
      "BlockPage": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Block"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        },
        "required": [
          "data",
          "pagination",
          "meta"
        ]
      },
      "TransactionPage": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Transaction"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        },
        "required": [
          "data",
          "pagination",
          "meta"
        ]
      },
      "ValidatorPage": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Validator"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        },
        "required": [
          "data",
          "pagination",
          "meta"
        ]
      },
      "AssetPage": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Asset"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        },
        "required": [
          "data",
          "pagination",
          "meta"
        ]
      },
      "AccountPage": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Account"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        },
        "required": [
          "data",
          "pagination",
          "meta"
        ]
      },
      "MigrationPage": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Migration"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        },
        "required": [
          "data",
          "pagination",
          "meta"
        ]
      },
      "RoutePage": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Route"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        },
        "required": [
          "data",
          "pagination",
          "meta"
        ]
      },
      "SearchHitPage": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SearchHit"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        },
        "required": [
          "data",
          "pagination",
          "meta"
        ]
      }
    },
    "responses": {
      "MethodNotAllowed": {
        "description": "This API only supports read requests",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "error": {
                "code": "method_not_allowed",
                "message": "This API only supports read requests"
              },
              "meta": {
                "mode": "demo"
              }
            }
          }
        }
      },
      "UnknownRoute": {
        "description": "Unknown API route",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "error": {
                "code": "not_found",
                "message": "Unknown API route"
              },
              "meta": {
                "mode": "demo"
              }
            }
          }
        }
      }
    }
  }
}
