FactSet Signals API
Leverage Signals to identify material events for a company. Signals are derived from FactSet's core data, cognitive computing technology, and our 3rd party partners.
Leverage Signals to identify material events for a company. Signals are derived from FactSet's core data, cognitive computing technology, and our 3rd party partners.
openapi: 3.0.2
info:
title: Factset Signals API
description: >-
Collection of endpoints for providing Signal Events, Definitions and
Metadata
version: 2.6.0
contact:
name: Signals API Support
email: [email protected]
servers:
- url: https://api.factset.com/signals/v2
description: Production
tags:
- name: Categories
- name: Data Dictionary
- name: Events
description: >-
Fetch signal events. Please note that FactSet Cognitive signals and
signals contributed by third parties are excluded from the response for
limited API access.
- name: Themes
paths:
/events/headlines:
get:
tags:
- Events
x-factset-sdk-ignore: true
operationId: getEventHeadlines
description: >-
Fetch Signals event headlines based on at least one of the following
filtering parameters: `ids`, `portfolios`
parameters:
- $ref: '#/components/parameters/createdParam'
- $ref: '#/components/parameters/updatedParam'
- $ref: '#/components/parameters/signalIdsParam'
- $ref: '#/components/parameters/idsParam'
- $ref: '#/components/parameters/portfoliosParam'
- $ref: '#/components/parameters/themesParam'
- $ref: '#/components/parameters/categoriesParam'
- $ref: '#/components/parameters/relevanceScoreParam'
- $ref: '#/components/parameters/sortParam'
- $ref: '#/components/parameters/resolveIdentifiersParam'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/eventHeadlines'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/errorResponse'
'429':
description: API Rate Limit Exceeded
headers:
Api-Version:
$ref: '#/components/headers/Api-Version'
Api-Supported-Versions:
$ref: '#/components/headers/Api-Supported-Versions'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/rateLimitResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/errorResponse'
post:
tags:
- Events
operationId: postEventHeadlines
description: >-
Fetch Signals event headlines based on the filtering criteria for up to
1000 identifiers and at least one of the following filtering parameters:
`ids`, `portfolios`
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/eventRequestBody'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/eventHeadlines'
'429':
description: API Rate Limit Exceeded
headers:
Api-Version:
$ref: '#/components/headers/Api-Version'
Api-Supported-Versions:
$ref: '#/components/headers/Api-Supported-Versions'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/rateLimitResponse'
/events/details:
get:
tags:
- Events
x-factset-sdk-ignore: true
operationId: getEventDetails
description: >-
Fetch Signals event headlines plus all additional event details based on
at least one of the following filtering parameters: `ids`, `portfolios`
parameters:
- $ref: '#/components/parameters/createdParam'
- $ref: '#/components/parameters/updatedParam'
- $ref: '#/components/parameters/signalIdsParam'
- $ref: '#/components/parameters/idsParam'
- $ref: '#/components/parameters/portfoliosParam'
- $ref: '#/components/parameters/themesParam'
- $ref: '#/components/parameters/categoriesParam'
- $ref: '#/components/parameters/relevanceScoreParam'
- $ref: '#/components/parameters/sortParam'
- $ref: '#/components/parameters/resolveIdentifiersParam'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/eventDetails'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/errorResponse'
'429':
description: API Rate Limit Exceeded
headers:
Api-Version:
$ref: '#/components/headers/Api-Version'
Api-Supported-Versions:
$ref: '#/components/headers/Api-Supported-Versions'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/rateLimitResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/errorResponse'
post:
tags:
- Events
operationId: postEventDetails
description: >-
Fetch Signals event headlines plus all additional event details for up
to 1000 identifiers and at least one of the following filtering
parameters: `ids`, `portfolios`
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/eventRequestBody'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/eventDetails'
'429':
description: API Rate Limit Exceeded
headers:
Api-Version:
$ref: '#/components/headers/Api-Version'
Api-Supported-Versions:
$ref: '#/components/headers/Api-Supported-Versions'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/rateLimitResponse'
/events/details/{eventId}:
get:
tags:
- Events
operationId: getEventDetailById
description: >-
Fetch Signals event headlines plus all additional event details for a
single requested Signal event
parameters:
- $ref: '#/components/parameters/eventIdParam'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/eventDetail'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/errorResponse'
'429':
description: API Rate Limit Exceeded
headers:
Api-Version:
$ref: '#/components/headers/Api-Version'
Api-Supported-Versions:
$ref: '#/components/headers/Api-Supported-Versions'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/rateLimitResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/errorResponse'
/events/adaptive-cards:
get:
tags:
- Events
x-factset-sdk-ignore: true
operationId: getEventAdaptiveCards
description: >-
Fetch Microsoft's Adaptive Cards, which includes headlines and event
details data plus hyperlinks to FactSet reports, based on at least one
of the following filtering parameters: `ids`, `portfolios`
parameters:
- $ref: '#/components/parameters/createdParam'
- $ref: '#/components/parameters/updatedParam'
- $ref: '#/components/parameters/signalIdsParam'
- $ref: '#/components/parameters/idsParam'
- $ref: '#/components/parameters/portfoliosParam'
- $ref: '#/components/parameters/themesParam'
- $ref: '#/components/parameters/categoriesParam'
- $ref: '#/components/parameters/relevanceScoreParam'
- $ref: '#/components/parameters/sortParam'
- $ref: '#/components/parameters/resolveIdentifiersParam'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/eventAdaptiveCards'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/errorResponse'
'429':
description: API Rate Limit Exceeded
headers:
Api-Version:
$ref: '#/components/headers/Api-Version'
Api-Supported-Versions:
$ref: '#/components/headers/Api-Supported-Versions'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/rateLimitResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/errorResponse'
post:
tags:
- Events
operationId: postEventAdaptiveCards
description: >-
Fetch Microsoft's Adaptive Cards, which includes headlines and event
details data plus hyperlinks to FactSet reports, based on at least one
of the following filtering parameters: `ids`, `portfolios`
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/eventRequestBody'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/eventAdaptiveCards'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/errorResponse'
'429':
description: API Rate Limit Exceeded
headers:
Api-Version:
$ref: '#/components/headers/Api-Version'
Api-Supported-Versions:
$ref: '#/components/headers/Api-Supported-Versions'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/rateLimitResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/errorResponse'
/events/adaptive-cards/{eventId}:
get:
tags:
- Events
operationId: getEventAdaptiveCardById
description: >-
Fetch Microsoft's Adaptive Cards, which includes headlines and event
details data plus hyperlinks to FactSet reports, for a single requested
Signal event
parameters:
- $ref: '#/components/parameters/eventIdParam'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/eventAdaptiveCard'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/errorResponse'
'429':
description: API Rate Limit Exceeded
headers:
Api-Version:
$ref: '#/components/headers/Api-Version'
Api-Supported-Versions:
$ref: '#/components/headers/Api-Supported-Versions'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/rateLimitResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/errorResponse'
/events/entities:
get:
tags:
- Events
x-factset-sdk-ignore: true
operationId: getEventEntities
description: Fetch FactSet entity IDs for events that match the filtering criteria
parameters:
- $ref: '#/components/parameters/createdParam'
- $ref: '#/components/parameters/updatedParam'
- $ref: '#/components/parameters/signalIdsParam'
- $ref: '#/components/parameters/themesParam'
- $ref: '#/components/parameters/categoriesParam'
- $ref: '#/components/parameters/relevanceScoreParam'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/eventsEntities'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/errorResponse'
'429':
description: API Rate Limit Exceeded
headers:
Api-Version:
$ref: '#/components/headers/Api-Version'
Api-Supported-Versions:
$ref: '#/components/headers/Api-Supported-Versions'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/rateLimitResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/errorResponse'
post:
tags:
- Events
operationId: postEventEntities
description: Fetch FactSet entity IDs for events that match the filtering criteria
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/eventsEntitiesPost'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/eventsEntities'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/errorResponse'
'429':
description: API Rate Limit Exceeded
headers:
Api-Version:
$ref: '#/components/headers/Api-Version'
Api-Supported-Versions:
$ref: '#/components/headers/Api-Supported-Versions'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/rateLimitResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/errorResponse'
/data-dictionary:
get:
tags:
- Data Dictionary
operationId: getDataDictionary
description: Fetch a list of all active signals
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/signalMetaData'
'429':
description: API Rate Limit Exceeded
headers:
Api-Version:
$ref: '#/components/headers/Api-Version'
Api-Supported-Versions:
$ref: '#/components/headers/Api-Supported-Versions'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/rateLimitResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/errorResponse'
/data-dictionary/{signalId}:
get:
tags:
- Data Dictionary
operationId: getDataDictionaryById
description: Fetch the metadata and contract for the requested signal
parameters:
- $ref: '#/components/parameters/signalIdParam'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/signalDefinition'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/errorResponse'
'429':
description: API Rate Limit Exceeded
headers:
Api-Version:
$ref: '#/components/headers/Api-Version'
Api-Supported-Versions:
$ref: '#/components/headers/Api-Supported-Versions'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/rateLimitResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/errorResponse'
/themes:
get:
tags:
- Themes
operationId: getThemes
description: Fetch a list of available signal themes
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/signalMetaData'
'429':
description: API Rate Limit Exceeded
headers:
Api-Version:
$ref: '#/components/headers/Api-Version'
Api-Supported-Versions:
$ref: '#/components/headers/Api-Supported-Versions'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/rateLimitResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/errorResponse'
/categories:
get:
tags:
- Categories
operationId: getCategories
description: Fetch a list of available signal categories
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/signalMetaData'
'429':
description: API Rate Limit Exceeded
headers:
Api-Version:
$ref: '#/components/headers/Api-Version'
Api-Supported-Versions:
$ref: '#/components/headers/Api-Supported-Versions'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/rateLimitResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/errorResponse'
components:
examples:
lowerBound:
value:
gt: '2022-01-01T00:00:00.000Z'
upperBound:
value:
lt: '2022-01-02T00:00:00.000Z'
bothBounds:
value:
gt: '2022-01-01T00:00:00.000Z'
lt: '2022-01-02T00:00:00.000Z'
parameters:
createdParam:
name: created
in: query
schema:
$ref: '#/components/schemas/DateTimeInterval'
style: deepObject
explode: true
description: >-
A date/time (UTC) interval for filtering signal events based on their
creation date. Defaults to NOW - 7 days if omitted. Users with limited
access can only provide the default or a smaller date window.
examples:
default:
value: {}
lowerBound:
$ref: '#/components/examples/lowerBound'
upperBound:
$ref: '#/components/examples/upperBound'
bothBounds:
$ref: '#/components/examples/bothBounds'
updatedParam:
name: updated
in: query
schema:
$ref: '#/components/schemas/DateTimeInterval'
style: deepObject
explode: true
description: >-
A date/time (UTC) interval for filtering signal events based on their
last updated date. Defaults to NOW - 7 days if omitted. Users with
limited access can only provide the default or a smaller date window.
examples:
default:
value: {}
lowerBound:
$ref: '#/components/examples/lowerBound'
upperBound:
$ref: '#/components/examples/upperBound'
bothBounds:
$ref: '#/components/examples/bothBounds'
signalIdsParam:
name: signalIds
in: query
schema:
type: string
description: Comma delimited string of signalIds
example: dilutionTrigger,freeCashFlow
idsParam:
name: ids
in: query
schema:
type: string
description: >-
Comma delimited string of identifiers. An identifier can be a ticker,
FactSet entity id, CUSIP or ISIN. You must provide a list of identifiers
either via a ids or a portfolios parameter. If both are provided, only
ids filter is used. Users with limited access can use only the ids
filter and provide at most 10 ids.
example: FDS-US,AMZN-US
portfoliosParam:
name: portfolios
in: query
schema:
type: string
description: >-
Name of a portfolio file stored by FactSet. If the portfolio contains
more than 1,000 ids, only the first 1,000 ids are processed (e.g.
client:techstocks.ofdb). Please note that using this parameter requires
full subscription to Signals API.
themesParam:
name: themes
in: query
schema:
type: string
description: >-
Comma delimited string of theme ids. Full list of signal themes can be
viewed at /themes.
categoriesParam:
name: categories
in: query
schema:
type: string
description: >-
Comma delimited string of category ids. Full list of signal categories
can be viewed at /categories.
relevanceScoreParam:
name: userRelevanceScore
in: query
schema:
$ref: '#/components/schemas/RelevanceScoreRange'
style: deepObject
explode: true
description: A range for filtering signal events based on their relevancy score.
examples:
lowerBound:
value:
gte: 0
upperBound:
value:
lt: 1
bothBounds:
value:
gt: 0
lt: 1
eventIdParam:
name: eventId
in: path
required: true
description: The UUID of the event to return.
schema:
type: string
format: uuid
minimum: 1
signalIdParam:
name: signalId
in: path
required: true
schema:
type: string
description: A single signalId.
example: dilutionTrigger
sortParam:
name: sort
in: query
schema:
type: string
description: >-
Comma delimited string of sortable attributes. The sort order for each
sort attribute is ascending unless it is prefixed with a minus sign, in
which case it is descending. If sort is not provided, the default sort
applied is -userRelevanceScore (userRelevanceScore in descending order).
example: '-userRelevanceScore,-eventDate'
resolveIdentifiersParam:
name: resolveIdentifiers
in: query
schema:
type: boolean
description: >-
The api will return resolved identifiers in the meta section of the
response by default (true). If the parameter is false, the api will not
attempt to resolve the identifiers.
example: true
schemas:
errorResponse:
type: object
required:
- message
properties:
message:
type: string
description: A short description of the error.
example: There was an error processing your request. Please try again later.
errors:
type: array
items:
$ref: '#/components/schemas/errorItem'
description: >-
Optional list of errors. e.g. Validation errors for multiple
parameters
rateLimitResponse:
title: Rate Limit Error Object
description: Error returned if any of the user's rate limit have been reached.
properties:
message:
type: string
example: API rate limit exceeded
errorItem:
type: object
required:
- id
- code
- title
properties:
id:
type: string
format: uuid
code:
type: string
example: parameterError
title:
type: string
example: Invalid type/value
detail:
type: string
example: Value must be a valid UTC date/time that conforms to ISO 8601 format
source:
type: object
properties:
parameter:
type: string
eventMeta:
type: object
required:
- signalRequestId
- idResolutions
properties:
signalRequestId:
type: string
format: uuid
idResolutions:
$ref: '#/components/schemas/idResolutionsMeta'
eventsMeta:
type: object
required:
- signalRequestId
- idResolutions
- dateRange
properties:
signalRequestId:
type: string
format: uuid
sort:
type: array
items:
type: string
pagination:
type: object
properties:
total:
type: integer
isEstimatedTotal:
type: boolean
idResolutions:
$ref: '#/components/schemas/idResolutionsMeta'
dateRange:
type: object
properties:
created:
$ref: '#/components/schemas/DateTimeInterval'
updated:
$ref: '#/components/schemas/DateTimeInterval'
idResolutionsMeta:
type: object
properties:
tickerRegion:
type: object
additionalProperties:
type: string
nullable: true
regionalPermId:
type: object
additionalProperties:
type: string
nullable: true
screenMeta:
type: object
required:
- signalRequestId
- dateRange
properties:
signalRequestId:
type: string
format: uuid
dateRange:
type: object
properties:
created:
$ref: '#/components/schemas/DateTimeInterval'
updated:
$ref: '#/components/schemas/DateTimeInterval'
partial:
type: object
required:
- isPartial
- reason
properties:
isPartial:
type: boolean
description: >-
Indicates that some of the matching entities are missing in the
response.
reason:
type: string
description: >-
Describes why the response was sent with an incomplete list of
entities.
eventHeadlineDataItem:
type: object
required:
- requestId
- signalId
- signalName
- theme
- source
- eventId
- eventDate
- summary
- userRelevanceScore
properties:
requestId:
type: string
description: >-
The id that was requested. This can be a ticker, cusip or factset
entity id.
companyName:
type: string
description: Name of the company reported in signal. Omitted if null.
signalId:
type: string
description: Signal Id for this event. e.g. dilutionTrigger
signalName:
type: string
description: Signal Name for this event. e.g. dilutionTrigger
theme:
type: string
description: Theme name of the signal for this event. e.g. Debt Capital Structure
source:
type: string
description: >-
Primary data provider for the signal this event belongs to. e.g.
FactSet, Bitvore
eventId:
type: string
format: uuid
description: A unique id for this event.
eventDate:
type: string
format: date
description: The UTC date/time of the event in ISO 8601 format.
summar
# --- truncated at 32 KB (44 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/factset/refs/heads/main/openapi/signals-openapi-original.yml