{
  "openapi": "3.1.0",
  "info": {
    "title": "stfin API Reference",
    "version": "0.1.0",
    "description": "Stooq source API for bluedoor Financial Data.\nStable static/CSV market data source with low-friction historical and quote access.\nCoverage: CSV quotes; Search; RSS; Market stats and economic calendar.\nGenerated from the live source contract and representative live API responses on 2026-06-07T01:30:59.456Z."
  },
  "servers": [
    {
      "url": "https://api.stfin.bluedoor.sh",
      "description": "stfin source API"
    }
  ],
  "externalDocs": {
    "description": "Stooq source API docs",
    "url": "https://bluedoor.sh/apis/financial-data/sources/stfin"
  },
  "tags": [
    {
      "name": "Calendars"
    },
    {
      "name": "News"
    },
    {
      "name": "Quotes"
    }
  ],
  "paths": {
    "/v1/constituents": {
      "get": {
        "operationId": "stfin_get_constituents",
        "summary": "Constituents",
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/stfin_get_constituentsResponse"
                },
                "examples": {
                  "live": {
                    "summary": "Live response",
                    "value": {
                      "meta": {
                        "provider": "stooq",
                        "route": "constituents",
                        "contract": "html_constituents:q_i",
                        "transport": "html",
                        "ttl_seconds": 3600,
                        "generated_at": "2026-06-07T01:28:13.204Z"
                      },
                      "data": {
                        "title": "",
                        "constituents": [],
                        "empty_reason": null,
                        "source_table_count": 0,
                        "source_headers": [],
                        "content_type": "text/html; charset=utf-8"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request. A required parameter is missing, malformed, or outside the supported range.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 400 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "bad_request",
                        "message": "Required query parameter is missing or invalid."
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. API-key authenticated tiers use an Authorization bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 401 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "unauthorized",
                        "message": "A valid API key is required for this tier."
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not found. The requested route, resource, or symbol could not be resolved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 404 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "not_found",
                        "message": "The requested resource was not found."
                      }
                    }
                  }
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 405 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "method_not_allowed",
                        "message": "This route does not support the requested HTTP method."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 429 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "rate_limited",
                        "message": "Too many requests. Retry after the rate-limit reset."
                      }
                    }
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream source error. The source service rejected or failed the upstream request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 502 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "upstream_error",
                        "message": "The upstream source returned an error."
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Origin unavailable or circuit open",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 503 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "service_unavailable",
                        "message": "The service is temporarily unavailable."
                      }
                    }
                  }
                }
              }
            }
          },
          "504": {
            "description": "Upstream timeout. The upstream source did not return within the source API timeout window.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 504 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "upstream_timeout",
                        "message": "The upstream source timed out."
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {},
          {
            "ContactEmail": []
          },
          {
            "BearerAuth": []
          },
          {
            "StfinApiKey": []
          }
        ],
        "description": "Returns constituents with source-native fields and identifiers.",
        "x-source-api": "stfin",
        "x-source-name": "Stooq",
        "x-source-upstream": "stooq.com",
        "parameters": [
          {
            "name": "symbol",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "^spx",
            "description": "Query parameter `symbol`."
          },
          {
            "name": "x-stfin-contact",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "format": "email"
            },
            "description": "Optional contact email for higher public rate limits and support diagnostics."
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "example": "Bearer <key>"
            },
            "description": "Optional API-key authorization for higher-volume access tiers."
          }
        ],
        "x-docs-example-url": "https://api.stfin.bluedoor.sh/v1/constituents?symbol=^spx",
        "x-docs-example-status": 200,
        "x-docs-captured-at": "2026-06-07T01:35:09.996Z"
      }
    },
    "/v1/corporate-actions": {
      "get": {
        "operationId": "stfin_get_corporate_actions",
        "summary": "Corporate actions",
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/stfin_get_corporate_actionsResponse"
                },
                "examples": {
                  "live": {
                    "summary": "Live response",
                    "value": {
                      "meta": {
                        "provider": "stooq",
                        "route": "corporate_actions",
                        "contract": "html_corporate_actions:q_m",
                        "transport": "html",
                        "ttl_seconds": 3600,
                        "generated_at": "2026-06-07T01:28:14.676Z"
                      },
                      "data": {
                        "title": "",
                        "actions": [],
                        "empty_reason": null,
                        "source_table_count": 0,
                        "content_type": "text/html; charset=utf-8"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request. A required parameter is missing, malformed, or outside the supported range.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 400 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "bad_request",
                        "message": "Required query parameter is missing or invalid."
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. API-key authenticated tiers use an Authorization bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 401 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "unauthorized",
                        "message": "A valid API key is required for this tier."
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not found. The requested route, resource, or symbol could not be resolved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 404 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "not_found",
                        "message": "The requested resource was not found."
                      }
                    }
                  }
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 405 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "method_not_allowed",
                        "message": "This route does not support the requested HTTP method."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 429 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "rate_limited",
                        "message": "Too many requests. Retry after the rate-limit reset."
                      }
                    }
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream source error. The source service rejected or failed the upstream request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 502 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "upstream_error",
                        "message": "The upstream source returned an error."
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Origin unavailable or circuit open",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 503 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "service_unavailable",
                        "message": "The service is temporarily unavailable."
                      }
                    }
                  }
                }
              }
            }
          },
          "504": {
            "description": "Upstream timeout. The upstream source did not return within the source API timeout window.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 504 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "upstream_timeout",
                        "message": "The upstream source timed out."
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {},
          {
            "ContactEmail": []
          },
          {
            "BearerAuth": []
          },
          {
            "StfinApiKey": []
          }
        ],
        "description": "Returns corporate actions with source-native dates, amounts, and security identifiers.",
        "x-source-api": "stfin",
        "x-source-name": "Stooq",
        "x-source-upstream": "stooq.com",
        "parameters": [
          {
            "name": "symbol",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "aapl.us",
            "description": "Query parameter `symbol`."
          },
          {
            "name": "x-stfin-contact",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "format": "email"
            },
            "description": "Optional contact email for higher public rate limits and support diagnostics."
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "example": "Bearer <key>"
            },
            "description": "Optional API-key authorization for higher-volume access tiers."
          }
        ],
        "x-docs-example-url": "https://api.stfin.bluedoor.sh/v1/corporate-actions?symbol=aapl.us",
        "x-docs-example-status": 200,
        "x-docs-captured-at": "2026-06-07T01:35:10.544Z"
      }
    },
    "/v1/group-quotes": {
      "get": {
        "operationId": "stfin_get_group_quotes",
        "summary": "Groups",
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/stfin_get_group_quotesResponse"
                },
                "examples": {
                  "live": {
                    "summary": "Live response",
                    "value": {
                      "meta": {
                        "provider": "stooq",
                        "route": "group_quotes",
                        "contract": "html_group_quotes:t_group",
                        "transport": "html",
                        "ttl_seconds": 300,
                        "generated_at": "2026-06-07T01:35:11.972Z"
                      },
                      "data": {
                        "title": "",
                        "sections": [],
                        "quotes": [],
                        "empty_reason": null,
                        "source_table_count": 0,
                        "content_type": "text/html; charset=utf-8"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request. A required parameter is missing, malformed, or outside the supported range.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 400 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "bad_request",
                        "message": "Required query parameter is missing or invalid."
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. API-key authenticated tiers use an Authorization bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 401 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "unauthorized",
                        "message": "A valid API key is required for this tier."
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not found. The requested route, resource, or symbol could not be resolved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 404 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "not_found",
                        "message": "The requested resource was not found."
                      }
                    }
                  }
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 405 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "method_not_allowed",
                        "message": "This route does not support the requested HTTP method."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 429 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "rate_limited",
                        "message": "Too many requests. Retry after the rate-limit reset."
                      }
                    }
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream source error. The source service rejected or failed the upstream request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 502 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "upstream_error",
                        "message": "The upstream source returned an error."
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Origin unavailable or circuit open",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 503 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "service_unavailable",
                        "message": "The service is temporarily unavailable."
                      }
                    }
                  }
                }
              }
            }
          },
          "504": {
            "description": "Upstream timeout. The upstream source did not return within the source API timeout window.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 504 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "upstream_timeout",
                        "message": "The upstream source timed out."
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {},
          {
            "ContactEmail": []
          },
          {
            "BearerAuth": []
          },
          {
            "StfinApiKey": []
          }
        ],
        "description": "Returns groups with source-native price, change, volume, and instrument fields.",
        "tags": [
          "Quotes"
        ],
        "x-source-api": "stfin",
        "x-source-name": "Stooq",
        "x-source-upstream": "stooq.com",
        "parameters": [
          {
            "name": "group",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "main_indices",
            "description": "Query parameter `group`."
          },
          {
            "name": "x-stfin-contact",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "format": "email"
            },
            "description": "Optional contact email for higher public rate limits and support diagnostics."
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "example": "Bearer <key>"
            },
            "description": "Optional API-key authorization for higher-volume access tiers."
          }
        ],
        "x-docs-example-url": "https://api.stfin.bluedoor.sh/v1/group-quotes?group=main_indices",
        "x-docs-example-status": 200,
        "x-docs-captured-at": "2026-06-07T01:35:12.230Z"
      }
    },
    "/v1/market-stats": {
      "get": {
        "operationId": "stfin_get_market_stats",
        "summary": "Market stats",
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/stfin_get_market_statsResponse"
                },
                "examples": {
                  "live": {
                    "summary": "Live response",
                    "value": {
                      "meta": {
                        "provider": "stooq",
                        "route": "market_stats",
                        "contract": "html_market_stats:t_s",
                        "transport": "html",
                        "ttl_seconds": 300,
                        "generated_at": "2026-06-07T01:35:13.426Z"
                      },
                      "data": {
                        "title": "",
                        "market_statistics": null,
                        "ranked_sections": [],
                        "empty_reason": null,
                        "source_table_count": 0,
                        "source_tables": [],
                        "content_type": "text/html; charset=utf-8"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request. A required parameter is missing, malformed, or outside the supported range.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 400 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "bad_request",
                        "message": "Required query parameter is missing or invalid."
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. API-key authenticated tiers use an Authorization bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 401 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "unauthorized",
                        "message": "A valid API key is required for this tier."
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not found. The requested route, resource, or symbol could not be resolved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 404 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "not_found",
                        "message": "The requested resource was not found."
                      }
                    }
                  }
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 405 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "method_not_allowed",
                        "message": "This route does not support the requested HTTP method."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 429 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "rate_limited",
                        "message": "Too many requests. Retry after the rate-limit reset."
                      }
                    }
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream source error. The source service rejected or failed the upstream request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 502 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "upstream_error",
                        "message": "The upstream source returned an error."
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Origin unavailable or circuit open",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 503 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "service_unavailable",
                        "message": "The service is temporarily unavailable."
                      }
                    }
                  }
                }
              }
            }
          },
          "504": {
            "description": "Upstream timeout. The upstream source did not return within the source API timeout window.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 504 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "upstream_timeout",
                        "message": "The upstream source timed out."
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {},
          {
            "ContactEmail": []
          },
          {
            "BearerAuth": []
          },
          {
            "StfinApiKey": []
          }
        ],
        "description": "Returns market stats with source-native fields and identifiers.",
        "x-source-api": "stfin",
        "x-source-name": "Stooq",
        "x-source-upstream": "stooq.com",
        "parameters": [
          {
            "name": "market",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "us",
            "description": "Query parameter `market`."
          },
          {
            "name": "view",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "summary",
            "description": "Query parameter `view`."
          },
          {
            "name": "x-stfin-contact",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "format": "email"
            },
            "description": "Optional contact email for higher public rate limits and support diagnostics."
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "example": "Bearer <key>"
            },
            "description": "Optional API-key authorization for higher-volume access tiers."
          }
        ],
        "x-docs-example-url": "https://api.stfin.bluedoor.sh/v1/market-stats?market=us&view=summary",
        "x-docs-example-status": 200,
        "x-docs-captured-at": "2026-06-07T01:35:13.664Z"
      }
    },
    "/v1/news": {
      "get": {
        "operationId": "stfin_get_news",
        "summary": "Headlines",
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/stfin_get_newsResponse"
                },
                "examples": {
                  "live": {
                    "summary": "Live response",
                    "value": {
                      "meta": {
                        "provider": "stooq",
                        "route": "news",
                        "contract": "html_news:n",
                        "transport": "html",
                        "ttl_seconds": 300,
                        "generated_at": "2026-06-07T01:35:14.402Z"
                      },
                      "data": {
                        "title": "",
                        "articles": [],
                        "source_table_count": 0,
                        "source_tables": [],
                        "empty_reason": null,
                        "content_type": "text/html; charset=utf-8"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request. A required parameter is missing, malformed, or outside the supported range.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 400 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "bad_request",
                        "message": "Required query parameter is missing or invalid."
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. API-key authenticated tiers use an Authorization bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 401 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "unauthorized",
                        "message": "A valid API key is required for this tier."
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not found. The requested route, resource, or symbol could not be resolved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 404 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "not_found",
                        "message": "The requested resource was not found."
                      }
                    }
                  }
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 405 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "method_not_allowed",
                        "message": "This route does not support the requested HTTP method."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 429 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "rate_limited",
                        "message": "Too many requests. Retry after the rate-limit reset."
                      }
                    }
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream source error. The source service rejected or failed the upstream request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 502 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "upstream_error",
                        "message": "The upstream source returned an error."
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Origin unavailable or circuit open",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 503 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "service_unavailable",
                        "message": "The service is temporarily unavailable."
                      }
                    }
                  }
                }
              }
            }
          },
          "504": {
            "description": "Upstream timeout. The upstream source did not return within the source API timeout window.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 504 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "upstream_timeout",
                        "message": "The upstream source timed out."
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {},
          {
            "ContactEmail": []
          },
          {
            "BearerAuth": []
          },
          {
            "StfinApiKey": []
          }
        ],
        "description": "Returns headlines with headline, timestamp, symbol, and source fields where available.",
        "tags": [
          "News"
        ],
        "x-source-api": "stfin",
        "x-source-name": "Stooq",
        "x-source-upstream": "stooq.com",
        "parameters": [
          {
            "name": "category",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "business",
            "description": "Query parameter `category`."
          },
          {
            "name": "x-stfin-contact",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "format": "email"
            },
            "description": "Optional contact email for higher public rate limits and support diagnostics."
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "example": "Bearer <key>"
            },
            "description": "Optional API-key authorization for higher-volume access tiers."
          }
        ],
        "x-docs-example-url": "https://api.stfin.bluedoor.sh/v1/news?category=business",
        "x-docs-example-status": 200,
        "x-docs-captured-at": "2026-06-07T01:35:14.673Z"
      }
    },
    "/v1/profile": {
      "get": {
        "operationId": "stfin_get_profile",
        "summary": "Profile",
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/stfin_get_profileResponse"
                },
                "examples": {
                  "live": {
                    "summary": "Live response",
                    "value": {
                      "meta": {
                        "provider": "stooq",
                        "route": "profile",
                        "contract": "html_profile:q_p",
                        "transport": "html",
                        "ttl_seconds": 3600,
                        "generated_at": "2026-06-07T01:28:18.516Z"
                      },
                      "data": {
                        "title": "",
                        "page": null,
                        "messages": [],
                        "no_data": false,
                        "related_links": [],
                        "empty_reason": null,
                        "source_table_count": 0,
                        "source_tables": [],
                        "text_preview": "",
                        "content_type": "text/html; charset=utf-8"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request. A required parameter is missing, malformed, or outside the supported range.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 400 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "bad_request",
                        "message": "Required query parameter is missing or invalid."
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. API-key authenticated tiers use an Authorization bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 401 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "unauthorized",
                        "message": "A valid API key is required for this tier."
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not found. The requested route, resource, or symbol could not be resolved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 404 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "not_found",
                        "message": "The requested resource was not found."
                      }
                    }
                  }
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 405 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "method_not_allowed",
                        "message": "This route does not support the requested HTTP method."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 429 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "rate_limited",
                        "message": "Too many requests. Retry after the rate-limit reset."
                      }
                    }
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream source error. The source service rejected or failed the upstream request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 502 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "upstream_error",
                        "message": "The upstream source returned an error."
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Origin unavailable or circuit open",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 503 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "service_unavailable",
                        "message": "The service is temporarily unavailable."
                      }
                    }
                  }
                }
              }
            }
          },
          "504": {
            "description": "Upstream timeout. The upstream source did not return within the source API timeout window.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 504 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "upstream_timeout",
                        "message": "The upstream source timed out."
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {},
          {
            "ContactEmail": []
          },
          {
            "BearerAuth": []
          },
          {
            "StfinApiKey": []
          }
        ],
        "description": "Returns profile with source-native fields and identifiers.",
        "x-source-api": "stfin",
        "x-source-name": "Stooq",
        "x-source-upstream": "stooq.com",
        "parameters": [
          {
            "name": "symbol",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "aapl.us",
            "description": "Query parameter `symbol`."
          },
          {
            "name": "x-stfin-contact",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "format": "email"
            },
            "description": "Optional contact email for higher public rate limits and support diagnostics."
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "example": "Bearer <key>"
            },
            "description": "Optional API-key authorization for higher-volume access tiers."
          }
        ],
        "x-docs-example-url": "https://api.stfin.bluedoor.sh/v1/profile?symbol=aapl.us",
        "x-docs-example-status": 200,
        "x-docs-captured-at": "2026-06-07T01:35:15.266Z"
      }
    },
    "/v1/quote-page": {
      "get": {
        "operationId": "stfin_get_quote_page",
        "summary": "Quote page",
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/stfin_get_quote_pageResponse"
                },
                "examples": {
                  "live": {
                    "summary": "Live response",
                    "value": {
                      "meta": {
                        "provider": "stooq",
                        "route": "quote_page",
                        "contract": "html_quote_page:q",
                        "transport": "html",
                        "ttl_seconds": 60,
                        "generated_at": "2026-06-07T01:35:15.966Z"
                      },
                      "data": {
                        "title": "",
                        "page": null,
                        "summary": {
                          "last_price": null,
                          "currency": null,
                          "observed_at": null,
                          "change": null,
                          "change_percent": null,
                          "day_high": null,
                          "day_low": null,
                          "fifty_two_week_change": null,
                          "fifty_two_week_change_percent": null,
                          "fifty_two_week_high": null,
                          "fifty_two_week_low": null,
                          "open": null,
                          "previous_close": null,
                          "bid": null,
                          "ask": null,
                          "volume": null,
                          "turnover": null,
                          "open_interest": null,
                          "trades": null,
                          "returns": {},
                          "operations": [],
                          "source_pairs": []
                        },
                        "autoquote": null,
                        "autoquote_symbol": null,
                        "source_autoquote_fields": {},
                        "empty_reason": null,
                        "source_table_count": 0,
                        "source_tables": [],
                        "content_type": "text/html; charset=utf-8"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request. A required parameter is missing, malformed, or outside the supported range.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 400 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "bad_request",
                        "message": "Required query parameter is missing or invalid."
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. API-key authenticated tiers use an Authorization bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 401 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "unauthorized",
                        "message": "A valid API key is required for this tier."
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not found. The requested route, resource, or symbol could not be resolved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 404 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "not_found",
                        "message": "The requested resource was not found."
                      }
                    }
                  }
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 405 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "method_not_allowed",
                        "message": "This route does not support the requested HTTP method."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 429 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "rate_limited",
                        "message": "Too many requests. Retry after the rate-limit reset."
                      }
                    }
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream source error. The source service rejected or failed the upstream request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 502 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "upstream_error",
                        "message": "The upstream source returned an error."
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Origin unavailable or circuit open",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 503 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "service_unavailable",
                        "message": "The service is temporarily unavailable."
                      }
                    }
                  }
                }
              }
            }
          },
          "504": {
            "description": "Upstream timeout. The upstream source did not return within the source API timeout window.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 504 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "upstream_timeout",
                        "message": "The upstream source timed out."
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {},
          {
            "ContactEmail": []
          },
          {
            "BearerAuth": []
          },
          {
            "StfinApiKey": []
          }
        ],
        "description": "Returns quote page with source-native price, change, volume, and instrument fields.",
        "tags": [
          "Quotes"
        ],
        "x-source-api": "stfin",
        "x-source-name": "Stooq",
        "x-source-upstream": "stooq.com",
        "parameters": [
          {
            "name": "symbol",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "spy.us",
            "description": "Query parameter `symbol`."
          },
          {
            "name": "x-stfin-contact",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "format": "email"
            },
            "description": "Optional contact email for higher public rate limits and support diagnostics."
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "example": "Bearer <key>"
            },
            "description": "Optional API-key authorization for higher-volume access tiers."
          }
        ],
        "x-docs-example-url": "https://api.stfin.bluedoor.sh/v1/quote-page?symbol=spy.us",
        "x-docs-example-status": 200,
        "x-docs-captured-at": "2026-06-07T01:35:16.197Z"
      }
    },
    "/v1/quotes": {
      "get": {
        "operationId": "stfin_get_quotes",
        "summary": "Snapshots",
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/stfin_get_quotesResponse"
                },
                "examples": {
                  "live": {
                    "summary": "Live response",
                    "value": {
                      "meta": {
                        "provider": "stooq",
                        "route": "quotes",
                        "contract": "quote_list_csv:q_l",
                        "transport": "csv",
                        "ttl_seconds": 60,
                        "generated_at": "2026-06-07T01:35:16.939Z"
                      },
                      "data": {
                        "quotes": [
                          {
                            "this_site_requires_javascript_to_verify_your_browser_please_enable_javascript_and_reload": "(async()=>{const c=AAAAAGokytRKCFBxmYeXYfn0lWTIMC_WbKL1mlzizvTuK0kVNGPGofgur4I"
                          },
                          {
                            "this_site_requires_javascript_to_verify_your_browser_please_enable_javascript_and_reload": null
                          }
                        ],
                        "source_headers": [
                          "This site requires JavaScript to verify your browser. Please enable JavaScript and reload."
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request. A required parameter is missing, malformed, or outside the supported range.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 400 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "bad_request",
                        "message": "Required query parameter is missing or invalid."
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. API-key authenticated tiers use an Authorization bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 401 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "unauthorized",
                        "message": "A valid API key is required for this tier."
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not found. The requested route, resource, or symbol could not be resolved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 404 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "not_found",
                        "message": "The requested resource was not found."
                      }
                    }
                  }
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 405 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "method_not_allowed",
                        "message": "This route does not support the requested HTTP method."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 429 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "rate_limited",
                        "message": "Too many requests. Retry after the rate-limit reset."
                      }
                    }
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream source error. The source service rejected or failed the upstream request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 502 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "upstream_error",
                        "message": "The upstream source returned an error."
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Origin unavailable or circuit open",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 503 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "service_unavailable",
                        "message": "The service is temporarily unavailable."
                      }
                    }
                  }
                }
              }
            }
          },
          "504": {
            "description": "Upstream timeout. The upstream source did not return within the source API timeout window.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 504 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "upstream_timeout",
                        "message": "The upstream source timed out."
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {},
          {
            "ContactEmail": []
          },
          {
            "BearerAuth": []
          },
          {
            "StfinApiKey": []
          }
        ],
        "description": "Returns snapshots with source-native price, change, volume, and instrument fields.",
        "tags": [
          "Quotes"
        ],
        "x-source-api": "stfin",
        "x-source-name": "Stooq",
        "x-source-upstream": "stooq.com",
        "parameters": [
          {
            "name": "symbols",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "spy.us,aapl.us",
            "description": "Query parameter `symbols`."
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "sd2t2ohlcv",
            "description": "Query parameter `fields`."
          },
          {
            "name": "x-stfin-contact",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "format": "email"
            },
            "description": "Optional contact email for higher public rate limits and support diagnostics."
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "example": "Bearer <key>"
            },
            "description": "Optional API-key authorization for higher-volume access tiers."
          }
        ],
        "x-docs-example-url": "https://api.stfin.bluedoor.sh/v1/quotes?symbols=spy.us,aapl.us&fields=sd2t2ohlcv",
        "x-docs-example-status": 200,
        "x-docs-captured-at": "2026-06-07T01:35:17.191Z"
      }
    },
    "/v1/rss": {
      "get": {
        "operationId": "stfin_get_rss",
        "summary": "RSS feed",
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/stfin_get_rssResponse"
                },
                "examples": {
                  "live": {
                    "summary": "Live response",
                    "value": {
                      "meta": {
                        "provider": "stooq",
                        "route": "rss",
                        "contract": "news_rss:rss",
                        "transport": "xml",
                        "ttl_seconds": 300,
                        "generated_at": "2026-06-07T01:35:19.003Z"
                      },
                      "data": {
                        "title": "Stooq - Wiadomości Biznes",
                        "items": [
                          {
                            "title": "Boeing może zapewnić Chinom wsparcie posprzedażowe dla zamówienia na 200 samolotów, twierdzi przedstawiciel firmy",
                            "link": "https://stooq.pl/n/?f=1763394",
                            "guid": "",
                            "published_at": "Sun, 07 Jun 2026 00:27:27 GMT",
                            "description": ""
                          },
                          {
                            "title": "Konsorcjum z Bouygues podpisuje umowę wartą 23,44 mld USD na przejęcie SFR od Altice France",
                            "link": "https://stooq.pl/n/?f=1763393",
                            "guid": "",
                            "published_at": "Sun, 07 Jun 2026 00:19:00 GMT",
                            "description": ""
                          },
                          {
                            "title": "Kuba - Pięć firm zamknęło w czerwcu hotele na wyspie; łącznie blisko 100 obiektów",
                            "link": "https://stooq.pl/n/?f=1763392",
                            "guid": "",
                            "published_at": "Sun, 07 Jun 2026 00:01:26 GMT",
                            "description": ""
                          }
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request. A required parameter is missing, malformed, or outside the supported range.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 400 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "bad_request",
                        "message": "Required query parameter is missing or invalid."
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. API-key authenticated tiers use an Authorization bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 401 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "unauthorized",
                        "message": "A valid API key is required for this tier."
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not found. The requested route, resource, or symbol could not be resolved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 404 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "not_found",
                        "message": "The requested resource was not found."
                      }
                    }
                  }
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 405 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "method_not_allowed",
                        "message": "This route does not support the requested HTTP method."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 429 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "rate_limited",
                        "message": "Too many requests. Retry after the rate-limit reset."
                      }
                    }
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream source error. The source service rejected or failed the upstream request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 502 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "upstream_error",
                        "message": "The upstream source returned an error."
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Origin unavailable or circuit open",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 503 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "service_unavailable",
                        "message": "The service is temporarily unavailable."
                      }
                    }
                  }
                }
              }
            }
          },
          "504": {
            "description": "Upstream timeout. The upstream source did not return within the source API timeout window.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 504 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "upstream_timeout",
                        "message": "The upstream source timed out."
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {},
          {
            "ContactEmail": []
          },
          {
            "BearerAuth": []
          },
          {
            "StfinApiKey": []
          }
        ],
        "description": "Returns RSS feed with source-native fields and identifiers.",
        "x-source-api": "stfin",
        "x-source-name": "Stooq",
        "x-source-upstream": "stooq.com",
        "parameters": [
          {
            "name": "feed",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "b",
            "description": "Query parameter `feed`."
          },
          {
            "name": "x-stfin-contact",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "format": "email"
            },
            "description": "Optional contact email for higher public rate limits and support diagnostics."
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "example": "Bearer <key>"
            },
            "description": "Optional API-key authorization for higher-volume access tiers."
          }
        ],
        "x-docs-example-url": "https://api.stfin.bluedoor.sh/v1/rss?feed=b",
        "x-docs-example-status": 200,
        "x-docs-captured-at": "2026-06-07T01:35:19.270Z"
      }
    },
    "/v1/search": {
      "get": {
        "operationId": "stfin_get_search",
        "summary": "Search",
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/stfin_get_searchResponse"
                },
                "examples": {
                  "live": {
                    "summary": "Live response",
                    "value": {
                      "meta": {
                        "provider": "stooq",
                        "route": "search",
                        "contract": "symbol_search:cmp",
                        "transport": "javascript",
                        "ttl_seconds": 300,
                        "generated_at": "2026-06-07T01:35:20.013Z"
                      },
                      "data": {
                        "suggestions": [
                          {
                            "symbol": "This site requires JavaScript to verify your browser. Please enable JavaScript and reload. (async()=>{const c=\"AAAAAGokytaSNcQio7vAIEY874JRA-57bKL1myezFD7kGIgBcOhe8QsE2V8\",d=4,t=\"0\".repeat(d),e=new TextEncoder;let n=0;while(1){const h=await crypto.subtle.digest(\"SHA-256\",e.encode(c+n)),x=Array.from(new Uint8Array(h)).m...",
                            "name": "",
                            "exchange": "",
                            "last": null,
                            "change_percent": null,
                            "asset_type_code": null
                          }
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request. A required parameter is missing, malformed, or outside the supported range.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 400 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "bad_request",
                        "message": "Required query parameter is missing or invalid."
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. API-key authenticated tiers use an Authorization bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 401 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "unauthorized",
                        "message": "A valid API key is required for this tier."
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not found. The requested route, resource, or symbol could not be resolved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 404 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "not_found",
                        "message": "The requested resource was not found."
                      }
                    }
                  }
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 405 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "method_not_allowed",
                        "message": "This route does not support the requested HTTP method."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 429 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "rate_limited",
                        "message": "Too many requests. Retry after the rate-limit reset."
                      }
                    }
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream source error. The source service rejected or failed the upstream request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 502 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "upstream_error",
                        "message": "The upstream source returned an error."
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Origin unavailable or circuit open",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 503 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "service_unavailable",
                        "message": "The service is temporarily unavailable."
                      }
                    }
                  }
                }
              }
            }
          },
          "504": {
            "description": "Upstream timeout. The upstream source did not return within the source API timeout window.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 504 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "upstream_timeout",
                        "message": "The upstream source timed out."
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {},
          {
            "ContactEmail": []
          },
          {
            "BearerAuth": []
          },
          {
            "StfinApiKey": []
          }
        ],
        "description": "Searches Stooq data and returns source-native matches and identifiers.",
        "x-source-api": "stfin",
        "x-source-name": "Stooq",
        "x-source-upstream": "stooq.com",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "aapl",
            "description": "Query parameter `q`."
          },
          {
            "name": "x-stfin-contact",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "format": "email"
            },
            "description": "Optional contact email for higher public rate limits and support diagnostics."
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "example": "Bearer <key>"
            },
            "description": "Optional API-key authorization for higher-volume access tiers."
          }
        ],
        "x-docs-example-url": "https://api.stfin.bluedoor.sh/v1/search?q=aapl",
        "x-docs-example-status": 200,
        "x-docs-captured-at": "2026-06-07T01:35:20.262Z"
      }
    },
    "/v1/ticker-rank": {
      "get": {
        "operationId": "stfin_get_ticker_rank",
        "summary": "Ticker rank",
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/stfin_get_ticker_rankResponse"
                },
                "examples": {
                  "live": {
                    "summary": "Live response",
                    "value": {
                      "meta": {
                        "provider": "stooq",
                        "route": "ticker_rank",
                        "contract": "html_ticker_rank:t_tr",
                        "transport": "html",
                        "ttl_seconds": 300,
                        "generated_at": "2026-06-07T01:35:21.019Z"
                      },
                      "data": {
                        "title": "",
                        "rankings": [],
                        "empty_reason": null,
                        "source_table_count": 0,
                        "content_type": "text/html; charset=utf-8"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request. A required parameter is missing, malformed, or outside the supported range.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 400 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "bad_request",
                        "message": "Required query parameter is missing or invalid."
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. API-key authenticated tiers use an Authorization bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 401 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "unauthorized",
                        "message": "A valid API key is required for this tier."
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not found. The requested route, resource, or symbol could not be resolved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 404 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "not_found",
                        "message": "The requested resource was not found."
                      }
                    }
                  }
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 405 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "method_not_allowed",
                        "message": "This route does not support the requested HTTP method."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 429 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "rate_limited",
                        "message": "Too many requests. Retry after the rate-limit reset."
                      }
                    }
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream source error. The source service rejected or failed the upstream request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 502 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "upstream_error",
                        "message": "The upstream source returned an error."
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Origin unavailable or circuit open",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 503 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "service_unavailable",
                        "message": "The service is temporarily unavailable."
                      }
                    }
                  }
                }
              }
            }
          },
          "504": {
            "description": "Upstream timeout. The upstream source did not return within the source API timeout window.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 504 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "upstream_timeout",
                        "message": "The upstream source timed out."
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {},
          {
            "ContactEmail": []
          },
          {
            "BearerAuth": []
          },
          {
            "StfinApiKey": []
          }
        ],
        "description": "Returns ticker rank with source-native fields and identifiers.",
        "x-source-api": "stfin",
        "x-source-name": "Stooq",
        "x-source-upstream": "stooq.com",
        "parameters": [
          {
            "name": "symbol",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "spy.us",
            "description": "Query parameter `symbol`."
          },
          {
            "name": "market",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "us",
            "description": "Query parameter `market`."
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "example": "1",
            "description": "Query parameter `page`."
          },
          {
            "name": "x-stfin-contact",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "format": "email"
            },
            "description": "Optional contact email for higher public rate limits and support diagnostics."
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "example": "Bearer <key>"
            },
            "description": "Optional API-key authorization for higher-volume access tiers."
          }
        ],
        "x-docs-example-url": "https://api.stfin.bluedoor.sh/v1/ticker-rank?symbol=spy.us&market=us&page=1",
        "x-docs-example-status": 200,
        "x-docs-captured-at": "2026-06-07T01:35:21.246Z"
      }
    },
    "/v1/calendar/company": {
      "get": {
        "operationId": "stfin_get_calendar_company",
        "summary": "Company events",
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/stfin_get_calendar_companyResponse"
                },
                "examples": {
                  "live": {
                    "summary": "Live response",
                    "value": {
                      "meta": {
                        "provider": "stooq",
                        "route": "company_calendar",
                        "contract": "html_company_calendar:kalendarium_c",
                        "transport": "html",
                        "ttl_seconds": 300,
                        "generated_at": "2026-06-07T01:35:21.954Z"
                      },
                      "data": {
                        "title": "",
                        "days": [],
                        "events": [],
                        "empty_reason": null,
                        "no_data": false,
                        "source_table_count": 0,
                        "content_type": "text/html; charset=utf-8"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request. A required parameter is missing, malformed, or outside the supported range.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 400 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "bad_request",
                        "message": "Required query parameter is missing or invalid."
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. API-key authenticated tiers use an Authorization bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 401 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "unauthorized",
                        "message": "A valid API key is required for this tier."
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not found. The requested route, resource, or symbol could not be resolved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 404 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "not_found",
                        "message": "The requested resource was not found."
                      }
                    }
                  }
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 405 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "method_not_allowed",
                        "message": "This route does not support the requested HTTP method."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 429 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "rate_limited",
                        "message": "Too many requests. Retry after the rate-limit reset."
                      }
                    }
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream source error. The source service rejected or failed the upstream request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 502 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "upstream_error",
                        "message": "The upstream source returned an error."
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Origin unavailable or circuit open",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 503 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "service_unavailable",
                        "message": "The service is temporarily unavailable."
                      }
                    }
                  }
                }
              }
            }
          },
          "504": {
            "description": "Upstream timeout. The upstream source did not return within the source API timeout window.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 504 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "upstream_timeout",
                        "message": "The upstream source timed out."
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {},
          {
            "ContactEmail": []
          },
          {
            "BearerAuth": []
          },
          {
            "StfinApiKey": []
          }
        ],
        "description": "Returns company events with source-native dates, event fields, and pagination where available.",
        "tags": [
          "Calendars"
        ],
        "x-source-api": "stfin",
        "x-source-name": "Stooq",
        "x-source-upstream": "stooq.com",
        "parameters": [
          {
            "name": "section",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "all",
            "description": "Query parameter `section`."
          },
          {
            "name": "x-stfin-contact",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "format": "email"
            },
            "description": "Optional contact email for higher public rate limits and support diagnostics."
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "example": "Bearer <key>"
            },
            "description": "Optional API-key authorization for higher-volume access tiers."
          }
        ],
        "x-docs-example-url": "https://api.stfin.bluedoor.sh/v1/calendar/company?section=all",
        "x-docs-example-status": 200,
        "x-docs-captured-at": "2026-06-07T01:35:22.192Z"
      }
    },
    "/v1/calendar/economic": {
      "get": {
        "operationId": "stfin_get_calendar_economic",
        "summary": "Economic events",
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/stfin_get_calendar_economicResponse"
                },
                "examples": {
                  "live": {
                    "summary": "Live response",
                    "value": {
                      "meta": {
                        "provider": "stooq",
                        "route": "economic_calendar",
                        "contract": "html_calendar:kalendarium",
                        "transport": "html",
                        "ttl_seconds": 300,
                        "generated_at": "2026-06-07T01:35:22.975Z"
                      },
                      "data": {
                        "title": "",
                        "time_zone": null,
                        "days": [],
                        "events": [],
                        "empty_reason": null,
                        "source_table_count": 0,
                        "content_type": "text/html; charset=utf-8"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request. A required parameter is missing, malformed, or outside the supported range.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 400 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "bad_request",
                        "message": "Required query parameter is missing or invalid."
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. API-key authenticated tiers use an Authorization bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 401 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "unauthorized",
                        "message": "A valid API key is required for this tier."
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not found. The requested route, resource, or symbol could not be resolved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 404 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "not_found",
                        "message": "The requested resource was not found."
                      }
                    }
                  }
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 405 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "method_not_allowed",
                        "message": "This route does not support the requested HTTP method."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 429 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "rate_limited",
                        "message": "Too many requests. Retry after the rate-limit reset."
                      }
                    }
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream source error. The source service rejected or failed the upstream request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 502 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "upstream_error",
                        "message": "The upstream source returned an error."
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Origin unavailable or circuit open",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 503 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "service_unavailable",
                        "message": "The service is temporarily unavailable."
                      }
                    }
                  }
                }
              }
            }
          },
          "504": {
            "description": "Upstream timeout. The upstream source did not return within the source API timeout window.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 504 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "upstream_timeout",
                        "message": "The upstream source timed out."
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {},
          {
            "ContactEmail": []
          },
          {
            "BearerAuth": []
          },
          {
            "StfinApiKey": []
          }
        ],
        "description": "Returns economic events with source-native dates, event fields, and pagination where available.",
        "tags": [
          "Calendars"
        ],
        "x-source-api": "stfin",
        "x-source-name": "Stooq",
        "x-source-upstream": "stooq.com",
        "parameters": [
          {
            "name": "region",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "us",
            "description": "Query parameter `region`."
          },
          {
            "name": "x-stfin-contact",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "format": "email"
            },
            "description": "Optional contact email for higher public rate limits and support diagnostics."
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "example": "Bearer <key>"
            },
            "description": "Optional API-key authorization for higher-volume access tiers."
          }
        ],
        "x-docs-example-url": "https://api.stfin.bluedoor.sh/v1/calendar/economic?region=us",
        "x-docs-example-status": 200,
        "x-docs-captured-at": "2026-06-07T01:35:23.251Z"
      }
    },
    "/v1/news/symbol": {
      "get": {
        "operationId": "stfin_get_news_symbol",
        "summary": "Symbol news",
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/stfin_get_news_symbolResponse"
                },
                "examples": {
                  "live": {
                    "summary": "Live response",
                    "value": {
                      "meta": {
                        "provider": "stooq",
                        "route": "symbol_news",
                        "contract": "html_symbol_news:q_n",
                        "transport": "html",
                        "ttl_seconds": 300,
                        "generated_at": "2026-06-07T01:35:23.974Z"
                      },
                      "data": {
                        "title": "",
                        "articles": [],
                        "source_table_count": 0,
                        "source_tables": [],
                        "empty_reason": null,
                        "content_type": "text/html; charset=utf-8"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request. A required parameter is missing, malformed, or outside the supported range.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 400 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "bad_request",
                        "message": "Required query parameter is missing or invalid."
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. API-key authenticated tiers use an Authorization bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 401 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "unauthorized",
                        "message": "A valid API key is required for this tier."
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not found. The requested route, resource, or symbol could not be resolved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 404 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "not_found",
                        "message": "The requested resource was not found."
                      }
                    }
                  }
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 405 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "method_not_allowed",
                        "message": "This route does not support the requested HTTP method."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 429 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "rate_limited",
                        "message": "Too many requests. Retry after the rate-limit reset."
                      }
                    }
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream source error. The source service rejected or failed the upstream request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 502 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "upstream_error",
                        "message": "The upstream source returned an error."
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Origin unavailable or circuit open",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 503 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "service_unavailable",
                        "message": "The service is temporarily unavailable."
                      }
                    }
                  }
                }
              }
            }
          },
          "504": {
            "description": "Upstream timeout. The upstream source did not return within the source API timeout window.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 504 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "upstream_timeout",
                        "message": "The upstream source timed out."
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {},
          {
            "ContactEmail": []
          },
          {
            "BearerAuth": []
          },
          {
            "StfinApiKey": []
          }
        ],
        "description": "Returns symbol news with headline, timestamp, symbol, and source fields where available.",
        "tags": [
          "News"
        ],
        "x-source-api": "stfin",
        "x-source-name": "Stooq",
        "x-source-upstream": "stooq.com",
        "parameters": [
          {
            "name": "symbol",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "aapl.us",
            "description": "Query parameter `symbol`."
          },
          {
            "name": "x-stfin-contact",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "format": "email"
            },
            "description": "Optional contact email for higher public rate limits and support diagnostics."
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "example": "Bearer <key>"
            },
            "description": "Optional API-key authorization for higher-volume access tiers."
          }
        ],
        "x-docs-example-url": "https://api.stfin.bluedoor.sh/v1/news/symbol?symbol=aapl.us",
        "x-docs-example-status": 200,
        "x-docs-captured-at": "2026-06-07T01:35:24.198Z"
      }
    },
    "/v1/quote/calendar": {
      "get": {
        "operationId": "stfin_get_quote_calendar",
        "summary": "Calendar",
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/stfin_get_quote_calendarResponse"
                },
                "examples": {
                  "live": {
                    "summary": "Live response",
                    "value": {
                      "meta": {
                        "provider": "stooq",
                        "route": "quote_calendar",
                        "contract": "html_quote_subpage:q_c",
                        "transport": "html",
                        "ttl_seconds": 3600,
                        "generated_at": "2026-06-07T01:28:28.422Z"
                      },
                      "data": {
                        "title": "",
                        "page": null,
                        "messages": [],
                        "no_data": false,
                        "related_links": [],
                        "empty_reason": null,
                        "source_table_count": 0,
                        "source_tables": [],
                        "text_preview": "",
                        "content_type": "text/html; charset=utf-8"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request. A required parameter is missing, malformed, or outside the supported range.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 400 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "bad_request",
                        "message": "Required query parameter is missing or invalid."
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. API-key authenticated tiers use an Authorization bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 401 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "unauthorized",
                        "message": "A valid API key is required for this tier."
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not found. The requested route, resource, or symbol could not be resolved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 404 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "not_found",
                        "message": "The requested resource was not found."
                      }
                    }
                  }
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 405 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "method_not_allowed",
                        "message": "This route does not support the requested HTTP method."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 429 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "rate_limited",
                        "message": "Too many requests. Retry after the rate-limit reset."
                      }
                    }
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream source error. The source service rejected or failed the upstream request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 502 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "upstream_error",
                        "message": "The upstream source returned an error."
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Origin unavailable or circuit open",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 503 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "service_unavailable",
                        "message": "The service is temporarily unavailable."
                      }
                    }
                  }
                }
              }
            }
          },
          "504": {
            "description": "Upstream timeout. The upstream source did not return within the source API timeout window.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 504 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "upstream_timeout",
                        "message": "The upstream source timed out."
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {},
          {
            "ContactEmail": []
          },
          {
            "BearerAuth": []
          },
          {
            "StfinApiKey": []
          }
        ],
        "description": "Returns calendar with source-native price, change, volume, and instrument fields.",
        "tags": [
          "Quotes"
        ],
        "x-source-api": "stfin",
        "x-source-name": "Stooq",
        "x-source-upstream": "stooq.com",
        "parameters": [
          {
            "name": "symbol",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "aapl.us",
            "description": "Query parameter `symbol`."
          },
          {
            "name": "x-stfin-contact",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "format": "email"
            },
            "description": "Optional contact email for higher public rate limits and support diagnostics."
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "example": "Bearer <key>"
            },
            "description": "Optional API-key authorization for higher-volume access tiers."
          }
        ],
        "x-docs-example-url": "https://api.stfin.bluedoor.sh/v1/quote/calendar?symbol=aapl.us",
        "x-docs-example-status": 200,
        "x-docs-captured-at": "2026-06-07T01:35:24.737Z"
      }
    },
    "/v1/quote/earnings": {
      "get": {
        "operationId": "stfin_get_quote_earnings",
        "summary": "Earnings",
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/stfin_get_quote_earningsResponse"
                },
                "examples": {
                  "live": {
                    "summary": "Live response",
                    "value": {
                      "meta": {
                        "provider": "stooq",
                        "route": "quote_earnings",
                        "contract": "html_quote_subpage:q/e",
                        "transport": "html",
                        "ttl_seconds": 3600,
                        "generated_at": "2026-06-07T01:28:29.370Z"
                      },
                      "data": {
                        "title": "",
                        "page": null,
                        "messages": [],
                        "no_data": false,
                        "related_links": [],
                        "empty_reason": null,
                        "source_table_count": 0,
                        "source_tables": [],
                        "text_preview": "",
                        "content_type": "text/html; charset=utf-8"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request. A required parameter is missing, malformed, or outside the supported range.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 400 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "bad_request",
                        "message": "Required query parameter is missing or invalid."
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. API-key authenticated tiers use an Authorization bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 401 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "unauthorized",
                        "message": "A valid API key is required for this tier."
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not found. The requested route, resource, or symbol could not be resolved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 404 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "not_found",
                        "message": "The requested resource was not found."
                      }
                    }
                  }
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 405 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "method_not_allowed",
                        "message": "This route does not support the requested HTTP method."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 429 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "rate_limited",
                        "message": "Too many requests. Retry after the rate-limit reset."
                      }
                    }
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream source error. The source service rejected or failed the upstream request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 502 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "upstream_error",
                        "message": "The upstream source returned an error."
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Origin unavailable or circuit open",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 503 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "service_unavailable",
                        "message": "The service is temporarily unavailable."
                      }
                    }
                  }
                }
              }
            }
          },
          "504": {
            "description": "Upstream timeout. The upstream source did not return within the source API timeout window.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 504 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "upstream_timeout",
                        "message": "The upstream source timed out."
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {},
          {
            "ContactEmail": []
          },
          {
            "BearerAuth": []
          },
          {
            "StfinApiKey": []
          }
        ],
        "description": "Returns earnings with source-native price, change, volume, and instrument fields.",
        "tags": [
          "Quotes"
        ],
        "x-source-api": "stfin",
        "x-source-name": "Stooq",
        "x-source-upstream": "stooq.com",
        "parameters": [
          {
            "name": "symbol",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "aapl.us",
            "description": "Query parameter `symbol`."
          },
          {
            "name": "x-stfin-contact",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "format": "email"
            },
            "description": "Optional contact email for higher public rate limits and support diagnostics."
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "example": "Bearer <key>"
            },
            "description": "Optional API-key authorization for higher-volume access tiers."
          }
        ],
        "x-docs-example-url": "https://api.stfin.bluedoor.sh/v1/quote/earnings?symbol=aapl.us",
        "x-docs-example-status": 200,
        "x-docs-captured-at": "2026-06-07T01:35:25.307Z"
      }
    },
    "/v1/quote/financials": {
      "get": {
        "operationId": "stfin_get_quote_financials",
        "summary": "Financials",
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/stfin_get_quote_financialsResponse"
                },
                "examples": {
                  "live": {
                    "summary": "Live response",
                    "value": {
                      "meta": {
                        "provider": "stooq",
                        "route": "quote_financials",
                        "contract": "html_quote_subpage:q_f",
                        "transport": "html",
                        "ttl_seconds": 3600,
                        "generated_at": "2026-06-07T01:28:30.381Z"
                      },
                      "data": {
                        "title": "",
                        "page": null,
                        "messages": [],
                        "no_data": false,
                        "related_links": [],
                        "empty_reason": null,
                        "source_table_count": 0,
                        "source_tables": [],
                        "text_preview": "",
                        "content_type": "text/html; charset=utf-8"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request. A required parameter is missing, malformed, or outside the supported range.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 400 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "bad_request",
                        "message": "Required query parameter is missing or invalid."
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. API-key authenticated tiers use an Authorization bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 401 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "unauthorized",
                        "message": "A valid API key is required for this tier."
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not found. The requested route, resource, or symbol could not be resolved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 404 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "not_found",
                        "message": "The requested resource was not found."
                      }
                    }
                  }
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 405 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "method_not_allowed",
                        "message": "This route does not support the requested HTTP method."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 429 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "rate_limited",
                        "message": "Too many requests. Retry after the rate-limit reset."
                      }
                    }
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream source error. The source service rejected or failed the upstream request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 502 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "upstream_error",
                        "message": "The upstream source returned an error."
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Origin unavailable or circuit open",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 503 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "service_unavailable",
                        "message": "The service is temporarily unavailable."
                      }
                    }
                  }
                }
              }
            }
          },
          "504": {
            "description": "Upstream timeout. The upstream source did not return within the source API timeout window.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 504 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "upstream_timeout",
                        "message": "The upstream source timed out."
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {},
          {
            "ContactEmail": []
          },
          {
            "BearerAuth": []
          },
          {
            "StfinApiKey": []
          }
        ],
        "description": "Returns financials with source-native price, change, volume, and instrument fields.",
        "tags": [
          "Quotes"
        ],
        "x-source-api": "stfin",
        "x-source-name": "Stooq",
        "x-source-upstream": "stooq.com",
        "parameters": [
          {
            "name": "symbol",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "aapl.us",
            "description": "Query parameter `symbol`."
          },
          {
            "name": "x-stfin-contact",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "format": "email"
            },
            "description": "Optional contact email for higher public rate limits and support diagnostics."
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "example": "Bearer <key>"
            },
            "description": "Optional API-key authorization for higher-volume access tiers."
          }
        ],
        "x-docs-example-url": "https://api.stfin.bluedoor.sh/v1/quote/financials?symbol=aapl.us",
        "x-docs-example-status": 200,
        "x-docs-captured-at": "2026-06-07T01:35:25.812Z"
      }
    },
    "/v1/quote/holders": {
      "get": {
        "operationId": "stfin_get_quote_holders",
        "summary": "Holders",
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/stfin_get_quote_holdersResponse"
                },
                "examples": {
                  "live": {
                    "summary": "Live response",
                    "value": {
                      "meta": {
                        "provider": "stooq",
                        "route": "quote_holders",
                        "contract": "html_quote_subpage:q_h",
                        "transport": "html",
                        "ttl_seconds": 3600,
                        "generated_at": "2026-06-07T01:28:31.339Z"
                      },
                      "data": {
                        "title": "",
                        "page": null,
                        "messages": [],
                        "no_data": false,
                        "related_links": [],
                        "empty_reason": null,
                        "source_table_count": 0,
                        "source_tables": [],
                        "text_preview": "",
                        "content_type": "text/html; charset=utf-8"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request. A required parameter is missing, malformed, or outside the supported range.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 400 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "bad_request",
                        "message": "Required query parameter is missing or invalid."
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. API-key authenticated tiers use an Authorization bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 401 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "unauthorized",
                        "message": "A valid API key is required for this tier."
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not found. The requested route, resource, or symbol could not be resolved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 404 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "not_found",
                        "message": "The requested resource was not found."
                      }
                    }
                  }
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 405 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "method_not_allowed",
                        "message": "This route does not support the requested HTTP method."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 429 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "rate_limited",
                        "message": "Too many requests. Retry after the rate-limit reset."
                      }
                    }
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream source error. The source service rejected or failed the upstream request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 502 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "upstream_error",
                        "message": "The upstream source returned an error."
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Origin unavailable or circuit open",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 503 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "service_unavailable",
                        "message": "The service is temporarily unavailable."
                      }
                    }
                  }
                }
              }
            }
          },
          "504": {
            "description": "Upstream timeout. The upstream source did not return within the source API timeout window.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 504 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "upstream_timeout",
                        "message": "The upstream source timed out."
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {},
          {
            "ContactEmail": []
          },
          {
            "BearerAuth": []
          },
          {
            "StfinApiKey": []
          }
        ],
        "description": "Returns holders with source-native price, change, volume, and instrument fields.",
        "tags": [
          "Quotes"
        ],
        "x-source-api": "stfin",
        "x-source-name": "Stooq",
        "x-source-upstream": "stooq.com",
        "parameters": [
          {
            "name": "symbol",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "aapl.us",
            "description": "Query parameter `symbol`."
          },
          {
            "name": "x-stfin-contact",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "format": "email"
            },
            "description": "Optional contact email for higher public rate limits and support diagnostics."
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "example": "Bearer <key>"
            },
            "description": "Optional API-key authorization for higher-volume access tiers."
          }
        ],
        "x-docs-example-url": "https://api.stfin.bluedoor.sh/v1/quote/holders?symbol=aapl.us",
        "x-docs-example-status": 200,
        "x-docs-captured-at": "2026-06-07T01:35:26.359Z"
      }
    },
    "/v1/quote/ratios": {
      "get": {
        "operationId": "stfin_get_quote_ratios",
        "summary": "Ratios",
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/stfin_get_quote_ratiosResponse"
                },
                "examples": {
                  "live": {
                    "summary": "Live response",
                    "value": {
                      "meta": {
                        "provider": "stooq",
                        "route": "quote_ratios",
                        "contract": "html_quote_subpage:q_g",
                        "transport": "html",
                        "ttl_seconds": 3600,
                        "generated_at": "2026-06-07T01:28:32.430Z"
                      },
                      "data": {
                        "title": "",
                        "page": null,
                        "messages": [],
                        "no_data": false,
                        "related_links": [],
                        "empty_reason": null,
                        "source_table_count": 0,
                        "source_tables": [],
                        "text_preview": "",
                        "content_type": "text/html; charset=utf-8"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request. A required parameter is missing, malformed, or outside the supported range.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 400 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "bad_request",
                        "message": "Required query parameter is missing or invalid."
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. API-key authenticated tiers use an Authorization bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 401 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "unauthorized",
                        "message": "A valid API key is required for this tier."
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not found. The requested route, resource, or symbol could not be resolved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 404 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "not_found",
                        "message": "The requested resource was not found."
                      }
                    }
                  }
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 405 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "method_not_allowed",
                        "message": "This route does not support the requested HTTP method."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 429 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "rate_limited",
                        "message": "Too many requests. Retry after the rate-limit reset."
                      }
                    }
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream source error. The source service rejected or failed the upstream request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 502 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "upstream_error",
                        "message": "The upstream source returned an error."
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Origin unavailable or circuit open",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 503 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "service_unavailable",
                        "message": "The service is temporarily unavailable."
                      }
                    }
                  }
                }
              }
            }
          },
          "504": {
            "description": "Upstream timeout. The upstream source did not return within the source API timeout window.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "examples": {
                  "default": {
                    "summary": "HTTP 504 error",
                    "value": {
                      "ok": false,
                      "error": {
                        "code": "upstream_timeout",
                        "message": "The upstream source timed out."
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {},
          {
            "ContactEmail": []
          },
          {
            "BearerAuth": []
          },
          {
            "StfinApiKey": []
          }
        ],
        "description": "Returns ratios with source-native price, change, volume, and instrument fields.",
        "tags": [
          "Quotes"
        ],
        "x-source-api": "stfin",
        "x-source-name": "Stooq",
        "x-source-upstream": "stooq.com",
        "parameters": [
          {
            "name": "symbol",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "spy.us",
            "description": "Query parameter `symbol`."
          },
          {
            "name": "x-stfin-contact",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "format": "email"
            },
            "description": "Optional contact email for higher public rate limits and support diagnostics."
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "example": "Bearer <key>"
            },
            "description": "Optional API-key authorization for higher-volume access tiers."
          }
        ],
        "x-docs-example-url": "https://api.stfin.bluedoor.sh/v1/quote/ratios?symbol=spy.us",
        "x-docs-example-status": 200,
        "x-docs-captured-at": "2026-06-07T01:35:26.898Z"
      }
    }
  },
  "components": {
    "securitySchemes": {
      "ContactEmail": {
        "type": "apiKey",
        "in": "header",
        "name": "X-Stfin-Contact"
      },
      "BearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "description": "API keys are available by emailing sam@bluedoor.sh."
      },
      "StfinApiKey": {
        "type": "apiKey",
        "in": "header",
        "name": "X-Stfin-Key"
      }
    },
    "schemas": {
      "ErrorEnvelope": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "ok": {
            "type": "boolean",
            "example": false
          },
          "error": {
            "type": "object",
            "additionalProperties": true,
            "properties": {
              "code": {
                "type": "string"
              },
              "message": {
                "type": "string"
              }
            }
          },
          "meta": {
            "type": "object",
            "additionalProperties": true
          }
        }
      },
      "stfin_get_constituentsResponse": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "meta": {
            "type": "object",
            "additionalProperties": true,
            "properties": {
              "provider": {
                "type": "string"
              },
              "route": {
                "type": "string"
              },
              "contract": {
                "type": "string"
              },
              "transport": {
                "type": "string"
              },
              "ttl_seconds": {
                "type": "integer"
              },
              "generated_at": {
                "type": "string"
              }
            },
            "required": [
              "contract",
              "generated_at",
              "provider",
              "route",
              "transport",
              "ttl_seconds"
            ]
          },
          "data": {
            "type": "object",
            "additionalProperties": true,
            "properties": {
              "title": {
                "type": "string"
              },
              "constituents": {
                "type": "array",
                "items": {}
              },
              "empty_reason": {
                "nullable": true
              },
              "source_table_count": {
                "type": "integer"
              },
              "source_headers": {
                "type": "array",
                "items": {}
              },
              "content_type": {
                "type": "string"
              }
            },
            "required": [
              "constituents",
              "content_type",
              "empty_reason",
              "source_headers",
              "source_table_count",
              "title"
            ]
          }
        },
        "required": [
          "data",
          "meta"
        ]
      },
      "stfin_get_corporate_actionsResponse": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "meta": {
            "type": "object",
            "additionalProperties": true,
            "properties": {
              "provider": {
                "type": "string"
              },
              "route": {
                "type": "string"
              },
              "contract": {
                "type": "string"
              },
              "transport": {
                "type": "string"
              },
              "ttl_seconds": {
                "type": "integer"
              },
              "generated_at": {
                "type": "string"
              }
            },
            "required": [
              "contract",
              "generated_at",
              "provider",
              "route",
              "transport",
              "ttl_seconds"
            ]
          },
          "data": {
            "type": "object",
            "additionalProperties": true,
            "properties": {
              "title": {
                "type": "string"
              },
              "actions": {
                "type": "array",
                "items": {}
              },
              "empty_reason": {
                "nullable": true
              },
              "source_table_count": {
                "type": "integer"
              },
              "content_type": {
                "type": "string"
              }
            },
            "required": [
              "actions",
              "content_type",
              "empty_reason",
              "source_table_count",
              "title"
            ]
          }
        },
        "required": [
          "data",
          "meta"
        ]
      },
      "stfin_get_group_quotesResponse": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "meta": {
            "type": "object",
            "additionalProperties": true,
            "properties": {
              "provider": {
                "type": "string"
              },
              "route": {
                "type": "string"
              },
              "contract": {
                "type": "string"
              },
              "transport": {
                "type": "string"
              },
              "ttl_seconds": {
                "type": "integer"
              },
              "generated_at": {
                "type": "string"
              }
            },
            "required": [
              "contract",
              "generated_at",
              "provider",
              "route",
              "transport",
              "ttl_seconds"
            ]
          },
          "data": {
            "type": "object",
            "additionalProperties": true,
            "properties": {
              "title": {
                "type": "string"
              },
              "sections": {
                "type": "array",
                "items": {}
              },
              "quotes": {
                "type": "array",
                "items": {}
              },
              "empty_reason": {
                "nullable": true
              },
              "source_table_count": {
                "type": "integer"
              },
              "content_type": {
                "type": "string"
              }
            },
            "required": [
              "content_type",
              "empty_reason",
              "quotes",
              "sections",
              "source_table_count",
              "title"
            ]
          }
        },
        "required": [
          "data",
          "meta"
        ]
      },
      "stfin_get_market_statsResponse": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "meta": {
            "type": "object",
            "additionalProperties": true,
            "properties": {
              "provider": {
                "type": "string"
              },
              "route": {
                "type": "string"
              },
              "contract": {
                "type": "string"
              },
              "transport": {
                "type": "string"
              },
              "ttl_seconds": {
                "type": "integer"
              },
              "generated_at": {
                "type": "string"
              }
            },
            "required": [
              "contract",
              "generated_at",
              "provider",
              "route",
              "transport",
              "ttl_seconds"
            ]
          },
          "data": {
            "type": "object",
            "additionalProperties": true,
            "properties": {
              "title": {
                "type": "string"
              },
              "market_statistics": {
                "nullable": true
              },
              "ranked_sections": {
                "type": "array",
                "items": {}
              },
              "empty_reason": {
                "nullable": true
              },
              "source_table_count": {
                "type": "integer"
              },
              "source_tables": {
                "type": "array",
                "items": {}
              },
              "content_type": {
                "type": "string"
              }
            },
            "required": [
              "content_type",
              "empty_reason",
              "market_statistics",
              "ranked_sections",
              "source_table_count",
              "source_tables",
              "title"
            ]
          }
        },
        "required": [
          "data",
          "meta"
        ]
      },
      "stfin_get_newsResponse": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "meta": {
            "type": "object",
            "additionalProperties": true,
            "properties": {
              "provider": {
                "type": "string"
              },
              "route": {
                "type": "string"
              },
              "contract": {
                "type": "string"
              },
              "transport": {
                "type": "string"
              },
              "ttl_seconds": {
                "type": "integer"
              },
              "generated_at": {
                "type": "string"
              }
            },
            "required": [
              "contract",
              "generated_at",
              "provider",
              "route",
              "transport",
              "ttl_seconds"
            ]
          },
          "data": {
            "type": "object",
            "additionalProperties": true,
            "properties": {
              "title": {
                "type": "string"
              },
              "articles": {
                "type": "array",
                "items": {}
              },
              "source_table_count": {
                "type": "integer"
              },
              "source_tables": {
                "type": "array",
                "items": {}
              },
              "empty_reason": {
                "nullable": true
              },
              "content_type": {
                "type": "string"
              }
            },
            "required": [
              "articles",
              "content_type",
              "empty_reason",
              "source_table_count",
              "source_tables",
              "title"
            ]
          }
        },
        "required": [
          "data",
          "meta"
        ]
      },
      "stfin_get_profileResponse": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "meta": {
            "type": "object",
            "additionalProperties": true,
            "properties": {
              "provider": {
                "type": "string"
              },
              "route": {
                "type": "string"
              },
              "contract": {
                "type": "string"
              },
              "transport": {
                "type": "string"
              },
              "ttl_seconds": {
                "type": "integer"
              },
              "generated_at": {
                "type": "string"
              }
            },
            "required": [
              "contract",
              "generated_at",
              "provider",
              "route",
              "transport",
              "ttl_seconds"
            ]
          },
          "data": {
            "type": "object",
            "additionalProperties": true,
            "properties": {
              "title": {
                "type": "string"
              },
              "page": {
                "nullable": true
              },
              "messages": {
                "type": "array",
                "items": {}
              },
              "no_data": {
                "type": "boolean"
              },
              "related_links": {
                "type": "array",
                "items": {}
              },
              "empty_reason": {
                "nullable": true
              },
              "source_table_count": {
                "type": "integer"
              },
              "source_tables": {
                "type": "array",
                "items": {}
              },
              "text_preview": {
                "type": "string"
              },
              "content_type": {
                "type": "string"
              }
            },
            "required": [
              "content_type",
              "empty_reason",
              "messages",
              "no_data",
              "page",
              "related_links",
              "source_table_count",
              "source_tables",
              "text_preview",
              "title"
            ]
          }
        },
        "required": [
          "data",
          "meta"
        ]
      },
      "stfin_get_quote_pageResponse": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "meta": {
            "type": "object",
            "additionalProperties": true,
            "properties": {
              "provider": {
                "type": "string"
              },
              "route": {
                "type": "string"
              },
              "contract": {
                "type": "string"
              },
              "transport": {
                "type": "string"
              },
              "ttl_seconds": {
                "type": "integer"
              },
              "generated_at": {
                "type": "string"
              }
            },
            "required": [
              "contract",
              "generated_at",
              "provider",
              "route",
              "transport",
              "ttl_seconds"
            ]
          },
          "data": {
            "type": "object",
            "additionalProperties": true,
            "properties": {
              "title": {
                "type": "string"
              },
              "page": {
                "nullable": true
              },
              "summary": {
                "type": "object",
                "additionalProperties": true,
                "properties": {
                  "last_price": {
                    "nullable": true
                  },
                  "currency": {
                    "nullable": true
                  },
                  "observed_at": {
                    "nullable": true
                  },
                  "change": {
                    "nullable": true
                  },
                  "change_percent": {
                    "nullable": true
                  },
                  "day_high": {
                    "nullable": true
                  },
                  "day_low": {
                    "nullable": true
                  },
                  "fifty_two_week_change": {
                    "nullable": true
                  },
                  "fifty_two_week_change_percent": {
                    "nullable": true
                  },
                  "fifty_two_week_high": {
                    "nullable": true
                  },
                  "fifty_two_week_low": {
                    "nullable": true
                  },
                  "open": {
                    "nullable": true
                  },
                  "previous_close": {
                    "nullable": true
                  },
                  "bid": {
                    "nullable": true
                  },
                  "ask": {
                    "nullable": true
                  },
                  "volume": {
                    "nullable": true
                  },
                  "turnover": {
                    "nullable": true
                  },
                  "open_interest": {
                    "nullable": true
                  },
                  "trades": {
                    "nullable": true
                  },
                  "returns": {
                    "type": "object",
                    "additionalProperties": true,
                    "properties": {}
                  },
                  "operations": {
                    "type": "array",
                    "items": {}
                  },
                  "source_pairs": {
                    "type": "array",
                    "items": {}
                  }
                },
                "required": [
                  "ask",
                  "bid",
                  "change",
                  "change_percent",
                  "currency",
                  "day_high",
                  "day_low",
                  "fifty_two_week_change",
                  "fifty_two_week_change_percent",
                  "fifty_two_week_high",
                  "fifty_two_week_low",
                  "last_price",
                  "observed_at",
                  "open",
                  "open_interest",
                  "operations",
                  "previous_close",
                  "returns",
                  "source_pairs",
                  "trades",
                  "turnover",
                  "volume"
                ]
              },
              "autoquote": {
                "nullable": true
              },
              "autoquote_symbol": {
                "nullable": true
              },
              "source_autoquote_fields": {
                "type": "object",
                "additionalProperties": true,
                "properties": {}
              },
              "empty_reason": {
                "nullable": true
              },
              "source_table_count": {
                "type": "integer"
              },
              "source_tables": {
                "type": "array",
                "items": {}
              },
              "content_type": {
                "type": "string"
              }
            },
            "required": [
              "autoquote",
              "autoquote_symbol",
              "content_type",
              "empty_reason",
              "page",
              "source_autoquote_fields",
              "source_table_count",
              "source_tables",
              "summary",
              "title"
            ]
          }
        },
        "required": [
          "data",
          "meta"
        ]
      },
      "stfin_get_quotesResponse": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "meta": {
            "type": "object",
            "additionalProperties": true,
            "properties": {
              "provider": {
                "type": "string"
              },
              "route": {
                "type": "string"
              },
              "contract": {
                "type": "string"
              },
              "transport": {
                "type": "string"
              },
              "ttl_seconds": {
                "type": "integer"
              },
              "generated_at": {
                "type": "string"
              }
            },
            "required": [
              "contract",
              "generated_at",
              "provider",
              "route",
              "transport",
              "ttl_seconds"
            ]
          },
          "data": {
            "type": "object",
            "additionalProperties": true,
            "properties": {
              "quotes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": true,
                  "properties": {
                    "this_site_requires_javascript_to_verify_your_browser_please_enable_javascript_and_reload": {
                      "oneOf": [
                        {
                          "type": "string"
                        },
                        {
                          "nullable": true
                        }
                      ]
                    }
                  },
                  "required": [
                    "this_site_requires_javascript_to_verify_your_browser_please_enable_javascript_and_reload"
                  ]
                }
              },
              "source_headers": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            },
            "required": [
              "quotes",
              "source_headers"
            ]
          }
        },
        "required": [
          "data",
          "meta"
        ]
      },
      "stfin_get_rssResponse": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "meta": {
            "type": "object",
            "additionalProperties": true,
            "properties": {
              "provider": {
                "type": "string"
              },
              "route": {
                "type": "string"
              },
              "contract": {
                "type": "string"
              },
              "transport": {
                "type": "string"
              },
              "ttl_seconds": {
                "type": "integer"
              },
              "generated_at": {
                "type": "string"
              }
            },
            "required": [
              "contract",
              "generated_at",
              "provider",
              "route",
              "transport",
              "ttl_seconds"
            ]
          },
          "data": {
            "type": "object",
            "additionalProperties": true,
            "properties": {
              "title": {
                "type": "string"
              },
              "items": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": true,
                  "properties": {
                    "title": {
                      "type": "string"
                    },
                    "link": {
                      "type": "string"
                    },
                    "guid": {
                      "type": "string"
                    },
                    "published_at": {
                      "type": "string"
                    },
                    "description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "description",
                    "guid",
                    "link",
                    "published_at",
                    "title"
                  ]
                }
              }
            },
            "required": [
              "items",
              "title"
            ]
          }
        },
        "required": [
          "data",
          "meta"
        ]
      },
      "stfin_get_searchResponse": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "meta": {
            "type": "object",
            "additionalProperties": true,
            "properties": {
              "provider": {
                "type": "string"
              },
              "route": {
                "type": "string"
              },
              "contract": {
                "type": "string"
              },
              "transport": {
                "type": "string"
              },
              "ttl_seconds": {
                "type": "integer"
              },
              "generated_at": {
                "type": "string"
              }
            },
            "required": [
              "contract",
              "generated_at",
              "provider",
              "route",
              "transport",
              "ttl_seconds"
            ]
          },
          "data": {
            "type": "object",
            "additionalProperties": true,
            "properties": {
              "suggestions": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": true,
                  "properties": {
                    "symbol": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "exchange": {
                      "type": "string"
                    },
                    "last": {
                      "nullable": true
                    },
                    "change_percent": {
                      "nullable": true
                    },
                    "asset_type_code": {
                      "nullable": true
                    }
                  },
                  "required": [
                    "asset_type_code",
                    "change_percent",
                    "exchange",
                    "last",
                    "name",
                    "symbol"
                  ]
                }
              }
            },
            "required": [
              "suggestions"
            ]
          }
        },
        "required": [
          "data",
          "meta"
        ]
      },
      "stfin_get_ticker_rankResponse": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "meta": {
            "type": "object",
            "additionalProperties": true,
            "properties": {
              "provider": {
                "type": "string"
              },
              "route": {
                "type": "string"
              },
              "contract": {
                "type": "string"
              },
              "transport": {
                "type": "string"
              },
              "ttl_seconds": {
                "type": "integer"
              },
              "generated_at": {
                "type": "string"
              }
            },
            "required": [
              "contract",
              "generated_at",
              "provider",
              "route",
              "transport",
              "ttl_seconds"
            ]
          },
          "data": {
            "type": "object",
            "additionalProperties": true,
            "properties": {
              "title": {
                "type": "string"
              },
              "rankings": {
                "type": "array",
                "items": {}
              },
              "empty_reason": {
                "nullable": true
              },
              "source_table_count": {
                "type": "integer"
              },
              "content_type": {
                "type": "string"
              }
            },
            "required": [
              "content_type",
              "empty_reason",
              "rankings",
              "source_table_count",
              "title"
            ]
          }
        },
        "required": [
          "data",
          "meta"
        ]
      },
      "stfin_get_calendar_companyResponse": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "meta": {
            "type": "object",
            "additionalProperties": true,
            "properties": {
              "provider": {
                "type": "string"
              },
              "route": {
                "type": "string"
              },
              "contract": {
                "type": "string"
              },
              "transport": {
                "type": "string"
              },
              "ttl_seconds": {
                "type": "integer"
              },
              "generated_at": {
                "type": "string"
              }
            },
            "required": [
              "contract",
              "generated_at",
              "provider",
              "route",
              "transport",
              "ttl_seconds"
            ]
          },
          "data": {
            "type": "object",
            "additionalProperties": true,
            "properties": {
              "title": {
                "type": "string"
              },
              "days": {
                "type": "array",
                "items": {}
              },
              "events": {
                "type": "array",
                "items": {}
              },
              "empty_reason": {
                "nullable": true
              },
              "no_data": {
                "type": "boolean"
              },
              "source_table_count": {
                "type": "integer"
              },
              "content_type": {
                "type": "string"
              }
            },
            "required": [
              "content_type",
              "days",
              "empty_reason",
              "events",
              "no_data",
              "source_table_count",
              "title"
            ]
          }
        },
        "required": [
          "data",
          "meta"
        ]
      },
      "stfin_get_calendar_economicResponse": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "meta": {
            "type": "object",
            "additionalProperties": true,
            "properties": {
              "provider": {
                "type": "string"
              },
              "route": {
                "type": "string"
              },
              "contract": {
                "type": "string"
              },
              "transport": {
                "type": "string"
              },
              "ttl_seconds": {
                "type": "integer"
              },
              "generated_at": {
                "type": "string"
              }
            },
            "required": [
              "contract",
              "generated_at",
              "provider",
              "route",
              "transport",
              "ttl_seconds"
            ]
          },
          "data": {
            "type": "object",
            "additionalProperties": true,
            "properties": {
              "title": {
                "type": "string"
              },
              "time_zone": {
                "nullable": true
              },
              "days": {
                "type": "array",
                "items": {}
              },
              "events": {
                "type": "array",
                "items": {}
              },
              "empty_reason": {
                "nullable": true
              },
              "source_table_count": {
                "type": "integer"
              },
              "content_type": {
                "type": "string"
              }
            },
            "required": [
              "content_type",
              "days",
              "empty_reason",
              "events",
              "source_table_count",
              "time_zone",
              "title"
            ]
          }
        },
        "required": [
          "data",
          "meta"
        ]
      },
      "stfin_get_news_symbolResponse": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "meta": {
            "type": "object",
            "additionalProperties": true,
            "properties": {
              "provider": {
                "type": "string"
              },
              "route": {
                "type": "string"
              },
              "contract": {
                "type": "string"
              },
              "transport": {
                "type": "string"
              },
              "ttl_seconds": {
                "type": "integer"
              },
              "generated_at": {
                "type": "string"
              }
            },
            "required": [
              "contract",
              "generated_at",
              "provider",
              "route",
              "transport",
              "ttl_seconds"
            ]
          },
          "data": {
            "type": "object",
            "additionalProperties": true,
            "properties": {
              "title": {
                "type": "string"
              },
              "articles": {
                "type": "array",
                "items": {}
              },
              "source_table_count": {
                "type": "integer"
              },
              "source_tables": {
                "type": "array",
                "items": {}
              },
              "empty_reason": {
                "nullable": true
              },
              "content_type": {
                "type": "string"
              }
            },
            "required": [
              "articles",
              "content_type",
              "empty_reason",
              "source_table_count",
              "source_tables",
              "title"
            ]
          }
        },
        "required": [
          "data",
          "meta"
        ]
      },
      "stfin_get_quote_calendarResponse": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "meta": {
            "type": "object",
            "additionalProperties": true,
            "properties": {
              "provider": {
                "type": "string"
              },
              "route": {
                "type": "string"
              },
              "contract": {
                "type": "string"
              },
              "transport": {
                "type": "string"
              },
              "ttl_seconds": {
                "type": "integer"
              },
              "generated_at": {
                "type": "string"
              }
            },
            "required": [
              "contract",
              "generated_at",
              "provider",
              "route",
              "transport",
              "ttl_seconds"
            ]
          },
          "data": {
            "type": "object",
            "additionalProperties": true,
            "properties": {
              "title": {
                "type": "string"
              },
              "page": {
                "nullable": true
              },
              "messages": {
                "type": "array",
                "items": {}
              },
              "no_data": {
                "type": "boolean"
              },
              "related_links": {
                "type": "array",
                "items": {}
              },
              "empty_reason": {
                "nullable": true
              },
              "source_table_count": {
                "type": "integer"
              },
              "source_tables": {
                "type": "array",
                "items": {}
              },
              "text_preview": {
                "type": "string"
              },
              "content_type": {
                "type": "string"
              }
            },
            "required": [
              "content_type",
              "empty_reason",
              "messages",
              "no_data",
              "page",
              "related_links",
              "source_table_count",
              "source_tables",
              "text_preview",
              "title"
            ]
          }
        },
        "required": [
          "data",
          "meta"
        ]
      },
      "stfin_get_quote_earningsResponse": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "meta": {
            "type": "object",
            "additionalProperties": true,
            "properties": {
              "provider": {
                "type": "string"
              },
              "route": {
                "type": "string"
              },
              "contract": {
                "type": "string"
              },
              "transport": {
                "type": "string"
              },
              "ttl_seconds": {
                "type": "integer"
              },
              "generated_at": {
                "type": "string"
              }
            },
            "required": [
              "contract",
              "generated_at",
              "provider",
              "route",
              "transport",
              "ttl_seconds"
            ]
          },
          "data": {
            "type": "object",
            "additionalProperties": true,
            "properties": {
              "title": {
                "type": "string"
              },
              "page": {
                "nullable": true
              },
              "messages": {
                "type": "array",
                "items": {}
              },
              "no_data": {
                "type": "boolean"
              },
              "related_links": {
                "type": "array",
                "items": {}
              },
              "empty_reason": {
                "nullable": true
              },
              "source_table_count": {
                "type": "integer"
              },
              "source_tables": {
                "type": "array",
                "items": {}
              },
              "text_preview": {
                "type": "string"
              },
              "content_type": {
                "type": "string"
              }
            },
            "required": [
              "content_type",
              "empty_reason",
              "messages",
              "no_data",
              "page",
              "related_links",
              "source_table_count",
              "source_tables",
              "text_preview",
              "title"
            ]
          }
        },
        "required": [
          "data",
          "meta"
        ]
      },
      "stfin_get_quote_financialsResponse": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "meta": {
            "type": "object",
            "additionalProperties": true,
            "properties": {
              "provider": {
                "type": "string"
              },
              "route": {
                "type": "string"
              },
              "contract": {
                "type": "string"
              },
              "transport": {
                "type": "string"
              },
              "ttl_seconds": {
                "type": "integer"
              },
              "generated_at": {
                "type": "string"
              }
            },
            "required": [
              "contract",
              "generated_at",
              "provider",
              "route",
              "transport",
              "ttl_seconds"
            ]
          },
          "data": {
            "type": "object",
            "additionalProperties": true,
            "properties": {
              "title": {
                "type": "string"
              },
              "page": {
                "nullable": true
              },
              "messages": {
                "type": "array",
                "items": {}
              },
              "no_data": {
                "type": "boolean"
              },
              "related_links": {
                "type": "array",
                "items": {}
              },
              "empty_reason": {
                "nullable": true
              },
              "source_table_count": {
                "type": "integer"
              },
              "source_tables": {
                "type": "array",
                "items": {}
              },
              "text_preview": {
                "type": "string"
              },
              "content_type": {
                "type": "string"
              }
            },
            "required": [
              "content_type",
              "empty_reason",
              "messages",
              "no_data",
              "page",
              "related_links",
              "source_table_count",
              "source_tables",
              "text_preview",
              "title"
            ]
          }
        },
        "required": [
          "data",
          "meta"
        ]
      },
      "stfin_get_quote_holdersResponse": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "meta": {
            "type": "object",
            "additionalProperties": true,
            "properties": {
              "provider": {
                "type": "string"
              },
              "route": {
                "type": "string"
              },
              "contract": {
                "type": "string"
              },
              "transport": {
                "type": "string"
              },
              "ttl_seconds": {
                "type": "integer"
              },
              "generated_at": {
                "type": "string"
              }
            },
            "required": [
              "contract",
              "generated_at",
              "provider",
              "route",
              "transport",
              "ttl_seconds"
            ]
          },
          "data": {
            "type": "object",
            "additionalProperties": true,
            "properties": {
              "title": {
                "type": "string"
              },
              "page": {
                "nullable": true
              },
              "messages": {
                "type": "array",
                "items": {}
              },
              "no_data": {
                "type": "boolean"
              },
              "related_links": {
                "type": "array",
                "items": {}
              },
              "empty_reason": {
                "nullable": true
              },
              "source_table_count": {
                "type": "integer"
              },
              "source_tables": {
                "type": "array",
                "items": {}
              },
              "text_preview": {
                "type": "string"
              },
              "content_type": {
                "type": "string"
              }
            },
            "required": [
              "content_type",
              "empty_reason",
              "messages",
              "no_data",
              "page",
              "related_links",
              "source_table_count",
              "source_tables",
              "text_preview",
              "title"
            ]
          }
        },
        "required": [
          "data",
          "meta"
        ]
      },
      "stfin_get_quote_ratiosResponse": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "meta": {
            "type": "object",
            "additionalProperties": true,
            "properties": {
              "provider": {
                "type": "string"
              },
              "route": {
                "type": "string"
              },
              "contract": {
                "type": "string"
              },
              "transport": {
                "type": "string"
              },
              "ttl_seconds": {
                "type": "integer"
              },
              "generated_at": {
                "type": "string"
              }
            },
            "required": [
              "contract",
              "generated_at",
              "provider",
              "route",
              "transport",
              "ttl_seconds"
            ]
          },
          "data": {
            "type": "object",
            "additionalProperties": true,
            "properties": {
              "title": {
                "type": "string"
              },
              "page": {
                "nullable": true
              },
              "messages": {
                "type": "array",
                "items": {}
              },
              "no_data": {
                "type": "boolean"
              },
              "related_links": {
                "type": "array",
                "items": {}
              },
              "empty_reason": {
                "nullable": true
              },
              "source_table_count": {
                "type": "integer"
              },
              "source_tables": {
                "type": "array",
                "items": {}
              },
              "text_preview": {
                "type": "string"
              },
              "content_type": {
                "type": "string"
              }
            },
            "required": [
              "content_type",
              "empty_reason",
              "messages",
              "no_data",
              "page",
              "related_links",
              "source_table_count",
              "source_tables",
              "text_preview",
              "title"
            ]
          }
        },
        "required": [
          "data",
          "meta"
        ]
      }
    }
  },
  "x-generated-at": "2026-06-07T01:30:59.456Z",
  "x-source-api": "stfin",
  "x-source-base-url": "https://api.stfin.bluedoor.sh"
}
