openapi: 3.2.0 info: title: VoyantIO Content Versions 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: content-versions description: Content versioning and history. Track changes and roll back to previous versions. paths: /api/content-versions/versions/{content_type}/{content_key}: get: tags: - content-versions summary: Get Version History description: Get version history for a specific content piece operationId: get_version_history_api_content_versions_versions__content_type___content_key__get security: - HTTPBearer: [] parameters: - name: content_type in: path required: true schema: type: string title: Content Type - name: content_key in: path required: true schema: type: string title: Content Key - name: limit in: query required: false schema: type: integer default: 20 title: Limit responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/ContentVersion' title: Response Get Version History Api Content Versions Versions Content Type Content Key Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/content-versions/versions/{content_type}/{content_key}/current: get: tags: - content-versions summary: Get Current Version description: Get the current (latest) version of a content piece operationId: get_current_version_api_content_versions_versions__content_type___content_key__current_get security: - HTTPBearer: [] parameters: - name: content_type in: path required: true schema: type: string title: Content Type - name: content_key in: path required: true schema: type: string title: Content Key responses: '200': description: Successful Response content: application/json: schema: anyOf: - $ref: '#/components/schemas/ContentVersion' - type: 'null' title: Response Get Current Version Api Content Versions Versions Content Type Content Key Current Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/content-versions/versions: post: tags: - content-versions summary: Create Version description: Create a new version of content (automatically handles version numbering) operationId: create_version_api_content_versions_versions_post requestBody: content: application/json: schema: $ref: '#/components/schemas/ContentVersionCreate' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ContentVersion' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/content-versions/versions/{version_id}/rollback: post: tags: - content-versions summary: Rollback To Version description: Rollback to a previous version (creates a new version with the old content) operationId: rollback_to_version_api_content_versions_versions__version_id__rollback_post security: - HTTPBearer: [] parameters: - name: version_id in: path required: true schema: type: string title: Version Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ContentVersion' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/content-versions/training-sessions: post: tags: - content-versions summary: Create Training Session description: Start a new training session operationId: create_training_session_api_content_versions_training_sessions_post security: - HTTPBearer: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/TrainingSessionCreate' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/TrainingSession' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' get: tags: - content-versions summary: List Training Sessions description: List training sessions for the org operationId: list_training_sessions_api_content_versions_training_sessions_get security: - HTTPBearer: [] parameters: - name: content_type in: query required: false schema: anyOf: - type: string - type: 'null' title: Content Type - name: status in: query required: false schema: anyOf: - type: string - type: 'null' title: Status - name: limit in: query required: false schema: type: integer default: 20 title: Limit responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/TrainingSession' title: Response List Training Sessions Api Content Versions Training Sessions Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/content-versions/training-sessions/{session_id}: patch: tags: - content-versions summary: Update Training Session description: Update a training session (add conversation, mark complete, etc.) operationId: update_training_session_api_content_versions_training_sessions__session_id__patch security: - HTTPBearer: [] parameters: - name: session_id in: path required: true schema: type: string title: Session Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/TrainingSessionUpdate' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/TrainingSession' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/content-versions/all-current: get: tags: - content-versions summary: Get All Current Versions description: 'Get all current versions, optionally filtered by content type. Returns nested dict: {content_type: {content_key: version}}' operationId: get_all_current_versions_api_content_versions_all_current_get security: - HTTPBearer: [] parameters: - name: content_type in: query required: false schema: anyOf: - type: string - type: 'null' title: Content Type responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: type: object additionalProperties: $ref: '#/components/schemas/ContentVersion' title: Response Get All Current Versions Api Content Versions All Current Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' components: schemas: TrainingSessionCreate: properties: content_type: type: string title: Content Type content_key: type: string title: Content Key original_content: type: string title: Original Content type: object required: - content_type - content_key - original_content title: TrainingSessionCreate TrainingSession: properties: id: type: string title: Id org_id: type: string title: Org Id content_type: type: string title: Content Type content_key: type: string title: Content Key original_content: type: string title: Original Content final_content: anyOf: - type: string - type: 'null' title: Final Content conversation: items: additionalProperties: true type: object type: array title: Conversation rules_detected: items: additionalProperties: true type: object type: array title: Rules Detected rules_applied: items: additionalProperties: true type: object type: array title: Rules Applied content_accepted: type: boolean title: Content Accepted created_by: anyOf: - type: string - type: 'null' title: Created By started_at: type: string format: date-time title: Started At completed_at: anyOf: - type: string format: date-time - type: 'null' title: Completed At status: type: string title: Status type: object required: - id - org_id - content_type - content_key - original_content - final_content - conversation - rules_detected - rules_applied - content_accepted - created_by - started_at - completed_at - status title: TrainingSession 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 HTTPValidationError: properties: detail: items: $ref: '#/components/schemas/ValidationError' type: array title: Detail type: object title: HTTPValidationError ContentVersion: properties: id: type: string title: Id org_id: type: string title: Org Id content_type: type: string title: Content Type content_key: type: string title: Content Key content: type: string title: Content version_number: type: integer title: Version Number change_source: type: string title: Change Source change_reason: anyOf: - type: string - type: 'null' title: Change Reason training_session_id: anyOf: - type: string - type: 'null' title: Training Session Id detected_rules: items: additionalProperties: true type: object type: array title: Detected Rules created_by: anyOf: - type: string - type: 'null' title: Created By created_at: type: string format: date-time title: Created At is_current: type: boolean title: Is Current type: object required: - id - org_id - content_type - content_key - content - version_number - change_source - change_reason - training_session_id - detected_rules - created_by - created_at - is_current title: ContentVersion ContentVersionCreate: properties: content_type: type: string title: Content Type content_key: type: string title: Content Key content: type: string title: Content change_source: type: string title: Change Source default: manual change_reason: anyOf: - type: string - type: 'null' title: Change Reason training_session_id: anyOf: - type: string - type: 'null' title: Training Session Id detected_rules: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Detected Rules type: object required: - content_type - content_key - content title: ContentVersionCreate TrainingSessionUpdate: properties: final_content: anyOf: - type: string - type: 'null' title: Final Content conversation: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Conversation rules_detected: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Rules Detected rules_applied: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Rules Applied content_accepted: anyOf: - type: boolean - type: 'null' title: Content Accepted status: anyOf: - type: string - type: 'null' title: Status type: object title: TrainingSessionUpdate securitySchemes: HTTPBearer: type: http scheme: bearer