{
  "openapi": "3.1.0",
  "info": {
    "title": "TradingAIHub public API",
    "version": "1.0.0",
    "summary": "Free, read-only, no-sign-in API for the TradingAIHub directory of AI tools for finance and trading.",
    "description": "Every MCP server, agent skill and API listed on https://tradingaihub.com, with pricing, license, packages and the weekly verification status. No API key, CORS enabled (`Access-Control-Allow-Origin: *`), JSON only. Rate limit: about 120 requests per minute per IP (enforced per edge instance, so treat it as a ceiling, not a guarantee); over the limit you get HTTP 429 with `Retry-After`. Responses are cacheable for 5 minutes. A remote MCP server with the same data is at https://tradingaihub.com/mcp. Data licence: CC BY 4.0, credit \"TradingAIHub, https://tradingaihub.com\"; code licence: MIT (API and MCP server code), see LICENSE-CODE in the repository. Not investment advice.",
    "termsOfService": "https://tradingaihub.com/terms/",
    "license": {
      "name": "CC BY 4.0",
      "url": "https://creativecommons.org/licenses/by/4.0/"
    },
    "contact": {
      "name": "TradingAIHub",
      "url": "https://tradingaihub.com/developers/",
      "email": "hello@tradingaihub.com"
    }
  },
  "externalDocs": {
    "description": "Developer docs, examples and MCP install snippets",
    "url": "https://tradingaihub.com/developers/"
  },
  "servers": [
    {
      "url": "https://tradingaihub.com"
    }
  ],
  "tags": [
    {
      "name": "tools"
    },
    {
      "name": "categories"
    },
    {
      "name": "dumps",
      "description": "Static full-data JSON files"
    }
  ],
  "paths": {
    "/api/v1/tools": {
      "get": {
        "operationId": "listTools",
        "tags": [
          "tools"
        ],
        "summary": "List tools, with filters and pagination",
        "parameters": [
          {
            "name": "category",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "market-data",
                "trading-brokers",
                "crypto",
                "accounting",
                "payments-banking",
                "personal-finance",
                "research-filings",
                "quant-backtesting",
                "macro"
              ]
            }
          },
          {
            "name": "type",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "mcp",
                "skill",
                "api"
              ]
            }
          },
          {
            "name": "language",
            "in": "query",
            "description": "Language of the published package: npm = javascript, PyPI = python. Tools without a package have no language.",
            "schema": {
              "type": "string",
              "enum": [
                "javascript",
                "python"
              ]
            }
          },
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "verified",
                "aging",
                "stale",
                "archived",
                "warning",
                "unconfirmed",
                "unreachable"
              ]
            }
          },
          {
            "name": "verified",
            "in": "query",
            "description": "true = only tools whose latest weekly check is `verified`; false = all others.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "official",
            "in": "query",
            "description": "true = only tools published by the vendor itself.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Matching tools (sorted by name).",
            "headers": {
              "Access-Control-Allow-Origin": {
                "$ref": "#/components/headers/ACAO"
              },
              "Cache-Control": {
                "$ref": "#/components/headers/CacheControl"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolList"
                }
              }
            }
          },
          "400": {
            "description": "Invalid parameter (JSON error body names the parameter and the allowed values).",
            "headers": {
              "Access-Control-Allow-Origin": {
                "$ref": "#/components/headers/ACAO"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed (only GET, HEAD and OPTIONS).",
            "headers": {
              "Access-Control-Allow-Origin": {
                "$ref": "#/components/headers/ACAO"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          }
        }
      }
    },
    "/api/v1/tools/{slug}": {
      "get": {
        "operationId": "getTool",
        "tags": [
          "tools"
        ],
        "summary": "One tool by slug",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9-]+$"
            },
            "example": "alpha-vantage-mcp"
          }
        ],
        "responses": {
          "200": {
            "description": "The tool.",
            "headers": {
              "Access-Control-Allow-Origin": {
                "$ref": "#/components/headers/ACAO"
              },
              "Cache-Control": {
                "$ref": "#/components/headers/CacheControl"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "license": {
                      "type": "string",
                      "const": "CC BY 4.0",
                      "description": "Licence of the data."
                    },
                    "license_url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "attribution": {
                      "type": "string",
                      "description": "Required credit when you reuse the data: \"TradingAIHub, https://tradingaihub.com\"."
                    },
                    "tool": {
                      "$ref": "#/components/schemas/Tool"
                    }
                  },
                  "required": [
                    "tool"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Invalid parameter (JSON error body names the parameter and the allowed values).",
            "headers": {
              "Access-Control-Allow-Origin": {
                "$ref": "#/components/headers/ACAO"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No tool with that slug.",
            "headers": {
              "Access-Control-Allow-Origin": {
                "$ref": "#/components/headers/ACAO"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed (only GET, HEAD and OPTIONS).",
            "headers": {
              "Access-Control-Allow-Origin": {
                "$ref": "#/components/headers/ACAO"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          }
        }
      }
    },
    "/api/v1/search": {
      "get": {
        "operationId": "searchTools",
        "tags": [
          "tools"
        ],
        "summary": "Full-text search over name, description, category and packages",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 100
            },
            "example": "stock prices"
          },
          {
            "name": "category",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "market-data",
                "trading-brokers",
                "crypto",
                "accounting",
                "payments-banking",
                "personal-finance",
                "research-filings",
                "quant-backtesting",
                "macro"
              ]
            }
          },
          {
            "name": "type",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "mcp",
                "skill",
                "api"
              ]
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 10
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Best matches first: tools matching every word of q, then partial matches.",
            "headers": {
              "Access-Control-Allow-Origin": {
                "$ref": "#/components/headers/ACAO"
              },
              "Cache-Control": {
                "$ref": "#/components/headers/CacheControl"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SearchResult"
                }
              }
            }
          },
          "400": {
            "description": "Invalid parameter (JSON error body names the parameter and the allowed values).",
            "headers": {
              "Access-Control-Allow-Origin": {
                "$ref": "#/components/headers/ACAO"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed (only GET, HEAD and OPTIONS).",
            "headers": {
              "Access-Control-Allow-Origin": {
                "$ref": "#/components/headers/ACAO"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          }
        }
      }
    },
    "/api/v1/categories": {
      "get": {
        "operationId": "listCategories",
        "tags": [
          "categories"
        ],
        "summary": "All categories with tool counts",
        "responses": {
          "200": {
            "description": "Categories.",
            "headers": {
              "Access-Control-Allow-Origin": {
                "$ref": "#/components/headers/ACAO"
              },
              "Cache-Control": {
                "$ref": "#/components/headers/CacheControl"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "license": {
                      "type": "string",
                      "const": "CC BY 4.0",
                      "description": "Licence of the data."
                    },
                    "license_url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "attribution": {
                      "type": "string",
                      "description": "Required credit when you reuse the data: \"TradingAIHub, https://tradingaihub.com\"."
                    },
                    "api_version": {
                      "type": "string"
                    },
                    "source": {
                      "type": "string",
                      "format": "uri"
                    },
                    "docs": {
                      "type": "string",
                      "format": "uri"
                    },
                    "terms": {
                      "type": "string",
                      "format": "uri"
                    },
                    "notice": {
                      "type": "string"
                    },
                    "data_checked_at": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "count": {
                      "type": "integer"
                    },
                    "categories": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Category"
                      }
                    }
                  },
                  "required": [
                    "count",
                    "categories"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Invalid parameter (JSON error body names the parameter and the allowed values).",
            "headers": {
              "Access-Control-Allow-Origin": {
                "$ref": "#/components/headers/ACAO"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed (only GET, HEAD and OPTIONS).",
            "headers": {
              "Access-Control-Allow-Origin": {
                "$ref": "#/components/headers/ACAO"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          }
        }
      }
    },
    "/api/v1/tools.json": {
      "get": {
        "operationId": "dumpTools",
        "tags": [
          "dumps"
        ],
        "summary": "Full dump of every tool (static file, same objects as /api/v1/tools)",
        "responses": {
          "200": {
            "description": "All tools.",
            "headers": {
              "Access-Control-Allow-Origin": {
                "$ref": "#/components/headers/ACAO"
              },
              "Cache-Control": {
                "$ref": "#/components/headers/CacheControl"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "license": {
                      "type": "string",
                      "const": "CC BY 4.0",
                      "description": "Licence of the data."
                    },
                    "license_url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "attribution": {
                      "type": "string",
                      "description": "Required credit when you reuse the data: \"TradingAIHub, https://tradingaihub.com\"."
                    },
                    "api_version": {
                      "type": "string"
                    },
                    "source": {
                      "type": "string",
                      "format": "uri"
                    },
                    "docs": {
                      "type": "string",
                      "format": "uri"
                    },
                    "terms": {
                      "type": "string",
                      "format": "uri"
                    },
                    "notice": {
                      "type": "string"
                    },
                    "data_checked_at": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "count": {
                      "type": "integer"
                    },
                    "tools": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Tool"
                      }
                    }
                  },
                  "required": [
                    "count",
                    "tools"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Invalid parameter (JSON error body names the parameter and the allowed values).",
            "headers": {
              "Access-Control-Allow-Origin": {
                "$ref": "#/components/headers/ACAO"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed (only GET, HEAD and OPTIONS).",
            "headers": {
              "Access-Control-Allow-Origin": {
                "$ref": "#/components/headers/ACAO"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          }
        }
      }
    },
    "/api/v1/categories.json": {
      "get": {
        "operationId": "dumpCategories",
        "tags": [
          "dumps"
        ],
        "summary": "Static copy of /api/v1/categories",
        "responses": {
          "200": {
            "$ref": "#/paths/~1api~1v1~1categories/get/responses/200"
          },
          "400": {
            "description": "Invalid parameter (JSON error body names the parameter and the allowed values).",
            "headers": {
              "Access-Control-Allow-Origin": {
                "$ref": "#/components/headers/ACAO"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed (only GET, HEAD and OPTIONS).",
            "headers": {
              "Access-Control-Allow-Origin": {
                "$ref": "#/components/headers/ACAO"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          }
        }
      }
    },
    "/api/openapi.json": {
      "get": {
        "operationId": "openapi",
        "tags": [
          "dumps"
        ],
        "summary": "This document",
        "responses": {
          "200": {
            "description": "OpenAPI 3.1 document",
            "content": {
              "application/json": {}
            }
          }
        }
      }
    }
  },
  "components": {
    "headers": {
      "ACAO": {
        "description": "Always `*`.",
        "schema": {
          "type": "string"
        }
      },
      "CacheControl": {
        "description": "`public, max-age=300, s-maxage=3600` on success.",
        "schema": {
          "type": "string"
        }
      },
      "RateLimitLimit": {
        "description": "Requests allowed per window.",
        "schema": {
          "type": "integer"
        }
      },
      "RateLimitRemaining": {
        "description": "Requests left in the current window.",
        "schema": {
          "type": "integer"
        }
      },
      "RateLimitReset": {
        "description": "Seconds until the window resets.",
        "schema": {
          "type": "integer"
        }
      }
    },
    "responses": {
      "RateLimited": {
        "description": "Too many requests (about 120/min per IP).",
        "headers": {
          "Retry-After": {
            "description": "Seconds to wait.",
            "schema": {
              "type": "integer"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      }
    },
    "schemas": {
      "Error": {
        "type": "object",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "object",
            "required": [
              "status",
              "code",
              "message"
            ],
            "properties": {
              "status": {
                "type": "integer"
              },
              "code": {
                "type": "string",
                "examples": [
                  "not_found",
                  "invalid_parameter",
                  "method_not_allowed",
                  "rate_limited"
                ]
              },
              "message": {
                "type": "string"
              },
              "allowed": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "Category": {
        "type": "object",
        "required": [
          "slug",
          "name",
          "count"
        ],
        "properties": {
          "slug": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "short": {
            "type": "string"
          },
          "icon": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "count": {
            "type": "integer"
          }
        }
      },
      "Tool": {
        "type": "object",
        "required": [
          "slug",
          "name",
          "type",
          "category",
          "description",
          "url",
          "website_url",
          "vendor_url",
          "affiliate",
          "disclosure",
          "status",
          "verified"
        ],
        "properties": {
          "slug": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "mcp",
              "skill",
              "api"
            ]
          },
          "type_label": {
            "type": "string"
          },
          "category": {
            "type": "string",
            "enum": [
              "market-data",
              "trading-brokers",
              "crypto",
              "accounting",
              "payments-banking",
              "personal-finance",
              "research-filings",
              "quant-backtesting",
              "macro"
            ]
          },
          "category_name": {
            "type": [
              "string",
              "null"
            ]
          },
          "description": {
            "type": "string"
          },
          "official": {
            "type": "boolean",
            "description": "Published by the vendor itself."
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "The tool's page on TradingAIHub."
          },
          "website_url": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri",
            "description": "The vendor link exactly as the TradingAIHub site renders it. For affiliate partners this is the tagged affiliate link (affiliate = true)."
          },
          "vendor_url": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri",
            "description": "The same vendor link, always plain (never tagged)."
          },
          "affiliate": {
            "type": "boolean",
            "description": "true when website_url is an affiliate link; TradingAIHub may earn a commission."
          },
          "disclosure": {
            "type": [
              "string",
              "null"
            ],
            "description": "Short English affiliate disclosure when affiliate is true, otherwise null."
          },
          "homepage": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri"
          },
          "docs": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri"
          },
          "repo": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri"
          },
          "remote_mcp_url": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri"
          },
          "license": {
            "type": [
              "string",
              "null"
            ]
          },
          "pricing": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "model": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "free_tier": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "paid_from": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "details": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "source": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "uri"
              },
              "checked": {
                "type": [
                  "string",
                  "null"
                ]
              }
            }
          },
          "languages": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "javascript",
                "python"
              ]
            }
          },
          "packages": {
            "type": "object",
            "properties": {
              "npm": {
                "type": [
                  "object",
                  "null"
                ],
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "version": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "url": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "uri"
                  }
                },
                "required": [
                  "name"
                ]
              },
              "pypi": {
                "type": [
                  "object",
                  "null"
                ],
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "version": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "url": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "uri"
                  }
                },
                "required": [
                  "name"
                ]
              }
            }
          },
          "install": {
            "type": [
              "object",
              "null"
            ],
            "description": "Set when the published package should not be used; clone the repo and run it from source.",
            "properties": {
              "from_source": {
                "type": "boolean"
              },
              "note": {
                "type": "string"
              }
            }
          },
          "status": {
            "type": "string",
            "enum": [
              "verified",
              "aging",
              "stale",
              "archived",
              "warning",
              "unconfirmed",
              "unreachable"
            ]
          },
          "status_label": {
            "type": "string"
          },
          "verified": {
            "type": "boolean"
          },
          "checked_at": {
            "type": [
              "string",
              "null"
            ]
          },
          "github": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "stars": {
                "type": [
                  "integer",
                  "null"
                ],
                "description": "null for shared collection repos"
              },
              "last_commit": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "archived": {
                "type": "boolean"
              },
              "collection": {
                "type": "boolean"
              }
            }
          }
        }
      },
      "ToolList": {
        "type": "object",
        "required": [
          "total",
          "count",
          "limit",
          "offset",
          "tools"
        ],
        "properties": {
          "license": {
            "type": "string",
            "const": "CC BY 4.0",
            "description": "Licence of the data."
          },
          "license_url": {
            "type": "string",
            "format": "uri"
          },
          "attribution": {
            "type": "string",
            "description": "Required credit when you reuse the data: \"TradingAIHub, https://tradingaihub.com\"."
          },
          "total": {
            "type": "integer"
          },
          "count": {
            "type": "integer"
          },
          "limit": {
            "type": "integer"
          },
          "offset": {
            "type": "integer"
          },
          "next": {
            "type": [
              "string",
              "null"
            ],
            "description": "URL of the next page, or null."
          },
          "tools": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Tool"
            }
          }
        }
      },
      "SearchResult": {
        "type": "object",
        "required": [
          "query",
          "count",
          "tools"
        ],
        "properties": {
          "license": {
            "type": "string",
            "const": "CC BY 4.0",
            "description": "Licence of the data."
          },
          "license_url": {
            "type": "string",
            "format": "uri"
          },
          "attribution": {
            "type": "string",
            "description": "Required credit when you reuse the data: \"TradingAIHub, https://tradingaihub.com\"."
          },
          "query": {
            "type": "string"
          },
          "count": {
            "type": "integer"
          },
          "tools": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Tool"
            }
          }
        }
      }
    }
  }
}