FinSignals API

FinSignals API — The FinSignals API provides a RESTful interface for cla…

💬 Social & WorkHEALTHYchecked 9h ago
AUTH NONECORS AGENT HTTPS COMMERCIAL ?

FinSignals API exposes the FinSignals API provides a RESTful interface for classifying financial social posts, including text from platforms like Reddit. It evaluates a post's sentiment, directionality, content quality, and other relevant signals in a structured JSON response. We verified a keyless GET endpoint returning JSON (Social). Check the provider docs for rate limits and terms before production use.

96HOW IT'S SCORED ⓘ
Status badge · for your READMEshipapis health badge: 96 · healthy
Uptime history
100%90 days
100%30 days
312P50 · ms
1419P95 · ms
operationalpartialdownno data
Response time · last 48 checks
Fastest 166 ms, slowest 1261 ms, most recent 202 ms.
Live response samplecaptured by our last successful check
GET https://api.finsignals.ai/openapi.json

{
  "openapi": "3.1.0",
  "info": {
    "title": "FinSignals API",
    "description": "Reddit post financial sentiment classification.",
    "version": "2.0.0",
    "contact": {
      "url": "https://finsignals.ai/contact/"
    },
    "x-logo": {
      "url": "https://finsignals.ai/wp-content/uploads/2026/03/finsignals_logo.png"
    }
  },
  "paths": {
    "/api/health": {
      "get": {
        "tags": [
          "health"
        ],
        "summary": "Health Check",
        "operationId": "health_check_api_health_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/v1/health": {
      "get": {
        "tags": [
          "health"
        ],
        "summary": "Health Check",
        "operationId": "health_check_v1_health_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/v1/classify": {
      "post": {
        "tags": [
          "classify"
        ],
        "summary": "Classify Single",
        "operationId": "classify_single_v1_classify_post",
        "parameters": [
          {
            "name": "X-API-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "title": "X-Api-Key"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SingleClassifyRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClassifyResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/classify/batch": {
      "post": {
        "tags": [
          "classify"
        ],
        "summary": "Classify Batch",
        "operationId": "classify_batch_v1_classify_batch_post",
        "parameters": [
          {
            "name": "X-API-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "title": "X-Api-Key"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BatchClassifyRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClassifyResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/usage": {
      "get": {
        "tags": [
          "usage"
        ],
        "summary": "Get Usage",
        "operationId": "get_usage_v1_usage_get",
        "parameters": [
          {
            "name": "X-API-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "title": "X-Api-Key"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/plan": {
      "get": {
        "tags": [
          "usage"
        ],
        "summary": "Get Plan",
        "operationId": "get_plan_v1_plan_get",
        "parameters": [
          {
            "name": "X-API-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "title": "X-Api-Key"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/sector-rotation": {
      "get": {
        "tags": [
          "sector-rotation"
        ],
        "summary": "Get Sector Rotation",
        "description": "Retrieve the latest daily sector rotation analysis.\n\nReturns both the 1-year and 5-year outlooks, including sector/industry\nrotation data, AI-generated markdown summaries, and historical weekly\nsnapshots. Data is refreshed once per trading day just after midnight ET.\n\n**Cost:** 10 credits per request.",
        "operationId": "get_sector_rotation_v1_sector_rotation_get",
        "parameters": [
          {
            "name": "X-API-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "title": "X-Api-Key"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RotationResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/internal/rotation/trigger": {
      "post": {
        "tags": [
          "internal"
        ],
        "summary": "Trigger Rotation",
        "description": "Trigger an immediate sector rotation calculation in the background.\n\nProtected by X-Internal-Token (same shared secret as all /internal/* endpoints).\nReturns 202 immediately; the full run (Alpaca + FMP + Claude) completes\nasynchronously and populates the cache when done.",
        "operationId": "trigger_rotation_internal_rotation_trigger_post",
        "parameters": [
          {
            "name": "x-internal-token",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "default": "",
              "title": "X-Internal-Token"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "BatchClassifyRequest": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/RedditPostInput"
            },
            "type": "array",
            "title": "Items"
          }
        },
        "type": "object",
        "required": [
          "items"
        ],
        "title": "BatchClassifyRequest"
      },
      "ClassificationOutput": {
        "properties": {
          "sentiment": {
            "additionalProperties": true,
            "type": "object",
            "title": "Sentiment"
          },
          "quality": {
            "additionalProperties": true,
            "type": "object",
            "title": "Quality"
          },
          "directionality": {
            "additionalProperties": true,
            "type": "object",
            "title": "Directionality"
          },
          "post_type": {
            "additionalProperties": true,
            "type": "object",
            "title": "Post Type"
          },
          "relevance_score": {
            "type": "number",
            "title": "Relevance Score"
          },
          "author_confidence": {
            "type": "number",
            "title": "Author Confidence"
          },
          "sarcasm": {
            "type": "boolean",
            "title": "Sarcasm"
          }
        },
        "type": "object",
        "required": [
          "sentiment",
          "quality"
        ],
        "title": "ClassificationOutput"
      },
      "ClassifyResponse": {
        "properties": {
          "model_version": {
            "type": "string",
            "title": "Model Version"
          },
          "request_id": {
            "type": "string",
            "title": "Request Id"
          },
          "credits_charged": {
            "type": "number",
            "title": "Credits Charged"
          },
          "endpoint_type": {
            "type": "string",
            "title": "Endpoint Type"
          },
          "endpoint_name": {
            "type": "string",
            "title": "Endpoint Name"
          },
          "outputs": {
            "items": {
              "$ref": "#/components/schemas/ClassificationOutput"
            },
            "type": "array",
            "title": "Outputs"
          }
        },
        "type": "object",
        "required": [
          "model_version",
          "request_id"
        ],
        "title": "ClassifyResponse"
      },
      "HTTPValidationError": {
        "properties": {
          "detail": {
            "items": {
              "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
          }
        },
        "type": "object",
        "title": "HTTPValidationError"
      },
      "IndustryRow": {
        "properties": {
          "etf": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Etf"
          },
          "ret_1w": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ret 1W"
          },
          "ret_1m": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ret 1M"
          },
          "ret_3m": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ret 3M"
          },
          "ret_6m": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ret 6M"
          },
          "ret_9m": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ret 9M"
          },
          "ret_12m": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ret 12M"
          },
          "rs_1m": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Rs 1M"
          }
        },
        "type": "object",
        "title": "IndustryRow"
      },
      "RedditPostInput": {
        "properties": {
          "ticker": {
            "type": "string",
            "maxLength": 20,
            "title": "Ticker",
            "default": ""
          },
          "company_name": {
            "type": "string",
            "maxLength": 200,
            "title": "Company Name",
            "default": ""
          },
          "title": {
            "type": "string",
            "maxLength": 1000,
            "title": "Title",
            "default": ""
          },
          "body": {
            "type": "string",
            "maxLength": 40000,
            "title": "Body",
            "default": ""
          }
        },
        "type": "object",
        "title": "RedditPostInput"
      },
      "RotationPeriodData": {
        "properties": {
          "trading_date": {
            "type": "string",
            "title": "Trading Date"
          },
          "generated_at": {
            "type": "string",
            "title": "Generated At"
          },
          "sector_data": {
            "additionalProperties": {
              "$ref": "#/components/schemas/SectorRow"
            },
            "type": "object",
            "title": "Sector Data"
          },
          "industry_data": {
            "additionalProperties": {
              "$ref": "#/components/schemas/IndustryRow"
            },
            "type": "object",
            "title": "Industry Data"
          },
          "spy_metrics": {
            "$ref": "#/components/schemas/SpyMetrics"
          },
          "summary_md": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Summary Md"
          },
          "weekly_snapshots": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": "array",
            "title": "Weekly Snapshots",
            "default": []
          }
        },
        "type": "object",
        "required": [
          "trading_date",
          "generated_at"
        ],
        "title": "RotationPeriodData",
        "description": "Data for one analysis period (1y or 5y)."
      },
      "RotationResponse": {
        "properties": {
          "request_id": {
            "type": "string",
            "title": "Request Id"
          },
          "model_version": {
            "type": "string",
            "title": "Model Version"
          },
          "credits_charged": {
            "type": "number",
            "title": "Credits Charged"
          },
          "endpoint_type": {
            "type": "string",
            "title": "Endpoint Type"
          },
          "endpoint_name": {
            "type": "string",
            "title": "Endpoint Name"
          },
          "trading_date": {
            "type": "string",
            "title": "Trading Date"
          },
          "generated_at": {
            "type": "string",
            "title": "Generated At"
          },
          "outlook_1y": {
            "$ref": "#/components/schemas/RotationPeriodData"
          }
        },
        "type": "object",
        "required": [
          "request_id",
          "model_version"
        ],
        "title": "RotationResponse"
      }
    }
  }
}
Call itcurl · fetch · python
curl "https://api.finsignals.ai/openapi.json"
const res = await fetch("https://api.finsignals.ai/openapi.json");
const data = await res.json();
console.log(data);
import requests

res = requests.get("https://api.finsignals.ai/openapi.json")
print(res.json())
Endpoints · 6HealthyFULL DOCS ↗
Monitored path responding — GET /openapi.json312 mschecked 9h ago
GET/openapi.jsonPROBED

FinSignals API — The FinSignals API provides a RESTful interface for cla…

GET/openapi.json?limit=5

Paginated variant with limit parameter.

GET/api/health

Health Check

GET/v1/health

Health Check

GET/v1/usage

Get Usage

GET/v1/plan

Get Plan

Machine-readable spec

We probe a documented GET and expect 2xx JSON — full uptime and health score. Export includes every documented route below.

Response-shape history

Stable. No schema drift observed since monitoring began — the response shape has not changed under our checks.

FinSignals API: common questions

Is FinSignals API free to use?

Yes — FinSignals API is a free social & work API. Free tier: Free — limits not published. Whether the free tier allows commercial use is unclear — check the provider docs.

Does FinSignals API need an API key?

No — FinSignals API needs no API key or signup. You can call it straight away; rate limits still apply (Unpublished).

Can I call FinSignals API from the browser?

Yes — FinSignals API returns CORS headers over HTTPS, so front-end code can fetch it directly with no backend proxy. Use the fetch snippet on this page, or hit "Run live" to try it now.

Is FinSignals API up right now?

As of our last scheduled check, FinSignals API is healthy with 100% uptime over 90 days and a 312 ms median response. We re-probe it every sweep — the status badge and uptime chart above always show the latest.