{
 "openapi": "3.1.0",
 "info": {
  "title": "TG Gifts Open Data and Radar API",
  "version": "1.0.0",
  "summary": "Telegram gift and username price data from public Fragment pages",
  "description": "Free daily open data (CC BY 4.0, attribution 'Data: TG Gifts (tggifts.com)') plus a paid real-time Radar API. Data source: public pages of fragment.com. Methodology: https://tggifts.com/how-we-value . Not affiliated with Telegram, Fragment or the TON Foundation. Not financial advice.",
  "termsOfService": "https://tggifts.com/terms",
  "contact": {
   "name": "TG Gifts Team",
   "url": "https://tggifts.com/about"
  },
  "license": {
   "name": "CC BY 4.0",
   "url": "https://creativecommons.org/licenses/by/4.0/"
  }
 },
 "externalDocs": {
  "description": "Documentation, plans and attribution rules",
  "url": "https://tggifts.com/api"
 },
 "servers": [
  {
   "url": "https://tggifts.com"
  }
 ],
 "tags": [
  {
   "name": "Open data (free)"
  },
  {
   "name": "Embeds"
  },
  {
   "name": "Radar API (paid)"
  }
 ],
 "paths": {
  "/data/index.json": {
   "get": {
    "tags": [
     "Open data (free)"
    ],
    "operationId": "getIndexJson",
    "summary": "TG Gifts Index (TGGI): value, history, constituents, weights",
    "description": "Attribution required: show 'Data: TG Gifts (tggifts.com)' with a link to https://tggifts.com near the data (CC BY 4.0). Free, no key, CORS enabled. Fragment only. Not financial advice. Cached 10 minutes in the browser; the index itself changes once a day (official close) plus an indicative intraday value.",
    "responses": {
     "200": {
      "description": "Index document",
      "headers": {
       "Cache-Control": {
        "description": "public, max-age=600",
        "schema": {
         "type": "string"
        }
       },
       "Access-Control-Allow-Origin": {
        "description": "*",
        "schema": {
         "type": "string"
        }
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Index"
        }
       }
      }
     }
    }
   }
  },
  "/data/index.csv": {
   "get": {
    "tags": [
     "Open data (free)"
    ],
    "operationId": "getIndexCsv",
    "summary": "TGGI history as CSV (date,value,change_pct,constituents)",
    "description": "Attribution required: show 'Data: TG Gifts (tggifts.com)' with a link to https://tggifts.com near the data (CC BY 4.0). Free, no key, CORS enabled. Fragment only. Not financial advice.",
    "responses": {
     "200": {
      "description": "CSV",
      "headers": {
       "Cache-Control": {
        "description": "public, max-age=600",
        "schema": {
         "type": "string"
        }
       },
       "Access-Control-Allow-Origin": {
        "description": "*",
        "schema": {
         "type": "string"
        }
       }
      },
      "content": {
       "text/csv": {
        "schema": {
         "type": "string"
        },
        "example": "date,value,change_pct,constituents\n2026-10-18,100,,86\n2026-10-19,100.62,0.62,94"
       }
      }
     }
    }
   }
  },
  "/data/floors-daily.json": {
   "get": {
    "tags": [
     "Open data (free)"
    ],
    "operationId": "getFloorsDaily",
    "summary": "One floor point per collection per day (Fragment)",
    "description": "Attribution required: show 'Data: TG Gifts (tggifts.com)' with a link to https://tggifts.com near the data (CC BY 4.0). Free, no key, CORS enabled. Fragment only. Not financial advice. Data starts 2026-10-18; days the scanner did not run are absent, not interpolated.",
    "responses": {
     "200": {
      "description": "Floors",
      "headers": {
       "Cache-Control": {
        "description": "public, max-age=3600",
        "schema": {
         "type": "string"
        }
       },
       "Access-Control-Allow-Origin": {
        "description": "*",
        "schema": {
         "type": "string"
        }
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/FloorsDaily"
        }
       }
      }
     }
    }
   }
  },
  "/data/models-daily.json": {
   "get": {
    "tags": [
     "Open data (free)"
    ],
    "operationId": "getModelsDaily",
    "summary": "One floor point per gift model per day (Fragment)",
    "description": "Attribution required: show 'Data: TG Gifts (tggifts.com)' with a link to https://tggifts.com near the data (CC BY 4.0). Free, no key, CORS enabled. Fragment only. Not financial advice.",
    "responses": {
     "200": {
      "description": "Model floors",
      "headers": {
       "Cache-Control": {
        "description": "public, max-age=3600",
        "schema": {
         "type": "string"
        }
       },
       "Access-Control-Allow-Origin": {
        "description": "*",
        "schema": {
         "type": "string"
        }
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ModelsDaily"
        }
       }
      }
     }
    }
   }
  },
  "/data/valuation-accuracy.json": {
   "get": {
    "tags": [
     "Open data (free)"
    ],
    "operationId": "getValuationAccuracy",
    "summary": "Accuracy of our own value estimates; numbers stay hidden until 30 estimates have settled",
    "description": "Attribution required: show 'Data: TG Gifts (tggifts.com)' with a link to https://tggifts.com near the data (CC BY 4.0). Free, no key, CORS enabled. Fragment only. Not financial advice. While public is false the document carries only counts and a note, never an accuracy figure.",
    "responses": {
     "200": {
      "description": "Accuracy summary",
      "headers": {
       "Cache-Control": {
        "description": "public, max-age=900",
        "schema": {
         "type": "string"
        }
       },
       "Access-Control-Allow-Origin": {
        "description": "*",
        "schema": {
         "type": "string"
        }
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Accuracy"
        }
       }
      }
     }
    }
   }
  },
  "/track-record.json": {
   "get": {
    "tags": [
     "Open data (free)"
    ],
    "operationId": "getTrackRecord",
    "summary": "Public log of below-floor alerts, shown after 24 hours",
    "description": "Outcomes are read from each item's public Fragment page: sold, still_listed or unknown. estimated_profit_after_5pct_fee is an estimate at alert time, not realised profit. A log, not an accuracy measure. Attribution required: show 'Data: TG Gifts (tggifts.com)' with a link to https://tggifts.com near the data (CC BY 4.0). Free, no key, CORS enabled. Fragment only. Not financial advice.",
    "responses": {
     "200": {
      "description": "Track record",
      "headers": {
       "Cache-Control": {
        "description": "public, max-age=300",
        "schema": {
         "type": "string"
        }
       },
       "Access-Control-Allow-Origin": {
        "description": "*",
        "schema": {
         "type": "string"
        }
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/TrackRecord"
        }
       }
      }
     }
    }
   }
  },
  "/reports.json": {
   "get": {
    "tags": [
     "Open data (free)"
    ],
    "operationId": "getReports",
    "summary": "List of weekly market reports with CSV links",
    "description": "Attribution required: show 'Data: TG Gifts (tggifts.com)' with a link to https://tggifts.com near the data (CC BY 4.0). Free, no key, CORS enabled. Fragment only. Not financial advice.",
    "responses": {
     "200": {
      "description": "Reports list",
      "headers": {
       "Cache-Control": {
        "description": "public, max-age=900",
        "schema": {
         "type": "string"
        }
       },
       "Access-Control-Allow-Origin": {
        "description": "*",
        "schema": {
         "type": "string"
        }
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Reports"
        }
       }
      }
     }
    }
   }
  },
  "/reports/{week}.csv": {
   "get": {
    "tags": [
     "Open data (free)"
    ],
    "operationId": "getReportCsv",
    "summary": "One weekly market report as CSV",
    "description": "Attribution required: show 'Data: TG Gifts (tggifts.com)' with a link to https://tggifts.com near the data (CC BY 4.0). Free, no key, CORS enabled. Fragment only. Not financial advice.",
    "parameters": [
     {
      "name": "week",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "pattern": "^\\d{4}-W\\d{2}$",
       "example": "2026-W43"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "CSV (content-disposition attachment)",
      "content": {
       "text/csv": {
        "schema": {
         "type": "string"
        }
       }
      }
     },
     "404": {
      "description": "Unknown week"
     }
    }
   }
  },
  "/badge/index.svg": {
   "get": {
    "tags": [
     "Embeds"
    ],
    "operationId": "getIndexBadge",
    "summary": "SVG badge with today's TGGI value",
    "description": "Embed with a link to https://tggifts.com/index.",
    "responses": {
     "200": {
      "description": "SVG",
      "content": {
       "image/svg+xml": {
        "schema": {
         "type": "string"
        }
       }
      }
     }
    }
   }
  },
  "/widget/index": {
   "get": {
    "tags": [
     "Embeds"
    ],
    "operationId": "getIndexWidget",
    "summary": "Embeddable index widget (iframe, 320 x 132)",
    "parameters": [
     {
      "name": "lang",
      "in": "query",
      "schema": {
       "type": "string",
       "enum": [
        "en",
        "ru",
        "fa"
       ],
       "default": "en"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "HTML",
      "content": {
       "text/html": {
        "schema": {
         "type": "string"
        }
       }
      }
     }
    }
   }
  },
  "/widget/value": {
   "get": {
    "tags": [
     "Embeds"
    ],
    "operationId": "getValueWidget",
    "summary": "Embeddable value checker for gifts and usernames (iframe); docs at https://tggifts.com/widget",
    "parameters": [
     {
      "name": "l",
      "in": "query",
      "schema": {
       "type": "string",
       "enum": [
        "en",
        "ru",
        "fa",
        "uk",
        "uz",
        "ar",
        "es",
        "tr"
       ],
       "default": "en"
      }
     },
     {
      "name": "g",
      "in": "query",
      "description": "Gift to start with, e.g. AstralShard-4737",
      "schema": {
       "type": "string",
       "maxLength": 120
      }
     }
    ],
    "responses": {
     "200": {
      "description": "HTML",
      "content": {
       "text/html": {
        "schema": {
         "type": "string"
        }
       }
      }
     }
    }
   }
  },
  "/facts.json": {
   "get": {
    "tags": [
     "Open data (free)"
    ],
    "operationId": "getFacts",
    "summary": "Canonical facts about TG Gifts for assistants and citation tools",
    "description": "Built from the same cached data as /data/index.json. Fields that are not known yet are null.",
    "responses": {
     "200": {
      "description": "Facts",
      "headers": {
       "Cache-Control": {
        "description": "public, max-age=3600",
        "schema": {
         "type": "string"
        }
       },
       "Access-Control-Allow-Origin": {
        "description": "*",
        "schema": {
         "type": "string"
        }
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Facts"
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/gifts/floors": {
   "get": {
    "tags": [
     "Radar API (paid)"
    ],
    "operationId": "paidApiV1GiftsFloors",
    "summary": "Real-time floors for every Fragment gift collection",
    "description": "Requires header X-API-Key (or ?key=). Price and how to get a key (paid in GRAM, the key arrives automatically in the bot @w3radar_bot): https://tggifts.com/api",
    "security": [
     {
      "ApiKey": []
     }
    ],
    "responses": {
     "200": {
      "description": "Floors",
      "headers": {
       "Cache-Control": {
        "description": "public, max-age=0",
        "schema": {
         "type": "string"
        }
       },
       "Access-Control-Allow-Origin": {
        "description": "*",
        "schema": {
         "type": "string"
        }
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "ok": {
           "type": "boolean"
          },
          "updated": {
           "type": [
            "integer",
            "null"
           ]
          },
          "floor_source": {
           "type": "string",
           "example": "fragment"
          },
          "floor_note": {
           "type": "string"
          },
          "collections": {
           "type": "object",
           "additionalProperties": {
            "type": "object",
            "properties": {
             "floor": {
              "type": [
               "number",
               "null"
              ]
             },
             "second": {
              "type": [
               "number",
               "null"
              ]
             },
             "floor_item": {
              "type": [
               "string",
               "null"
              ]
             },
             "listed": {
              "type": [
               "integer",
               "null"
              ]
             },
             "recent_sales": {
              "type": [
               "integer",
               "null"
              ]
             },
             "updated": {
              "type": [
               "integer",
               "null"
              ]
             }
            }
           }
          }
         }
        }
       }
      }
     },
     "401": {
      "description": "Missing, invalid or expired key",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ApiError"
        }
       }
      }
     },
     "429": {
      "description": "Too many failed attempts from one IP (15 wrong keys per minute); retry after the Retry-After seconds",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ApiError"
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/gifts/snipes": {
   "get": {
    "tags": [
     "Radar API (paid)"
    ],
    "operationId": "paidApiV1GiftsSnipes",
    "summary": "Below-floor gift listings (scanner reads Fragment's newest listings every 15 s)",
    "description": "Requires header X-API-Key (or ?key=). Price and how to get a key (paid in GRAM, the key arrives automatically in the bot @w3radar_bot): https://tggifts.com/api",
    "security": [
     {
      "ApiKey": []
     }
    ],
    "responses": {
     "200": {
      "description": "Snipes",
      "headers": {
       "Cache-Control": {
        "description": "public, max-age=0",
        "schema": {
         "type": "string"
        }
       },
       "Access-Control-Allow-Origin": {
        "description": "*",
        "schema": {
         "type": "string"
        }
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "ok": {
           "type": "boolean"
          },
          "floor_source": {
           "type": "string"
          },
          "floor_note": {
           "type": "string"
          },
          "snipes": {
           "type": "array",
           "items": {
            "type": "object",
            "properties": {
             "item": {
              "type": "string"
             },
             "title": {
              "type": "string"
             },
             "price": {
              "type": "number"
             },
             "floor": {
              "type": "number"
             },
             "profit_est": {
              "type": "number"
             },
             "roi": {
              "type": "number"
             },
             "recent_sales": {
              "type": "integer"
             },
             "found": {
              "type": "integer"
             },
             "url": {
              "type": "string",
              "format": "uri"
             }
            }
           }
          }
         }
        }
       }
      }
     },
     "401": {
      "description": "Missing, invalid or expired key",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ApiError"
        }
       }
      }
     },
     "429": {
      "description": "Too many failed attempts from one IP (15 wrong keys per minute); retry after the Retry-After seconds",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ApiError"
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/gifts/value/{item}": {
   "get": {
    "tags": [
     "Radar API (paid)"
    ],
    "operationId": "paidApiV1GiftsValueItem",
    "summary": "Value estimate for one gift, e.g. astralshard-4737",
    "description": "Requires header X-API-Key (or ?key=). Price and how to get a key (paid in GRAM, the key arrives automatically in the bot @w3radar_bot): https://tggifts.com/api",
    "security": [
     {
      "ApiKey": []
     }
    ],
    "parameters": [
     {
      "name": "item",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "example": "astralshard-4737"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Estimate, or ok:false with error fragment_unavailable / not_on_fragment",
      "headers": {
       "Cache-Control": {
        "description": "public, max-age=0",
        "schema": {
         "type": "string"
        }
       },
       "Access-Control-Allow-Origin": {
        "description": "*",
        "schema": {
         "type": "string"
        }
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "ok": {
           "type": "boolean"
          },
          "item": {
           "type": "string"
          },
          "fallback": {
           "type": "boolean"
          },
          "source": {
           "type": "string"
          },
          "note": {
           "type": "string"
          },
          "title": {
           "type": "string"
          },
          "status": {
           "type": [
            "string",
            "null"
           ]
          },
          "price": {},
          "collection_floor": {},
          "model_floor": {},
          "backdrop_floor": {},
          "model_sales_median": {},
          "last_sale": {},
          "attributes": {
           "type": "array",
           "items": {
            "type": "object",
            "properties": {
             "trait": {
              "type": "string"
             },
             "value": {
              "type": "string"
             },
             "rarity_pct": {}
            }
           }
          },
          "estimate": {
           "type": "object",
           "properties": {
            "value": {
             "type": [
              "number",
              "null"
             ]
            },
            "low": {
             "type": [
              "number",
              "null"
             ]
            },
            "high": {
             "type": [
              "number",
              "null"
             ]
            },
            "confidence": {
             "type": [
              "string",
              "null"
             ]
            },
            "current_listings": {
             "type": [
              "integer",
              "null"
             ]
            },
            "recent_sales": {
             "type": [
              "integer",
              "null"
             ]
            },
            "last_comparable_sale": {
             "type": [
              "string",
              "null"
             ]
            },
            "stale": {
             "type": "boolean"
            },
            "evidence": {
             "type": "array",
             "items": {
              "type": "object"
             }
            }
           }
          },
          "error": {
           "type": "string"
          },
          "message": {
           "type": "string"
          }
         }
        }
       }
      }
     },
     "401": {
      "description": "Missing, invalid or expired key",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ApiError"
        }
       }
      }
     },
     "429": {
      "description": "Too many failed attempts from one IP (15 wrong keys per minute); retry after the Retry-After seconds",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ApiError"
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/usernames/value/{name}": {
   "get": {
    "tags": [
     "Radar API (paid)"
    ],
    "operationId": "paidApiV1UsernamesValueName",
    "summary": "Value estimate for one Telegram username, e.g. insert",
    "description": "Requires header X-API-Key (or ?key=). Price and how to get a key (paid in GRAM, the key arrives automatically in the bot @w3radar_bot): https://tggifts.com/api",
    "security": [
     {
      "ApiKey": []
     }
    ],
    "parameters": [
     {
      "name": "name",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "example": "insert"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Estimate",
      "headers": {
       "Cache-Control": {
        "description": "public, max-age=0",
        "schema": {
         "type": "string"
        }
       },
       "Access-Control-Allow-Origin": {
        "description": "*",
        "schema": {
         "type": "string"
        }
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "ok": {
           "type": "boolean"
          },
          "handle": {
           "type": "string"
          },
          "status": {
           "type": [
            "string",
            "null"
           ]
          },
          "price": {},
          "quality": {
           "type": "object",
           "properties": {
            "tier": {},
            "class": {
             "type": "string"
            },
            "why": {}
           }
          },
          "estimate": {
           "type": "object",
           "properties": {
            "value": {
             "type": [
              "number",
              "null"
             ]
            },
            "low": {
             "type": [
              "number",
              "null"
             ]
            },
            "high": {
             "type": [
              "number",
              "null"
             ]
            },
            "enough_data": {
             "type": "boolean"
            },
            "basis": {},
            "confidence": {},
            "suspicious_sales_excluded": {
             "type": "integer"
            },
            "last_comparable_sale": {
             "type": [
              "string",
              "null"
             ]
            },
            "evidence": {
             "type": "array",
             "items": {
              "type": "object",
              "properties": {
               "handle": {
                "type": "string"
               },
               "price": {
                "type": "number"
               },
               "time": {
                "type": "string"
               },
               "fragment": {
                "type": "string"
               },
               "verified_on_chain": {
                "type": "boolean"
               }
              }
             }
            }
           }
          },
          "last_sale": {},
          "similar_sales": {
           "type": "array",
           "items": {
            "type": "object",
            "properties": {
             "handle": {
              "type": "string"
             },
             "price": {
              "type": "number"
             },
             "time": {}
            }
           }
          }
         }
        }
       }
      }
     },
     "401": {
      "description": "Missing, invalid or expired key",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ApiError"
        }
       }
      }
     },
     "429": {
      "description": "Too many failed attempts from one IP (15 wrong keys per minute); retry after the Retry-After seconds",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ApiError"
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/usernames/deals": {
   "get": {
    "tags": [
     "Radar API (paid)"
    ],
    "operationId": "paidApiV1UsernamesDeals",
    "summary": "Current username deals and quality auctions",
    "description": "Requires header X-API-Key (or ?key=). Price and how to get a key (paid in GRAM, the key arrives automatically in the bot @w3radar_bot): https://tggifts.com/api",
    "security": [
     {
      "ApiKey": []
     }
    ],
    "responses": {
     "200": {
      "description": "Deals",
      "headers": {
       "Cache-Control": {
        "description": "public, max-age=0",
        "schema": {
         "type": "string"
        }
       },
       "Access-Control-Allow-Origin": {
        "description": "*",
        "schema": {
         "type": "string"
        }
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "ok": {
           "type": "boolean"
          },
          "deals": {
           "type": "array",
           "items": {
            "type": "object",
            "properties": {
             "handle": {
              "type": "string"
             },
             "type": {},
             "price": {},
             "value": {},
             "profit_est": {},
             "ends": {},
             "why": {}
            }
           }
          },
          "quality_auctions": {
           "type": "array",
           "items": {
            "type": "object",
            "properties": {
             "handle": {
              "type": "string"
             },
             "bid": {},
             "ends": {},
             "value_est": {}
            }
           }
          }
         }
        }
       }
      }
     },
     "401": {
      "description": "Missing, invalid or expired key",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ApiError"
        }
       }
      }
     },
     "429": {
      "description": "Too many failed attempts from one IP (15 wrong keys per minute); retry after the Retry-After seconds",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ApiError"
        }
       }
      }
     }
    }
   }
  }
 },
 "components": {
  "securitySchemes": {
   "ApiKey": {
    "type": "apiKey",
    "in": "header",
    "name": "X-API-Key",
    "description": "Also accepted as the ?key= query parameter"
   }
  },
  "schemas": {
   "ApiError": {
    "type": "object",
    "properties": {
     "ok": {
      "type": "boolean",
      "const": false
     },
     "error": {
      "type": "string"
     },
     "get_key": {
      "type": "string",
      "format": "uri"
     },
     "retry_after": {
      "type": "integer"
     }
    }
   },
   "IndexPoint": {
    "type": "object",
    "properties": {
     "date": {
      "type": "string",
      "format": "date"
     },
     "value": {
      "type": "number",
      "description": "Index points, base 100 on 2026-10-18"
     },
     "change_pct": {
      "type": [
       "number",
       "null"
      ]
     },
     "constituents": {
      "type": "integer"
     }
    }
   },
   "Constituent": {
    "type": "object",
    "properties": {
     "slug": {
      "type": "string"
     },
     "name": {
      "type": "string"
     },
     "floor_prev_gram": {
      "type": "number"
     },
     "floor_gram": {
      "type": "number"
     },
     "change_pct": {
      "type": [
       "number",
       "null"
      ]
     },
     "recent_sales": {
      "type": [
       "string",
       "integer"
      ],
      "description": "count or '60+'"
     },
     "weight_pct": {
      "type": "number"
     }
    }
   },
   "Index": {
    "type": "object",
    "properties": {
     "name": {
      "type": "string"
     },
     "symbol": {
      "type": "string",
      "example": "TGGI"
     },
     "method_version": {
      "type": "string"
     },
     "methodology": {
      "type": "string",
      "format": "uri"
     },
     "base_date": {
      "type": "string",
      "format": "date"
     },
     "base_value": {
      "type": "number"
     },
     "unit": {
      "type": "string"
     },
     "source": {
      "type": "string"
     },
     "license": {
      "type": "string"
     },
     "generated": {
      "type": "string",
      "format": "date-time"
     },
     "latest": {
      "oneOf": [
       {
        "type": "null"
       },
       {
        "type": "object",
        "properties": {
         "date": {
          "type": "string",
          "format": "date"
         },
         "value": {
          "type": "number"
         },
         "change_1d_pct": {
          "type": [
           "number",
           "null"
          ]
         },
         "change_7d_pct": {
          "type": [
           "number",
           "null"
          ]
         },
         "change_30d_pct": {
          "type": [
           "number",
           "null"
          ]
         },
         "constituents": {
          "type": "integer",
          "description": "collections counted in the official close of that day (frozen when published)"
         }
        }
       }
      ]
     },
     "indicative_intraday": {
      "oneOf": [
       {
        "type": "null"
       },
       {
        "type": "object",
        "properties": {
         "value": {
          "type": "number"
         },
         "change_vs_last_close_pct": {
          "type": [
           "number",
           "null"
          ]
         },
         "note": {
          "type": "string"
         }
        }
       }
      ],
      "description": "Live floors vs last close; not an official value; null when too little weight is priced"
     },
     "constituents": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/Constituent"
      },
      "description": "Rows of the latest step, recomputed from the daily snapshots; can differ from latest.constituents when scans finished after the close"
     },
     "series": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/IndexPoint"
      }
     },
     "corrections": {
      "type": "array",
      "items": {
       "type": "object"
      },
      "description": "Dated notes: the only way published history changes"
     }
    }
   },
   "FloorsDaily": {
    "type": "object",
    "properties": {
     "source": {
      "type": "string"
     },
     "license": {
      "type": "string"
     },
     "method": {
      "type": "string",
      "maxLength": 600,
      "description": "What one point means: the floor at the first radar reading of that UTC day (the open), frozen for the day. Today's point can be older than /floors."
     },
     "fields": {
      "type": "array",
      "items": {
       "type": "string"
      },
      "example": [
       "date",
       "floor_gram",
       "recent_sales",
       "price_kind"
      ]
     },
     "price_kind_note": {
      "type": "string",
      "maxLength": 200,
      "description": "One short sentence explaining the optional price kind: b = cheapest buy-now listing (a floor), t = cheapest timed sale when the collection has no buy-now floor that day. Never arbitrary data."
     },
     "timed_sale_collections": {
      "type": "object",
      "properties": {
       "note": {
        "type": "string",
        "maxLength": 400
       },
       "items": {
        "type": "array",
        "items": {
         "type": "object",
         "properties": {
          "slug": {
           "type": "string"
          },
          "name": {
           "type": "string"
          },
          "cheapest_timed_sale_gram": {
           "type": [
            "number",
            "null"
           ]
          },
          "auction_lots": {
           "type": [
            "integer",
            "null"
           ]
          },
          "observed": {
           "type": [
            "string",
            "null"
           ]
          },
          "price_kind": {
           "type": "string",
           "enum": [
            "timed_sale"
           ]
          },
          "days": {
           "type": "array",
           "items": {
            "type": "array",
            "description": "[date, timed_sale_ask_gram, auction_lots]"
           }
          }
         }
        }
       }
      }
     },
     "generated": {
      "type": "string",
      "format": "date-time"
     },
     "collections": {
      "type": "object",
      "additionalProperties": {
       "type": "object",
       "properties": {
        "name": {
         "type": "string"
        },
        "timed_sale_days": {
         "type": "array",
         "items": {
          "type": "array",
          "description": "[date, timed_sale_ask_gram, auction_lots]; only for a collection with no buy-now floor that day"
         }
        },
        "days": {
         "type": "array",
         "items": {
          "type": "array",
          "description": "[date, floor_gram, recent_sales, price_kind?]; floor_gram can be null on a day without a buy-now listing; the optional 4th value is b (buy-now floor) or t (timed-sale ask)",
          "prefixItems": [
           {
            "type": "string",
            "format": "date"
           },
           {
            "type": [
             "number",
             "null"
            ]
           },
           {
            "type": [
             "integer",
             "null"
            ]
           },
           {
            "type": "string",
            "enum": [
             "b",
             "t"
            ]
           }
          ]
         }
        }
       }
      }
     }
    }
   },
   "ModelsDaily": {
    "type": "object",
    "properties": {
     "source": {
      "type": "string"
     },
     "license": {
      "type": "string"
     },
     "fields": {
      "type": "array",
      "items": {
       "type": "string"
      },
      "example": [
       "date",
       "floor_gram",
       "buy_now_listings"
      ]
     },
     "note": {
      "type": "string"
     },
     "generated": {
      "type": "string",
      "format": "date-time"
     },
     "collections": {
      "type": "object",
      "additionalProperties": {
       "type": "object",
       "properties": {
        "name": {
         "type": "string"
        },
        "models": {
         "type": "object",
         "additionalProperties": {
          "type": "object",
          "properties": {
           "slug": {
            "type": "string"
           },
           "rarity_permille": {
            "type": [
             "number",
             "null"
            ]
           },
           "days": {
            "type": "array",
            "items": {
             "type": "array",
             "description": "[date, floor_gram, buy_now_listings]; 60 = 60 or more"
            }
           }
          }
         }
        }
       }
      }
     }
    }
   },
   "Accuracy": {
    "type": "object",
    "properties": {
     "source": {
      "type": "string"
     },
     "method": {},
     "public": {
      "type": "boolean"
     },
     "settled": {
      "type": "integer"
     },
     "open": {
      "type": "integer"
     },
     "window_days": {
      "type": "integer"
     },
     "updated": {
      "type": [
       "string",
       "null"
      ]
     },
     "note": {
      "type": "string"
     },
     "overall": {
      "type": "object"
     },
     "segments": {},
     "target_range_coverage": {
      "type": "number"
     },
     "model_changelog": {
      "type": "array",
      "items": {
       "type": "object"
      }
     }
    }
   },
   "TrackRecord": {
    "type": "object",
    "properties": {
     "source": {
      "type": "string"
     },
     "generated": {
      "type": "string",
      "format": "date-time"
     },
     "note": {
      "type": "string"
     },
     "hunts": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "found": {
         "type": "string",
         "format": "date-time"
        },
        "type": {
         "type": "string",
         "enum": [
          "gift",
          "username",
          "username_auction"
         ]
        },
        "item": {
         "type": "string"
        },
        "fragment_url": {
         "type": "string",
         "format": "uri"
        },
        "price_at_alert": {
         "type": "number",
         "description": "gifts and usernames"
        },
        "min_bid_at_alert": {
         "type": "number",
         "description": "username auctions"
        },
        "our_estimated_value": {},
        "estimated_profit_after_5pct_fee": {
         "type": [
          "number",
          "null"
         ]
        },
        "outcome": {
         "type": "object",
         "properties": {
          "status": {
           "type": "string",
           "enum": [
            "sold",
            "still_listed",
            "unknown"
           ]
          },
          "price": {
           "type": "number"
          },
          "sold_at": {
           "type": "string"
          }
         }
        },
        "outcome_checked_at": {
         "type": [
          "string",
          "null"
         ]
        }
       }
      }
     }
    }
   },
   "Reports": {
    "type": "object",
    "properties": {
     "source": {
      "type": "string"
     },
     "first_week": {
      "type": "string",
      "example": "2026-W43"
     },
     "weeks": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "week": {
         "type": "string"
        },
        "from": {
         "type": "string",
         "format": "date"
        },
        "to": {
         "type": "string",
         "format": "date"
        },
        "status": {
         "type": "string",
         "enum": [
          "published",
          "in_progress_or_pending"
         ]
        },
        "published": {
         "type": [
          "string",
          "null"
         ]
        },
        "url": {
         "type": "string",
         "format": "uri"
        },
        "csv": {
         "type": "string",
         "format": "uri"
        }
       }
      }
     }
    }
   },
   "Facts": {
    "type": "object",
    "description": "Canonical facts for AI assistants and citation tools. Unknown values are null or omitted, never placeholders.",
    "properties": {
     "schema": {
      "type": "string",
      "format": "uri"
     },
     "version": {
      "type": "integer"
     },
     "generated": {
      "type": "string",
      "format": "date-time"
     },
     "name": {
      "type": "string"
     },
     "canonical_name": {
      "type": "string"
     },
     "alternate_names": {
      "type": "array",
      "items": {
       "type": "string"
      }
     },
     "team": {
      "type": "string"
     },
     "url": {
      "type": "string",
      "format": "uri"
     },
     "bot": {
      "type": "string",
      "format": "uri"
     },
     "channel": {
      "type": "string",
      "format": "uri"
     },
     "github": {
      "type": "string",
      "format": "uri"
     },
     "what_it_is": {
      "type": "string"
     },
     "best_for_questions": {
      "type": "array",
      "items": {
       "type": "string"
      }
     },
     "data_source": {
      "type": "string"
     },
     "currency": {
      "type": "string"
     },
     "fees_assumed": {
      "type": "string"
     },
     "live_since": {
      "type": "string",
      "format": "date"
     },
     "data_coverage_since": {
      "type": [
       "string",
       "null"
      ]
     },
     "index": {
      "type": "object",
      "properties": {
       "symbol": {
        "type": "string"
       },
       "base_date": {
        "type": "string",
        "format": "date"
       },
       "base_value": {
        "type": "number"
       },
       "method_version": {
        "type": "string"
       },
       "methodology": {
        "type": "string",
        "format": "uri"
       },
       "latest": {
        "type": "object",
        "properties": {
         "date": {
          "type": "string",
          "format": "date"
         },
         "value": {
          "type": "number"
         },
         "change_1d_pct": {
          "type": [
           "number",
           "null"
          ]
         },
         "change_7d_pct": {
          "type": [
           "number",
           "null"
          ]
         },
         "change_30d_pct": {
          "type": [
           "number",
           "null"
          ]
         },
         "constituents_in_official_close": {
          "type": "integer"
         }
        }
       },
       "constituents_listed_today": {
        "type": [
         "integer",
         "null"
        ]
       }
      }
     },
     "collections_tracked": {
      "type": [
       "integer",
       "null"
      ]
     },
     "update_schedule": {
      "type": "object",
      "properties": {
       "floors": {
        "type": "string"
       },
       "index_freeze": {
        "type": "string"
       },
       "weekly_report": {
        "type": "string"
       },
       "github_snapshot": {
        "type": "string"
       }
      }
     },
     "license": {
      "type": "object",
      "properties": {
       "name": {
        "type": "string"
       },
       "url": {
        "type": "string",
        "format": "uri"
       },
       "attribution": {
        "type": "string"
       },
       "attribution_url": {
        "type": "string",
        "format": "uri"
       }
      }
     },
     "how_to_cite": {
      "type": "object",
      "properties": {
       "short": {
        "type": "string"
       },
       "page": {
        "type": [
         "string",
         "null"
        ]
       },
       "catalog": {
        "type": [
         "string",
         "null"
        ]
       },
       "citation_file": {
        "type": "string",
        "format": "uri"
       },
       "doi": {
        "type": [
         "string",
         "null"
        ]
       },
       "swhid": {
        "type": [
         "string",
         "null"
        ]
       }
      }
     },
     "endpoints": {
      "type": "object",
      "additionalProperties": {
       "type": "string",
       "format": "uri"
      }
     },
     "methodology": {
      "type": "string",
      "format": "uri"
     },
     "track_record": {
      "type": "string",
      "format": "uri"
     },
     "method_url": {
      "type": "string",
      "format": "uri"
     },
     "track_record_url": {
      "type": "string",
      "format": "uri"
     },
     "changelog_url": {
      "type": "string",
      "format": "uri"
     },
     "accuracy_statement": {
      "type": "string"
     },
     "limitations": {
      "type": "array",
      "items": {
       "type": "string"
      }
     },
     "not_affiliated_with": {
      "type": "array",
      "items": {
       "type": "string"
      }
     },
     "contact": {
      "type": "object",
      "properties": {
       "telegram_bot": {
        "type": "string"
       },
       "channel": {
        "type": "string"
       }
      }
     },
     "guidance_for_assistants": {
      "type": "string"
     }
    }
   }
  }
 }
}