{"openapi":"3.1.0","info":{"title":"VerticalScope Data API","description":"\nVerticalScope Data API gives AI/LLM companies programmatic access to public\nforum data — communities, posts, threads, incremental sync, and bulk GCS exports.\n\n## Authentication\n\nAll `/v1/*` endpoints require an `X-API-Key` header:\n\n```\nX-API-Key: vs_<your_key>\n```\n\nAPI keys are issued through the [dashboard](/dashboard) or the `scripts/create_api_key.py`\nadmin script. Keys are prefixed with `vs_` and bcrypt-hashed at rest.\n\n## Pagination\n\nList endpoints return a `page_info` object with a `next_cursor` field.\nPass the cursor value to the next request as `?cursor=<value>` to fetch the\nnext page. Cursors are opaque HMAC-signed tokens — do not construct them manually.\n\n## Bulk Exports\n\nSubmit a `POST /v1/exports/posts` request to start an async export job.\nThe job is processed by the export worker, which streams rows from BigQuery\nand writes NDJSON gzip files to GCS. Poll `GET /v1/exports/{export_id}` until\n`status` is `completed` or `failed`.\n\n## Error responses\n\nAll errors return JSON with `error` (machine-readable code) and `message` fields.\nUnhandled exceptions also include a `request_id` for log correlation.\n","version":"0.1.0"},"paths":{"/v1/communities":{"get":{"tags":["communities"],"summary":"List communities","description":"Returns aggregate community metadata derived from forum posts.","operationId":"list_communities_v1_communities_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by community category","title":"Category"},"description":"Filter by community category"},{"name":"language","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by language code (e.g. 'en')","title":"Language"},"description":"Filter by language code (e.g. 'en')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Number of results to return","default":100,"title":"Limit"},"description":"Number of results to return"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor from previous response","title":"Cursor"},"description":"Opaque cursor from previous response"},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunityListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/communities/{community_id}":{"get":{"tags":["communities"],"summary":"Get community","description":"Returns aggregate metadata for a single community by its ID.","operationId":"get_community_v1_communities__community_id__get","parameters":[{"name":"community_id","in":"path","required":true,"schema":{"type":"string","title":"Community Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunityResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/posts":{"get":{"tags":["posts"],"summary":"List posts (global)","description":"Primary cross-community post query endpoint. Supports filtering by community, thread, and created_at lower bound. Uses the existing opaque cursor pagination contract.","operationId":"list_posts_v1_posts_get","parameters":[{"name":"community_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to a specific community","title":"Community Id"},"description":"Filter to a specific community"},{"name":"thread_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to a specific thread","title":"Thread Id"},"description":"Filter to a specific thread"},{"name":"created_at","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Integer post created_at lower bound (inclusive)","title":"Created At"},"description":"Integer post created_at lower bound (inclusive)"},{"name":"page_size","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":1000,"minimum":1},{"type":"null"}],"description":"Number of results to return","title":"Page Size"},"description":"Number of results to return"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor from previous response","title":"Cursor"},"description":"Opaque cursor from previous response"},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/posts/{post_id}":{"get":{"tags":["posts"],"summary":"Get post","description":"Returns a single post by its ID within the specified community.","operationId":"get_post_v1_posts__post_id__get","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"string","title":"Post Id"}},{"name":"community_id","in":"query","required":true,"schema":{"type":"string","description":"Community ID for the requested post","title":"Community Id"},"description":"Community ID for the requested post"},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/threads":{"get":{"tags":["threads"],"summary":"List threads","description":"List thread records with optional community and created_at filtering. Uses the existing opaque cursor pagination contract.","operationId":"list_threads_v1_threads_get","parameters":[{"name":"community_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to a specific community","title":"Community Id"},"description":"Filter to a specific community"},{"name":"created_at","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Integer thread created_at lower bound (inclusive)","title":"Created At"},"description":"Integer thread created_at lower bound (inclusive)"},{"name":"page_size","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":1000,"minimum":1},{"type":"null"}],"description":"Number of results to return","title":"Page Size"},"description":"Number of results to return"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor from previous response","title":"Cursor"},"description":"Opaque cursor from previous response"},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThreadListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/threads/{thread_id}":{"get":{"tags":["threads"],"summary":"Get thread","description":"Returns a single thread by thread_id within the specified community, including its metadata and posts ordered by created_at ascending.","operationId":"get_thread_v1_threads__thread_id__get","parameters":[{"name":"thread_id","in":"path","required":true,"schema":{"type":"string","title":"Thread Id"}},{"name":"community_id","in":"query","required":true,"schema":{"type":"string","description":"Community ID for the requested thread","title":"Community Id"},"description":"Community ID for the requested thread"},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThreadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"APIKeyCreateRequest":{"properties":{"name":{"type":"string","title":"Name"},"plan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan Id"}},"type":"object","required":["name"],"title":"APIKeyCreateRequest"},"APIKeyCreateResponse":{"properties":{"key_id":{"type":"string","title":"Key Id"},"name":{"type":"string","title":"Name"},"raw_key":{"type":"string","title":"Raw Key"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["key_id","name","raw_key","created_at"],"title":"APIKeyCreateResponse"},"APIKeyItem":{"properties":{"key_id":{"type":"string","title":"Key Id"},"name":{"type":"string","title":"Name"},"prefix":{"type":"string","title":"Prefix"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"revoked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Revoked At"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"is_active":{"type":"boolean","title":"Is Active"}},"type":"object","required":["key_id","name","prefix","created_at","is_active"],"title":"APIKeyItem"},"APIKeyListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/APIKeyItem"},"type":"array","title":"Data"}},"type":"object","required":["data"],"title":"APIKeyListResponse"},"AdminAPIKeyCreateRequest":{"properties":{"name":{"type":"string","title":"Name"}},"type":"object","required":["name"],"title":"AdminAPIKeyCreateRequest"},"AdminAPIKeyItem":{"properties":{"key_id":{"type":"string","title":"Key Id"},"name":{"type":"string","title":"Name"},"prefix":{"type":"string","title":"Prefix"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"revoked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Revoked At"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"}},"type":"object","required":["key_id","name","prefix","is_active","created_at"],"title":"AdminAPIKeyItem"},"AdminAPIKeyListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/AdminAPIKeyItem"},"type":"array","title":"Data"}},"type":"object","required":["data"],"title":"AdminAPIKeyListResponse"},"AdminAPIKeySecretResponse":{"properties":{"key_id":{"type":"string","title":"Key Id"},"name":{"type":"string","title":"Name"},"raw_key":{"type":"string","title":"Raw Key"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"replaced_key_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Replaced Key Id"}},"type":"object","required":["key_id","name","raw_key","created_at"],"title":"AdminAPIKeySecretResponse"},"AdminExportListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ExportJobResponse"},"type":"array","title":"Data"}},"type":"object","required":["data"],"title":"AdminExportListResponse"},"AdminOrganizationCreateInitialUser":{"properties":{"email":{"type":"string","title":"Email"},"password":{"type":"string","minLength":8,"title":"Password"}},"type":"object","required":["email","password"],"title":"AdminOrganizationCreateInitialUser"},"AdminOrganizationCreateRequest":{"properties":{"name":{"type":"string","title":"Name"},"slug":{"type":"string","title":"Slug"},"is_active":{"type":"boolean","title":"Is Active","default":true},"initial_user":{"anyOf":[{"$ref":"#/components/schemas/AdminOrganizationCreateInitialUser"},{"type":"null"}]},"initial_plan":{"anyOf":[{"$ref":"#/components/schemas/AdminPlanUpdate"},{"type":"null"}]}},"type":"object","required":["name","slug"],"title":"AdminOrganizationCreateRequest"},"AdminOrganizationDetailResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"slug":{"type":"string","title":"Slug"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"plan":{"anyOf":[{"$ref":"#/components/schemas/AdminPlanResponse"},{"type":"null"}]},"users":{"items":{"$ref":"#/components/schemas/AdminUserListItem"},"type":"array","title":"Users","default":[]}},"type":"object","required":["id","name","slug","is_active","created_at","updated_at"],"title":"AdminOrganizationDetailResponse"},"AdminOrganizationListItem":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"slug":{"type":"string","title":"Slug"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"plan_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan Name"}},"type":"object","required":["id","name","slug","is_active","created_at","updated_at"],"title":"AdminOrganizationListItem"},"AdminOrganizationListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/AdminOrganizationListItem"},"type":"array","title":"Data"}},"type":"object","required":["data"],"title":"AdminOrganizationListResponse"},"AdminOrganizationUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"AdminOrganizationUpdateRequest"},"AdminOverviewResponse":{"properties":{"total_organizations":{"type":"integer","title":"Total Organizations"},"active_organizations":{"type":"integer","title":"Active Organizations"},"total_dashboard_users":{"type":"integer","title":"Total Dashboard Users"},"recent_export_jobs":{"type":"integer","title":"Recent Export Jobs"},"recent_organizations":{"items":{"$ref":"#/components/schemas/AdminOrganizationListItem"},"type":"array","title":"Recent Organizations"},"recent_users":{"items":{"$ref":"#/components/schemas/AdminUserListItem"},"type":"array","title":"Recent Users"}},"type":"object","required":["total_organizations","active_organizations","total_dashboard_users","recent_export_jobs","recent_organizations","recent_users"],"title":"AdminOverviewResponse"},"AdminPlanResponse":{"properties":{"plan_name":{"type":"string","title":"Plan Name"},"requests_per_minute":{"type":"integer","minimum":1.0,"title":"Requests Per Minute"},"daily_row_limit":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Daily Row Limit"},"max_export_jobs":{"type":"integer","minimum":0.0,"title":"Max Export Jobs"},"export_enabled":{"type":"boolean","title":"Export Enabled","default":true},"sync_enabled":{"type":"boolean","title":"Sync Enabled","default":true},"allowed_community_filter_json":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Allowed Community Filter Json"},"id":{"type":"string","title":"Id"},"organization_id":{"type":"string","title":"Organization Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["plan_name","requests_per_minute","max_export_jobs","id","organization_id","created_at","updated_at"],"title":"AdminPlanResponse"},"AdminPlanUpdate":{"properties":{"plan_name":{"type":"string","title":"Plan Name"},"requests_per_minute":{"type":"integer","minimum":1.0,"title":"Requests Per Minute"},"daily_row_limit":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Daily Row Limit"},"max_export_jobs":{"type":"integer","minimum":0.0,"title":"Max Export Jobs"},"export_enabled":{"type":"boolean","title":"Export Enabled","default":true},"sync_enabled":{"type":"boolean","title":"Sync Enabled","default":true},"allowed_community_filter_json":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Allowed Community Filter Json"}},"type":"object","required":["plan_name","requests_per_minute","max_export_jobs"],"title":"AdminPlanUpdate"},"AdminResetPasswordRequest":{"properties":{"new_password":{"type":"string","minLength":8,"title":"New Password"}},"type":"object","required":["new_password"],"title":"AdminResetPasswordRequest"},"AdminUsageByKey":{"properties":{"key_id":{"type":"string","title":"Key Id"},"key_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Key Name"},"requests_today":{"type":"integer","title":"Requests Today"},"requests_this_month":{"type":"integer","title":"Requests This Month"}},"type":"object","required":["key_id","requests_today","requests_this_month"],"title":"AdminUsageByKey"},"AdminUsageSummaryResponse":{"properties":{"total_requests_today":{"type":"integer","title":"Total Requests Today"},"total_requests_this_month":{"type":"integer","title":"Total Requests This Month"},"active_api_keys":{"type":"integer","title":"Active Api Keys"},"by_key":{"items":{"$ref":"#/components/schemas/AdminUsageByKey"},"type":"array","title":"By Key"}},"type":"object","required":["total_requests_today","total_requests_this_month","active_api_keys","by_key"],"title":"AdminUsageSummaryResponse"},"AdminUserCreateRequest":{"properties":{"email":{"type":"string","title":"Email"},"password":{"type":"string","minLength":8,"title":"Password"},"role":{"type":"string","title":"Role","default":"customer_user"},"organization_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization Id"},"is_active":{"type":"boolean","title":"Is Active","default":true}},"type":"object","required":["email","password"],"title":"AdminUserCreateRequest"},"AdminUserDetailResponse":{"properties":{"id":{"type":"string","title":"Id"},"email":{"type":"string","title":"Email"},"username":{"type":"string","title":"Username"},"role":{"type":"string","title":"Role"},"organization_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization Id"},"organization_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization Name"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"last_login_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Login At"}},"type":"object","required":["id","email","username","role","is_active","created_at","updated_at"],"title":"AdminUserDetailResponse"},"AdminUserListItem":{"properties":{"id":{"type":"string","title":"Id"},"email":{"type":"string","title":"Email"},"username":{"type":"string","title":"Username"},"role":{"type":"string","title":"Role"},"organization_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization Id"},"organization_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization Name"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"last_login_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Login At"}},"type":"object","required":["id","email","username","role","is_active","created_at","updated_at"],"title":"AdminUserListItem"},"AdminUserListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/AdminUserListItem"},"type":"array","title":"Data"}},"type":"object","required":["data"],"title":"AdminUserListResponse"},"AdminUserUpdateRequest":{"properties":{"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"},"organization_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization Id"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"AdminUserUpdateRequest"},"CommunityListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/CommunityResponse"},"type":"array","title":"Data"},"page_info":{"$ref":"#/components/schemas/PageInfo"}},"type":"object","required":["data","page_info"],"title":"CommunityListResponse"},"CommunityResponse":{"properties":{"community_id":{"type":"string","title":"Community Id"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"},"post_count":{"type":"integer","title":"Post Count"},"date_first_post":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Date First Post"},"date_last_post":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Date Last Post"}},"type":"object","required":["community_id","post_count"],"title":"CommunityResponse"},"DashboardMeResponse":{"properties":{"id":{"type":"string","title":"Id"},"username":{"type":"string","title":"Username"},"email":{"type":"string","title":"Email"},"role":{"type":"string","title":"Role"},"organization_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization Id"}},"type":"object","required":["id","username","email","role"],"title":"DashboardMeResponse"},"ExportCompression":{"type":"string","enum":["gzip","none"],"title":"ExportCompression"},"ExportFile":{"properties":{"path":{"type":"string","title":"Path"},"size_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Size Bytes"}},"type":"object","required":["path"],"title":"ExportFile"},"ExportFormat":{"type":"string","enum":["ndjson"],"title":"ExportFormat"},"ExportJobRequest":{"properties":{"community_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Community Ids"},"created_after":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Created After"},"created_before":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Created Before"},"updated_after":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Updated After"},"updated_before":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Updated Before"},"include_op_only":{"type":"boolean","title":"Include Op Only","default":false},"format":{"$ref":"#/components/schemas/ExportFormat","default":"ndjson"},"compression":{"$ref":"#/components/schemas/ExportCompression","default":"gzip"}},"type":"object","title":"ExportJobRequest"},"ExportJobResponse":{"properties":{"export_id":{"type":"string","title":"Export Id"},"status":{"$ref":"#/components/schemas/ExportStatus"},"format":{"$ref":"#/components/schemas/ExportFormat"},"compression":{"$ref":"#/components/schemas/ExportCompression"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"row_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Row Count"},"file_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"File Count"},"files":{"items":{"$ref":"#/components/schemas/ExportFile"},"type":"array","title":"Files","default":[]},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"}},"type":"object","required":["export_id","status","format","compression","created_at"],"title":"ExportJobResponse"},"ExportListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ExportJobResponse"},"type":"array","title":"Data"}},"type":"object","required":["data"],"title":"ExportListResponse"},"ExportStatus":{"type":"string","enum":["queued","running","completed","failed"],"title":"ExportStatus"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"LoginRequest":{"properties":{"username":{"type":"string","title":"Username"},"password":{"type":"string","title":"Password"}},"type":"object","required":["username","password"],"title":"LoginRequest"},"PageInfo":{"properties":{"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"},"has_more":{"type":"boolean","title":"Has More","default":false},"count":{"type":"integer","title":"Count","default":0}},"type":"object","title":"PageInfo"},"PlanResponse":{"properties":{"plan_name":{"type":"string","title":"Plan Name"},"rate_limit_rpm":{"type":"integer","title":"Rate Limit Rpm"},"max_page_size":{"type":"integer","title":"Max Page Size"},"export_enabled":{"type":"boolean","title":"Export Enabled"}},"type":"object","required":["plan_name","rate_limit_rpm","max_page_size","export_enabled"],"title":"PlanResponse"},"PostListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/PostResponse"},"type":"array","title":"Data"},"page_info":{"$ref":"#/components/schemas/PageInfo"}},"type":"object","required":["data","page_info"],"title":"PostListResponse"},"PostResponse":{"properties":{"post_id":{"type":"string","title":"Post Id"},"thread_id":{"type":"string","title":"Thread Id"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username"},"community_id":{"type":"string","title":"Community Id"},"body_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Body Text"},"created_at":{"type":"integer","title":"Created At"},"updated_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Updated At"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"}},"type":"object","required":["post_id","thread_id","community_id","created_at"],"title":"PostResponse"},"ThreadListItemResponse":{"properties":{"thread_id":{"type":"string","title":"Thread Id"},"node_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Id"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username"},"community_id":{"type":"string","title":"Community Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"view_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"View Count"},"first_post_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Post Id"},"created_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Created At"},"last_post_date":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Last Post Date"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"}},"type":"object","required":["thread_id","community_id"],"title":"ThreadListItemResponse"},"ThreadListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ThreadListItemResponse"},"type":"array","title":"Data"},"page_info":{"$ref":"#/components/schemas/PageInfo"}},"type":"object","required":["data","page_info"],"title":"ThreadListResponse"},"ThreadResponse":{"properties":{"thread_id":{"type":"string","title":"Thread Id"},"node_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Id"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username"},"community_id":{"type":"string","title":"Community Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"view_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"View Count"},"first_post_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Post Id"},"created_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Created At"},"last_post_date":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Last Post Date"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"post_count":{"type":"integer","title":"Post Count"},"posts":{"items":{"$ref":"#/components/schemas/PostResponse"},"type":"array","title":"Posts"}},"type":"object","required":["thread_id","community_id","post_count","posts"],"title":"ThreadResponse"},"UsageSummaryResponse":{"properties":{"total_requests_today":{"type":"integer","title":"Total Requests Today"},"total_requests_this_month":{"type":"integer","title":"Total Requests This Month"},"by_key":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"By Key"}},"type":"object","required":["total_requests_today","total_requests_this_month","by_key"],"title":"UsageSummaryResponse"},"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"}}},"tags":[{"name":"communities","description":"Forum communities available in the dataset. A community maps to a single forum site (e.g. a motorcycle or fishing forum)."},{"name":"posts","description":"Individual forum posts. Each post belongs to a thread and a community."},{"name":"threads","description":"Threads are sourced from forum_datamart.threads. Use the list endpoint for paginated thread discovery, or fetch a single thread to retrieve its metadata plus embedded post list."}]}