VoyantIO API

REST API for the Voyant brand-context platform, published as OpenAPI 3.1.0 with 783 operations over 79 tags. Covers context streams and context modulation, RAG ingestion and semantic search, the messaging framework (positioning, personas, products, use cases, industries, testimonials), target graph and CRM context, telemetry and attribution, social signal harvesting (GitHub, Reddit, HackerNews, LinkedIn, YouTube, G2, Discord, government sources), competitive intelligence and battlecards, GEO/AEO intelligence, content and video generation, and generation of agent-facing artifacts (llms.txt, context.txt, trust.txt, ontology.jsonld) for the customer's own domain. Bearer-token authenticated.

OpenAPI Specification

voyant-openapi-original.json Raw ↑
{
  "openapi": "3.1.0",
  "info": {
    "title": "VoyantIO API",
    "description": "\n## Brand Context Intelligence Platform\n\nVoyantIO provides AI-powered brand context management for GTM teams.\n\n### Core Capabilities\n\n- **Context Streams** - Centralized brand knowledge that any AI tool can use\n- **Telemetry** - Visitor tracking with IP geolocation and company enrichment\n- **Signals** - Social listening across 10+ platforms: GitHub, Reddit, HackerNews, LinkedIn, Twitter/X, Discord, ProductHunt, YouTube, G2, Slack, and government sources\n- **Target Graph** - Account and contact intelligence with engagement tracking\n- **RAG** - Retrieval-augmented content generation with brand awareness\n\n### Authentication\n\nMost endpoints require a Bearer token from Clerk authentication.\nPublic endpoints (telemetry ingestion, well-known files) are clearly marked.\n\n### Rate Limits\n\n- Telemetry ingestion: 100 req/min per IP\n- API endpoints: 1000 req/min per org\n",
    "version": "1.0.0"
  },
  "paths": {
    "/api/crawl/engines": {
      "get": {
        "tags": [
          "crawler"
        ],
        "summary": "List Crawler Engines",
        "description": "List available crawler engines and their status.\n\nReturns engines with availability status based on configured credentials.",
        "operationId": "list_crawler_engines_api_crawl_engines_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/crawl/estimate": {
      "post": {
        "tags": [
          "crawler"
        ],
        "summary": "Estimate Crawl Scope",
        "description": "Estimate number of URLs by checking sitemap.xml.",
        "operationId": "estimate_crawl_scope_api_crawl_estimate_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CrawlEstimateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/crawl/start": {
      "post": {
        "tags": [
          "crawler"
        ],
        "summary": "Start Crawl",
        "description": "Start a new crawl job using Celery.\n\nThe crawl runs in a Celery worker and can be monitored via the status endpoint.",
        "operationId": "start_crawl_api_crawl_start_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CrawlRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CrawlResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/crawl/status/{crawl_id}": {
      "get": {
        "tags": [
          "crawler"
        ],
        "summary": "Get Crawl Status",
        "description": "Get status of a crawl job.",
        "operationId": "get_crawl_status_api_crawl_status__crawl_id__get",
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "parameters": [
          {
            "name": "crawl_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Crawl Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/crawl/summary/{crawl_id}": {
      "get": {
        "tags": [
          "crawler"
        ],
        "summary": "Get Crawl Summary",
        "description": "Get summary of a completed crawl job.",
        "operationId": "get_crawl_summary_api_crawl_summary__crawl_id__get",
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "parameters": [
          {
            "name": "crawl_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Crawl Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CrawlSummary"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/crawl/jobs": {
      "get": {
        "tags": [
          "crawler"
        ],
        "summary": "List Crawl Jobs",
        "description": "List all crawl jobs for organization.",
        "operationId": "list_crawl_jobs_api_crawl_jobs_get",
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 20,
              "title": "Limit"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 0,
              "title": "Offset"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/crawl/{crawl_id}/cancel": {
      "post": {
        "tags": [
          "crawler"
        ],
        "summary": "Cancel Crawl",
        "description": "Cancel a running crawl job.",
        "operationId": "cancel_crawl_api_crawl__crawl_id__cancel_post",
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "parameters": [
          {
            "name": "crawl_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Crawl Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/crawl/stream/{crawl_id}": {
      "get": {
        "tags": [
          "crawler"
        ],
        "summary": "Stream Crawl Events",
        "description": "Stream crawl progress and newly captured content via SSE.",
        "operationId": "stream_crawl_events_api_crawl_stream__crawl_id__get",
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "parameters": [
          {
            "name": "crawl_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Crawl Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/crawl/{crawl_id}/contents": {
      "get": {
        "tags": [
          "crawler"
        ],
        "summary": "List Crawl Contents",
        "description": "Return captured content rows for a crawl to support polling UI updates.",
        "operationId": "list_crawl_contents_api_crawl__crawl_id__contents_get",
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "parameters": [
          {
            "name": "crawl_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Crawl Id"
            }
          },
          {
            "name": "since",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return items extracted after this ISO timestamp",
              "title": "Since"
            },
            "description": "Return items extracted after this ISO timestamp"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 500,
              "minimum": 1,
              "default": 200,
              "title": "Limit"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/crawl/debug/health": {
      "get": {
        "tags": [
          "crawler"
        ],
        "summary": "Debug Health",
        "description": "Debug endpoint to check crawler and Celery health.",
        "operationId": "debug_health_api_crawl_debug_health_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/api/crawl/import-authoritative": {
      "post": {
        "tags": [
          "crawler"
        ],
        "summary": "Import Authoritative Content",
        "description": "Import llms.txt or context.txt as authoritative context content.\n\nThis content gets the highest priority in RAG retrieval because it represents\nthe official, curated information that a site wants AI systems to use.",
        "operationId": "import_authoritative_content_api_crawl_import_authoritative_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ImportAuthoritativeContentRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/crawl/cleanup/all": {
      "delete": {
        "tags": [
          "crawler"
        ],
        "summary": "Cleanup All Crawl Data",
        "description": "Delete ALL crawl data for the organization.\n\nThis removes all contents, content_chunks, and crawl_jobs for the org.\nUse confirm=true to execute.\n\nExample: DELETE /api/crawler/cleanup/all?confirm=true",
        "operationId": "cleanup_all_crawl_data_api_crawl_cleanup_all_delete",
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "parameters": [
          {
            "name": "confirm",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "description": "Must be true to confirm deletion",
              "default": false,
              "title": "Confirm"
            },
            "description": "Must be true to confirm deletion"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/crawl/cleanup/external-content": {
      "delete": {
        "tags": [
          "crawler"
        ],
        "summary": "Cleanup External Content",
        "description": "Delete content that was incorrectly crawled from external domains.\n\nThis endpoint removes content matching a URL pattern from the organization's data.\nUse this to clean up content that was crawled due to domain filtering bugs.\n\nExample: DELETE /api/crawler/cleanup/external-content?domain_pattern=grafana.com",
        "operationId": "cleanup_external_content_api_crawl_cleanup_external_content_delete",
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "parameters": [
          {
            "name": "domain_pattern",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "description": "URL pattern to match (e.g., 'grafana.com')",
              "title": "Domain Pattern"
            },
            "description": "URL pattern to match (e.g., 'grafana.com')"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/crawl/{crawl_id}/process-rag": {
      "post": {
        "tags": [
          "rag"
        ],
        "summary": "Process Rag",
        "description": "Process crawled content for RAG: chunk text and generate embeddings.\n\nThis endpoint:\n1. Retrieves crawled content from the contents table\n2. Chunks the text based on configuration\n3. Generates embeddings for each chunk\n4. Saves chunks to content_chunks table\n5. Returns quality metrics",
        "operationId": "process_rag_api_crawl__crawl_id__process_rag_post",
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "parameters": [
          {
            "name": "crawl_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Crawl Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RAGProcessRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RAGProcessResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/crawl/{crawl_id}/rag-status": {
      "get": {
        "tags": [
          "rag"
        ],
        "summary": "Get Rag Status",
        "description": "Get status of RAG processing for a crawl.",
        "operationId": "get_rag_status_api_crawl__crawl_id__rag_status_get",
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "parameters": [
          {
            "name": "crawl_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Crawl Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/crawl/{crawl_id}/rag-chunks": {
      "delete": {
        "tags": [
          "rag"
        ],
        "summary": "Delete Rag Chunks",
        "description": "Delete all RAG chunks for a crawl to allow reprocessing.",
        "operationId": "delete_rag_chunks_api_crawl__crawl_id__rag_chunks_delete",
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "parameters": [
          {
            "name": "crawl_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Crawl Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/crawl/stats/{org_id}": {
      "get": {
        "tags": [
          "rag"
        ],
        "summary": "Get Rag Stats",
        "description": "Get aggregate RAG statistics for the dashboard.",
        "operationId": "get_rag_stats_api_crawl_stats__org_id__get",
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "parameters": [
          {
            "name": "org_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Org Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/signals/stats": {
      "get": {
        "tags": [
          "signals"
        ],
        "summary": "Get Signal Stats",
        "description": "Return counts of signals for the current org (optionally per platform).",
        "operationId": "get_signal_stats_api_signals_stats_get",
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "parameters": [
          {
            "name": "platform",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Filter by platform (github, reddit, linkedin)",
              "title": "Platform"
            },
            "description": "Filter by platform (github, reddit, linkedin)"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/signals/top-by-engagement": {
      "get": {
        "tags": [
          "signals"
        ],
        "summary": "Get Top Signals By Engagement",
        "description": "Get top signals by engagement grouped by platform.\nUsed by Content Strategist Community tab.",
        "operationId": "get_top_signals_by_engagement_api_signals_top_by_engagement_get",
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "parameters": [
          {
            "name": "limit_per_platform",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 5,
              "title": "Limit Per Platform"
            }
          },
          {
            "name": "days",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 7,
              "title": "Days"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/signals/trends": {
      "get": {
        "tags": [
          "signals"
        ],
        "summary": "Get Signal Trends",
        "description": "Get signal counts by date and platform for trend charts.\nReturns data grouped by date for the last N days.\nIncludes keywords per day and company mention highlights.",
        "operationId": "get_signal_trends_api_signals_trends_get",
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "parameters": [
          {
            "name": "days",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 30,
              "title": "Days"
            }
          },
          {
            "name": "company_keywords",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "title": "Company Keywords"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/signals/configured-sources": {
      "get": {
        "tags": [
          "signals"
        ],
        "summary": "Get Configured Sources",
        "description": "Get configured signal sources with their keywords, grouped by platform.\nReturns the keywords that users have configured for monitoring.\nUsed by Content Strategist to show what's being tracked.",
        "operationId": "get_configured_sources_api_signals_configured_sources_get",
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "parameters": [
          {
            "name": "platform",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "title": "Platform"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/signals/competitor-trends": {
      "get": {
        "tags": [
          "signals"
        ],
        "summary": "Get Competitor Trends",
        "description": "Get competitor mention trends over time.\nShows how often competitors are mentioned in community signals vs your company.",
        "operationId": "get_competitor_trends_api_signals_competitor_trends_get",
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "parameters": [
          {
            "name": "days",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 30,
              "title": "Days"
            }
          },
          {
            "name": "competitors",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "title": "Competitors"
            }
          },
          {
            "name": "company_keywords",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "title": "Company Keywords"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/signals/publishing-comparison": {
      "get": {
        "tags": [
          "signals"
        ],
        "summary": "Get Publishing Comparison",
        "description": "Compare publishing activity between your company and competitors.\n\nNOTE: For competitors, we track their actual publishing (blog posts, releases, docs).\nFor your company, we show community engagement signals (mentions, discussions about you).\nThese are different metrics but shown together for competitive context.",
        "operationId": "get_publishing_comparison_api_signals_publishing_comparison_get",
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "parameters": [
          {
            "name": "days",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 30,
              "title": "Days"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/signals/count": {
      "get": {
        "tags": [
          "signals"
        ],
        "summary": "Get Signal Count",
        "description": "Return a simple signal count for the current organization.",
        "operationId": "get_signal_count_api_signals_count_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"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/

# --- truncated at 32 KB (1324 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/voyant/refs/heads/main/openapi/voyant-openapi-original.json