Aligned News
Consumer-facing AI news intelligence platform delivering Stories, Signals, Reports, and Bundles synthesized from 63 curated X lists tracking 100,000+ accounts across AI, technology, and science.
Consumer-facing AI news intelligence platform delivering Stories, Signals, Reports, and Bundles synthesized from 63 curated X lists tracking 100,000+ accounts across AI, technology, and science.
openapi: 3.1.0
info:
title: Aligned News REST API
description: |
Read-only REST API for the Aligned News AI intelligence platform.
The API exposes Aligned News' Stories, Signals, Reports, Bundles, the
section-grouped news feed, and full-text search. All endpoints require an
API key passed as `Authorization: Bearer alnw_...`. API keys are issued to
Pro and Enterprise subscribers from their account page at
https://alignednews.com/account.
Note: this specification was reconstructed by inspecting the Aligned News
web application bundle and the published MCP server reference implementation
(https://alignednews.com/mcp-server.ts). The provider does not currently
publish a machine-readable API description.
version: '1.0.0'
contact:
name: Aligned News
url: https://alignednews.com/developers
license:
name: Aligned News Terms of Service
url: https://alignednews.com/
servers:
- url: https://alignednews.com/v1
description: Production
security:
- bearerAuth: []
tags:
- name: Stories
description: AI news stories curated and synthesized from monitored accounts.
- name: Signals
description: Early pattern detections with editorial badges.
- name: Reports
description: Trend deep-dives and longer-form analysis.
- name: Bundles
description: Curated groupings of related stories around themes.
- name: Sections
description: Topical sections used to organize stories.
- name: News Feed
description: All current stories grouped by section.
- name: Search
description: Full-text search across stories, signals, and reports.
paths:
/stories:
get:
tags:
- Stories
summary: List Stories
description: List recent AI news stories, optionally filtered by section or tag.
operationId: listStories
parameters:
- name: section
in: query
description: Filter by section slug.
required: false
schema:
type: string
- name: tag
in: query
description: Filter by tag.
required: false
schema:
type: string
- name: limit
in: query
description: Maximum number of stories to return (default 20, max 100).
required: false
schema:
type: integer
minimum: 1
maximum: 100
default: 20
responses:
'200':
description: A list of stories.
content:
application/json:
schema:
$ref: '#/components/schemas/StoryListResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/stories/{id}:
get:
tags:
- Stories
summary: Get Story
description: Retrieve a single story by ID, including the full body content.
operationId: getStory
parameters:
- $ref: '#/components/parameters/StoryId'
responses:
'200':
description: A single story.
content:
application/json:
schema:
$ref: '#/components/schemas/StoryResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/signals:
get:
tags:
- Signals
summary: List Signals
description: List recent AI signals (early pattern detections from monitored
accounts), optionally filtered by badge type.
operationId: listSignals
parameters:
- name: badge
in: query
description: Filter by badge type.
required: false
schema:
type: string
enum:
- bullish
- caution
- critical
- signal
- interview
- vc
- action
- name: limit
in: query
description: Maximum number of signals to return (default 50, max 200).
required: false
schema:
type: integer
minimum: 1
maximum: 200
default: 50
responses:
'200':
description: A list of signals.
content:
application/json:
schema:
$ref: '#/components/schemas/SignalListResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/signals/{id}:
get:
tags:
- Signals
summary: Get Signal
description: Retrieve a single signal by ID with full analysis and related
stories.
operationId: getSignal
parameters:
- $ref: '#/components/parameters/SignalId'
responses:
'200':
description: A single signal.
content:
application/json:
schema:
$ref: '#/components/schemas/SignalResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/reports:
get:
tags:
- Reports
summary: List Reports
description: List recent reports (summaries only).
operationId: listReports
parameters:
- name: limit
in: query
description: Maximum number of reports to return (default 20, max 100).
required: false
schema:
type: integer
minimum: 1
maximum: 100
default: 20
responses:
'200':
description: A list of reports.
content:
application/json:
schema:
$ref: '#/components/schemas/ReportListResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/reports/{id}:
get:
tags:
- Reports
summary: Get Report
description: Retrieve a single report by ID with the full content.
operationId: getReport
parameters:
- $ref: '#/components/parameters/ReportId'
responses:
'200':
description: A single report.
content:
application/json:
schema:
$ref: '#/components/schemas/ReportResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/bundles:
get:
tags:
- Bundles
summary: List Bundles
description: List bundles, each grouping a set of related stories around a theme.
operationId: listBundles
parameters:
- name: limit
in: query
description: Maximum number of bundles to return.
required: false
schema:
type: integer
minimum: 1
maximum: 100
default: 20
responses:
'200':
description: A list of bundles.
content:
application/json:
schema:
$ref: '#/components/schemas/BundleListResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/bundles/{id}:
get:
tags:
- Bundles
summary: Get Bundle
description: Retrieve a single bundle by ID, including all member stories.
operationId: getBundle
parameters:
- $ref: '#/components/parameters/BundleId'
responses:
'200':
description: A single bundle.
content:
application/json:
schema:
$ref: '#/components/schemas/BundleResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/sections:
get:
tags:
- Sections
summary: List Sections
description: List active news sections used to organize stories.
operationId: listSections
responses:
'200':
description: A list of sections.
content:
application/json:
schema:
$ref: '#/components/schemas/SectionListResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/news-feed:
get:
tags:
- News Feed
summary: Get News Feed
description: Retrieve all current stories grouped by section.
operationId: getNewsFeed
parameters:
- name: limit
in: query
description: Maximum number of stories per section.
required: false
schema:
type: integer
minimum: 1
maximum: 100
responses:
'200':
description: Stories grouped by section.
content:
application/json:
schema:
$ref: '#/components/schemas/NewsFeedResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/search:
get:
tags:
- Search
summary: Search Content
description: Full-text search across stories, signals, and reports.
operationId: searchContent
parameters:
- name: q
in: query
description: Search query (minimum 2 characters).
required: true
schema:
type: string
minLength: 2
- name: limit
in: query
description: Maximum results per content type.
required: false
schema:
type: integer
minimum: 1
maximum: 100
default: 10
responses:
'200':
description: Search results grouped by content type.
content:
application/json:
schema:
$ref: '#/components/schemas/SearchResponse'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: alnw_*
description: API key issued from https://alignednews.com/account, presented
as Authorization Bearer alnw_...
parameters:
StoryId:
name: id
in: path
required: true
description: Story UUID.
schema:
type: string
format: uuid
SignalId:
name: id
in: path
required: true
description: Signal UUID.
schema:
type: string
format: uuid
ReportId:
name: id
in: path
required: true
description: Report UUID.
schema:
type: string
format: uuid
BundleId:
name: id
in: path
required: true
description: Bundle UUID.
schema:
type: string
format: uuid
responses:
Unauthorized:
description: API key missing or invalid.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
NotFound:
description: Resource not found.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
BadRequest:
description: Invalid request parameters.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
schemas:
Error:
type: object
required:
- error
properties:
error:
type: object
required:
- code
- message
properties:
code:
type: string
description: Machine-readable error code.
example: unauthorized
message:
type: string
description: Human-readable error message.
example: Invalid or missing API key. Include Authorization Bearer alnw_... header.
Story:
type: object
properties:
id:
type: string
format: uuid
title:
type: string
slug:
type: string
section:
type: string
summary:
type: string
body:
type: string
description: Full story body. Returned by single-story responses.
url:
type: string
format: uri
tags:
type: array
items:
type: string
publishedAt:
type: string
format: date-time
StoryListResponse:
type: object
required:
- data
properties:
data:
type: array
items:
$ref: '#/components/schemas/Story'
StoryResponse:
type: object
required:
- data
properties:
data:
$ref: '#/components/schemas/Story'
Signal:
type: object
properties:
id:
type: string
format: uuid
title:
type: string
badge:
type: string
enum:
- bullish
- caution
- critical
- signal
- interview
- vc
- action
summary:
type: string
analysis:
type: string
description: Full editorial analysis. Returned by single-signal responses.
relatedStories:
type: array
items:
$ref: '#/components/schemas/Story'
sourceUrl:
type: string
format: uri
publishedAt:
type: string
format: date-time
SignalListResponse:
type: object
required:
- data
properties:
data:
type: array
items:
$ref: '#/components/schemas/Signal'
SignalResponse:
type: object
required:
- data
properties:
data:
$ref: '#/components/schemas/Signal'
Report:
type: object
properties:
id:
type: string
format: uuid
title:
type: string
summary:
type: string
content:
type: string
description: Full report content. Returned by single-report responses.
tags:
type: array
items:
type: string
publishedAt:
type: string
format: date-time
ReportListResponse:
type: object
required:
- data
properties:
data:
type: array
items:
$ref: '#/components/schemas/Report'
ReportResponse:
type: object
required:
- data
properties:
data:
$ref: '#/components/schemas/Report'
Bundle:
type: object
properties:
id:
type: string
format: uuid
title:
type: string
summary:
type: string
stories:
type: array
items:
$ref: '#/components/schemas/Story'
publishedAt:
type: string
format: date-time
BundleListResponse:
type: object
required:
- data
properties:
data:
type: array
items:
$ref: '#/components/schemas/Bundle'
BundleResponse:
type: object
required:
- data
properties:
data:
$ref: '#/components/schemas/Bundle'
Section:
type: object
properties:
slug:
type: string
name:
type: string
description:
type: string
SectionListResponse:
type: object
required:
- data
properties:
data:
type: array
items:
$ref: '#/components/schemas/Section'
NewsFeedResponse:
type: object
required:
- data
properties:
data:
type: array
description: One entry per active section, each with its stories.
items:
type: object
properties:
section:
$ref: '#/components/schemas/Section'
stories:
type: array
items:
$ref: '#/components/schemas/Story'
SearchResponse:
type: object
required:
- data
properties:
data:
type: object
properties:
stories:
type: array
items:
$ref: '#/components/schemas/Story'
signals:
type: array
items:
$ref: '#/components/schemas/Signal'
reports:
type: array
items:
$ref: '#/components/schemas/Report'