{
 "openapi": "3.1.0",
 "info": {
  "title": "Roots API",
  "version": "1.0.0",
  "description": "Public XMR ROOTS data and an unsigned planting builder. No key is needed. Amounts are base units as decimal strings. Every transaction comes back unsigned: the wallet signs it, the API holds no key, signs nothing and sends nothing."
 },
 "servers": [
  {
   "url": "https://api.xmrroots.xyz"
  }
 ],
 "paths": {
  "/v1/params": {
   "get": {
    "summary": "Everything a builder needs: program ids, quotes and pairs, fee split, mints.",
    "responses": {
     "200": {
      "description": "Protocol parameters",
      "headers": {
       "cache-control": {
        "schema": {
         "type": "string"
        }
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Params"
        }
       }
      }
     },
     "429": {
      "description": "rate_limited",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "unavailable",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/v1/coins": {
   "get": {
    "summary": "Coin list (public catalog).",
    "parameters": [
     {
      "name": "pair",
      "in": "query",
      "required": false,
      "description": "wXMR, ROOTS, hSOL or a quote mint",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "rewards",
      "in": "query",
      "required": false,
      "description": "creator or holders",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "sort",
      "in": "query",
      "required": false,
      "description": "mint (default), reserve or rewards",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "limit",
      "in": "query",
      "required": false,
      "description": "1 to 100, 50 by default",
      "schema": {
       "type": "integer",
       "minimum": 1,
       "maximum": 100
      }
     },
     {
      "name": "cursor",
      "in": "query",
      "required": false,
      "description": "next from the previous page",
      "schema": {
       "type": "string"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "A page of coins",
      "headers": {
       "cache-control": {
        "schema": {
         "type": "string"
        }
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/CoinList"
        }
       }
      }
     },
     "400": {
      "description": "invalid_param",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "rate_limited",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "unavailable",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/v1/coins/{mint}": {
   "get": {
    "summary": "One coin: pair, vault, rewards, liquidity, burned supply.",
    "parameters": [
     {
      "name": "mint",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "One coin",
      "headers": {
       "cache-control": {
        "schema": {
         "type": "string"
        }
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Coin"
        }
       }
      }
     },
     "400": {
      "description": "invalid_param",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "404": {
      "description": "not_found",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "rate_limited",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "unavailable",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/v1/stats": {
   "get": {
    "summary": "The figures of xmrroots.xyz/stats.",
    "responses": {
     "200": {
      "description": "Totals",
      "headers": {
       "cache-control": {
        "schema": {
         "type": "string"
        }
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Stats"
        }
       }
      }
     },
     "429": {
      "description": "rate_limited",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "unavailable",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/v1/receipts": {
   "get": {
    "summary": "Buybacks, burns, payouts and liquidity with their transaction signatures.",
    "parameters": [
     {
      "name": "kind",
      "in": "query",
      "required": false,
      "description": "Comma list of receipt kinds; payout matches both payout kinds",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "coin",
      "in": "query",
      "required": false,
      "description": "Only receipts of this coin mint",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "limit",
      "in": "query",
      "required": false,
      "description": "1 to 100, 50 by default",
      "schema": {
       "type": "integer",
       "minimum": 1,
       "maximum": 100
      }
     },
     {
      "name": "cursor",
      "in": "query",
      "required": false,
      "description": "next from the previous page",
      "schema": {
       "type": "string"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "A page of receipts, newest first",
      "headers": {
       "cache-control": {
        "schema": {
         "type": "string"
        }
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ReceiptList"
        }
       }
      }
     },
     "400": {
      "description": "invalid_param",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "rate_limited",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "unavailable",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/v1/monero-gf/receipts": {
   "get": {
    "summary": "XMR sent to the Monero General Fund: one receipt per bridge payout, with tx id, tx key and the check_tx_key verdict.",
    "parameters": [
     {
      "name": "limit",
      "in": "query",
      "required": false,
      "description": "1 to 100, 50 by default",
      "schema": {
       "type": "integer",
       "minimum": 1,
       "maximum": 100
      }
     },
     {
      "name": "cursor",
      "in": "query",
      "required": false,
      "description": "next from the previous page",
      "schema": {
       "type": "string"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "A page of General Fund receipts",
      "headers": {
       "cache-control": {
        "schema": {
         "type": "string"
        }
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/MoneroGfReceiptList"
        }
       }
      }
     },
     "400": {
      "description": "invalid_param",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "rate_limited",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "unavailable",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/v1/health": {
   "get": {
    "summary": "Service health.",
    "responses": {
     "200": {
      "description": "Healthy",
      "headers": {
       "cache-control": {
        "schema": {
         "type": "string"
        }
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Health"
        }
       }
      }
     },
     "503": {
      "description": "Snapshot missing or older than 5 minutes",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Health"
        }
       }
      }
     }
    }
   }
  },
  "/v1/plant/build": {
   "post": {
    "summary": "Build an unsigned planting transaction (wallet and mint key sign it).",
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$ref": "#/components/schemas/BuildRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "Unsigned v0 transaction, simulated on mainnet",
      "headers": {
       "cache-control": {
        "schema": {
         "type": "string"
        }
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/BuildResponse"
        }
       }
      }
     },
     "400": {
      "description": "invalid_param",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "403": {
      "description": "planting_closed, pair_closed or origin_not_allowed",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "409": {
      "description": "mint_exists",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "413": {
      "description": "payload_too_large",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "415": {
      "description": "unsupported_media_type",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "422": {
      "description": "refused (simulation failed)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "rate_limited",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "unavailable",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  }
 },
 "components": {
  "schemas": {
   "Error": {
    "type": "object",
    "additionalProperties": false,
    "required": [
     "error"
    ],
    "properties": {
     "error": {
      "type": "object",
      "additionalProperties": false,
      "required": [
       "code",
       "message"
      ],
      "properties": {
       "code": {
        "type": "string",
        "enum": [
         "invalid_param",
         "not_found",
         "method_not_allowed",
         "unsupported_media_type",
         "payload_too_large",
         "rate_limited",
         "refused",
         "mint_exists",
         "planting_closed",
         "pair_closed",
         "monero_gf_closed",
         "origin_not_allowed",
         "unavailable",
         "internal"
        ]
       },
       "message": {
        "type": "string"
       }
      }
     }
    }
   },
   "MoneroGfParams": {
    "type": "object",
    "additionalProperties": false,
    "required": [
     "enabled",
     "onChain",
     "address",
     "sources",
     "minDonation",
     "maxDonation",
     "bridge",
     "escrow",
     "destinations",
     "slice",
     "switch",
     "mode",
     "relay",
     "limits",
     "ceilings",
     "verification",
     "notAffiliated"
    ],
    "properties": {
     "enabled": {
      "type": "boolean"
     },
     "onChain": {
      "type": "boolean"
     },
     "address": {
      "type": "string",
      "enum": [
       "888tNkZrPN6JsEgekjMnABU4TBzc2Dt29EPAvkRxbANsAnjyPbb3iQ1YBRk1UXcdRsiKc9dhwMVgN5S9cQUiyoogDavup3H"
      ]
     },
     "sources": {
      "type": "array",
      "items": {
       "type": "string"
      }
     },
     "minDonation": {
      "type": "string",
      "pattern": "^[0-9]{1,30}$",
      "description": "Base units as a decimal string."
     },
     "maxDonation": {
      "type": "string",
      "pattern": "^[0-9]{1,30}$",
      "description": "Base units as a decimal string."
     },
     "bridge": {
      "type": "object",
      "additionalProperties": false,
      "required": [
       "program",
       "feeBps",
       "name"
      ],
      "properties": {
       "program": {
        "type": "string",
        "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
       },
       "feeBps": {
        "type": "integer"
       },
       "name": {
        "type": "string"
       }
      }
     },
     "escrow": {
      "type": [
       "string",
       "null"
      ],
      "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
     },
     "destinations": {
      "type": "array",
      "items": {
       "type": "string",
       "enum": [
        "creator",
        "holders",
        "monero-general-fund"
       ]
      }
     },
     "slice": {
      "type": "string"
     },
     "switch": {
      "type": "string"
     },
     "mode": {
      "type": "string",
      "enum": [
       "relay",
       "pda"
      ],
      "description": "relay (default): a dedicated key is the bridge user, released only into its own request to the General Fund in the same transaction. pda: the program escrow is the bridge user."
     },
     "relay": {
      "type": [
       "string",
       "null"
      ],
      "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
     },
     "limits": {
      "type": "object",
      "additionalProperties": false,
      "required": [
       "maxPerWithdrawal",
       "dailyCap",
       "spacingSeconds",
       "source"
      ],
      "properties": {
       "maxPerWithdrawal": {
        "type": "string",
        "pattern": "^[0-9]{1,30}$",
        "description": "Base units as a decimal string."
       },
       "dailyCap": {
        "type": "string",
        "pattern": "^[0-9]{1,30}$",
        "description": "Base units as a decimal string."
       },
       "spacingSeconds": {
        "type": "integer"
       },
       "source": {
        "type": "string",
        "enum": [
         "chain",
         "default"
        ],
        "description": "chain: set by the owner with set_monero_gf, inside the compiled ceilings."
       }
      }
     },
     "ceilings": {
      "type": "object",
      "additionalProperties": false,
      "required": [
       "maxPerWithdrawal",
       "dailyCap",
       "minSpacingSeconds",
       "minWithdrawal"
      ],
      "properties": {
       "maxPerWithdrawal": {
        "type": "string",
        "pattern": "^[0-9]{1,30}$",
        "description": "Base units as a decimal string."
       },
       "dailyCap": {
        "type": "string",
        "pattern": "^[0-9]{1,30}$",
        "description": "Base units as a decimal string."
       },
       "minSpacingSeconds": {
        "type": "integer"
       },
       "minWithdrawal": {
        "type": "string",
        "pattern": "^[0-9]{1,30}$",
        "description": "Base units as a decimal string."
       }
      }
     },
     "verification": {
      "type": "string"
     },
     "notAffiliated": {
      "type": "string"
     }
    }
   },
   "MoneroGfReceipt": {
    "type": "object",
    "additionalProperties": false,
    "required": [
     "nonce",
     "record",
     "requestSignature",
     "requested",
     "net",
     "bridgeFee",
     "completionSignature",
     "completedAt",
     "txId",
     "txKey",
     "address",
     "monero",
     "howToVerify"
    ],
    "properties": {
     "nonce": {
      "type": "string",
      "pattern": "^[0-9]{1,30}$",
      "description": "Base units as a decimal string."
     },
     "record": {
      "type": "string",
      "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
     },
     "requestSignature": {
      "type": [
       "string",
       "null"
      ],
      "pattern": "^[1-9A-HJ-NP-Za-km-z]{64,88}$"
     },
     "requested": {
      "type": "string",
      "pattern": "^[0-9]{1,30}$",
      "description": "Base units as a decimal string."
     },
     "net": {
      "type": [
       "string",
       "null"
      ],
      "pattern": "^[0-9]{1,30}$",
      "description": "Base units as a decimal string."
     },
     "bridgeFee": {
      "type": [
       "string",
       "null"
      ],
      "pattern": "^[0-9]{1,30}$",
      "description": "Base units as a decimal string."
     },
     "completionSignature": {
      "type": "string",
      "pattern": "^[1-9A-HJ-NP-Za-km-z]{64,88}$"
     },
     "completedAt": {
      "type": [
       "string",
       "null"
      ],
      "format": "date-time"
     },
     "txId": {
      "type": "string",
      "pattern": "^[a-f0-9]{64}$"
     },
     "txKey": {
      "type": "string",
      "pattern": "^[a-f0-9]{64}$"
     },
     "address": {
      "type": "string"
     },
     "monero": {
      "type": "object",
      "additionalProperties": false,
      "required": [
       "status",
       "received",
       "confirmations",
       "reason"
      ],
      "properties": {
       "status": {
        "type": "string",
        "enum": [
         "verified",
         "unverified",
         "mismatch"
        ]
       },
       "received": {
        "type": [
         "string",
         "null"
        ],
        "pattern": "^[0-9]{1,30}$",
        "description": "Base units as a decimal string."
       },
       "confirmations": {
        "type": [
         "integer",
         "null"
        ]
       },
       "reason": {
        "type": [
         "string",
         "null"
        ]
       }
      }
     },
     "howToVerify": {
      "type": "string"
     },
     "coins": {
      "type": "array",
      "items": {
       "type": "object",
       "additionalProperties": false,
       "required": [
        "coin",
        "amount"
       ],
       "properties": {
        "coin": {
         "type": "string",
         "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
        },
        "amount": {
         "type": "string",
         "pattern": "^[0-9]{1,30}$",
         "description": "Base units as a decimal string."
        }
       }
      }
     },
     "attribution": {
      "type": "string",
      "enum": [
       "first-in-first-out"
      ]
     },
     "unattributed": {
      "type": "string",
      "pattern": "^[0-9]{1,30}$",
      "description": "Base units as a decimal string."
     }
    }
   },
   "MoneroGfReceiptList": {
    "type": "object",
    "additionalProperties": false,
    "required": [
     "data",
     "coins",
     "flow",
     "limits",
     "next",
     "total",
     "address",
     "notAffiliated",
     "source",
     "updatedAt"
    ],
    "properties": {
     "data": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/MoneroGfReceipt"
      }
     },
     "coins": {
      "type": "array",
      "items": {
       "type": "object",
       "additionalProperties": false,
       "required": [
        "coin",
        "amount",
        "symbol"
       ],
       "properties": {
        "coin": {
         "type": "string",
         "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
        },
        "amount": {
         "type": "string",
         "pattern": "^[0-9]{1,30}$",
         "description": "Base units as a decimal string."
        },
        "symbol": {
         "type": [
          "string",
          "null"
         ]
        }
       }
      }
     },
     "flow": {
      "type": "object",
      "additionalProperties": false,
      "required": [
       "escrow",
       "inFlight"
      ],
      "properties": {
       "escrow": {
        "type": [
         "string",
         "null"
        ],
        "pattern": "^[0-9]{1,30}$",
        "description": "Base units as a decimal string."
       },
       "inFlight": {
        "type": [
         "object",
         "null"
        ],
        "additionalProperties": false,
        "required": [
         "nonce",
         "record",
         "amount",
         "open",
         "requestedAt",
         "requestSignature",
         "coins"
        ],
        "properties": {
         "nonce": {
          "type": "string",
          "pattern": "^[0-9]{1,30}$",
          "description": "Base units as a decimal string."
         },
         "record": {
          "type": "string",
          "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
         },
         "amount": {
          "type": "string",
          "pattern": "^[0-9]{1,30}$",
          "description": "Base units as a decimal string."
         },
         "open": {
          "type": "boolean"
         },
         "requestedAt": {
          "type": "string",
          "format": "date-time"
         },
         "requestSignature": {
          "type": [
           "string",
           "null"
          ],
          "pattern": "^[1-9A-HJ-NP-Za-km-z]{64,88}$"
         },
         "coins": {
          "type": "array",
          "items": {
           "type": "object",
           "additionalProperties": false,
           "required": [
            "coin",
            "amount"
           ],
           "properties": {
            "coin": {
             "type": "string",
             "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
            },
            "amount": {
             "type": "string",
             "pattern": "^[0-9]{1,30}$",
             "description": "Base units as a decimal string."
            }
           }
          }
         }
        }
       }
      }
     },
     "limits": {
      "type": "object",
      "additionalProperties": false,
      "required": [
       "maxPerWithdrawal",
       "dailyCap",
       "spacingSeconds",
       "source"
      ],
      "properties": {
       "maxPerWithdrawal": {
        "type": "string",
        "pattern": "^[0-9]{1,30}$",
        "description": "Base units as a decimal string."
       },
       "dailyCap": {
        "type": "string",
        "pattern": "^[0-9]{1,30}$",
        "description": "Base units as a decimal string."
       },
       "spacingSeconds": {
        "type": "integer"
       },
       "source": {
        "type": "string",
        "enum": [
         "chain",
         "default"
        ],
        "description": "chain: set by the owner with set_monero_gf, inside the compiled ceilings."
       }
      }
     },
     "next": {
      "type": [
       "string",
       "null"
      ]
     },
     "total": {
      "type": "integer"
     },
     "address": {
      "type": "string"
     },
     "notAffiliated": {
      "type": "string"
     },
     "source": {
      "type": "string"
     },
     "updatedAt": {
      "type": "string",
      "format": "date-time"
     }
    }
   },
   "MoneroGfStats": {
    "type": "object",
    "additionalProperties": false,
    "required": [
     "enabled",
     "address",
     "receipts",
     "verifiedReceipts",
     "sentNet",
     "verifiedReceived",
     "escrow",
     "inFlight",
     "limits",
     "notAffiliated"
    ],
    "properties": {
     "enabled": {
      "type": "boolean"
     },
     "address": {
      "type": "string"
     },
     "receipts": {
      "type": "integer"
     },
     "verifiedReceipts": {
      "type": "integer"
     },
     "sentNet": {
      "type": "string",
      "pattern": "^[0-9]{1,30}$",
      "description": "Base units as a decimal string."
     },
     "verifiedReceived": {
      "type": "string",
      "pattern": "^[0-9]{1,30}$",
      "description": "Base units as a decimal string."
     },
     "escrow": {
      "type": [
       "string",
       "null"
      ],
      "pattern": "^[0-9]{1,30}$",
      "description": "Base units as a decimal string."
     },
     "inFlight": {
      "type": [
       "object",
       "null"
      ],
      "additionalProperties": false,
      "required": [
       "record",
       "amount",
       "open"
      ],
      "properties": {
       "record": {
        "type": "string",
        "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
       },
       "amount": {
        "type": "string",
        "pattern": "^[0-9]{1,30}$",
        "description": "Base units as a decimal string."
       },
       "open": {
        "type": "boolean"
       }
      }
     },
     "limits": {
      "type": "object",
      "additionalProperties": false,
      "required": [
       "maxPerWithdrawal",
       "dailyCap",
       "spacingSeconds",
       "source"
      ],
      "properties": {
       "maxPerWithdrawal": {
        "type": "string",
        "pattern": "^[0-9]{1,30}$",
        "description": "Base units as a decimal string."
       },
       "dailyCap": {
        "type": "string",
        "pattern": "^[0-9]{1,30}$",
        "description": "Base units as a decimal string."
       },
       "spacingSeconds": {
        "type": "integer"
       },
       "source": {
        "type": "string",
        "enum": [
         "chain",
         "default"
        ],
        "description": "chain: set by the owner with set_monero_gf, inside the compiled ceilings."
       }
      }
     },
     "notAffiliated": {
      "type": "string"
     }
    }
   },
   "Asset": {
    "type": "object",
    "additionalProperties": false,
    "required": [
     "symbol",
     "mint",
     "decimals"
    ],
    "properties": {
     "symbol": {
      "type": "string"
     },
     "mint": {
      "type": "string",
      "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
     },
     "decimals": {
      "type": "integer"
     }
    }
   },
   "Quote": {
    "type": "object",
    "additionalProperties": false,
    "required": [
     "symbol",
     "mint",
     "decimals",
     "name",
     "kind",
     "tokenProgram",
     "rewardAsset",
     "plantable"
    ],
    "properties": {
     "symbol": {
      "type": "string"
     },
     "mint": {
      "type": "string",
      "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
     },
     "decimals": {
      "type": "integer"
     },
     "name": {
      "type": "string"
     },
     "kind": {
      "type": "string",
      "enum": [
       "wxmr",
       "roots",
       "lst",
       "stock"
      ]
     },
     "tokenProgram": {
      "type": "string",
      "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
     },
     "rewardAsset": {
      "$ref": "#/components/schemas/Asset"
     },
     "plantable": {
      "type": "boolean"
     }
    }
   },
   "Params": {
    "type": "object",
    "additionalProperties": false,
    "required": [
     "network",
     "api",
     "programs",
     "program",
     "treasury",
     "platformMint",
     "lookupTables",
     "mints",
     "decimals",
     "quotes",
     "stocks",
     "planting",
     "split",
     "moneroGf",
     "updatedAt"
    ],
    "properties": {
     "network": {
      "type": "string",
      "enum": [
       "mainnet-beta"
      ]
     },
     "api": {
      "type": "object",
      "additionalProperties": false,
      "required": [
       "version",
       "base",
       "limits"
      ],
      "properties": {
       "version": {
        "type": "string",
        "enum": [
         "v1"
        ]
       },
       "base": {
        "type": "string"
       },
       "limits": {
        "type": "object",
        "additionalProperties": false,
        "required": [
         "reads",
         "builds"
        ],
        "properties": {
         "reads": {
          "type": "string"
         },
         "builds": {
          "type": "string"
         }
        }
       }
      }
     },
     "programs": {
      "type": "object",
      "additionalProperties": false,
      "required": [
       "rootsVault",
       "pump",
       "pumpSwap",
       "token",
       "token2022"
      ],
      "properties": {
       "rootsVault": {
        "type": "string",
        "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
       },
       "pump": {
        "type": "string",
        "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
       },
       "pumpSwap": {
        "type": "string",
        "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
       },
       "token": {
        "type": "string",
        "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
       },
       "token2022": {
        "type": "string",
        "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
       }
      }
     },
     "program": {
      "type": "object",
      "additionalProperties": false,
      "required": [
       "sha256",
       "bytes",
       "verified",
       "config"
      ],
      "properties": {
       "sha256": {
        "type": "string",
        "pattern": "^[a-f0-9]{64}$"
       },
       "bytes": {
        "type": "integer"
       },
       "verified": {
        "type": "boolean"
       },
       "config": {
        "type": "string",
        "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
       }
      }
     },
     "treasury": {
      "type": "string",
      "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
     },
     "platformMint": {
      "type": [
       "string",
       "null"
      ],
      "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
     },
     "lookupTables": {
      "type": "object",
      "additionalProperties": false,
      "required": [
       "protocol",
       "roots",
       "pairs"
      ],
      "properties": {
       "protocol": {
        "type": "string",
        "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
       },
       "roots": {
        "type": [
         "string",
         "null"
        ],
        "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
       },
       "pairs": {
        "type": [
         "string",
         "null"
        ],
        "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
       }
      }
     },
     "mints": {
      "type": "object",
      "additionalProperties": false,
      "required": [
       "wXMR",
       "ROOTS",
       "hSOL"
      ],
      "properties": {
       "wXMR": {
        "type": "string",
        "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
       },
       "ROOTS": {
        "type": "string",
        "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
       },
       "hSOL": {
        "type": "string",
        "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
       }
      }
     },
     "decimals": {
      "type": "object",
      "additionalProperties": false,
      "required": [
       "wXMR",
       "ROOTS",
       "hSOL",
       "coin",
       "sol",
       "lp"
      ],
      "properties": {
       "wXMR": {
        "type": "integer"
       },
       "ROOTS": {
        "type": "integer"
       },
       "hSOL": {
        "type": "integer"
       },
       "coin": {
        "type": "integer"
       },
       "sol": {
        "type": "integer"
       },
       "lp": {
        "type": "integer"
       }
      }
     },
     "quotes": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/Quote"
      }
     },
     "stocks": {
      "type": "object",
      "additionalProperties": false,
      "required": [
       "api",
       "count",
       "note"
      ],
      "properties": {
       "api": {
        "type": "boolean",
        "enum": [
         false
        ]
       },
       "count": {
        "type": "integer"
       },
       "note": {
        "type": "string"
       }
      }
     },
     "planting": {
      "type": "object",
      "additionalProperties": false,
      "required": [
       "open",
       "creatorFeeBps",
       "name",
       "ticker",
       "uri",
       "rewards",
       "signers",
       "mintKey"
      ],
      "properties": {
       "open": {
        "type": "boolean"
       },
       "creatorFeeBps": {
        "type": "integer"
       },
       "name": {
        "type": "object",
        "additionalProperties": false,
        "required": [
         "maxBytes"
        ],
        "properties": {
         "maxBytes": {
          "type": "integer"
         }
        }
       },
       "ticker": {
        "type": "object",
        "additionalProperties": false,
        "required": [
         "pattern"
        ],
        "properties": {
         "pattern": {
          "type": "string"
         }
        }
       },
       "uri": {
        "type": "object",
        "additionalProperties": false,
        "required": [
         "maxBytes",
         "schemes"
        ],
        "properties": {
         "maxBytes": {
          "type": "integer"
         },
         "schemes": {
          "type": "array",
          "items": {
           "type": "string"
          }
         }
        }
       },
       "rewards": {
        "type": "array",
        "items": {
         "type": "string"
        }
       },
       "signers": {
        "type": "array",
        "items": {
         "type": "string"
        }
       },
       "mintKey": {
        "type": "string"
       }
      }
     },
     "split": {
      "type": "object",
      "additionalProperties": false,
      "required": [
       "creatorFeeBps",
       "ofCreatorFee",
       "rewards",
       "buyback",
       "liquidity",
       "treasury",
       "pairCoins"
      ],
      "properties": {
       "creatorFeeBps": {
        "type": "integer"
       },
       "ofCreatorFee": {
        "type": "object",
        "additionalProperties": false,
        "required": [
         "rewards",
         "buyback",
         "liquidity",
         "treasury"
        ],
        "properties": {
         "rewards": {
          "type": "integer"
         },
         "buyback": {
          "type": "integer"
         },
         "liquidity": {
          "type": "integer"
         },
         "treasury": {
          "type": "integer"
         }
        }
       },
       "rewards": {
        "type": "string"
       },
       "buyback": {
        "type": "string"
       },
       "liquidity": {
        "type": "string"
       },
       "treasury": {
        "type": "string"
       },
       "pairCoins": {
        "type": "string"
       }
      }
     },
     "moneroGf": {
      "$ref": "#/components/schemas/MoneroGfParams"
     },
     "updatedAt": {
      "type": "string",
      "format": "date-time"
     }
    }
   },
   "Coin": {
    "type": "object",
    "additionalProperties": false,
    "required": [
     "mint",
     "name",
     "symbol",
     "uri",
     "image",
     "description",
     "listed",
     "pair",
     "rewardAsset",
     "rewardsTo",
     "coinAuthority",
     "vault",
     "supply",
     "burned",
     "liquidity",
     "reserveCloseAt",
     "moneroGf",
     "updatedAt"
    ],
    "properties": {
     "mint": {
      "type": "string",
      "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
     },
     "name": {
      "type": [
       "string",
       "null"
      ]
     },
     "symbol": {
      "type": [
       "string",
       "null"
      ]
     },
     "uri": {
      "type": [
       "string",
       "null"
      ],
      "pattern": "^(https|ipfs|ar):"
     },
     "image": {
      "type": [
       "string",
       "null"
      ],
      "pattern": "^(https|ipfs|ar):"
     },
     "description": {
      "type": [
       "string",
       "null"
      ]
     },
     "listed": {
      "type": "boolean"
     },
     "pair": {
      "type": "object",
      "additionalProperties": false,
      "required": [
       "symbol",
       "mint",
       "decimals",
       "kind"
      ],
      "properties": {
       "symbol": {
        "type": "string"
       },
       "mint": {
        "type": "string",
        "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
       },
       "decimals": {
        "type": "integer"
       },
       "kind": {
        "type": "string",
        "enum": [
         "wxmr",
         "roots",
         "lst",
         "stock"
        ]
       }
      }
     },
     "rewardAsset": {
      "$ref": "#/components/schemas/Asset"
     },
     "rewardsTo": {
      "type": "string",
      "enum": [
       "creator",
       "holders",
       "monero-general-fund"
      ]
     },
     "coinAuthority": {
      "type": [
       "string",
       "null"
      ],
      "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
     },
     "vault": {
      "type": "object",
      "additionalProperties": false,
      "required": [
       "reserve",
       "rewards",
       "buyback",
       "allocated",
       "settled",
       "operations",
       "development",
       "redeemed",
       "nextEpoch"
      ],
      "properties": {
       "reserve": {
        "type": "string",
        "pattern": "^[0-9]{1,30}$",
        "description": "Base units as a decimal string."
       },
       "rewards": {
        "type": "string",
        "pattern": "^[0-9]{1,30}$",
        "description": "Base units as a decimal string."
       },
       "buyback": {
        "type": "string",
        "pattern": "^[0-9]{1,30}$",
        "description": "Base units as a decimal string."
       },
       "allocated": {
        "type": "string",
        "pattern": "^[0-9]{1,30}$",
        "description": "Base units as a decimal string."
       },
       "settled": {
        "type": "string",
        "pattern": "^[0-9]{1,30}$",
        "description": "Base units as a decimal string."
       },
       "operations": {
        "type": "string",
        "pattern": "^[0-9]{1,30}$",
        "description": "Base units as a decimal string."
       },
       "development": {
        "type": "string",
        "pattern": "^[0-9]{1,30}$",
        "description": "Base units as a decimal string."
       },
       "redeemed": {
        "type": "string",
        "pattern": "^[0-9]{1,30}$",
        "description": "Base units as a decimal string."
       },
       "nextEpoch": {
        "type": "string",
        "pattern": "^[0-9]{1,30}$",
        "description": "Base units as a decimal string."
       }
      }
     },
     "supply": {
      "type": [
       "string",
       "null"
      ],
      "pattern": "^[0-9]{1,30}$",
      "description": "Base units as a decimal string."
     },
     "burned": {
      "type": [
       "string",
       "null"
      ],
      "pattern": "^[0-9]{1,30}$",
      "description": "Base units as a decimal string."
     },
     "liquidity": {
      "type": [
       "object",
       "null"
      ],
      "additionalProperties": false,
      "required": [
       "initialized",
       "budget",
       "quoteSpent",
       "lpBurned"
      ],
      "properties": {
       "initialized": {
        "type": "boolean"
       },
       "budget": {
        "type": "string",
        "pattern": "^[0-9]{1,30}$",
        "description": "Base units as a decimal string."
       },
       "quoteSpent": {
        "type": "string",
        "pattern": "^[0-9]{1,30}$",
        "description": "Base units as a decimal string."
       },
       "lpBurned": {
        "type": "string",
        "pattern": "^[0-9]{1,30}$",
        "description": "Base units as a decimal string."
       }
      }
     },
     "reserveCloseAt": {
      "type": [
       "string",
       "null"
      ],
      "format": "date-time"
     },
     "moneroGf": {
      "type": "object",
      "additionalProperties": false,
      "required": [
       "destination",
       "contributed"
      ],
      "properties": {
       "destination": {
        "type": "string",
        "enum": [
         "rewards",
         "monero-general-fund"
        ]
       },
       "contributed": {
        "type": "string",
        "pattern": "^[0-9]{1,30}$",
        "description": "Base units as a decimal string."
       }
      }
     },
     "updatedAt": {
      "type": "string",
      "format": "date-time"
     }
    }
   },
   "CoinList": {
    "type": "object",
    "additionalProperties": false,
    "required": [
     "data",
     "next",
     "total",
     "updatedAt"
    ],
    "properties": {
     "data": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/Coin"
      }
     },
     "next": {
      "type": [
       "string",
       "null"
      ]
     },
     "total": {
      "type": "integer"
     },
     "updatedAt": {
      "type": "string",
      "format": "date-time"
     }
    }
   },
   "Totals": {
    "type": "object",
    "additionalProperties": false,
    "required": [
     "reserve",
     "rewards",
     "buyback",
     "allocated",
     "settled",
     "operations",
     "development",
     "redeemed",
     "nextEpoch"
    ],
    "properties": {
     "reserve": {
      "type": "string",
      "pattern": "^[0-9]{1,30}$",
      "description": "Base units as a decimal string."
     },
     "rewards": {
      "type": "string",
      "pattern": "^[0-9]{1,30}$",
      "description": "Base units as a decimal string."
     },
     "buyback": {
      "type": "string",
      "pattern": "^[0-9]{1,30}$",
      "description": "Base units as a decimal string."
     },
     "allocated": {
      "type": "string",
      "pattern": "^[0-9]{1,30}$",
      "description": "Base units as a decimal string."
     },
     "settled": {
      "type": "string",
      "pattern": "^[0-9]{1,30}$",
      "description": "Base units as a decimal string."
     },
     "operations": {
      "type": "string",
      "pattern": "^[0-9]{1,30}$",
      "description": "Base units as a decimal string."
     },
     "development": {
      "type": "string",
      "pattern": "^[0-9]{1,30}$",
      "description": "Base units as a decimal string."
     },
     "redeemed": {
      "type": "string",
      "pattern": "^[0-9]{1,30}$",
      "description": "Base units as a decimal string."
     },
     "nextEpoch": {
      "type": "string",
      "pattern": "^[0-9]{1,30}$",
      "description": "Base units as a decimal string."
     }
    }
   },
   "Stats": {
    "type": "object",
    "additionalProperties": false,
    "required": [
     "count",
     "holderCoins",
     "totals",
     "treasury",
     "outstandingRewards",
     "totalsAsset",
     "byQuote",
     "pairs",
     "liquidity",
     "roots",
     "automation",
     "moneroGf",
     "note",
     "updatedAt"
    ],
    "properties": {
     "count": {
      "type": "integer"
     },
     "holderCoins": {
      "type": "integer"
     },
     "totals": {
      "$ref": "#/components/schemas/Totals"
     },
     "treasury": {
      "type": "string",
      "pattern": "^[0-9]{1,30}$",
      "description": "Base units as a decimal string."
     },
     "outstandingRewards": {
      "type": "string",
      "pattern": "^[0-9]{1,30}$",
      "description": "Base units as a decimal string."
     },
     "totalsAsset": {
      "$ref": "#/components/schemas/Asset"
     },
     "byQuote": {
      "type": "array",
      "items": {
       "type": "object",
       "additionalProperties": false,
       "required": [
        "symbol",
        "mint",
        "decimals",
        "count",
        "totals"
       ],
       "properties": {
        "symbol": {
         "type": "string"
        },
        "mint": {
         "type": "string",
         "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
        },
        "decimals": {
         "type": "integer"
        },
        "count": {
         "type": "integer"
        },
        "totals": {
         "$ref": "#/components/schemas/Totals"
        }
       }
      }
     },
     "pairs": {
      "type": "array",
      "items": {
       "type": "object",
       "additionalProperties": false,
       "required": [
        "symbol",
        "mint",
        "count"
       ],
       "properties": {
        "symbol": {
         "type": "string"
        },
        "mint": {
         "type": "string",
         "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
        },
        "count": {
         "type": "integer"
        }
       }
      }
     },
     "liquidity": {
      "type": [
       "object",
       "null"
      ],
      "additionalProperties": false,
      "required": [
       "pool",
       "lpMint",
       "lpDecimals",
       "lpBurned",
       "communityCoins",
       "missingLedgers",
       "byQuote"
      ],
      "properties": {
       "pool": {
        "type": "string",
        "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
       },
       "lpMint": {
        "type": "string",
        "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
       },
       "lpDecimals": {
        "type": "integer"
       },
       "lpBurned": {
        "type": "string",
        "pattern": "^[0-9]{1,30}$",
        "description": "Base units as a decimal string."
       },
       "communityCoins": {
        "type": "integer"
       },
       "missingLedgers": {
        "type": "integer"
       },
       "byQuote": {
        "type": "array",
        "items": {
         "type": "object",
         "additionalProperties": false,
         "required": [
          "symbol",
          "mint",
          "decimals",
          "budget",
          "quoteSpent",
          "lpBurned"
         ],
         "properties": {
          "symbol": {
           "type": "string"
          },
          "mint": {
           "type": "string",
           "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
          },
          "decimals": {
           "type": "integer"
          },
          "budget": {
           "type": "string",
           "pattern": "^[0-9]{1,30}$",
           "description": "Base units as a decimal string."
          },
          "quoteSpent": {
           "type": "string",
           "pattern": "^[0-9]{1,30}$",
           "description": "Base units as a decimal string."
          },
          "lpBurned": {
           "type": "string",
           "pattern": "^[0-9]{1,30}$",
           "description": "Base units as a decimal string."
          }
         }
        }
       }
      }
     },
     "roots": {
      "type": [
       "object",
       "null"
      ],
      "additionalProperties": false,
      "required": [
       "mint",
       "decimals",
       "initialSupply",
       "supply",
       "burned"
      ],
      "properties": {
       "mint": {
        "type": "string",
        "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
       },
       "decimals": {
        "type": "integer"
       },
       "initialSupply": {
        "type": "string",
        "pattern": "^[0-9]{1,30}$",
        "description": "Base units as a decimal string."
       },
       "supply": {
        "type": "string",
        "pattern": "^[0-9]{1,30}$",
        "description": "Base units as a decimal string."
       },
       "burned": {
        "type": "string",
        "pattern": "^[0-9]{1,30}$",
        "description": "Base units as a decimal string."
       }
      }
     },
     "automation": {
      "type": [
       "object",
       "null"
      ],
      "additionalProperties": false,
      "required": [
       "state",
       "lastSuccessAt",
       "counters"
      ],
      "properties": {
       "state": {
        "type": "string",
        "enum": [
         "live",
         "paused",
         "simulation",
         "disabled",
         "unknown"
        ]
       },
       "lastSuccessAt": {
        "type": [
         "string",
         "null"
        ],
        "format": "date-time"
       },
       "counters": {
        "type": "object",
        "additionalProperties": {
         "type": "integer"
        }
       }
      }
     },
     "moneroGf": {
      "type": [
       "object",
       "null"
      ],
      "additionalProperties": false,
      "required": [
       "enabled",
       "address",
       "receipts",
       "verifiedReceipts",
       "sentNet",
       "verifiedReceived",
       "escrow",
       "inFlight",
       "limits",
       "notAffiliated"
      ],
      "properties": {
       "enabled": {
        "type": "boolean"
       },
       "address": {
        "type": "string"
       },
       "receipts": {
        "type": "integer"
       },
       "verifiedReceipts": {
        "type": "integer"
       },
       "sentNet": {
        "type": "string",
        "pattern": "^[0-9]{1,30}$",
        "description": "Base units as a decimal string."
       },
       "verifiedReceived": {
        "type": "string",
        "pattern": "^[0-9]{1,30}$",
        "description": "Base units as a decimal string."
       },
       "escrow": {
        "type": [
         "string",
         "null"
        ],
        "pattern": "^[0-9]{1,30}$",
        "description": "Base units as a decimal string."
       },
       "inFlight": {
        "type": [
         "object",
         "null"
        ],
        "additionalProperties": false,
        "required": [
         "record",
         "amount",
         "open"
        ],
        "properties": {
         "record": {
          "type": "string",
          "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
         },
         "amount": {
          "type": "string",
          "pattern": "^[0-9]{1,30}$",
          "description": "Base units as a decimal string."
         },
         "open": {
          "type": "boolean"
         }
        }
       },
       "limits": {
        "type": "object",
        "additionalProperties": false,
        "required": [
         "maxPerWithdrawal",
         "dailyCap",
         "spacingSeconds",
         "source"
        ],
        "properties": {
         "maxPerWithdrawal": {
          "type": "string",
          "pattern": "^[0-9]{1,30}$",
          "description": "Base units as a decimal string."
         },
         "dailyCap": {
          "type": "string",
          "pattern": "^[0-9]{1,30}$",
          "description": "Base units as a decimal string."
         },
         "spacingSeconds": {
          "type": "integer"
         },
         "source": {
          "type": "string",
          "enum": [
           "chain",
           "default"
          ],
          "description": "chain: set by the owner with set_monero_gf, inside the compiled ceilings."
         }
        }
       },
       "notAffiliated": {
        "type": "string"
       }
      }
     },
     "note": {
      "type": "string"
     },
     "updatedAt": {
      "type": "string",
      "format": "date-time"
     }
    }
   },
   "MintAmount": {
    "type": "object",
    "additionalProperties": false,
    "required": [
     "mint",
     "amount"
    ],
    "properties": {
     "mint": {
      "type": "string",
      "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
     },
     "amount": {
      "type": "string",
      "pattern": "^[0-9]{1,30}$",
      "description": "Base units as a decimal string."
     }
    }
   },
   "Receipt": {
    "type": "object",
    "additionalProperties": false,
    "required": [
     "signature",
     "slot",
     "blockTime",
     "kind",
     "instruction",
     "coins",
     "burned",
     "vaultOut",
     "source"
    ],
    "properties": {
     "signature": {
      "type": "string",
      "pattern": "^[1-9A-HJ-NP-Za-km-z]{64,88}$"
     },
     "slot": {
      "type": "integer"
     },
     "blockTime": {
      "type": [
       "string",
       "null"
      ],
      "format": "date-time"
     },
     "kind": {
      "type": "string",
      "enum": [
       "buyback",
       "burn",
       "liquidity",
       "holder-payout",
       "creator-payout",
       "rewards-epoch",
       "conversion",
       "reserve-migration",
       "redemption",
       "monero-gf-request",
       "monero-gf-cancel",
       "monero-gf-share",
       "treasury-buyback",
       "treasury-burn"
      ]
     },
     "instruction": {
      "type": [
       "integer",
       "null"
      ]
     },
     "coins": {
      "type": "array",
      "items": {
       "type": "string",
       "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
      }
     },
     "burned": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/MintAmount"
      }
     },
     "vaultOut": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/MintAmount"
      }
     },
     "acquired": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/MintAmount"
      }
     },
     "payments": {
      "type": "integer"
     },
     "epoch": {
      "type": "object",
      "additionalProperties": false,
      "required": [
       "epoch",
       "budget",
       "snapshotSlot",
       "manifest"
      ],
      "properties": {
       "epoch": {
        "type": "string",
        "pattern": "^[0-9]{1,30}$",
        "description": "Base units as a decimal string."
       },
       "budget": {
        "type": "string",
        "pattern": "^[0-9]{1,30}$",
        "description": "Base units as a decimal string."
       },
       "snapshotSlot": {
        "type": "string",
        "pattern": "^[0-9]{1,30}$",
        "description": "Base units as a decimal string."
       },
       "manifest": {
        "type": [
         "string",
         "null"
        ],
        "pattern": "^(https|ipfs|ar):"
       }
      }
     },
     "contributions": {
      "type": "array",
      "items": {
       "type": "object",
       "additionalProperties": false,
       "required": [
        "coin",
        "amount"
       ],
       "properties": {
        "coin": {
         "type": "string",
         "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
        },
        "amount": {
         "type": "string",
         "pattern": "^[0-9]{1,30}$",
         "description": "Base units as a decimal string."
        }
       }
      }
     },
     "source": {
      "type": "string",
      "enum": [
       "chain",
       "treasury-snapshot"
      ]
     }
    }
   },
   "ReceiptList": {
    "type": "object",
    "additionalProperties": false,
    "required": [
     "data",
     "next",
     "total",
     "index",
     "updatedAt"
    ],
    "properties": {
     "data": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/Receipt"
      }
     },
     "next": {
      "type": [
       "string",
       "null"
      ]
     },
     "total": {
      "type": "integer"
     },
     "index": {
      "type": "object",
      "additionalProperties": false,
      "required": [
       "complete",
       "scanned",
       "pending",
       "unreadable",
       "truncated",
       "source"
      ],
      "properties": {
       "complete": {
        "type": "boolean"
       },
       "scanned": {
        "type": "integer"
       },
       "pending": {
        "type": "integer"
       },
       "unreadable": {
        "type": "integer"
       },
       "truncated": {
        "type": "boolean"
       },
       "source": {
        "type": "string"
       }
      }
     },
     "updatedAt": {
      "type": "string",
      "format": "date-time"
     }
    }
   },
   "Health": {
    "type": "object",
    "additionalProperties": false,
    "required": [
     "ok",
     "version",
     "network",
     "programVerified",
     "snapshotAgeSeconds",
     "updatedAt",
     "receipts"
    ],
    "properties": {
     "ok": {
      "type": "boolean"
     },
     "version": {
      "type": "string"
     },
     "network": {
      "type": "string"
     },
     "programVerified": {
      "type": "boolean"
     },
     "snapshotAgeSeconds": {
      "type": [
       "integer",
       "null"
      ]
     },
     "updatedAt": {
      "type": [
       "string",
       "null"
      ],
      "format": "date-time"
     },
     "receipts": {
      "type": "object",
      "additionalProperties": false,
      "required": [
       "complete",
       "scanned",
       "pending",
       "truncated"
      ],
      "properties": {
       "complete": {
        "type": "boolean"
       },
       "scanned": {
        "type": "integer"
       },
       "pending": {
        "type": "integer"
       },
       "truncated": {
        "type": "boolean"
       }
      }
     }
    }
   },
   "BuildRequest": {
    "type": "object",
    "additionalProperties": false,
    "required": [
     "wallet",
     "mint",
     "name",
     "symbol",
     "uri"
    ],
    "properties": {
     "wallet": {
      "type": "string",
      "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
     },
     "mint": {
      "type": "string",
      "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
     },
     "name": {
      "type": "string",
      "maxLength": 32
     },
     "symbol": {
      "type": "string",
      "pattern": "^[A-Za-z0-9]{1,12}$"
     },
     "uri": {
      "type": "string",
      "pattern": "^https://",
      "maxLength": 200
     },
     "pair": {
      "type": "string",
      "enum": [
       "wXMR",
       "ROOTS",
       "hSOL"
      ],
      "default": "wXMR"
     },
     "rewards": {
      "type": "string",
      "enum": [
       "creator",
       "holders",
       "monero-general-fund"
      ],
      "default": "creator",
      "description": "Where the 0.80% (40% of the 2% creator fee) goes. monero-general-fund only when params.moneroGf.enabled; permanent."
     }
    }
   },
   "BuildResponse": {
    "type": "object",
    "additionalProperties": false,
    "required": [
     "transactions",
     "simulation",
     "coin",
     "intent",
     "signing",
     "expiresAt"
    ],
    "properties": {
     "transactions": {
      "type": "array",
      "items": {
       "type": "object",
       "additionalProperties": false,
       "required": [
        "transaction",
        "encoding",
        "version",
        "signers",
        "lookupTables",
        "recentBlockhash",
        "lastValidBlockHeight",
        "size"
       ],
       "properties": {
        "transaction": {
         "type": "string",
         "contentEncoding": "base64"
        },
        "encoding": {
         "type": "string",
         "enum": [
          "base64"
         ]
        },
        "version": {
         "type": "integer",
         "enum": [
          0
         ]
        },
        "signers": {
         "type": "array",
         "items": {
          "type": "string",
          "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
         }
        },
        "lookupTables": {
         "type": "array",
         "items": {
          "type": "string",
          "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
         }
        },
        "recentBlockhash": {
         "type": "string",
         "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
        },
        "lastValidBlockHeight": {
         "type": "integer"
        },
        "size": {
         "type": "integer"
        }
       }
      }
     },
     "simulation": {
      "type": "object",
      "additionalProperties": false,
      "required": [
       "ok",
       "unitsConsumed",
       "solCostLamports",
       "networkFeeLamports"
      ],
      "properties": {
       "ok": {
        "type": "boolean",
        "enum": [
         true
        ]
       },
       "unitsConsumed": {
        "type": [
         "integer",
         "null"
        ]
       },
       "solCostLamports": {
        "type": [
         "string",
         "null"
        ],
        "pattern": "^[0-9]{1,30}$",
        "description": "Base units as a decimal string."
       },
       "networkFeeLamports": {
        "type": [
         "string",
         "null"
        ],
        "pattern": "^[0-9]{1,30}$",
        "description": "Base units as a decimal string."
       }
      }
     },
     "coin": {
      "type": "object",
      "additionalProperties": false,
      "required": [
       "mint",
       "coinAuthority",
       "liquidityLedger",
       "pair",
       "rewardAsset"
      ],
      "properties": {
       "mint": {
        "type": "string",
        "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
       },
       "coinAuthority": {
        "type": "string",
        "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
       },
       "liquidityLedger": {
        "type": "string",
        "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
       },
       "pair": {
        "$ref": "#/components/schemas/Asset"
       },
       "rewardAsset": {
        "$ref": "#/components/schemas/Asset"
       }
      }
     },
     "intent": {
      "type": "object",
      "additionalProperties": false,
      "required": [
       "wallet",
       "mint",
       "name",
       "symbol",
       "uri",
       "pair",
       "rewards"
      ],
      "properties": {
       "wallet": {
        "type": "string",
        "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
       },
       "mint": {
        "type": "string",
        "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
       },
       "name": {
        "type": "string"
       },
       "symbol": {
        "type": "string"
       },
       "uri": {
        "type": "string"
       },
       "pair": {
        "type": "string"
       },
       "rewards": {
        "type": "string"
       }
      }
     },
     "signing": {
      "type": "string"
     },
     "expiresAt": {
      "type": "string",
      "format": "date-time"
     }
    }
   }
  }
 }
}
