openapi: 3.2.0 info: title: Perigon Monitors API description: The Perigon API provides access to comprehensive news and web content data. To use the API, simply sign up for a Perigon Business Solutions account to obtain your API key. Your available features may vary based on your plan. See the Authentication section for details on how to use your API key. contact: name: Perigon Support url: https://docs.perigon.io/ email: data@perigon.io version: 1.0.0 servers: - url: https://api.perigon.io description: Generated server url security: - apiKeyAuth: [] tags: - name: Monitors description: Manage AI Monitors — configurable monitors that continuously scan news content for topics, entities, and events of interest. Monitors run asynchronously and emit structured events and AI-generated summaries that can be delivered to contact points. paths: /v1/api/monitors: get: tags: - Monitors summary: List monitors description: List AI monitors for the organization associated with the API key. Excludes archived monitors by default. Use the status parameter to filter. operationId: list-monitors-api parameters: - name: uuid in: query description: Filter by one or more monitor UUIDs. Multiple values are combined with OR. required: false schema: type: array items: type: string format: uuid - name: name in: query description: Filter by monitor name using a case-insensitive partial match. required: false schema: type: string - name: status in: query description: 'Filter by status: DRAFT, ACTIVE, STOPPED, or ARCHIVED. When omitted, archived monitors are excluded.' required: false schema: uniqueItems: true type: array items: type: string enum: - DRAFT - ACTIVE - STOPPED - ARCHIVED - name: classificationType in: query description: 'Filter by classification type: EVENT, MENTIONS, or TOPIC. Multiple values are combined with OR.' required: false schema: uniqueItems: true type: array items: type: string enum: - EVENT - MENTIONS - TOPIC - name: sortBy in: query description: Required field used to sort monitors. Accepts createdAt or updatedAt. required: true schema: type: string description: Required field used to sort monitors. Accepts createdAt or updatedAt. - name: page in: query description: Zero-based page number to retrieve. Defaults to 0. required: false schema: minimum: 0 type: integer description: Zero-based page number to retrieve. Defaults to 0. format: int32 default: 0 - name: size in: query description: Number of results per page. Must be between 1 and 100; defaults to 10. required: false schema: maximum: 100 minimum: 1 type: integer description: Number of results per page. Must be between 1 and 100; defaults to 10. format: int32 default: 10 - name: sortOrder in: query description: Required direction used to sort results. Accepts asc or desc. required: true schema: type: string description: Required direction used to sort results. Accepts asc or desc. enum: - asc - desc - name: nulls in: query description: Placement of null values in sorted results. Accepts first or last. required: false schema: type: string description: Placement of null values in sorted results. Accepts first or last. enum: - first - last responses: '401': description: 401 - Invalid API Key content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 401 message: Invalid API key. timestamp: 1681338367402 '500': description: 500 - Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 500 message: Internal error. Please contact the support to resolve the problem. We apologize for any inconvenience :) timestamp: 1681338367402 '200': description: 200 - Success content: application/json: schema: $ref: '#/components/schemas/MonitorListResult' '400': description: 400 - Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 400 message: Errors during parameter validation. timestamp: 1681338367402 '403': description: 403 - Request Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 403 message: The number of allowed requests is exceeded. timestamp: 1681338367402 '429': description: 429 - Too Many Requests content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 429 message: Exceeded request rate limit for your account. timestamp: 1681338367402 security: - apiKeyAuth: [] post: tags: - Monitors summary: Create monitor description: Create a new AI monitor. Only AI_SIGNAL type is supported; status is required and accepts ACTIVE or DRAFT. operationId: create-monitor-api requestBody: content: application/json: schema: $ref: '#/components/schemas/SignalApiCreateBody' required: true responses: '401': description: 401 - Invalid API Key content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 401 message: Invalid API key. timestamp: 1681338367402 '200': description: 200 - Success content: application/json: schema: $ref: '#/components/schemas/MonitorResult' '500': description: 500 - Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 500 message: Internal error. Please contact the support to resolve the problem. We apologize for any inconvenience :) timestamp: 1681338367402 '400': description: 400 - Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 400 message: Errors during parameter validation. timestamp: 1681338367402 '403': description: 403 - Request Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 403 message: The number of allowed requests is exceeded. timestamp: 1681338367402 '429': description: 429 - Too Many Requests content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 429 message: Exceeded request rate limit for your account. timestamp: 1681338367402 security: - apiKeyAuth: [] /v1/api/monitors/{uuid}: get: tags: - Monitors summary: Get monitor description: Retrieve a monitor by UUID for the organization associated with the API key. operationId: get-monitor-api parameters: - name: uuid in: path description: UUID of the monitor to retrieve. required: true schema: type: string format: uuid responses: '401': description: 401 - Invalid API Key content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 401 message: Invalid API key. timestamp: 1681338367402 '200': description: 200 - Success content: application/json: schema: $ref: '#/components/schemas/MonitorResult' '500': description: 500 - Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 500 message: Internal error. Please contact the support to resolve the problem. We apologize for any inconvenience :) timestamp: 1681338367402 '400': description: 400 - Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 400 message: Errors during parameter validation. timestamp: 1681338367402 '403': description: 403 - Request Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 403 message: The number of allowed requests is exceeded. timestamp: 1681338367402 '429': description: 429 - Too Many Requests content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 429 message: Exceeded request rate limit for your account. timestamp: 1681338367402 security: - apiKeyAuth: [] delete: tags: - Monitors summary: Archive monitor description: Archive a monitor. Archived monitors are excluded from list results by default. operationId: archive-monitor-api parameters: - name: uuid in: path description: UUID of the monitor to archive. required: true schema: type: string format: uuid responses: '401': description: 401 - Invalid API Key content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 401 message: Invalid API key. timestamp: 1681338367402 '200': description: 200 - Success content: application/json: schema: $ref: '#/components/schemas/MonitorResult' '500': description: 500 - Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 500 message: Internal error. Please contact the support to resolve the problem. We apologize for any inconvenience :) timestamp: 1681338367402 '400': description: 400 - Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 400 message: Errors during parameter validation. timestamp: 1681338367402 '403': description: 403 - Request Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 403 message: The number of allowed requests is exceeded. timestamp: 1681338367402 '429': description: 429 - Too Many Requests content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 429 message: Exceeded request rate limit for your account. timestamp: 1681338367402 security: - apiKeyAuth: [] patch: tags: - Monitors summary: Update monitor description: Partially update a monitor. Only provided fields are modified. Use /activate, /pause, or DELETE to change monitor status. operationId: update-monitor-api parameters: - name: uuid in: path description: UUID of the monitor to update. required: true schema: type: string format: uuid requestBody: content: application/json: schema: $ref: '#/components/schemas/SignalApiUpdateBody' required: true responses: '401': description: 401 - Invalid API Key content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 401 message: Invalid API key. timestamp: 1681338367402 '200': description: 200 - Success content: application/json: schema: $ref: '#/components/schemas/MonitorResult' '500': description: 500 - Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 500 message: Internal error. Please contact the support to resolve the problem. We apologize for any inconvenience :) timestamp: 1681338367402 '400': description: 400 - Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 400 message: Errors during parameter validation. timestamp: 1681338367402 '403': description: 403 - Request Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 403 message: The number of allowed requests is exceeded. timestamp: 1681338367402 '429': description: 429 - Too Many Requests content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 429 message: Exceeded request rate limit for your account. timestamp: 1681338367402 security: - apiKeyAuth: [] /v1/api/monitors/{uuid}/activate: post: tags: - Monitors summary: Activate monitor description: Activate a monitor, starting its processing pipeline. operationId: activate-monitor-api parameters: - name: uuid in: path description: UUID of the monitor to activate. required: true schema: type: string format: uuid responses: '401': description: 401 - Invalid API Key content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 401 message: Invalid API key. timestamp: 1681338367402 '200': description: 200 - Success content: application/json: schema: $ref: '#/components/schemas/MonitorResult' '500': description: 500 - Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 500 message: Internal error. Please contact the support to resolve the problem. We apologize for any inconvenience :) timestamp: 1681338367402 '400': description: 400 - Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 400 message: Errors during parameter validation. timestamp: 1681338367402 '403': description: 403 - Request Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 403 message: The number of allowed requests is exceeded. timestamp: 1681338367402 '429': description: 429 - Too Many Requests content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 429 message: Exceeded request rate limit for your account. timestamp: 1681338367402 security: - apiKeyAuth: [] /v1/api/monitors/{uuid}/events: get: tags: - Monitors summary: List monitor events description: List structured events emitted by a monitor. Events represent individual matches detected by the monitor (e.g. a news article matching the monitor's criteria) and are produced asynchronously as new content is ingested. operationId: list-monitor-events-api parameters: - name: uuid in: path description: UUID of the monitor whose events to retrieve. required: true schema: type: string format: uuid - name: eventType in: query description: Filter for events with this exact event type. required: false schema: type: string - name: from in: query description: Filter for events created on or after this date. Accepts ISO 8601 or yyyy-mm-dd format. required: false schema: type: string format: date-time - name: to in: query description: Filter for events created on or before this date. Accepts ISO 8601 or yyyy-mm-dd format. required: false schema: type: string format: date-time - name: sortBy in: query description: Required field used to sort events. Accepts createdAt, updatedAt, or eventDate. required: true schema: type: string description: Required field used to sort events. Accepts createdAt, updatedAt, or eventDate. - name: page in: query description: Zero-based page number to retrieve. Defaults to 0. required: false schema: minimum: 0 type: integer description: Zero-based page number to retrieve. Defaults to 0. format: int32 default: 0 - name: size in: query description: Number of results per page. Must be between 1 and 100; defaults to 10. required: false schema: maximum: 100 minimum: 1 type: integer description: Number of results per page. Must be between 1 and 100; defaults to 10. format: int32 default: 10 - name: sortOrder in: query description: Required direction used to sort results. Accepts asc or desc. required: true schema: type: string description: Required direction used to sort results. Accepts asc or desc. enum: - asc - desc - name: nulls in: query description: Placement of null values in sorted results. Accepts first or last. required: false schema: type: string description: Placement of null values in sorted results. Accepts first or last. enum: - first - last responses: '401': description: 401 - Invalid API Key content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 401 message: Invalid API key. timestamp: 1681338367402 '500': description: 500 - Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 500 message: Internal error. Please contact the support to resolve the problem. We apologize for any inconvenience :) timestamp: 1681338367402 '200': description: 200 - Success content: application/json: schema: $ref: '#/components/schemas/MonitorEventListResult' '400': description: 400 - Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 400 message: Errors during parameter validation. timestamp: 1681338367402 '403': description: 403 - Request Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 403 message: The number of allowed requests is exceeded. timestamp: 1681338367402 '429': description: 429 - Too Many Requests content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 429 message: Exceeded request rate limit for your account. timestamp: 1681338367402 security: - apiKeyAuth: [] /v1/api/monitors/{uuid}/newsletters: get: tags: - Monitors summary: List monitor newsletters description: List newsletters generated for a monitor. Newsletters bundle a monitor's recent events into a human-readable digest and are produced on the monitor's configured schedule. operationId: list-monitor-newsletters-api parameters: - name: uuid in: path description: UUID of the monitor whose newsletters to retrieve. required: true schema: type: string format: uuid - name: title in: query description: Filter by newsletter title using a case-insensitive partial match. required: false schema: type: string - name: from in: query description: Filter for newsletters created on or after this date. Accepts ISO 8601 or yyyy-mm-dd format. required: false schema: type: string format: date-time - name: to in: query description: Filter for newsletters created on or before this date. Accepts ISO 8601 or yyyy-mm-dd format. required: false schema: type: string format: date-time - name: sortBy in: query description: Required field used to sort newsletters. Accepts createdAt or updatedAt. required: true schema: type: string description: Required field used to sort newsletters. Accepts createdAt or updatedAt. - name: page in: query description: Zero-based page number to retrieve. Defaults to 0. required: false schema: minimum: 0 type: integer description: Zero-based page number to retrieve. Defaults to 0. format: int32 default: 0 - name: size in: query description: Number of results per page. Must be between 1 and 100; defaults to 10. required: false schema: maximum: 100 minimum: 1 type: integer description: Number of results per page. Must be between 1 and 100; defaults to 10. format: int32 default: 10 - name: sortOrder in: query description: Required direction used to sort results. Accepts asc or desc. required: true schema: type: string description: Required direction used to sort results. Accepts asc or desc. enum: - asc - desc - name: nulls in: query description: Placement of null values in sorted results. Accepts first or last. required: false schema: type: string description: Placement of null values in sorted results. Accepts first or last. enum: - first - last responses: '401': description: 401 - Invalid API Key content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 401 message: Invalid API key. timestamp: 1681338367402 '500': description: 500 - Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 500 message: Internal error. Please contact the support to resolve the problem. We apologize for any inconvenience :) timestamp: 1681338367402 '400': description: 400 - Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 400 message: Errors during parameter validation. timestamp: 1681338367402 '403': description: 403 - Request Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 403 message: The number of allowed requests is exceeded. timestamp: 1681338367402 '200': description: 200 - Success content: application/json: schema: $ref: '#/components/schemas/MonitorNewsletterListResult' '429': description: 429 - Too Many Requests content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 429 message: Exceeded request rate limit for your account. timestamp: 1681338367402 security: - apiKeyAuth: [] /v1/api/monitors/{uuid}/pause: post: tags: - Monitors summary: Pause monitor description: Pause a monitor, stopping its processing pipeline. operationId: pause-monitor-api parameters: - name: uuid in: path description: UUID of the monitor to pause. required: true schema: type: string format: uuid responses: '401': description: 401 - Invalid API Key content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 401 message: Invalid API key. timestamp: 1681338367402 '200': description: 200 - Success content: application/json: schema: $ref: '#/components/schemas/MonitorResult' '500': description: 500 - Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 500 message: Internal error. Please contact the support to resolve the problem. We apologize for any inconvenience :) timestamp: 1681338367402 '400': description: 400 - Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 400 message: Errors during parameter validation. timestamp: 1681338367402 '403': description: 403 - Request Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 403 message: The number of allowed requests is exceeded. timestamp: 1681338367402 '429': description: 429 - Too Many Requests content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 429 message: Exceeded request rate limit for your account. timestamp: 1681338367402 security: - apiKeyAuth: [] /v1/api/monitors/{uuid}/summary: get: tags: - Monitors summary: List monitor summaries description: List AI-generated summaries produced for a monitor as matching content is processed. operationId: list-monitor-summaries-api parameters: - name: uuid in: path description: UUID of the monitor whose summaries to retrieve. required: true schema: type: string format: uuid - name: from in: query description: Filter for summaries created on or after this date. Accepts ISO 8601 or yyyy-mm-dd format. required: false schema: type: string format: date-time - name: to in: query description: Filter for summaries created on or before this date. Accepts ISO 8601 or yyyy-mm-dd format. required: false schema: type: string format: date-time - name: sortBy in: query description: Required field used to sort summaries. Accepts createdAt or updatedAt. required: true schema: type: string description: Required field used to sort summaries. Accepts createdAt or updatedAt. - name: page in: query description: Zero-based page number to retrieve. Defaults to 0. required: false schema: minimum: 0 type: integer description: Zero-based page number to retrieve. Defaults to 0. format: int32 default: 0 - name: size in: query description: Number of results per page. Must be between 1 and 100; defaults to 10. required: false schema: maximum: 100 minimum: 1 type: integer description: Number of results per page. Must be between 1 and 100; defaults to 10. format: int32 default: 10 - name: sortOrder in: query description: Required direction used to sort results. Accepts asc or desc. required: true schema: type: string description: Required direction used to sort results. Accepts asc or desc. enum: - asc - desc - name: nulls in: query description: Placement of null values in sorted results. Accepts first or last. required: false schema: type: string description: Placement of null values in sorted results. Accepts first or last. enum: - first - last responses: '401': description: 401 - Invalid API Key content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 401 message: Invalid API key. timestamp: 1681338367402 '200': description: 200 - Success content: application/json: schema: $ref: '#/components/schemas/MonitorSummaryListResult' '500': description: 500 - Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 500 message: Internal error. Please contact the support to resolve the problem. We apologize for any inconvenience :) timestamp: 1681338367402 '400': description: 400 - Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 400 message: Errors during parameter validation. timestamp: 1681338367402 '403': description: 403 - Request Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 403 message: The number of allowed requests is exceeded. timestamp: 1681338367402 '429': description: 429 - Too Many Requests content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 429 message: Exceeded request rate limit for your account. timestamp: 1681338367402 security: - apiKeyAuth: [] components: schemas: FilledField: required: - field - method - source type: object properties: field: type: string description: Name of the event data field populated by enrichment. method: type: string description: Search method used to populate the field. Accepts WEB_SEARCH or ARTICLE_SEARCH. enum: - WEB_SEARCH - ARTICLE_SEARCH - X_POST source: type: string description: How enrichment was initiated. Accepts MANUAL or BACKGROUND. enum: - MANUAL - BACKGROUND sources: type: - array - 'null' description: Sources used to populate the field. items: $ref: '#/components/schemas/Source' description: Event fields populated by enrichment and the sources used for each field. Source: type: object properties: articleId: type: - string - 'null' description: Perigon article ID of the supporting source, when available. url: type: - string - 'null' description: URL of the supporting source, when available. title: type: - string - 'null' description: Title of the supporting source, when available. description: Sources used to populate the field. ErrorResponse: type: object properties: status: type: - integer - 'null' format: int32 message: type: - string - 'null' timestamp: type: - integer - 'null' format: int64 XPost: required: - createdAt - lang - media - screenName - text - tweetId type: object properties: tweetId: type: string screenName: type: string text: type: string lang: type: string createdAt: type: string format: date-time avatarUrl: type: - string - 'null' favorites: type: - integer - 'null' format: int64 retweets: type: - integer - 'null' format: int64 replies: type: - integer - 'null' format: int64 quotes: type: - integer - 'null' format: int64 bookmarks: type: - integer - 'null' format: int64 media: $ref: '#/components/schemas/XPostMedia' XPostMediaItem: required: - mediaUrlHttps type: object properties: mediaUrlHttps: type: string SignalArticlePartialDto: type: object properties: title: type: - string - 'null' description: Article headline. url: type: - string - 'null' description: Canonical URL of the article. domain: type: - string - 'null' description: Publisher domain for the article. pubDate: type: - string - 'null' description: Article publication date supplied with the monitor result. sourceFavicon: type: - string - 'null' description: URL of the publisher's favicon. highlights: type: - object - 'null' additionalProperties: type: array description: Matched text snippets grouped by article field. items: type: string description: Matched text snippets grouped by article field. description: Matched text snippets grouped by article field. description: Article details keyed by article ID for articles related to the event. FillbotMetadata: type: object properties: filledFields: type: - array - 'null' description: Event fields populated by enrichment and the sources used for each field. items: $ref: '#/components/schemas/FilledField' description: Provenance for event fields populated by the enrichment process. SignalEventDto: type: object properties: uuid: type: - string - 'null' description: Unique identifier for the monitor event. format: uuid createdAt: type: - string - 'null' description: Date and time the event was created, in ISO 8601 format. format: date-time updatedAt: type: - string - 'null' description: Date and time the event was last updated, in ISO 8601 format. format: date-time eventDate: type: - string - 'null' description: Date and time the detected event occurred, in ISO 8601 format when available. format: date-time eventType: type: - string - 'null' description: Detected event category produced by the monitor. data: type: - object - 'null' additionalProperties: type: object description: Structured event fields defined by the monitor's data schema. description: Structured event fields defined by the monitor's data schema. relatedArticleIds: type: - array - 'null' description: Perigon article IDs related to the event. items: type: string description: Perigon article IDs related to the event. articles: type: - object - 'null' additionalProperties: $ref: '#/components/schemas/SignalArticlePartialDto' description: Article details keyed by article ID for articles related to the event. entities: type: - array - 'null' description: Entities matched in the content that produced the event. items: $ref: '#/components/schemas/MatchedEntityData' summary: type: - string - 'null' description: AI-generated summary of the event, when available. fillbotMetadata: allOf: - $ref: '#/components/schemas/FillbotMetadata' fillbotScheduleAt: type: - string - 'null' description: Date and time enrichment is scheduled to run, in ISO 8601 format. format: date-time fillbotLastRunAt: type: - string - 'null' description: Date and time enrichment last ran, in ISO 8601 format. format: date-time fillbotStatus: type: - string - 'null' description: Current event enrichment status. Accepts PENDING, IN_PROGRESS, COMPLETE, or EXHAUSTED. enum: - PENDING - IN_PROGRESS - COMPLETE - EXHAUSTED duplicate: type: - boolean - 'null' xPosts: type: - array - 'null' items: $ref: '#/components/schemas/XPost' description: Events returned for the requested page. EntityGroup: required: - groupReference type: object properties: groupReference: type: string description: Reference name used to identify the entity group in monitor output. description: type: - string - 'null' description: Optional plain-language description of the entities represented by the group. description: Entity groups the monitor identifies in matching content. MonitorResult: required: - data type: object properties: data: $ref: '#/components/schemas/SignalApiDto' description: Single monitor response. example: data: uuid: a1b2c3d4-e5f6-7890-abcd-ef1234567890 name: AI Product Launches createdAt: '2025-08-01T14:22:10.123Z' updatedAt: '2025-08-12T09:15:44.567Z' status: ACTIVE classificationType: EVENT monitoringObjective: Track major AI product launches and model releases from leading technology companies. prompt: Focus on official announcements and product releases. dataSchema: version: V1 allowExtra: false schema: eventType: type: ENUM description: Type of AI product announcement required: true values: - PRODUCT_LAUNCH - MODEL_RELEASE productName: type: - STRING - 'null' description: Name of the launched product or model required: true company: type: - STRING - 'null' description: Company that launched the product required: true newsletterConfig: null entityGroups: [] query: q: AI OR "artificial intelligence" sourceGroup: - top100 schedulePolicy: intervals: - hour: 9 minute: 0 timezoneId: America/New_York watchlistId: 42 contactPointIds: - f47ac10b-58cc-4372-a567-0e02b2c3d479 ComplexAllEndpointQuery: type: object properties: q: type: - string - 'null' description: Search article title, description, and content using keywords or Boolean syntax. url: type: - string - 'null' description: Filter for an exact article URL. imageUrl: type: - string - 'null' description: Filter for articles with this image URL. title: type: - string - 'null' description: Filter for articles containing this text in the title. content: type: - string - 'null' description: Filter for articles containing this text in the body content. desc: type: - string - 'null' description: Filter for articles containing this text in the description. articleId: type: - array - 'null' description: Filter by Perigon article IDs. Multiple values are combined with OR. items: type: string description: Filter by Perigon article IDs. Multiple values are combined with OR. clusterId: type: - array - 'null' description: Filter by Perigon story cluster IDs. Multiple values are combined with OR. items: type: string description: Filter by Perigon story cluster IDs. Multiple values are combined with OR. reprintGroupId: type: - string - 'null' description: Return the original article and known reprints in a reprint group. Must be a 32-character group ID. journalistId: type: - array - 'null' description: Filter by journalist IDs. Each ID must be exactly 32 characters. items: type: string description: Filter by journalist IDs. Each ID must be exactly 32 characters. medium: type: - array - 'null' description: Filter by medium type, such as Article or Video. Multiple values are combined with OR. items: type: string description: Filter by medium type, such as Article or Video. Multiple values are combined with OR. sourceGroup: type: - array - 'null' description: Filter by Perigon source groups. Multiple values are combined with OR. items: type: string description: Filter by Perigon source groups. Multiple values are combined with OR. excludeSourceGroup: type: - array - 'null' description: Exclude articles from Perigon source groups. Multiple values exclude matches from any listed group. items: type: string description: Exclude articles from Perigon source groups. Multiple values exclude matches from any listed group. source: type: - array - 'null' description: Filter by publisher domains or subdomains. Supports * and ? wildcards. items: type: string description: Filter by publisher domains or subdomains. Supports * and ? wildcards. excludeSource: type: - array - 'null' description: Exclude publisher domains or subdomains. Supports * and ? wildcards. items: type: string description: Exclude publisher domains or subdomains. Supports * and ? wildcards. country: type: - array - 'null' description: Filter by article country codes. Use two-character codes such as us or gb; multiple values are combined with OR. items: type: string description: Filter by article country codes. Use two-character codes such as us or gb; multiple values are combined with OR. excludeCountry: type: - array - 'null' description: Exclude articles with the specified country codes. Use two-character codes such as us or gb. items: type: string description: Exclude articles with the specified country codes. Use two-character codes such as us or gb. language: type: - array - 'null' description: Filter by ISO 639 two-letter language codes, such as en or es. items: type: string description: Filter by ISO 639 two-letter language codes, such as en or es. excludeLanguage: type: - array - 'null' description: Exclude articles in the specified ISO 639 two-letter languages. items: type: string description: Exclude articles in the specified ISO 639 two-letter languages. label: type: - array - 'null' description: Filter by editorial labels, such as Opinion, Paid-news, or Press Release. items: type: string description: Filter by editorial labels, such as Opinion, Paid-news, or Press Release. excludeLabel: type: - array - 'null' description: Exclude articles with any of the specified editorial labels. items: type: string description: Exclude articles with any of the specified editorial labels. byline: type: - array - 'null' description: Filter by exact author bylines. Multiple values are combined with OR. items: type: string description: Filter by exact author bylines. Multiple values are combined with OR. bylineQ: type: - string - 'null' description: Search within article author bylines. summary: type: - string - 'null' description: Filter for articles containing this text in the summary. watchlist: type: - array - 'null' description: Filter for articles mentioning entities from the specified watchlists. items: type: string description: Filter for articles mentioning entities from the specified watchlists. excludeWatchlist: type: - array - 'null' description: Exclude articles mentioning entities from the specified watchlists. items: type: string description: Exclude articles mentioning entities from the specified watchlists. excludeJournalistId: type: - array - 'null' description: Exclude articles written by journalists with these IDs. items: type: string description: Exclude articles written by journalists with these IDs. excludeSourceCity: type: - array - 'null' description: Exclude articles published by sources in the specified cities. items: type: string description: Exclude articles published by sources in the specified cities. excludeSourceState: type: - array - 'null' description: Exclude articles published by sources in the specified states. items: type: string description: Exclude articles published by sources in the specified states. lat: type: - number - 'null' description: Latitude of the location used to filter places. Must be between -90 and 90. format: double lon: type: - number - 'null' description: Longitude of the location used to filter places. Must be between -180 and 180. format: double maxDistance: type: - number - 'null' description: Maximum distance in kilometers from lat and lon. Must be between 1 and 300. format: double sourceLat: type: - number - 'null' description: Latitude used to find nearby publishers. Must be between -90 and 90. format: double sourceLon: type: - number - 'null' description: Longitude used to find nearby publishers. Must be between -180 and 180. format: double sourceMaxDistance: type: - number - 'null' description: Maximum distance in kilometers from sourceLat and sourceLon. Must be between 1 and 300. format: double minWordCount: type: - integer - 'null' description: Filter for articles with at least this many words. format: int32 maxWordCount: type: - integer - 'null' description: Filter for articles with no more than this many words. format: int32 eventType: type: - array - 'null' description: Filter by detected event types. Multiple values are combined with OR. items: type: string description: Filter by detected event types. Multiple values are combined with OR. extractorName: type: - array - 'null' description: Filter by extractor names that processed the article. items: type: string description: Filter by extractor names that processed the article. excludeExtractorName: type: - array - 'null' description: Exclude articles processed by the specified extractor names. items: type: string description: Exclude articles processed by the specified extractor names. excludeSourceCountry: type: - array - 'null' description: Exclude articles published by sources in the specified countries. Use two-character country codes such as us or gb. items: type: string description: Exclude articles published by sources in the specified countries. Use two-character country codes such as us or gb. excludeSourceCounty: type: - array - 'null' description: Exclude articles published by sources in the specified counties. items: type: string description: Exclude articles published by sources in the specified counties. author: type: - array - 'null' description: Filter by exact author names. Multiple values are combined with OR. items: type: string description: Filter by exact author names. Multiple values are combined with OR. excludeAuthor: type: - array - 'null' description: Exclude articles written by any of the specified authors. items: type: string description: Exclude articles written by any of the specified authors. topic: type: - array - 'null' description: Filter by article topics. Multiple values are combined with OR. items: type: string description: Filter by article topics. Multiple values are combined with OR. excludeTopic: type: - array - 'null' description: Exclude articles assigned any of the specified topics. items: type: string description: Exclude articles assigned any of the specified topics. category: type: - array - 'null' description: Filter by article categories. Multiple values are combined with OR; use none for uncategorized articles. items: type: string description: Filter by article categories. Multiple values are combined with OR; use none for uncategorized articles. taxonomy: type: - array - 'null' description: Filter by full Google Content Category paths. Multiple values are combined with OR. items: type: string description: Filter by full Google Content Category paths. Multiple values are combined with OR. prefixTaxonomy: type: - string - 'null' description: Filter by a Google Content Category path prefix, such as /Finance. companyId: type: - array - 'null' description: Filter by Perigon company IDs. Multiple values are combined with OR. items: type: string description: Filter by Perigon company IDs. Multiple values are combined with OR. companyName: type: - string - 'null' description: Filter by an exact company name mention. companyDomain: type: - array - 'null' description: Filter by company domains, such as apple.com. items: type: string description: Filter by company domains, such as apple.com. companySymbol: type: - array - 'null' description: Filter by company stock symbols. items: type: string description: Filter by company stock symbols. excludeCompanyId: type: - array - 'null' description: Exclude articles mentioning companies with these Perigon IDs. items: type: string description: Exclude articles mentioning companies with these Perigon IDs. excludeCompanyDomain: type: - array - 'null' description: Exclude articles related to companies with these domains. items: type: string description: Exclude articles related to companies with these domains. excludeCompanySymbol: type: - array - 'null' description: Exclude articles related to companies with these stock symbols. items: type: string description: Exclude articles related to companies with these stock symbols. personWikidataId: type: - array - 'null' description: Filter by Wikidata IDs of people mentioned in articles. items: type: string description: Filter by Wikidata IDs of people mentioned in articles. personName: type: - array - 'null' description: Filter by exact person name mentions. Multiple values are combined with OR. items: type: string description: Filter by exact person name mentions. Multiple values are combined with OR. excludePersonWikidataId: type: - array - 'null' description: Exclude articles mentioning people with these Wikidata IDs. items: type: string description: Exclude articles mentioning people with these Wikidata IDs. excludePersonName: type: - array - 'null' description: Exclude articles mentioning any of the specified people by name. items: type: string description: Exclude articles mentioning any of the specified people by name. linkTo: type: - string - 'null' description: Filter for articles containing links that match this URL pattern. locationsCountry: type: - array - 'null' description: Filter for articles primarily associated with the specified countries. items: type: string description: Filter for articles primarily associated with the specified countries. state: type: - array - 'null' description: Filter for articles primarily associated with the specified states. items: type: string description: Filter for articles primarily associated with the specified states. city: type: - array - 'null' description: Filter for articles primarily associated with the specified cities. items: type: string description: Filter for articles primarily associated with the specified cities. area: type: - array - 'null' description: Filter for articles primarily associated with the specified areas, such as neighborhoods or districts. items: type: string description: Filter for articles primarily associated with the specified areas, such as neighborhoods or districts. county: type: - array - 'null' description: Filter for articles primarily associated with the specified counties. items: type: string description: Filter for articles primarily associated with the specified counties. sourceCountry: type: - array - 'null' description: Filter for articles published by sources in these countries. Use two-character country codes such as us or gb. items: type: string description: Filter for articles published by sources in these countries. Use two-character country codes such as us or gb. sourceState: type: - array - 'null' description: Filter for articles published by sources in the specified states. items: type: string description: Filter for articles published by sources in the specified states. sourceCounty: type: - array - 'null' description: Filter for articles published by sources in the specified counties. items: type: string description: Filter for articles published by sources in the specified counties. sourceCity: type: - array - 'null' description: Filter for articles published by sources in the specified cities. items: type: string description: Filter for articles published by sources in the specified cities. excludeLocationsCountry: type: - array - 'null' description: Exclude articles primarily associated with any of the specified countries. items: type: string description: Exclude articles primarily associated with any of the specified countries. excludeState: type: - array - 'null' description: Exclude articles primarily associated with any of the specified states. items: type: string description: Exclude articles primarily associated with any of the specified states. excludeCounty: type: - array - 'null' description: Exclude articles primarily associated with any of the specified counties. items: type: string description: Exclude articles primarily associated with any of the specified counties. excludeCity: type: - array - 'null' description: Exclude articles primarily associated with any of the specified cities. items: type: string description: Exclude articles primarily associated with any of the specified cities. excludeArea: type: - array - 'null' description: Exclude articles primarily associated with any of the specified areas. items: type: string description: Exclude articles primarily associated with any of the specified areas. location: type: - array - 'null' description: Filter by structured location attributes using key:value pairs separated by ::, such as city:New York::state:NY. items: type: string description: Filter by structured location attributes using key:value pairs separated by ::, such as city:New York::state:NY. sourceLocation: type: - array - 'null' description: Filter by structured publisher location attributes. items: type: string description: Filter by structured publisher location attributes. excludeCategory: type: - array - 'null' description: Exclude articles assigned any of the specified categories. items: type: string description: Exclude articles assigned any of the specified categories. excludeTaxonomy: type: - array - 'null' description: Exclude articles assigned any of the specified Google Content Categories. items: type: string description: Exclude articles assigned any of the specified Google Content Categories. positiveSentimentFrom: type: - number - 'null' description: Minimum positive sentiment score, inclusive. Accepts values from 0 to 1. format: float positiveSentimentTo: type: - number - 'null' description: Maximum positive sentiment score, inclusive. Accepts values from 0 to 1. format: float negativeSentimentFrom: type: - number - 'null' description: Minimum negative sentiment score, inclusive. Accepts values from 0 to 1. format: float negativeSentimentTo: type: - number - 'null' description: Maximum negative sentiment score, inclusive. Accepts values from 0 to 1. format: float neutralSentimentFrom: type: - number - 'null' description: Minimum neutral sentiment score, inclusive. Accepts values from 0 to 1. format: float neutralSentimentTo: type: - number - 'null' description: Maximum neutral sentiment score, inclusive. Accepts values from 0 to 1. format: float searchTranslation: type: - boolean - 'null' description: Search translated title, description, and content for non-English articles. Defaults to false. paywall: type: - boolean - 'null' description: Filter by whether the publisher has a paywall. type: type: - string - 'null' description: Filter by geographic content scope. Accepts all, local, or world. enum: - ALL - LOCAL - WORLD qfield: type: - array - 'null' items: type: string enum: - TITLE - DESCRIPTION - CONTENT - SUMMARY description: Article search filters that determine which content the monitor evaluates. SignalSchedulePolicy: required: - intervals type: object properties: intervals: maxItems: 24 minItems: 1 type: array description: Times when the monitor runs. Must contain between 1 and 24 intervals. items: $ref: '#/components/schemas/ScheduleInterval' timezoneId: type: - string - 'null' description: IANA time zone used to interpret schedule intervals, such as America/Chicago. Defaults to UTC. description: Recurring processing schedule configured for the monitor. SignalApiDto: type: object properties: uuid: type: - string - 'null' description: Unique identifier for the monitor. format: uuid name: type: - string - 'null' description: Display name of the monitor. createdAt: type: - string - 'null' description: Date and time the monitor was created, in ISO 8601 format. format: date-time updatedAt: type: - string - 'null' description: Date and time the monitor was last updated, in ISO 8601 format. format: date-time status: type: - string - 'null' description: 'Current lifecycle status: DRAFT, ACTIVE, STOPPED, or ARCHIVED.' enum: - DRAFT - ACTIVE - STOPPED - ARCHIVED classificationType: type: - string - 'null' description: 'How matching content is classified: EVENT, MENTIONS, or TOPIC.' enum: - EVENT - MENTIONS - TOPIC monitoringObjective: type: - string - 'null' description: Plain-language objective that defines what the monitor tracks. prompt: type: - string - 'null' description: Optional instructions used to guide monitor processing. dataSchema: allOf: - $ref: '#/components/schemas/SignalMonitoringPlanDataSchema' newsletterConfig: allOf: - $ref: '#/components/schemas/SignalMonitoringPlanNewsletterConfig' entityGroups: type: - array - 'null' description: Entity groups the monitor identifies in matching content. items: $ref: '#/components/schemas/EntityGroup' query: allOf: - $ref: '#/components/schemas/ComplexAllEndpointQuery' schedulePolicy: allOf: - $ref: '#/components/schemas/SignalSchedulePolicy' watchlistId: type: - integer - 'null' description: Numeric ID of the watchlist associated with the monitor, if any. format: int32 contactPointIds: type: - array - 'null' description: UUIDs of contact points configured to receive monitor notifications. items: type: string description: UUIDs of contact points configured to receive monitor notifications. format: uuid xQuery: allOf: - $ref: '#/components/schemas/SignalXQuery' description: Monitor payload. ScheduleInterval: required: - scheduleType type: object properties: hour: maximum: 23 minimum: 0 type: - integer - 'null' description: Hour when the monitor runs, from 0 through 23. format: int32 minute: maximum: 59 minimum: 0 type: - integer - 'null' description: Minute when the monitor runs, from 0 through 59. format: int32 days: maxItems: 7 minItems: 1 uniqueItems: true type: - array - 'null' description: Days when a WEEKLY schedule runs. Requires 1 through 7 values from MONDAY through SUNDAY. items: type: string description: Days when a WEEKLY schedule runs. Requires 1 through 7 values from MONDAY through SUNDAY. enum: - MONDAY - TUESDAY - WEDNESDAY - THURSDAY - FRIDAY - SATURDAY - SUNDAY daysOfMonth: maxItems: 31 minItems: 0 uniqueItems: true type: - array - 'null' description: Days of the month when a MONTHLY schedule runs. Required for MONTHLY schedules; each value must be from 1 through 31. items: maximum: 31 minimum: 1 type: integer description: Days of the month when a MONTHLY schedule runs. Required for MONTHLY schedules; each value must be from 1 through 31. format: int32 scheduleType: type: string description: Schedule recurrence type. Accepts WEEKLY or MONTHLY and defaults to WEEKLY. enum: - WEEKLY - MONTHLY description: Times when the monitor runs. Must contain between 1 and 24 intervals. SignalSummaryDto: type: object properties: text: type: - string - 'null' description: AI-generated summary of the monitor's matching content. createdAt: type: - string - 'null' description: Date and time the summary was created, in ISO 8601 format. format: date-time updatedAt: type: - string - 'null' description: Date and time the summary was last updated, in ISO 8601 format. format: date-time description: Summaries returned for the requested page. MonitorEventListResult: required: - data - total type: object properties: total: type: integer description: Total number of matching events across all pages. format: int64 data: type: array description: Events returned for the requested page. items: $ref: '#/components/schemas/SignalEventDto' description: Paginated list of monitor events. example: total: 1 data: - uuid: b2c3d4e5-f6a7-8901-bcde-f12345678901 createdAt: '2025-08-12T10:05:22.100Z' updatedAt: '2025-08-12T10:05:22.100Z' eventDate: '2025-08-12T08:30:00Z' eventType: product_launch data: productName: GPT-5 company: OpenAI relatedArticleIds: - 97dce2f1bdcd441c99360e58d38e811d articles: 97dce2f1bdcd441c99360e58d38e811d: title: OpenAI unveils next-generation language model url: https://www.reuters.com/technology/openai-unveils-next-generation-model-2025-08-12/ domain: reuters.com pubDate: '2025-08-12T08:15:00+00:00' sourceFavicon: https://www.reuters.com/favicon.ico highlights: null entities: - name: OpenAI type: COMPANY summary: OpenAI announced a new flagship language model. SignalMonitoringPlanNewsletterConfig: required: - storyCitationResolvingType type: object properties: citations: type: - boolean - 'null' description: Whether generated newsletters include citations. Defaults to true. storyCitationResolvingType: type: string description: How story citations are resolved. Accepts STORY or TOP_ARTICLE. enum: - STORY - TOP_ARTICLE description: Citation settings for newsletters generated by the monitor. SignalMonitoringPlanDataSchema: required: - schema - version type: object properties: version: type: string description: Data schema version. Currently only V1 is supported. enum: - V1 allowExtra: type: - boolean - 'null' description: Whether extracted event data may contain fields not defined in schema. Defaults to false. schema: type: object additionalProperties: $ref: '#/components/schemas/SignalMonitoringPlanDataSchemaProperty' description: Structured event field definitions keyed by output field name. description: Schema for the structured data extracted into each matching event. SignalXQuery: required: - query - searchType - version type: object properties: version: type: string enum: - V1 query: type: string searchType: type: string enum: - TOP - LATEST - MEDIA SignalApiUpdateBody: required: - classificationType - contactPointIds - dataSchema - entityGroups - monitoringObjective - name - query type: object properties: name: maxLength: 256 minLength: 0 type: string description: New display name for the monitor. Must be non-blank and at most 256 characters. classificationType: type: string description: New classification behavior. Accepts EVENT, MENTIONS, or TOPIC. enum: - EVENT - MENTIONS - TOPIC monitoringObjective: maxLength: 4096 minLength: 0 type: string description: New plain-language monitoring objective. Must be non-blank and at most 4,096 characters. prompt: maxLength: 8192 minLength: 0 type: - string - 'null' description: New instructions used to guide monitor processing. Limited to 8,192 characters and may be cleared with null. dataSchema: $ref: '#/components/schemas/SignalMonitoringPlanDataSchema' newsletterConfig: allOf: - $ref: '#/components/schemas/SignalMonitoringPlanNewsletterConfig' entityGroups: type: array description: Replacement entity groups for the monitor. Send an empty list to remove all groups. items: $ref: '#/components/schemas/EntityGroup' query: $ref: '#/components/schemas/ComplexAllEndpointQuery' schedulePolicy: allOf: - $ref: '#/components/schemas/SignalSchedulePolicy' watchlistId: type: - integer - 'null' description: Numeric ID of a visible watchlist in the monitor's organization to associate with the monitor. format: int32 contactPointIds: type: array description: Replacement UUIDs of verified, non-archived contact points. Send an empty list to remove all contact points. items: type: string description: Replacement UUIDs of verified, non-archived contact points. Send an empty list to remove all contact points. format: uuid xQuery: allOf: - $ref: '#/components/schemas/SignalXQuery' SignalApiCreateBody: required: - classificationType - dataSchema - monitoringObjective - name - query type: object properties: name: maxLength: 256 minLength: 0 type: string description: Display name for the monitor. Must be non-blank and at most 256 characters. status: type: - string - 'null' description: Required initial monitor status. Accepts ACTIVE or DRAFT. enum: - ACTIVE - DRAFT classificationType: type: string description: How matching content is classified. Accepts EVENT, MENTIONS, or TOPIC. enum: - EVENT - MENTIONS - TOPIC monitoringObjective: maxLength: 4096 minLength: 0 type: string description: Plain-language objective that defines what the monitor tracks. Must be non-blank and at most 4,096 characters. prompt: maxLength: 8192 minLength: 0 type: - string - 'null' description: Optional instructions used to guide monitor processing. Limited to 8,192 characters. dataSchema: $ref: '#/components/schemas/SignalMonitoringPlanDataSchema' newsletterConfig: allOf: - $ref: '#/components/schemas/SignalMonitoringPlanNewsletterConfig' entityGroups: type: - array - 'null' description: Entity groups the monitor should identify in matching content. Null is treated as an empty list. items: $ref: '#/components/schemas/EntityGroup' query: $ref: '#/components/schemas/ComplexAllEndpointQuery' schedulePolicy: allOf: - $ref: '#/components/schemas/SignalSchedulePolicy' watchlistId: type: - integer - 'null' description: Numeric ID of a visible watchlist in the monitor's organization to associate with the monitor. format: int32 contactPointIds: type: - array - 'null' description: UUIDs of verified, non-archived contact points that receive monitor notifications. items: type: string description: UUIDs of verified, non-archived contact points that receive monitor notifications. format: uuid xQuery: allOf: - $ref: '#/components/schemas/SignalXQuery' MonitorNewsletterListResult: required: - data - total type: object properties: total: type: integer description: Total number of matching newsletters across all pages. format: int64 data: type: array description: Newsletters returned for the requested page. items: $ref: '#/components/schemas/SignalNewsletterDto' description: Paginated list of monitor newsletters. example: total: 1 data: - uuid: c3d4e5f6-a7b8-9012-cdef-123456789012 createdAt: '2025-08-12T14:00:00.000Z' updatedAt: '2025-08-12T14:00:00.000Z' title: Weekly AI Launch Digest content: This week saw several notable AI product announcements across the industry. articles: 97dce2f1bdcd441c99360e58d38e811d: title: OpenAI unveils next-generation language model url: https://www.reuters.com/technology/openai-unveils-next-generation-model-2025-08-12/ domain: reuters.com pubDate: '2025-08-12T08:15:00+00:00' sourceFavicon: https://www.reuters.com/favicon.ico highlights: null stories: {} SignalNewsletterDto: type: object properties: uuid: type: - string - 'null' description: Unique identifier for the newsletter. format: uuid createdAt: type: - string - 'null' description: Date and time the newsletter was created, in ISO 8601 format. format: date-time updatedAt: type: - string - 'null' description: Date and time the newsletter was last updated, in ISO 8601 format. format: date-time title: type: - string - 'null' description: Generated title of the newsletter. content: type: - string - 'null' description: Generated newsletter content. articles: type: - object - 'null' additionalProperties: $ref: '#/components/schemas/SignalArticlePartialDto' description: Article details keyed by article ID for content cited in the newsletter. stories: type: - object - 'null' additionalProperties: $ref: '#/components/schemas/SignalNewsletterStoryPartialDto' description: Story details keyed by story identifier for stories cited in the newsletter. xPosts: type: - object - 'null' additionalProperties: $ref: '#/components/schemas/XPost' description: Newsletters returned for the requested page. XPostMedia: type: object properties: photo: type: - array - 'null' items: $ref: '#/components/schemas/XPostMediaItem' video: type: - array - 'null' items: $ref: '#/components/schemas/XPostMediaItem' SignalMonitoringPlanDataSchemaProperty: required: - type type: object properties: type: type: string description: Value type extracted for this field. Accepts ARRAY, BOOLEAN, DATE, DATETIME, ENUM, INTEGER, NUMBER, OBJECT, STRING, or URL. enum: - ARRAY - BOOLEAN - DATE - DATETIME - ENUM - INTEGER - NUMBER - OBJECT - STRING - URL description: type: - string - 'null' description: Plain-language instructions describing the value to extract for this field. nullable: type: - boolean - 'null' description: Whether the extracted value may be null. Defaults to true. required: type: - boolean - 'null' description: Whether the field must appear in extracted event data. Defaults to true. description: Structured event field definitions keyed by output field name. discriminator: propertyName: type SignalNewsletterStoryPartialDto: type: object properties: slug: type: - string - 'null' description: URL-safe identifier for the story. url: type: - string - 'null' description: URL of the story. title: type: - string - 'null' description: Story headline. sourceFavicon: type: - string - 'null' description: URL of the source favicon used for the story. updatedAt: type: - string - 'null' description: Date and time the story was last updated, in ISO 8601 format. format: date-time createdAt: type: - string - 'null' description: Date and time the story was created, in ISO 8601 format. format: date-time description: Story details keyed by story identifier for stories cited in the newsletter. MonitorListResult: required: - data - total type: object properties: total: type: integer description: Total number of matching monitors across all pages. format: int64 data: type: array description: Monitors returned for the requested page. items: $ref: '#/components/schemas/SignalApiDto' description: Paginated list of monitors. example: total: 2 data: - uuid: a1b2c3d4-e5f6-7890-abcd-ef1234567890 name: AI Product Launches createdAt: '2025-08-01T14:22:10.123Z' updatedAt: '2025-08-12T09:15:44.567Z' status: ACTIVE classificationType: EVENT monitoringObjective: Track major AI product launches and model releases. prompt: null dataSchema: version: V1 allowExtra: false schema: eventType: type: ENUM description: Type of AI product announcement required: true values: - PRODUCT_LAUNCH - MODEL_RELEASE productName: type: - STRING - 'null' description: Name of the launched product or model required: true newsletterConfig: null entityGroups: [] query: q: AI sourceGroup: - top100 schedulePolicy: intervals: - hour: 9 minute: 0 timezoneId: UTC watchlistId: null contactPointIds: [] MonitorSummaryListResult: required: - data - total type: object properties: total: type: integer description: Total number of matching summaries across all pages. format: int64 data: type: array description: Summaries returned for the requested page. items: $ref: '#/components/schemas/SignalSummaryDto' description: Paginated list of monitor summaries. example: total: 1 data: - text: Several major AI labs announced new model releases this week, with coverage focused on capabilities and enterprise availability. createdAt: '2025-08-12T12:00:00.000Z' updatedAt: '2025-08-12T12:00:00.000Z' MatchedEntityData: required: - name - type type: object properties: name: type: string description: Name of the entity matched in the source content. type: type: string description: Entity type assigned by the monitor. domain: type: - string - 'null' description: Domain associated with the matched entity, when available. description: Entities matched in the content that produced the event. securitySchemes: apiKeyAuth: type: http scheme: bearer