{
  "openapi": "3.1.0",
  "info": {
    "title": "PRLScan Official API",
    "version": "2.1.0",
    "description": "Create bearer keys at https://account.prlscan.com/. Fixed 10-second, UTC minute and UTC day limits apply per account across all its keys. Accepted requests count even if the data handler later fails; invalid credentials and quota rejections do not. Monthly plans also share a hard allowance across all keys. Free allowances reset on UTC calendar months; paid allowances use explicit billing periods and require a confirmed renewal. Tier changes and key rotation do not reset an existing period. No overage billing. Pricing is published at https://prlscan.com/api/pricing.html. Account signup, authenticated API access and paid checkout are live. Public /v1 remains available during migration. Complete transaction/address discovery and a separate heuristic transfer feed are supported. CMC-backed /v2/market/prl is retired with uncharged HTTP 410 pending redistribution rights; broader markets are deferred. Integer amounts are grains; use a parser that preserves 64-bit integers. Edge WAF errors can have an empty or non-JSON body. Clients must tolerate added fields."
  },
  "servers": [
    {
      "url": "https://api.prlscan.com"
    }
  ],
  "security": [
    {
      "ApiKey": []
    }
  ],
  "paths": {
    "/v2/status": {
      "get": {
        "operationId": "getStatus",
        "summary": "Current chain/indexer status",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success. Every admitted request consumes one unit, including cached responses.",
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Quota-Remaining-Day": {
                "schema": {
                  "type": "integer"
                }
              },
              "X-Quota-Reset-Day": {
                "schema": {
                  "type": "integer"
                },
                "description": "UTC Unix epoch seconds"
              },
              "X-Quota-Remaining-Month": {
                "schema": {
                  "type": "integer"
                },
                "description": "Present for monthly plans. Reset is the exclusive period end in UTC Unix seconds; paid renewal requires confirmed payment."
              },
              "X-Quota-Reset-Month": {
                "schema": {
                  "type": "integer"
                },
                "description": "Present for monthly plans. Reset is the exclusive period end in UTC Unix seconds; paid renewal requires confirmed payment."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Status"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or unsupported query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, invalid or revoked credential",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "No active monthly billing allowance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Account or IP limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Minimum seconds to wait before retrying; add jitter."
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "API disabled, admission unavailable, or server capacity exhausted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Minimum seconds to wait before retrying; add jitter."
              }
            }
          },
          "504": {
            "description": "Query deadline exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v2/blocks": {
      "get": {
        "operationId": "listBlocks",
        "summary": "Blocks newest first",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 25
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "schema": {
              "type": "string",
              "maxLength": 512
            },
            "description": "Use next_cursor from the preceding response. Block cursors are nonnegative heights; address cursors encode height:index:txid."
          }
        ],
        "responses": {
          "200": {
            "description": "Success. Every admitted request consumes one unit, including cached responses.",
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Quota-Remaining-Day": {
                "schema": {
                  "type": "integer"
                }
              },
              "X-Quota-Reset-Day": {
                "schema": {
                  "type": "integer"
                },
                "description": "UTC Unix epoch seconds"
              },
              "X-Quota-Remaining-Month": {
                "schema": {
                  "type": "integer"
                },
                "description": "Present for monthly plans. Reset is the exclusive period end in UTC Unix seconds; paid renewal requires confirmed payment."
              },
              "X-Quota-Reset-Month": {
                "schema": {
                  "type": "integer"
                },
                "description": "Present for monthly plans. Reset is the exclusive period end in UTC Unix seconds; paid renewal requires confirmed payment."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "type": [
                        "array",
                        "null"
                      ],
                      "items": {
                        "$ref": "#/components/schemas/BlockSummary"
                      }
                    },
                    "next_cursor": {
                      "type": "string",
                      "description": "Omitted when no further page is available. Treat as opaque and URL-encode."
                    }
                  },
                  "required": [
                    "items"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Invalid or unsupported query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, invalid or revoked credential",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "No active monthly billing allowance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Account or IP limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Minimum seconds to wait before retrying; add jitter."
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "API disabled, admission unavailable, or server capacity exhausted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Minimum seconds to wait before retrying; add jitter."
              }
            }
          },
          "504": {
            "description": "Query deadline exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v2/blocks/{id}": {
      "get": {
        "operationId": "getBlock",
        "summary": "Block by height or hash",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success. Every admitted request consumes one unit, including cached responses.",
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Quota-Remaining-Day": {
                "schema": {
                  "type": "integer"
                }
              },
              "X-Quota-Reset-Day": {
                "schema": {
                  "type": "integer"
                },
                "description": "UTC Unix epoch seconds"
              },
              "X-Quota-Remaining-Month": {
                "schema": {
                  "type": "integer"
                },
                "description": "Present for monthly plans. Reset is the exclusive period end in UTC Unix seconds; paid renewal requires confirmed payment."
              },
              "X-Quota-Reset-Month": {
                "schema": {
                  "type": "integer"
                },
                "description": "Present for monthly plans. Reset is the exclusive period end in UTC Unix seconds; paid renewal requires confirmed payment."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "block": {
                      "$ref": "#/components/schemas/BlockSummary"
                    },
                    "transactions": {
                      "type": [
                        "array",
                        "null"
                      ],
                      "items": {
                        "$ref": "#/components/schemas/TxSummary"
                      }
                    }
                  },
                  "required": [
                    "block",
                    "transactions"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Invalid or unsupported query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, invalid or revoked credential",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "No active monthly billing allowance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Account or IP limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Minimum seconds to wait before retrying; add jitter."
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "API disabled, admission unavailable, or server capacity exhausted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Minimum seconds to wait before retrying; add jitter."
              }
            }
          },
          "504": {
            "description": "Query deadline exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v2/txs/{txid}": {
      "get": {
        "operationId": "getTransaction",
        "summary": "Transaction with inputs and outputs",
        "parameters": [
          {
            "name": "txid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success. Every admitted request consumes one unit, including cached responses.",
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Quota-Remaining-Day": {
                "schema": {
                  "type": "integer"
                }
              },
              "X-Quota-Reset-Day": {
                "schema": {
                  "type": "integer"
                },
                "description": "UTC Unix epoch seconds"
              },
              "X-Quota-Remaining-Month": {
                "schema": {
                  "type": "integer"
                },
                "description": "Present for monthly plans. Reset is the exclusive period end in UTC Unix seconds; paid renewal requires confirmed payment."
              },
              "X-Quota-Reset-Month": {
                "schema": {
                  "type": "integer"
                },
                "description": "Present for monthly plans. Reset is the exclusive period end in UTC Unix seconds; paid renewal requires confirmed payment."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "transaction": {
                      "$ref": "#/components/schemas/TxSummary"
                    },
                    "inputs": {
                      "type": [
                        "array",
                        "null"
                      ],
                      "items": {
                        "$ref": "#/components/schemas/TxInput"
                      }
                    },
                    "outputs": {
                      "type": [
                        "array",
                        "null"
                      ],
                      "items": {
                        "$ref": "#/components/schemas/TxOutput"
                      }
                    }
                  },
                  "required": [
                    "transaction",
                    "inputs",
                    "outputs"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Invalid or unsupported query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, invalid or revoked credential",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "No active monthly billing allowance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Account or IP limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Minimum seconds to wait before retrying; add jitter."
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "API disabled, admission unavailable, or server capacity exhausted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Minimum seconds to wait before retrying; add jitter."
              }
            }
          },
          "504": {
            "description": "Query deadline exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v2/addresses/{address}": {
      "get": {
        "operationId": "getAddress",
        "summary": "Address summary",
        "parameters": [
          {
            "name": "address",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success. Every admitted request consumes one unit, including cached responses.",
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Quota-Remaining-Day": {
                "schema": {
                  "type": "integer"
                }
              },
              "X-Quota-Reset-Day": {
                "schema": {
                  "type": "integer"
                },
                "description": "UTC Unix epoch seconds"
              },
              "X-Quota-Remaining-Month": {
                "schema": {
                  "type": "integer"
                },
                "description": "Present for monthly plans. Reset is the exclusive period end in UTC Unix seconds; paid renewal requires confirmed payment."
              },
              "X-Quota-Reset-Month": {
                "schema": {
                  "type": "integer"
                },
                "description": "Present for monthly plans. Reset is the exclusive period end in UTC Unix seconds; paid renewal requires confirmed payment."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AddressSummary"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or unsupported query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, invalid or revoked credential",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "No active monthly billing allowance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Account or IP limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Minimum seconds to wait before retrying; add jitter."
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "API disabled, admission unavailable, or server capacity exhausted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Minimum seconds to wait before retrying; add jitter."
              }
            }
          },
          "504": {
            "description": "Query deadline exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v2/addresses/{address}/txs": {
      "get": {
        "operationId": "listAddressTransactions",
        "summary": "Address transactions newest first",
        "parameters": [
          {
            "name": "address",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 25
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "schema": {
              "type": "string",
              "maxLength": 512
            },
            "description": "Use next_cursor from the preceding response. Block cursors are nonnegative heights; address cursors encode height:index:txid."
          }
        ],
        "responses": {
          "200": {
            "description": "Success. Every admitted request consumes one unit, including cached responses.",
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Quota-Remaining-Day": {
                "schema": {
                  "type": "integer"
                }
              },
              "X-Quota-Reset-Day": {
                "schema": {
                  "type": "integer"
                },
                "description": "UTC Unix epoch seconds"
              },
              "X-Quota-Remaining-Month": {
                "schema": {
                  "type": "integer"
                },
                "description": "Present for monthly plans. Reset is the exclusive period end in UTC Unix seconds; paid renewal requires confirmed payment."
              },
              "X-Quota-Reset-Month": {
                "schema": {
                  "type": "integer"
                },
                "description": "Present for monthly plans. Reset is the exclusive period end in UTC Unix seconds; paid renewal requires confirmed payment."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "type": [
                        "array",
                        "null"
                      ],
                      "items": {
                        "$ref": "#/components/schemas/AddressTx"
                      }
                    },
                    "next_cursor": {
                      "type": "string",
                      "description": "Omitted when no further page is available. Treat as opaque and URL-encode."
                    }
                  },
                  "required": [
                    "items"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Invalid or unsupported query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, invalid or revoked credential",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "No active monthly billing allowance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Account or IP limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Minimum seconds to wait before retrying; add jitter."
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "API disabled, admission unavailable, or server capacity exhausted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Minimum seconds to wait before retrying; add jitter."
              }
            }
          },
          "504": {
            "description": "Query deadline exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v2/analytics/summary": {
      "get": {
        "operationId": "getNetworkSummary",
        "summary": "Network summary: hashrate, difficulty, block timing and 24-hour chain activity",
        "parameters": [
          {
            "name": "window_blocks",
            "in": "query",
            "schema": {
              "type": "integer",
              "enum": [
                50,
                100,
                200,
                500
              ],
              "default": 50
            },
            "description": "Explicit supported window; unsupported values are rejected, not rounded."
          }
        ],
        "responses": {
          "200": {
            "description": "Success. Every admitted request consumes one unit, including cached responses.",
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Quota-Remaining-Day": {
                "schema": {
                  "type": "integer"
                }
              },
              "X-Quota-Reset-Day": {
                "schema": {
                  "type": "integer"
                },
                "description": "UTC Unix epoch seconds"
              },
              "X-Quota-Remaining-Month": {
                "schema": {
                  "type": "integer"
                },
                "description": "Present for monthly plans. Reset is the exclusive period end in UTC Unix seconds; paid renewal requires confirmed payment."
              },
              "X-Quota-Reset-Month": {
                "schema": {
                  "type": "integer"
                },
                "description": "Present for monthly plans. Reset is the exclusive period end in UTC Unix seconds; paid renewal requires confirmed payment."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnalyticsSummary"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or unsupported query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, invalid or revoked credential",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "No active monthly billing allowance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Account or IP limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Minimum seconds to wait before retrying; add jitter."
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "API disabled, admission unavailable, or server capacity exhausted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Minimum seconds to wait before retrying; add jitter."
              }
            }
          },
          "504": {
            "description": "Query deadline exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v2/pools": {
      "get": {
        "operationId": "listPools",
        "summary": "Pool comparison: reported and observed hashrate, fees, rewards, payouts, luck and yield windows",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success. Every admitted request consumes one unit, including cached responses.",
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Quota-Remaining-Day": {
                "schema": {
                  "type": "integer"
                }
              },
              "X-Quota-Reset-Day": {
                "schema": {
                  "type": "integer"
                },
                "description": "UTC Unix epoch seconds"
              },
              "X-Quota-Remaining-Month": {
                "schema": {
                  "type": "integer"
                },
                "description": "Present for monthly plans. Reset is the exclusive period end in UTC Unix seconds; paid renewal requires confirmed payment."
              },
              "X-Quota-Reset-Month": {
                "schema": {
                  "type": "integer"
                },
                "description": "Present for monthly plans. Reset is the exclusive period end in UTC Unix seconds; paid renewal requires confirmed payment."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PoolsResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or unsupported query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, invalid or revoked credential",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "No active monthly billing allowance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Account or IP limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Minimum seconds to wait before retrying; add jitter."
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "API disabled, admission unavailable, or server capacity exhausted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Minimum seconds to wait before retrying; add jitter."
              }
            }
          },
          "504": {
            "description": "Query deadline exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v2/txs": {
      "get": {
        "operationId": "listTransactions",
        "summary": "All confirmed canonical transactions, including coinbase; optional heuristic category and UTC-day filters",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 25
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "schema": {
              "type": "string",
              "maxLength": 512
            },
            "description": "Opaque d1 cursor bound to this endpoint and its filters/sort. Page size may change. Do not construct offsets; restart pagination after changing filters. Live data is not a frozen export."
          },
          {
            "name": "category",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "otc_settlement",
                "private_otc",
                "facilitated_transfer",
                "bridge_withdrawal",
                "bridge_deposit",
                "pool_payout",
                "compute_payout",
                "batch_payout",
                "peel_chain",
                "wallet_churn",
                "consolidation",
                "large_direct",
                "routine_transfer"
              ]
            },
            "description": "PRLScan heuristic classification. Coverage is asynchronous; absence is not proof of no transaction or payment."
          },
          {
            "name": "day",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date"
            },
            "description": "One past or current UTC date, YYYY-MM-DD. Optional; omitting searches all available indexed history."
          },
          {
            "name": "type",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "all",
                "coinbase",
                "non_coinbase"
              ],
              "default": "all"
            },
            "description": "Coinbase cannot be combined with category. Order: block height descending, transaction index descending, txid ascending. Unclassified transactions remain in the unfiltered listing."
          }
        ],
        "responses": {
          "200": {
            "description": "Success. Every admitted request consumes one unit, including cached responses.",
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Quota-Remaining-Day": {
                "schema": {
                  "type": "integer"
                }
              },
              "X-Quota-Reset-Day": {
                "schema": {
                  "type": "integer"
                },
                "description": "UTC Unix epoch seconds"
              },
              "X-Quota-Remaining-Month": {
                "schema": {
                  "type": "integer"
                },
                "description": "Present for monthly plans. Reset is the exclusive period end in UTC Unix seconds; paid renewal requires confirmed payment."
              },
              "X-Quota-Reset-Month": {
                "schema": {
                  "type": "integer"
                },
                "description": "Present for monthly plans. Reset is the exclusive period end in UTC Unix seconds; paid renewal requires confirmed payment."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "type": [
                        "array",
                        "null"
                      ],
                      "items": {
                        "$ref": "#/components/schemas/TransactionListItem"
                      }
                    },
                    "next_cursor": {
                      "type": "string",
                      "description": "Omitted when no further page is available. Treat as opaque and URL-encode."
                    }
                  },
                  "required": [
                    "items"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Invalid or unsupported query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, invalid or revoked credential",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "No active monthly billing allowance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Account or IP limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Minimum seconds to wait before retrying; add jitter."
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "API disabled, admission unavailable, or server capacity exhausted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Minimum seconds to wait before retrying; add jitter."
              }
            }
          },
          "504": {
            "description": "Query deadline exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v2/addresses": {
      "get": {
        "operationId": "listAddresses",
        "summary": "All indexed addresses, including zero balances, with indexed ranking and cursor pagination",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 25
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "schema": {
              "type": "string",
              "maxLength": 512
            },
            "description": "Opaque d1 cursor bound to this endpoint and its filters/sort. Page size may change. Do not construct offsets; restart pagination after changing filters. Live data is not a frozen export."
          },
          {
            "name": "sort",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "address",
                "balance",
                "mined",
                "transfer_in",
                "transfer_out",
                "tx_count",
                "last_activity"
              ],
              "default": "balance"
            },
            "description": "Ranks all indexed addresses, including fully spent addresses; missing statistics sort last. Counts/amounts are cumulative, not recent-window mining rankings."
          }
        ],
        "responses": {
          "200": {
            "description": "Success. Every admitted request consumes one unit, including cached responses.",
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Quota-Remaining-Day": {
                "schema": {
                  "type": "integer"
                }
              },
              "X-Quota-Reset-Day": {
                "schema": {
                  "type": "integer"
                },
                "description": "UTC Unix epoch seconds"
              },
              "X-Quota-Remaining-Month": {
                "schema": {
                  "type": "integer"
                },
                "description": "Present for monthly plans. Reset is the exclusive period end in UTC Unix seconds; paid renewal requires confirmed payment."
              },
              "X-Quota-Reset-Month": {
                "schema": {
                  "type": "integer"
                },
                "description": "Present for monthly plans. Reset is the exclusive period end in UTC Unix seconds; paid renewal requires confirmed payment."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "type": [
                        "array",
                        "null"
                      ],
                      "items": {
                        "$ref": "#/components/schemas/HolderSummary"
                      }
                    },
                    "next_cursor": {
                      "type": "string",
                      "description": "Omitted when no further page is available. Treat as opaque and URL-encode."
                    }
                  },
                  "required": [
                    "items"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Invalid or unsupported query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, invalid or revoked credential",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "No active monthly billing allowance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Account or IP limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Minimum seconds to wait before retrying; add jitter."
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "API disabled, admission unavailable, or server capacity exhausted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Minimum seconds to wait before retrying; add jitter."
              }
            }
          },
          "504": {
            "description": "Query deadline exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v2/transfers": {
      "get": {
        "operationId": "listTransfers",
        "summary": "Classified confirmed transfers; optional category/day filters and latest/amount ordering",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 25
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "schema": {
              "type": "string",
              "maxLength": 512
            },
            "description": "Opaque d1 cursor bound to this endpoint and its filters/sort. Page size may change. Do not construct offsets; restart pagination after changing filters. Live data is not a frozen export."
          },
          {
            "name": "category",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "otc_settlement",
                "private_otc",
                "facilitated_transfer",
                "bridge_withdrawal",
                "bridge_deposit",
                "pool_payout",
                "compute_payout",
                "batch_payout",
                "peel_chain",
                "wallet_churn",
                "consolidation",
                "large_direct",
                "routine_transfer"
              ]
            },
            "description": "PRLScan heuristic classification. Coverage is asynchronous; absence is not proof of no transaction or payment."
          },
          {
            "name": "day",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date"
            },
            "description": "One past or current UTC date, YYYY-MM-DD. Optional; omitting searches all available indexed history."
          },
          {
            "name": "sort",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "latest",
                "amount"
              ],
              "default": "latest"
            },
            "description": "Amount means classified transfer_volume_grains, not gross outputs including change. This feed excludes coinbase, zero-volume and unclassified transactions; use /v2/txs for the full confirmed list."
          }
        ],
        "responses": {
          "200": {
            "description": "Success. Every admitted request consumes one unit, including cached responses.",
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Quota-Remaining-Day": {
                "schema": {
                  "type": "integer"
                }
              },
              "X-Quota-Reset-Day": {
                "schema": {
                  "type": "integer"
                },
                "description": "UTC Unix epoch seconds"
              },
              "X-Quota-Remaining-Month": {
                "schema": {
                  "type": "integer"
                },
                "description": "Present for monthly plans. Reset is the exclusive period end in UTC Unix seconds; paid renewal requires confirmed payment."
              },
              "X-Quota-Reset-Month": {
                "schema": {
                  "type": "integer"
                },
                "description": "Present for monthly plans. Reset is the exclusive period end in UTC Unix seconds; paid renewal requires confirmed payment."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "type": [
                        "array",
                        "null"
                      ],
                      "items": {
                        "$ref": "#/components/schemas/TransferSummary"
                      }
                    },
                    "next_cursor": {
                      "type": "string",
                      "description": "Omitted when no further page is available. Treat as opaque and URL-encode."
                    }
                  },
                  "required": [
                    "items"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Invalid or unsupported query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, invalid or revoked credential",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "No active monthly billing allowance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Account or IP limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Minimum seconds to wait before retrying; add jitter."
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "API disabled, admission unavailable, or server capacity exhausted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Minimum seconds to wait before retrying; add jitter."
              }
            }
          },
          "504": {
            "description": "Query deadline exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v2/miners/top": {
      "get": {
        "operationId": "listTopMiners",
        "summary": "Top miners in a fixed time window; summary covers the whole window regardless of limit",
        "parameters": [
          {
            "name": "hours",
            "in": "query",
            "schema": {
              "type": "integer",
              "enum": [
                24,
                168,
                720
              ],
              "default": 24
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 25
            },
            "description": "Top rows only; no pagination or all-time query. All limits use one cached top-100 snapshot per time window."
          }
        ],
        "responses": {
          "200": {
            "description": "Success. Every admitted request consumes one unit, including cached responses.",
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Quota-Remaining-Day": {
                "schema": {
                  "type": "integer"
                }
              },
              "X-Quota-Reset-Day": {
                "schema": {
                  "type": "integer"
                },
                "description": "UTC Unix epoch seconds"
              },
              "X-Quota-Remaining-Month": {
                "schema": {
                  "type": "integer"
                },
                "description": "Present for monthly plans. Reset is the exclusive period end in UTC Unix seconds; paid renewal requires confirmed payment."
              },
              "X-Quota-Reset-Month": {
                "schema": {
                  "type": "integer"
                },
                "description": "Present for monthly plans. Reset is the exclusive period end in UTC Unix seconds; paid renewal requires confirmed payment."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OfficialTopMinersResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or unsupported query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing, invalid or revoked credential",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "No active monthly billing allowance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Account or IP limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Minimum seconds to wait before retrying; add jitter."
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "API disabled, admission unavailable, or server capacity exhausted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Minimum seconds to wait before retrying; add jitter."
              }
            }
          },
          "504": {
            "description": "Query deadline exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "ApiKey": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "prl_<key-id>.<secret>",
        "description": "Create a key at https://account.prlscan.com/. Never put it in a URL or a public frontend."
      }
    },
    "schemas": {
      "Status": {
        "type": "object",
        "properties": {
          "tip_height": {
            "type": "integer",
            "format": "int64"
          },
          "tip_hash": {
            "type": "string"
          },
          "indexed_height": {
            "type": "integer",
            "format": "int64"
          },
          "indexed_hash": {
            "type": "string"
          },
          "node_height": {
            "anyOf": [
              {
                "type": "integer",
                "format": "int64"
              },
              {
                "type": "null"
              }
            ]
          },
          "node_hash": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "indexer_lag": {
            "anyOf": [
              {
                "type": "integer",
                "format": "int64"
              },
              {
                "type": "null"
              }
            ]
          },
          "mempool_size": {
            "type": "integer",
            "format": "int64"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "last_event_id": {
            "anyOf": [
              {
                "type": "integer",
                "format": "int64"
              },
              {
                "type": "null"
              }
            ]
          },
          "last_event_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "healthy": {
            "type": "boolean"
          }
        },
        "required": [
          "tip_height",
          "tip_hash",
          "indexed_height",
          "indexed_hash",
          "mempool_size",
          "updated_at",
          "healthy"
        ]
      },
      "BlockSummary": {
        "type": "object",
        "properties": {
          "hash": {
            "type": "string"
          },
          "height": {
            "type": "integer",
            "format": "int64"
          },
          "previous_hash": {
            "type": "string"
          },
          "next_hash": {
            "type": "string"
          },
          "time": {
            "type": "string",
            "format": "date-time"
          },
          "tx_count": {
            "type": "integer",
            "format": "int64"
          },
          "size": {
            "type": "integer",
            "format": "int64"
          },
          "vsize": {
            "type": "integer",
            "format": "int64"
          },
          "bits": {
            "type": "string"
          },
          "difficulty": {
            "type": "number"
          },
          "reward_grains": {
            "type": "integer",
            "format": "int64"
          },
          "miner_address": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "miner_label": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "miner_label_kind": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "confirmations": {
            "type": "integer",
            "format": "int64"
          },
          "canonical": {
            "type": "boolean"
          }
        },
        "required": [
          "hash",
          "height",
          "time",
          "tx_count",
          "size",
          "vsize",
          "bits",
          "difficulty",
          "reward_grains",
          "confirmations",
          "canonical"
        ]
      },
      "TxSummary": {
        "type": "object",
        "properties": {
          "txid": {
            "type": "string"
          },
          "block_hash": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "block_height": {
            "anyOf": [
              {
                "type": "integer",
                "format": "int64"
              },
              {
                "type": "null"
              }
            ]
          },
          "tx_index": {
            "anyOf": [
              {
                "type": "integer",
                "format": "int64"
              },
              {
                "type": "null"
              }
            ]
          },
          "status": {
            "type": "string"
          },
          "confirmed_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "fee_grains": {
            "anyOf": [
              {
                "type": "integer",
                "format": "int64"
              },
              {
                "type": "null"
              }
            ]
          },
          "input_grains": {
            "anyOf": [
              {
                "type": "integer",
                "format": "int64"
              },
              {
                "type": "null"
              }
            ]
          },
          "output_grains": {
            "type": "integer",
            "format": "int64"
          },
          "size": {
            "type": "integer",
            "format": "int64"
          },
          "vsize": {
            "type": "integer",
            "format": "int64"
          },
          "is_coinbase": {
            "type": "boolean"
          },
          "confirmations": {
            "type": "integer",
            "format": "int64"
          },
          "canonical": {
            "type": "boolean"
          },
          "transaction_label": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TransactionLabel"
              },
              {
                "type": "null"
              }
            ]
          },
          "pearl_otc_kind": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "pearl_otc_fee_grains": {
            "anyOf": [
              {
                "type": "integer",
                "format": "int64"
              },
              {
                "type": "null"
              }
            ]
          },
          "pearl_otc": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PearlOTCSettlement"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "txid",
          "status",
          "output_grains",
          "size",
          "vsize",
          "is_coinbase",
          "confirmations",
          "canonical"
        ]
      },
      "TransactionLabel": {
        "type": "object",
        "properties": {
          "txid": {
            "type": "string"
          },
          "kind": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "source": {
            "type": "string"
          },
          "confidence": {
            "type": "string"
          },
          "metadata": {},
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "kind",
          "label"
        ]
      },
      "PearlOTCSettlement": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "status": {
            "type": "string"
          },
          "escrow_version": {
            "type": "string"
          },
          "side": {
            "type": "string"
          },
          "network": {
            "type": "string"
          },
          "maker": {
            "type": "string"
          },
          "prl_amount": {
            "type": "string"
          },
          "usdc_amount": {
            "type": "string"
          },
          "price_per_prl_usdc": {
            "type": "string"
          },
          "fee_prl": {
            "type": "string"
          },
          "deposit_txid": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "release_txid": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "refund_txid": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "usdc_tx_hash": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "deposited_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "usdc_tx_verified_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "completed_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "cancelled_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "status",
          "prl_amount",
          "usdc_amount",
          "price_per_prl_usdc"
        ]
      },
      "TxInput": {
        "type": "object",
        "properties": {
          "txid": {
            "type": "string"
          },
          "vin": {
            "type": "integer",
            "format": "int64"
          },
          "prev_txid": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "prev_vout": {
            "anyOf": [
              {
                "type": "integer",
                "format": "int64"
              },
              {
                "type": "null"
              }
            ]
          },
          "prev_value_grains": {
            "anyOf": [
              {
                "type": "integer",
                "format": "int64"
              },
              {
                "type": "null"
              }
            ]
          },
          "prev_address": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "coinbase": {
            "type": "string"
          },
          "sequence": {
            "type": "integer",
            "format": "int64"
          }
        },
        "required": [
          "txid",
          "vin",
          "sequence"
        ]
      },
      "TxOutput": {
        "type": "object",
        "properties": {
          "txid": {
            "type": "string"
          },
          "vout": {
            "type": "integer",
            "format": "int64"
          },
          "value_grains": {
            "type": "integer",
            "format": "int64"
          },
          "address": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "addresses": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            }
          },
          "script_type": {
            "type": "string"
          },
          "script_asm": {
            "type": "string"
          },
          "script_hex": {
            "type": "string"
          },
          "spent_by_txid": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "spent_by_vin": {
            "anyOf": [
              {
                "type": "integer",
                "format": "int64"
              },
              {
                "type": "null"
              }
            ]
          },
          "spent_at_height": {
            "anyOf": [
              {
                "type": "integer",
                "format": "int64"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "txid",
          "vout",
          "value_grains"
        ]
      },
      "AddressSummary": {
        "type": "object",
        "properties": {
          "address": {
            "type": "string"
          },
          "label": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "label_kind": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "profile": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/AddressProfile"
              },
              {
                "type": "null"
              }
            ]
          },
          "balance_grains": {
            "type": "integer",
            "format": "int64"
          },
          "mined_grains": {
            "type": "integer",
            "format": "int64"
          },
          "blocks_mined": {
            "type": "integer",
            "format": "int64"
          },
          "received_grains": {
            "type": "integer",
            "format": "int64"
          },
          "external_received_grains": {
            "type": "integer",
            "format": "int64"
          },
          "transfer_in_tx_count": {
            "type": "integer",
            "format": "int64"
          },
          "sent_grains": {
            "type": "integer",
            "format": "int64"
          },
          "external_sent_grains": {
            "type": "integer",
            "format": "int64"
          },
          "transfer_out_tx_count": {
            "type": "integer",
            "format": "int64"
          },
          "tx_count": {
            "type": "integer",
            "format": "int64"
          },
          "first_seen_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "last_seen_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "address",
          "balance_grains",
          "mined_grains",
          "blocks_mined",
          "received_grains",
          "external_received_grains",
          "transfer_in_tx_count",
          "sent_grains",
          "external_sent_grains",
          "transfer_out_tx_count",
          "tx_count"
        ]
      },
      "AddressProfile": {
        "type": "object",
        "properties": {
          "address": {
            "type": "string"
          },
          "handle": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "bio": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "external_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "address"
        ]
      },
      "AddressTx": {
        "type": "object",
        "properties": {
          "address": {
            "type": "string"
          },
          "txid": {
            "type": "string"
          },
          "block_hash": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "block_height": {
            "anyOf": [
              {
                "type": "integer",
                "format": "int64"
              },
              {
                "type": "null"
              }
            ]
          },
          "tx_index": {
            "anyOf": [
              {
                "type": "integer",
                "format": "int64"
              },
              {
                "type": "null"
              }
            ]
          },
          "time": {
            "type": "string",
            "format": "date-time"
          },
          "received_grains": {
            "type": "integer",
            "format": "int64"
          },
          "sent_grains": {
            "type": "integer",
            "format": "int64"
          },
          "delta_grains": {
            "type": "integer",
            "format": "int64"
          },
          "fee_grains": {
            "anyOf": [
              {
                "type": "integer",
                "format": "int64"
              },
              {
                "type": "null"
              }
            ]
          },
          "status": {
            "type": "string"
          },
          "canonical": {
            "type": "boolean"
          },
          "is_coinbase": {
            "type": "boolean"
          },
          "type_label": {
            "type": "string"
          }
        },
        "required": [
          "address",
          "txid",
          "time",
          "received_grains",
          "sent_grains",
          "delta_grains",
          "status",
          "canonical",
          "is_coinbase"
        ]
      },
      "AnalyticsSummary": {
        "type": "object",
        "properties": {
          "window_blocks": {
            "type": "integer",
            "format": "int64"
          },
          "avg_block_time_seconds": {
            "type": "number"
          },
          "current_difficulty": {
            "type": "number"
          },
          "estimated_hashrate_hps": {
            "type": "number"
          },
          "latest_height": {
            "type": "integer",
            "format": "int64"
          },
          "latest_block_time": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "blocks_24h": {
            "type": "integer",
            "format": "int64"
          },
          "reward_24h_grains": {
            "type": "integer",
            "format": "int64"
          },
          "transfer_volume_24h_grains": {
            "type": "integer",
            "format": "int64"
          },
          "estimated_pool_hashrate_hps": {
            "type": "number"
          }
        },
        "required": [
          "window_blocks",
          "avg_block_time_seconds",
          "current_difficulty",
          "estimated_hashrate_hps",
          "latest_height",
          "blocks_24h",
          "reward_24h_grains",
          "transfer_volume_24h_grains",
          "estimated_pool_hashrate_hps"
        ]
      },
      "PoolsResponse": {
        "type": "object",
        "properties": {
          "items": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/PoolSummary"
            }
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "cache_max_age_sec": {
            "type": "integer",
            "format": "int64"
          },
          "reported_pool_hashrate_24h_avg_hps": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "yield_benchmarks": {
            "type": [
              "object",
              "null"
            ],
            "additionalProperties": {
              "$ref": "#/components/schemas/PoolYieldBenchmark"
            }
          }
        },
        "required": [
          "items",
          "updated_at",
          "cache_max_age_sec"
        ]
      },
      "PoolSummary": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "website_url": {
            "type": "string"
          },
          "address": {
            "type": "string"
          },
          "fee_percent": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "fee_label": {
            "type": "string"
          },
          "reported_hashrate_hps": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "reported_hashrate_source": {
            "type": "string"
          },
          "reported_workers": {
            "anyOf": [
              {
                "type": "integer",
                "format": "int64"
              },
              {
                "type": "null"
              }
            ]
          },
          "reported_miners": {
            "anyOf": [
              {
                "type": "integer",
                "format": "int64"
              },
              {
                "type": "null"
              }
            ]
          },
          "upstream_ok": {
            "type": "boolean"
          },
          "upstream_updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "blocks_24h": {
            "type": "integer",
            "format": "int64"
          },
          "prev_blocks_24h": {
            "type": "integer",
            "format": "int64"
          },
          "blocks_48h": {
            "type": "integer",
            "format": "int64"
          },
          "blocks_7d": {
            "type": "integer",
            "format": "int64"
          },
          "blocks_14d": {
            "type": "integer",
            "format": "int64"
          },
          "reward_24h_grains": {
            "type": "integer",
            "format": "int64"
          },
          "reward_48h_grains": {
            "type": "integer",
            "format": "int64"
          },
          "reward_7d_grains": {
            "type": "integer",
            "format": "int64"
          },
          "reward_14d_grains": {
            "type": "integer",
            "format": "int64"
          },
          "paid_24h_grains": {
            "type": "integer",
            "format": "int64"
          },
          "balance_grains": {
            "type": "integer",
            "format": "int64"
          },
          "all_time_blocks": {
            "type": "integer",
            "format": "int64"
          },
          "all_time_reward_grains": {
            "type": "integer",
            "format": "int64"
          },
          "last_block_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "pool_share_24h": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "avg_hashrate_24h_hps": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "prev_avg_hashrate_24h_hps": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "avg_hashrate_48h_hps": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "avg_hashrate_7d_hps": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "avg_hashrate_14d_hps": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "prev_hashrate_sample_count_24h": {
            "type": "integer",
            "format": "int64"
          },
          "hashrate_sample_count_24h": {
            "type": "integer",
            "format": "int64"
          },
          "hashrate_sample_count_48h": {
            "type": "integer",
            "format": "int64"
          },
          "hashrate_sample_count_7d": {
            "type": "integer",
            "format": "int64"
          },
          "hashrate_sample_count_14d": {
            "type": "integer",
            "format": "int64"
          },
          "hashrate_expected_samples_7d": {
            "type": "integer",
            "format": "int64"
          },
          "hashrate_expected_samples_14d": {
            "type": "integer",
            "format": "int64"
          },
          "block_luck_24h": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "block_implied_hashrate_24h_hps": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "block_luck_sample_24h": {
            "type": "integer",
            "format": "int64"
          },
          "block_luck_confidence": {
            "type": "string"
          },
          "prev_block_luck_24h": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "prev_block_implied_hashrate_24h_hps": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "prev_block_luck_sample_24h": {
            "type": "integer",
            "format": "int64"
          },
          "prev_block_luck_confidence": {
            "type": "string"
          },
          "block_luck_48h": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "block_implied_hashrate_48h_hps": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "block_luck_sample_48h": {
            "type": "integer",
            "format": "int64"
          },
          "block_luck_confidence_48h": {
            "type": "string"
          },
          "net_yield_48h_grains_per_ph_day": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "block_luck_7d": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "block_implied_hashrate_7d_hps": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "block_luck_sample_7d": {
            "type": "integer",
            "format": "int64"
          },
          "block_luck_confidence_7d": {
            "type": "string"
          },
          "net_yield_7d_grains_per_ph_day": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "block_luck_14d": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "block_implied_hashrate_14d_hps": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "block_luck_sample_14d": {
            "type": "integer",
            "format": "int64"
          },
          "block_luck_confidence_14d": {
            "type": "string"
          },
          "net_yield_14d_grains_per_ph_day": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "yield_windows": {
            "type": [
              "object",
              "null"
            ],
            "additionalProperties": {
              "$ref": "#/components/schemas/PoolYieldWindowSummary"
            }
          }
        },
        "required": [
          "slug",
          "name",
          "website_url",
          "address",
          "upstream_ok",
          "blocks_24h",
          "prev_blocks_24h",
          "reward_24h_grains",
          "paid_24h_grains",
          "balance_grains",
          "all_time_blocks",
          "all_time_reward_grains",
          "prev_hashrate_sample_count_24h"
        ]
      },
      "PoolYieldWindowSummary": {
        "type": "object",
        "properties": {
          "window": {
            "type": "string"
          },
          "days": {
            "type": "number"
          },
          "blocks": {
            "type": "integer",
            "format": "int64"
          },
          "reward_grains": {
            "type": "integer",
            "format": "int64"
          },
          "avg_hashrate_hps": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "hashrate_sample_count": {
            "type": "integer",
            "format": "int64"
          },
          "hashrate_expected_samples": {
            "type": "integer",
            "format": "int64"
          },
          "block_luck": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "block_implied_hashrate_hps": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "block_luck_sample": {
            "type": "integer",
            "format": "int64"
          },
          "block_luck_confidence": {
            "type": "string"
          },
          "net_yield_grains_per_ph_day": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "window",
          "days",
          "blocks",
          "reward_grains"
        ]
      },
      "PoolYieldBenchmark": {
        "type": "object",
        "properties": {
          "window": {
            "type": "string"
          },
          "days": {
            "type": "number"
          },
          "reward_grains": {
            "type": "integer",
            "format": "int64"
          },
          "implied_hashrate_hps": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "gross_yield_grains_per_ph_day": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "window",
          "days",
          "reward_grains"
        ]
      },
      "TransactionListItem": {
        "allOf": [
          {
            "$ref": "#/components/schemas/TxSummary"
          },
          {
            "type": "object",
            "properties": {
              "transfer_volume_grains": {
                "anyOf": [
                  {
                    "type": "integer",
                    "format": "int64"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "classification": {
                "anyOf": [
                  {
                    "$ref": "#/components/schemas/TransactionClassification"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": []
          }
        ]
      },
      "TransactionClassification": {
        "type": "object",
        "properties": {
          "category": {
            "type": "string"
          },
          "source": {
            "type": "string"
          },
          "method": {
            "type": "string"
          },
          "confidence": {
            "type": "string"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "category",
          "source",
          "method",
          "confidence",
          "updated_at"
        ]
      },
      "HolderSummary": {
        "type": "object",
        "properties": {
          "address": {
            "type": "string"
          },
          "label": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "label_kind": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "balance_grains": {
            "type": "integer",
            "format": "int64"
          },
          "mined_grains": {
            "type": "integer",
            "format": "int64"
          },
          "received_grains": {
            "type": "integer",
            "format": "int64"
          },
          "sent_grains": {
            "type": "integer",
            "format": "int64"
          },
          "external_received_grains": {
            "type": "integer",
            "format": "int64"
          },
          "external_sent_grains": {
            "type": "integer",
            "format": "int64"
          },
          "tx_count": {
            "type": "integer",
            "format": "int64"
          },
          "first_height": {
            "anyOf": [
              {
                "type": "integer",
                "format": "int64"
              },
              {
                "type": "null"
              }
            ]
          },
          "first_seen_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "last_seen_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "address",
          "balance_grains",
          "mined_grains",
          "received_grains",
          "sent_grains",
          "external_received_grains",
          "external_sent_grains",
          "tx_count"
        ]
      },
      "TransferSummary": {
        "type": "object",
        "properties": {
          "day": {
            "type": "string"
          },
          "category": {
            "type": "string"
          },
          "txid": {
            "type": "string"
          },
          "block_height": {
            "type": "integer",
            "format": "int64"
          },
          "tx_index": {
            "type": "integer",
            "format": "int64"
          },
          "confirmed_at": {
            "type": "string",
            "format": "date-time"
          },
          "transfer_volume_grains": {
            "type": "integer",
            "format": "int64"
          },
          "input_grains": {
            "anyOf": [
              {
                "type": "integer",
                "format": "int64"
              },
              {
                "type": "null"
              }
            ]
          },
          "output_grains": {
            "type": "integer",
            "format": "int64"
          },
          "fee_grains": {
            "anyOf": [
              {
                "type": "integer",
                "format": "int64"
              },
              {
                "type": "null"
              }
            ]
          },
          "input_count": {
            "anyOf": [
              {
                "type": "integer",
                "format": "int64"
              },
              {
                "type": "null"
              }
            ]
          },
          "output_count": {
            "anyOf": [
              {
                "type": "integer",
                "format": "int64"
              },
              {
                "type": "null"
              }
            ]
          },
          "output_address_count": {
            "anyOf": [
              {
                "type": "integer",
                "format": "int64"
              },
              {
                "type": "null"
              }
            ]
          },
          "largest_output_grains": {
            "anyOf": [
              {
                "type": "integer",
                "format": "int64"
              },
              {
                "type": "null"
              }
            ]
          },
          "source_address": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "source_label": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "source_kind": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "destination_address": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "destination_label": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "destination_kind": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "transaction_label": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TransactionLabel"
              },
              {
                "type": "null"
              }
            ]
          },
          "chain_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "day",
          "category",
          "txid",
          "block_height",
          "tx_index",
          "confirmed_at",
          "transfer_volume_grains",
          "output_grains"
        ]
      },
      "OfficialTopMinersResponse": {
        "type": "object",
        "properties": {
          "hours": {
            "type": "integer",
            "format": "int64"
          },
          "items": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/MinerSummary"
            }
          },
          "summary": {
            "$ref": "#/components/schemas/MiningShareSummary"
          }
        },
        "required": [
          "hours",
          "items",
          "summary"
        ]
      },
      "MinerSummary": {
        "type": "object",
        "properties": {
          "address": {
            "type": "string"
          },
          "label": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "label_kind": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "balance_grains": {
            "type": "integer",
            "format": "int64"
          },
          "received_grains": {
            "type": "integer",
            "format": "int64"
          },
          "sent_grains": {
            "type": "integer",
            "format": "int64"
          },
          "external_received_grains": {
            "type": "integer",
            "format": "int64"
          },
          "external_sent_grains": {
            "type": "integer",
            "format": "int64"
          },
          "tx_count": {
            "type": "integer",
            "format": "int64"
          },
          "blocks_mined": {
            "type": "integer",
            "format": "int64"
          },
          "reward_grains": {
            "type": "integer",
            "format": "int64"
          },
          "first_height": {
            "type": "integer",
            "format": "int64"
          },
          "last_height": {
            "type": "integer",
            "format": "int64"
          },
          "last_seen_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "address",
          "balance_grains",
          "received_grains",
          "sent_grains",
          "external_received_grains",
          "external_sent_grains",
          "tx_count",
          "blocks_mined",
          "reward_grains",
          "first_height",
          "last_height"
        ]
      },
      "MiningShareSummary": {
        "type": "object",
        "properties": {
          "total_blocks": {
            "type": "integer",
            "format": "int64"
          },
          "pool_blocks": {
            "type": "integer",
            "format": "int64"
          },
          "solo_blocks": {
            "type": "integer",
            "format": "int64"
          },
          "solo_miner_count": {
            "type": "integer",
            "format": "int64"
          }
        },
        "required": [
          "total_blocks",
          "pool_blocks",
          "solo_blocks",
          "solo_miner_count"
        ]
      },
      "Error": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string"
          },
          "code": {
            "type": "string"
          },
          "request_id": {
            "type": "string"
          }
        },
        "required": [
          "error",
          "code",
          "request_id"
        ]
      }
    }
  },
  "externalDocs": {
    "description": "PRLScan API documentation and launch status",
    "url": "https://prlscan.com/api/docs.html"
  }
}
