openapi: 3.2.0 info: title: VoyantIO Context Streams API description: ' ## Brand Context Intelligence Platform VoyantIO provides AI-powered brand context management for GTM teams. ### Core Capabilities - **Context Streams** - Centralized brand knowledge that any AI tool can use - **Telemetry** - Visitor tracking with IP geolocation and company enrichment - **Signals** - Social listening across 10+ platforms: GitHub, Reddit, HackerNews, LinkedIn, Twitter/X, Discord, ProductHunt, YouTube, G2, Slack, and government sources - **Target Graph** - Account and contact intelligence with engagement tracking - **RAG** - Retrieval-augmented content generation with brand awareness ### Authentication Most endpoints require a Bearer token from Clerk authentication. Public endpoints (telemetry ingestion, well-known files) are clearly marked. ### Rate Limits - Telemetry ingestion: 100 req/min per IP - API endpoints: 1000 req/min per org ' version: 1.0.0 servers: - url: https://voice-forge-production.up.railway.app description: Production tags: - name: context-streams description: Individual context stream management. Each stream represents a category of brand knowledge. paths: /api/context-streams/: get: tags: - context-streams summary: List Signals description: List signals with filtering and sorting operationId: list_signals_api_context_streams__get security: - HTTPBearer: [] parameters: - name: platform in: query required: false schema: anyOf: - type: string - type: 'null' description: Filter by platform title: Platform description: Filter by platform - name: signal_type in: query required: false schema: anyOf: - type: string - type: 'null' description: Filter by signal type title: Signal Type description: Filter by signal type - name: status in: query required: false schema: anyOf: - type: string - type: 'null' description: Filter by status title: Status description: Filter by status - name: min_relevance in: query required: false schema: anyOf: - type: number - type: 'null' description: Minimum relevance score title: Min Relevance description: Minimum relevance score - name: source_id in: query required: false schema: anyOf: - type: string - type: 'null' description: Filter by source title: Source Id description: Filter by source - name: days_back in: query required: false schema: type: integer description: How many days back to look default: 7 title: Days Back description: How many days back to look - name: limit in: query required: false schema: type: integer maximum: 200 minimum: 1 default: 50 title: Limit - name: offset in: query required: false schema: type: integer minimum: 0 default: 0 title: Offset - name: sort_by in: query required: false schema: type: string description: 'Sort by: discovered_at, priority_score, relevance_score' default: discovered_at title: Sort By description: 'Sort by: discovered_at, priority_score, relevance_score' responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/context-streams/sources: get: tags: - context-streams summary: List Signal Sources description: List all signal sources operationId: list_signal_sources_api_context_streams_sources_get security: - HTTPBearer: [] parameters: - name: platform in: query required: false schema: anyOf: - type: string - type: 'null' description: Filter by platform title: Platform description: Filter by platform - name: is_active in: query required: false schema: anyOf: - type: boolean - type: 'null' description: Filter by active status title: Is Active description: Filter by active status responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' post: tags: - context-streams summary: Create Signal Source description: Create a new signal source operationId: create_signal_source_api_context_streams_sources_post security: - HTTPBearer: [] requestBody: required: true content: application/json: schema: type: object additionalProperties: true title: Source Data responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/context-streams/sources/{source_id}: patch: tags: - context-streams summary: Update Signal Source description: Update a signal source operationId: update_signal_source_api_context_streams_sources__source_id__patch security: - HTTPBearer: [] parameters: - name: source_id in: path required: true schema: type: string title: Source Id requestBody: required: true content: application/json: schema: type: object additionalProperties: true title: Updates responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/context-streams/{signal_id}/engage: post: tags: - context-streams summary: Engage With Signal description: Record engagement with a signal operationId: engage_with_signal_api_context_streams__signal_id__engage_post security: - HTTPBearer: [] parameters: - name: signal_id in: path required: true schema: type: string title: Signal Id requestBody: required: true content: application/json: schema: type: object additionalProperties: true title: Engagement Data responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/context-streams/stats: get: tags: - context-streams summary: Get Signal Stats description: Get signal statistics operationId: get_signal_stats_api_context_streams_stats_get security: - HTTPBearer: [] parameters: - name: days in: query required: false schema: type: integer description: Number of days to analyze default: 30 title: Days description: Number of days to analyze responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/context-streams/trending-topics: get: tags: - context-streams summary: Get Trending Topics description: Get trending topics from signals operationId: get_trending_topics_api_context_streams_trending_topics_get security: - HTTPBearer: [] parameters: - name: days in: query required: false schema: type: integer description: Number of days to analyze default: 7 title: Days description: Number of days to analyze - name: limit in: query required: false schema: type: integer description: Number of topics to return default: 20 title: Limit description: Number of topics to return responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' components: schemas: HTTPValidationError: properties: detail: items: $ref: '#/components/schemas/ValidationError' type: array title: Detail type: object title: HTTPValidationError ValidationError: properties: loc: items: anyOf: - type: string - type: integer type: array title: Location msg: type: string title: Message type: type: string title: Error Type input: title: Input ctx: type: object title: Context type: object required: - loc - msg - type title: ValidationError securitySchemes: HTTPBearer: type: http scheme: bearer