{"components":{"responses":{"BadRequest":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Invalid or missing request parameters"},"Forbidden":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Insufficient scope or subscription tier for this endpoint"},"NotFound":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Resource not found"},"RateLimited":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Rate limit exceeded","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Maximum requests per minute for this tier","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window","schema":{"type":"integer"}}}},"ServiceUnavailable":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"The endpoint is temporarily unavailable (e.g. semantic search without a configured embedding provider)"},"Unauthorized":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Missing or invalid API key"}},"schemas":{"ApiKey":{"description":"API key metadata (publicapi.APIKey). The full secret is never present on list/read responses — only at creation/rotation.","properties":{"created_at":{"format":"date-time","type":"string"},"expires_at":{"format":"date-time","type":"string"},"id":{"format":"uuid","type":"string"},"key_prefix":{"type":"string"},"last_used_at":{"format":"date-time","type":"string"},"name":{"type":"string"},"rate_limit_tier":{"type":"string"},"request_count":{"type":"integer"},"scopes":{"items":{"type":"string"},"type":"array"},"status":{"type":"string"},"updated_at":{"format":"date-time","type":"string"}},"type":"object"},"ApiKeyCreated":{"description":"Freshly minted API key (publicapi.CreateAPIKeyResponse). The key field contains the full secret exactly once — it is never retrievable again.","properties":{"created_at":{"format":"date-time","type":"string"},"id":{"format":"uuid","type":"string"},"key":{"description":"Full API key secret — shown only once","type":"string"},"key_prefix":{"type":"string"},"name":{"type":"string"},"rate_limit_tier":{"type":"string"},"scopes":{"items":{"type":"string"},"type":"array"}},"type":"object"},"Bookmark":{"description":"A saved bookmark owned by the API key holder (publicapi.PublicBookmarkItem).","properties":{"created_at":{"format":"date-time","type":"string"},"entity_id":{"format":"uuid","type":"string"},"entity_type":{"type":"string"},"folder":{"type":"string"},"folder_id":{"format":"uuid","type":"string"},"id":{"format":"uuid","type":"string"},"slug":{"type":"string"},"title":{"type":"string"}},"type":"object"},"Comment":{"properties":{"author_id":{"format":"uuid","type":"string"},"body":{"type":"string"},"content_id":{"format":"uuid","type":"string"},"created_at":{"format":"date-time","type":"string"},"id":{"format":"uuid","type":"string"},"parent_id":{"description":"Parent comment ID for nested replies","format":"uuid","type":"string"}},"type":"object"},"Content":{"properties":{"author_id":{"format":"uuid","type":"string"},"content_type":{"enum":["post","article","guide"],"type":"string"},"created_at":{"format":"date-time","type":"string"},"excerpt":{"type":"string"},"id":{"format":"uuid","type":"string"},"read_time":{"description":"Estimated read time in minutes","type":"integer"},"slug":{"type":"string"},"space_id":{"format":"uuid","type":"string"},"tags":{"items":{"type":"string"},"type":"array"},"title":{"type":"string"},"updated_at":{"format":"date-time","type":"string"}},"type":"object"},"ContentDraft":{"description":"A draft created via POST /public/content (publicapi.PublicDraft).","properties":{"content_type":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"id":{"format":"uuid","type":"string"},"slug":{"type":"string"},"status":{"enum":["draft"],"type":"string"},"title":{"type":"string"}},"type":"object"},"CredentialPathway":{"description":"A credential recognition pathway (credentialchecker.PathwayDTO / PathwayDetailDTO).","type":"object"},"CredentialProfession":{"description":"A profession with credential pathways (credentialchecker.ProfessionDTO).","type":"object"},"DestinationBrief":{"description":"Aggregate destination brief — best-effort composition of visa, timeline, university, scholarship, and scam-alert sections.","properties":{"destination":{"type":"object"},"generated_at":{"format":"date-time","type":"string"},"sections":{"type":"object"},"sections_unavailable":{"items":{"type":"string"},"type":"array"},"summary":{"type":"string"}},"type":"object"},"Digest":{"description":"Aggregate new-tab digest for the API key owner (publicapi.PublicDigest).","properties":{"cached":{"description":"True when served from the per-viewer digest cache","type":"boolean"},"community":{"$ref":"#/components/schemas/DigestCommunity"},"destination":{"$ref":"#/components/schemas/DigestDestination","description":"Null when the owner has no destination_country or it resolves to a non-public space","nullable":true},"for_you":{"$ref":"#/components/schemas/DigestFeedSection"},"generated_at":{"format":"date-time","type":"string"}},"type":"object"},"DigestCommunity":{"properties":{"popular":{"items":{"$ref":"#/components/schemas/PublicFeedItem"},"type":"array"}},"type":"object"},"DigestDestination":{"properties":{"intel":{"items":{"$ref":"#/components/schemas/IntelDigestItem"},"type":"array"},"scam_alerts":{"items":{"$ref":"#/components/schemas/PublicScamReport"},"type":"array"},"space":{"$ref":"#/components/schemas/DigestSpaceRef"}},"type":"object"},"DigestFeedSection":{"properties":{"items":{"items":{"$ref":"#/components/schemas/PublicFeedItem"},"type":"array"},"source":{"description":"Feed source identifier (e.g. for_you)","type":"string"}},"type":"object"},"DigestSpaceRef":{"properties":{"level":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string"}},"type":"object"},"Error":{"properties":{"error":{"properties":{"code":{"description":"Machine-readable error code","type":"string"},"docs":{"description":"Link to error documentation","format":"uri","type":"string"},"message":{"description":"Human-readable error message","type":"string"},"status":{"description":"HTTP status code","type":"integer"}},"type":"object"}},"type":"object"},"IntelDigestItem":{"properties":{"created_at":{"format":"date-time","type":"string"},"id":{"type":"string"},"kind":{"enum":["visa_route","job"],"type":"string"},"summary":{"type":"string"},"title":{"type":"string"}},"type":"object"},"LanguageTest":{"description":"A language proficiency test (languagetesthub.TestDTO).","type":"object"},"LanguageTestRequirement":{"description":"A language test score requirement for a destination (languagetesthub.RequirementDTO).","type":"object"},"Option":{"description":"A labeled filter option (scholarships.Option).","properties":{"label":{"type":"string"},"value":{"type":"string"}},"type":"object"},"PublicComment":{"description":"A comment created via the public API (publicapi.PublicComment).","properties":{"content_id":{"format":"uuid","type":"string"},"created_at":{"format":"date-time","type":"string"},"depth":{"type":"integer"},"id":{"format":"uuid","type":"string"},"parent_id":{"format":"uuid","type":"string"}},"type":"object"},"PublicFeedItem":{"description":"A stable feed-card shape for API consumers (publicapi.PublicFeedItem).","properties":{"author_handle":{"type":"string"},"author_name":{"type":"string"},"comment_count":{"type":"integer"},"content_type":{"type":"string"},"excerpt":{"type":"string"},"id":{"type":"string"},"published_at":{"format":"date-time","type":"string"},"slug":{"type":"string"},"space_id":{"type":"string"},"space_name":{"type":"string"},"space_slug":{"type":"string"},"tags":{"items":{"type":"string"},"type":"array"},"title":{"type":"string"},"view_count":{"type":"integer"},"vote_score":{"type":"integer"}},"type":"object"},"PublicScamReport":{"description":"A confirmed scam report. Moderation internals (reporter, reviewer, moderator notes, AI provenance) are excluded from the public contract (publicapi.PublicScamReport).","properties":{"amount_range":{"type":"string"},"approximate_date":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"description":{"type":"string"},"destination_space_code":{"type":"string"},"destination_space_name":{"type":"string"},"id":{"format":"uuid","type":"string"},"is_pinned":{"type":"boolean"},"origin_community":{"type":"string"},"origin_space_code":{"type":"string"},"origin_space_name":{"type":"string"},"platform_used":{"type":"string"},"reported_to_authorities":{"type":"boolean"},"scam_type":{"type":"string"}},"type":"object"},"ScamAlertSchema":{"description":"Canonical scam_type and platform option lists (scamalert.SchemaOptions).","properties":{"platforms":{"items":{"$ref":"#/components/schemas/Option"},"type":"array"},"scam_types":{"items":{"$ref":"#/components/schemas/Option"},"type":"array"}},"type":"object"},"Scholarship":{"description":"A scholarship listing (scholarships.ScholarshipResult).","type":"object"},"SemanticHit":{"description":"One retrieved chunk in a semantic search result (publicapi.PublicSemanticHit).","properties":{"content_type":{"type":"string"},"entity_id":{"type":"string"},"entity_type":{"type":"string"},"href":{"description":"Best-effort resolved entity URL path; null when unresolvable","nullable":true,"type":"string"},"similarity":{"format":"float","type":"number"},"snippet":{"type":"string"},"tier":{"type":"string"},"title":{"description":"Best-effort resolved entity title; null when unresolvable","nullable":true,"type":"string"}},"type":"object"},"SemanticSearchResult":{"description":"Semantic search response envelope (publicapi.SemanticSearchResult).","properties":{"cached":{"description":"True when the result was served from the response cache","type":"boolean"},"data":{"items":{"$ref":"#/components/schemas/SemanticHit"},"type":"array"},"language":{"type":"string"},"query":{"type":"string"},"space":{"description":"Space slug the search was restricted to, or null","nullable":true,"type":"string"}},"type":"object"},"Space":{"properties":{"created_at":{"format":"date-time","type":"string"},"description":{"type":"string"},"id":{"format":"uuid","type":"string"},"member_count":{"type":"integer"},"name":{"type":"string"},"slug":{"type":"string"},"updated_at":{"format":"date-time","type":"string"}},"type":"object"},"Tag":{"properties":{"id":{"format":"uuid","type":"string"},"name":{"type":"string"},"post_count":{"type":"integer"},"slug":{"type":"string"}},"type":"object"},"TrendingItem":{"properties":{"id":{"format":"uuid","type":"string"},"meta":{"description":"Additional metadata varies by entity type","type":"object"},"name":{"type":"string"},"score":{"description":"Trending score","format":"float","type":"number"},"slug":{"type":"string"}},"type":"object"},"University":{"description":"A public university space.","type":"object"},"User":{"properties":{"avatar_url":{"format":"uri","type":"string"},"bio":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"display_name":{"type":"string"},"id":{"format":"uuid","type":"string"},"username":{"type":"string"}},"type":"object"},"VisaRoute":{"description":"A visa route pathway (visaroutes.RouteDTO).","type":"object"},"VisaTimelineStat":{"description":"Crowd-sourced visa processing-time statistics (visatimeline.ProcessingStatDTO).","type":"object"},"VisaTrendPoint":{"description":"A single month-over-month processing-time data point (visatimeline.TrendPointDTO).","type":"object"},"WebhookDelivery":{"description":"A webhook delivery audit row; payload omitted from the personal surface.","properties":{"attempts":{"type":"integer"},"created_at":{"format":"date-time","type":"string"},"delivered_at":{"format":"date-time","nullable":true,"type":"string"},"event_id":{"format":"uuid","type":"string"},"event_type":{"type":"string"},"id":{"format":"uuid","type":"string"},"last_error":{"nullable":true,"type":"string"},"last_response_code":{"nullable":true,"type":"integer"},"next_attempt_at":{"format":"date-time","nullable":true,"type":"string"},"status":{"enum":["pending","delivered","retrying","failed"],"type":"string"}},"type":"object"},"WebhookEndpoint":{"description":"A personal webhook subscription (scope='user' on webhook_endpoints).","properties":{"created_at":{"format":"date-time","type":"string"},"event_types":{"items":{"type":"string"},"type":"array"},"id":{"format":"uuid","type":"string"},"is_active":{"type":"boolean"},"name":{"type":"string"},"status":{"enum":["pending","active","disabled"],"type":"string"},"url":{"format":"uri","type":"string"},"verified_at":{"format":"date-time","nullable":true,"type":"string"}},"type":"object"},"WebhookEndpointCreated":{"allOf":[{"$ref":"#/components/schemas/WebhookEndpoint"},{"properties":{"secret":{"description":"HMAC signing secret — returned exactly once at creation","type":"string"}},"type":"object"}]}},"securitySchemes":{"apiKeyAuth":{"description":"API key obtained from the Developer Portal. Prefixed with jc_live_ (production) or jc_test_ (sandbox).","in":"header","name":"X-API-Key","type":"apiKey"},"bearerAuth":{"bearerFormat":"JWT","description":"Session access token — used only by the /me/extension-tokens mint routes, which are web-session authenticated rather than API-key authenticated.","scheme":"bearer","type":"http"}}},"externalDocs":{"description":"API documentation","url":"https://b.japa.to/docs/api"},"info":{"contact":{"email":"api@b.japa.to","name":"Japa.to Developer Support","url":"https://b.japa.to/docs"},"description":"Public API for the Japa.to platform. Requires API key authentication via the X-API-Key header, except where an operation declares bearerAuth (the session-authenticated extension-token mint) or x-anonymous-feeds (unauthenticated explore feeds).","title":"Japa.to Public API","version":"1.0.0"},"openapi":"3.0.3","paths":{"/academy/catalog":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetLearnUniversityCatalog","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /academy/catalog","tags":["Public"]}},"/academy/catalog/options":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetLearnUniversityCatalogOptions","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /academy/catalog/options","tags":["Public"]}},"/academy/catalog/{slug}":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetLearnUniversityCatalogSlug","parameters":[{"description":"slug identifier","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /academy/catalog/{slug}","tags":["Public"]}},"/academy/categories":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetLearnUniversityCategories","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /academy/categories","tags":["Public"]}},"/academy/instructors/{id}":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetLearnUniversityInstructorsId","parameters":[{"description":"id identifier","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /academy/instructors/{id}","tags":["Public"]}},"/academy/quizzes/{id}":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetLearnUniversityQuizzesId","parameters":[{"description":"id identifier","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /academy/quizzes/{id}","tags":["Public"]}},"/academy/tracks":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetLearnTracks","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /academy/tracks","tags":["Public"]}},"/academy/tracks/{id}/reviews":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetLearnTracksIdReviews","parameters":[{"description":"id identifier","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /academy/tracks/{id}/reviews","tags":["Public"]}},"/academy/tracks/{slug}":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetLearnUniversityTracksSlug","parameters":[{"description":"slug identifier","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /academy/tracks/{slug}","tags":["Public"]}},"/academy/tracks/{trackSlug}/modules/{moduleSlug}/lessons/{lessonSlug}":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetLearnUniversityTracksTrackSlugModulesModuleSlugLessonsLessonSlug","parameters":[{"description":"trackSlug identifier","in":"path","name":"trackSlug","required":true,"schema":{"type":"string"}},{"description":"moduleSlug identifier","in":"path","name":"moduleSlug","required":true,"schema":{"type":"string"}},{"description":"lessonSlug identifier","in":"path","name":"lessonSlug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /academy/tracks/{trackSlug}/modules/{moduleSlug}/lessons/{lessonSlug}","tags":["Public"]}},"/ads/events":{"post":{"description":"Public route from the JEOS route catalog.","operationId":"PostAdsEvents","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"POST /ads/events","tags":["Public"]}},"/ads/networks/config":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetAdsNetworksConfig","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /ads/networks/config","tags":["Public"]}},"/ads/serve":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetAdsServe","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /ads/serve","tags":["Public"]}},"/affiliate-program":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetAffiliateProgram","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /affiliate-program","tags":["Public"]}},"/certificates/{id}":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetCertificatesId","parameters":[{"description":"id identifier","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /certificates/{id}","tags":["Public"]}},"/coupons":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetCoupons","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /coupons","tags":["Public"]}},"/coupons/{id}":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetCouponsId","parameters":[{"description":"id identifier","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /coupons/{id}","tags":["Public"]}},"/coupons/{id}/click":{"post":{"description":"Public route from the JEOS route catalog.","operationId":"PostCouponsIdClick","parameters":[{"description":"id identifier","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"POST /coupons/{id}/click","tags":["Public"]}},"/explore":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetExplore","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /explore","tags":["Public"]}},"/feed/context":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetFeedContext","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /feed/context","tags":["Public"]},"post":{"description":"Public route from the JEOS route catalog.","operationId":"PostFeedContext","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"POST /feed/context","tags":["Public"]}},"/feed/journey-options":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetFeedJourneyOptions","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /feed/journey-options","tags":["Public"]}},"/feed/profile/{user_id}":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetFeedProfileUserId","parameters":[{"description":"user_id identifier","in":"path","name":"user_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /feed/profile/{user_id}","tags":["Public"]}},"/forms/{id}/submissions":{"post":{"description":"Public route from the JEOS route catalog.","operationId":"PostFormsIdSubmissions","parameters":[{"description":"id identifier","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"POST /forms/{id}/submissions","tags":["Public"]}},"/forms/{slug}/embed":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetFormsSlugEmbed","parameters":[{"description":"slug identifier","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /forms/{slug}/embed","tags":["Public"]}},"/forum":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetForum","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /forum","tags":["Public"]}},"/geo/countries":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetGeoCountries","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /geo/countries","tags":["Public"]}},"/geo/countries/{code}/states":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetGeoCountriesCodeStates","parameters":[{"description":"code identifier","in":"path","name":"code","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /geo/countries/{code}/states","tags":["Public"]}},"/geo/detect":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetGeoDetect","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /geo/detect","tags":["Public"]}},"/geo/me":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetGeoMe","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /geo/me","tags":["Public"]}},"/geo/states/{id}/cities":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetGeoStatesIdCities","parameters":[{"description":"id identifier","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /geo/states/{id}/cities","tags":["Public"]}},"/i18n/packs":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetI18nPacks","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /i18n/packs","tags":["Public"]}},"/i18n/packs/{lang_code}":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetI18nPacksLangCode","parameters":[{"description":"lang_code identifier","in":"path","name":"lang_code","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /i18n/packs/{lang_code}","tags":["Public"]}},"/literals":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetLiterals","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /literals","tags":["Public"]}},"/me/extension-tokens":{"get":{"description":"List the session user's active browser-extension tokens (api_keys rows whose name carries the extension: prefix). Revoked tokens are omitted. Revocation uses DELETE /me/api-keys/{id}.","operationId":"listExtensionTokens","responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ApiKey"},"type":"array"}},"type":"object"}}},"description":"Active extension tokens"},"401":{"$ref":"#/components/responses/Unauthorized"}},"security":[{"bearerAuth":[]}],"summary":"List extension tokens","tags":["Developer"]},"post":{"description":"Mint a narrow-scoped API key for a browser-extension install. Scopes are fixed server-side (api.read.digest, api.read.content, api.read.me, api.read.safety — no search, no agent.use). The full key is returned once — store it in the extension's local storage. install_id is optional; when omitted the server generates a name suffix. The requested rate-limit tier is standard but is capped by the account's unified user tier.","operationId":"createExtensionToken","requestBody":{"content":{"application/json":{"schema":{"properties":{"install_id":{"description":"Optional extension-generated install identifier; becomes the key name suffix","format":"uuid","type":"string"}},"type":"object"}}},"required":false},"responses":{"201":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/ApiKeyCreated"}},"type":"object"}}},"description":"Minted extension token — full key shown once"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"}},"security":[{"bearerAuth":[]}],"summary":"Mint an extension token","tags":["Developer"]}},"/media/proxy":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetMediaProxy","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /media/proxy","tags":["Public"]}},"/menus/{slug}":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetMenusSlug","parameters":[{"description":"slug identifier","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /menus/{slug}","tags":["Public"]}},"/newsletter/subscribe":{"post":{"description":"Public route from the JEOS route catalog.","operationId":"PostNewsletterSubscribe","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"POST /newsletter/subscribe","tags":["Public"]}},"/organizations":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetOrganizations","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /organizations","tags":["Public"]}},"/organizations/meta":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetOrganizationsMeta","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /organizations/meta","tags":["Public"]}},"/organizations/{id}/content":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetOrganizationsIdContent","parameters":[{"description":"id identifier","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /organizations/{id}/content","tags":["Public"]}},"/organizations/{id}/media":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetOrganizationsIdMedia","parameters":[{"description":"id identifier","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /organizations/{id}/media","tags":["Public"]}},"/organizations/{id}/members":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetOrganizationsIdMembers","parameters":[{"description":"id identifier","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /organizations/{id}/members","tags":["Public"]}},"/organizations/{slug}":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetOrganizationsSlug","parameters":[{"description":"slug identifier","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /organizations/{slug}","tags":["Public"]}},"/public/content":{"get":{"description":"Retrieve a paginated list of published, public content within the API key's platform. Drafts, scheduled, and private content are never exposed.","operationId":"listContent","parameters":[{"description":"Number of results to return.","in":"query","name":"limit","schema":{"default":20,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Number of results to skip for pagination.","in":"query","name":"offset","schema":{"default":0,"minimum":0,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/Content"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}},"type":"object"}}},"description":"List of published content"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"List published content","tags":["Content"],"x-required-scope":"api.read.content"},"post":{"description":"Create a content draft owned by the API key holder. Publishing stays session-side — the draft is visible to the owner in the composer and can be published there. content_type is restricted to blog_post, guide, story, discussion. The Idempotency-Key header is required; retries with the same key return the original response. Requires the admin-granted api.write.content scope.","operationId":"createContentDraft","parameters":[{"description":"Unique key deduplicating retries for 24h","in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"properties":{"body":{"description":"Markdown or plain-text body","type":"string"},"body_html":{"description":"Optional rendered HTML body","type":"string"},"content_type":{"default":"discussion","enum":["blog_post","guide","story","discussion"],"type":"string"},"field_values":{"description":"Content-type field values","type":"object"},"journey_stage":{"type":"string"},"slug":{"description":"Optional URL slug; auto-generated from title when omitted","type":"string"},"source_country":{"type":"string"},"space_id":{"format":"uuid","type":"string"},"tags":{"description":"Tag slugs (get-or-create)","items":{"type":"string"},"type":"array"},"target_country":{"type":"string"},"title":{"type":"string"},"visa_route":{"type":"string"}},"required":["title"],"type":"object"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/ContentDraft"}},"type":"object"}}},"description":"Created draft"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"Create draft content","tags":["Content"],"x-required-scope":"api.write.content"}},"/public/content/{id}":{"get":{"description":"Retrieve a single published content item by its unique identifier.","operationId":"getContentByID","parameters":[{"description":"Content ID","in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/Content"}},"type":"object"}}},"description":"Content details"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"Get content detail","tags":["Content"],"x-required-scope":"api.read.content"}},"/public/content/{id}/comments":{"get":{"description":"Retrieve top-level published comments for a content item, ordered by pinned then vote score.","operationId":"listContentComments","parameters":[{"description":"Content ID","in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"Number of results to return.","in":"query","name":"limit","schema":{"default":20,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Number of results to skip for pagination.","in":"query","name":"offset","schema":{"default":0,"minimum":0,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/Comment"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}},"type":"object"}}},"description":"List of comments"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"List content comments","tags":["Content"],"x-required-scope":"api.read.content"},"post":{"description":"Create a comment on a content item, authored by the API key owner. body is plain text — the server wraps it in a TipTap paragraph document. parent_id creates a reply (session depth cap applies). is_anonymous is rejected: API-key calls are always identified. Invisible or absent content returns 404 (never 403 — the endpoint does not leak restricted content). The session abuse model applies: spam pipeline check, IP block, and space commenting/replying permissions. Requires the admin-granted api.write.comments scope.","operationId":"createContentComment","parameters":[{"description":"Content ID","in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"properties":{"body":{"description":"Plain-text comment body; wrapped in a TipTap paragraph doc server-side","type":"string"},"is_anonymous":{"default":false,"description":"Rejected when true — API keys cannot post anonymously","type":"boolean"},"parent_id":{"description":"Reply to this comment ID (optional)","format":"uuid","type":"string"}},"required":["body"],"type":"object"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/PublicComment"}},"type":"object"}}},"description":"Created comment"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"Create a comment or reply","tags":["Content"],"x-required-scope":"api.write.comments"}},"/public/content/{id}/markdown":{"get":{"description":"Retrieve a published, public content item rendered as text/markdown with a front-matter block (title, author, space, canonical URL). GET /public/content/{id} returns the same representation when the request sends Accept: text/markdown.","operationId":"getContentMarkdown","parameters":[{"description":"Content ID","in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"text/markdown":{"schema":{"type":"string"}}},"description":"Markdown representation of the content item"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"Get content as markdown","tags":["Content"],"x-required-scope":"api.read.content"}},"/public/credentials":{"get":{"description":"Retrieve credential recognition pathways. Filter by destination space, issuing space, or profession. Gated by the credential_checker.enabled feature flag.","operationId":"listCredentialPathways","parameters":[{"description":"Destination space ID filter","in":"query","name":"dest","schema":{"format":"uuid","type":"string"}},{"description":"Issuing space ID filter","in":"query","name":"issuing","schema":{"format":"uuid","type":"string"}},{"description":"Profession ID filter","in":"query","name":"profession","schema":{"format":"uuid","type":"string"}},{"description":"Number of results to return per page.","in":"query","name":"page_size","schema":{"default":20,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Number of results to skip for pagination.","in":"query","name":"offset","schema":{"default":0,"minimum":0,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/CredentialPathway"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}},"type":"object"}}},"description":"List of credential pathways"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"List credential pathways","tags":["Visa & Immigration"],"x-required-scope":"api.read.visa"}},"/public/credentials/professions":{"get":{"description":"Retrieve the professions that have credential recognition pathways. Gated by the credential_checker.enabled feature flag.","operationId":"listCredentialProfessions","responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/CredentialProfession"},"type":"array"}},"type":"object"}}},"description":"List of professions"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"List credential professions","tags":["Visa & Immigration"],"x-required-scope":"api.read.visa"}},"/public/credentials/{id}":{"get":{"description":"Retrieve a single credential pathway by its unique identifier.","operationId":"getCredentialPathway","parameters":[{"description":"Credential pathway ID","in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/CredentialPathway"}},"type":"object"}}},"description":"Credential pathway details"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"Get credential pathway detail","tags":["Visa & Immigration"],"x-required-scope":"api.read.visa"}},"/public/destinations/{slug}/brief":{"get":{"description":"Retrieve an aggregate brief for a destination space: visa routes, processing timelines, universities, scholarships, and scam alerts composed in parallel. Sections that fail are listed in sections_unavailable — the brief is best-effort. Premium endpoint — requires a pro or business subscription.","operationId":"getDestinationBrief","parameters":[{"description":"Destination space slug","in":"path","name":"slug","required":true,"schema":{"type":"string"}},{"description":"Comma-separated sections to include: visa, timelines, universities, scholarships, scam_alerts. Omit for all sections.","in":"query","name":"include","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/DestinationBrief"}},"type":"object"}}},"description":"Destination brief"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"Get destination brief","tags":["Destinations"],"x-required-scope":"api.read.brief","x-required-tier":"pro"}},"/public/feeds/space/{slug}":{"get":{"description":"Retrieve the feed for a public, active space. Member-only items resolve using the API key owner's membership, exactly as the web space feed does.","operationId":"getSpaceFeed","parameters":[{"description":"Space slug","in":"path","name":"slug","required":true,"schema":{"type":"string"}},{"description":"Sort order override. Unknown values fall back to the feed's default ranking.","in":"query","name":"sort","schema":{"enum":["latest","top","rising","relevant"],"type":"string"}},{"description":"Number of results to return.","in":"query","name":"limit","schema":{"default":20,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Number of results to skip for pagination.","in":"query","name":"offset","schema":{"default":0,"minimum":0,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/PublicFeedItem"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"}},"type":"object"}}},"description":"Space feed items"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"Get space feed","tags":["Feeds"],"x-required-scope":"api.read.content"}},"/public/feeds/tag/{tag}":{"get":{"description":"Retrieve published, public content for a tag slug. Cursor-paginated: pass the previous response's next_cursor value in ?cursor to fetch the next page.","operationId":"getTagFeed","parameters":[{"description":"Tag slug","in":"path","name":"tag","required":true,"schema":{"type":"string"}},{"description":"Opaque pagination cursor returned as next_cursor by the previous page.","in":"query","name":"cursor","schema":{"type":"string"}},{"description":"Number of results to return.","in":"query","name":"limit","schema":{"default":20,"maximum":100,"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/PublicFeedItem"},"type":"array"},"limit":{"type":"integer"},"next_cursor":{"description":"Pass as ?cursor to fetch the next page. Empty when there is no next page.","type":"string"}},"type":"object"}}},"description":"Tag feed items"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"Get tag feed","tags":["Feeds"],"x-required-scope":"api.read.content"}},"/public/feeds/{name}":{"get":{"description":"Retrieve a public explore feed. The feed name selects the default ranking (popular → top, latest → latest, rising → rising); a valid ?sort value overrides it. Anonymous requests (no X-API-Key) are permitted for name=popular only — IP rate-limited at a loose tier; latest and rising always require api.read.content.","operationId":"getExploreFeed","parameters":[{"description":"Explore feed name.","in":"path","name":"name","required":true,"schema":{"enum":["popular","latest","rising"],"type":"string"}},{"description":"Sort order override. Unknown values fall back to the feed's default ranking.","in":"query","name":"sort","schema":{"enum":["latest","top","rising","relevant"],"type":"string"}},{"description":"Number of results to return.","in":"query","name":"limit","schema":{"default":20,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Number of results to skip for pagination.","in":"query","name":"offset","schema":{"default":0,"minimum":0,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/PublicFeedItem"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"}},"type":"object"}}},"description":"Explore feed items"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"Get explore feed","tags":["Feeds"],"x-anonymous-feeds":["popular"],"x-required-scope":"api.read.content"}},"/public/language-tests":{"get":{"description":"Retrieve supported language proficiency tests (IELTS, TOEFL, etc.). Gated by the language_test_hub.enabled feature flag.","operationId":"listLanguageTests","responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/LanguageTest"},"type":"array"}},"type":"object"}}},"description":"List of language tests"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"List language tests","tags":["Visa & Immigration"],"x-required-scope":"api.read.visa"}},"/public/language-tests/requirements":{"get":{"description":"Retrieve language test score requirements for a destination space, optionally filtered by visa category.","operationId":"listLanguageTestRequirements","parameters":[{"description":"Destination space ID (required)","in":"query","name":"dest","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"Visa category filter","in":"query","name":"visa","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/LanguageTestRequirement"},"type":"array"}},"type":"object"}}},"description":"List of test requirements"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"List language test requirements","tags":["Visa & Immigration"],"x-required-scope":"api.read.visa"}},"/public/language-tests/{slug}":{"get":{"description":"Retrieve a single language test by its URL slug.","operationId":"getLanguageTest","parameters":[{"description":"Language test slug","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/LanguageTest"}},"type":"object"}}},"description":"Language test details"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"Get language test detail","tags":["Visa & Immigration"],"x-required-scope":"api.read.visa"}},"/public/me":{"get":{"description":"Retrieve the authenticated user's own profile. Requires the api.read.me scope.","operationId":"getMe","responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/User"}},"type":"object"}}},"description":"Current user profile"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"Get current user profile","tags":["Users"],"x-required-scope":"api.read.me"}},"/public/me/bookmarks":{"get":{"description":"List the API key owner's bookmarks, newest first. Requires feature.bookmarks.","operationId":"listMyBookmarks","parameters":[{"description":"Number of results to return.","in":"query","name":"limit","schema":{"default":20,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Number of results to skip for pagination.","in":"query","name":"offset","schema":{"default":0,"minimum":0,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/Bookmark"},"type":"array"}},"type":"object"}}},"description":"The key owner's bookmarks"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"List my bookmarks","tags":["Me"],"x-required-scope":"api.read.me"}},"/public/me/bookmarks/{content_id}":{"delete":{"description":"Remove the key owner's bookmark for a content item. Requires feature.bookmarks.","operationId":"removeMyBookmark","parameters":[{"description":"Content ID","in":"path","name":"content_id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"204":{"description":"Bookmark removed"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"Remove bookmark","tags":["Me"],"x-required-scope":"api.write.bookmarks"},"put":{"description":"Bookmark a content item for the key owner. Idempotent — a repeat PUT updates the folder. Content that is absent or not visible to the owner returns 404 (never 403), so the endpoint cannot probe for restricted rows. Requires feature.bookmarks and the admin-granted api.write.bookmarks scope.","operationId":"addMyBookmark","parameters":[{"description":"Content ID","in":"path","name":"content_id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"properties":{"folder_id":{"description":"Optional bookmark folder owned by the key owner","format":"uuid","type":"string"}},"type":"object"}}},"required":false},"responses":{"201":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/Bookmark"}},"type":"object"}}},"description":"Created bookmark"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"Bookmark content","tags":["Me"],"x-required-scope":"api.write.bookmarks"}},"/public/me/digest":{"get":{"description":"Retrieve the aggregate new-tab digest for the API key owner: for-you feed, destination section (resolved from the key owner's destination_country profile field — null when unset or non-public), destination scam alerts, intel items, and the popular community feed. Optional sections degrade to null/empty on failure; a for-you feed outage fails the request. Responses are cached briefly per viewer (cached=true on a hit). Built for the browser extension; any key with api.read.digest may call it.","operationId":"getDigest","responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/Digest"}},"type":"object"}}},"description":"Personalized digest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"Get personalized digest","tags":["Feeds"],"x-required-scope":"api.read.digest"}},"/public/me/feed":{"get":{"description":"Retrieve the API key owner's ranked for-you feed. The user identity comes from the API key, never a query parameter.","operationId":"getMyFeed","parameters":[{"description":"Sort order override. Unknown values fall back to the feed's default ranking.","in":"query","name":"sort","schema":{"enum":["latest","top","rising","relevant"],"type":"string"}},{"description":"Number of results to return.","in":"query","name":"limit","schema":{"default":20,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Number of results to skip for pagination.","in":"query","name":"offset","schema":{"default":0,"minimum":0,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/PublicFeedItem"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"}},"type":"object"}}},"description":"For-you feed items"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"Get for-you feed","tags":["Feeds"],"x-required-scope":"api.read.me"}},"/public/me/webhooks":{"get":{"description":"List the key owner's personal webhook endpoints (secrets are never included).","operationId":"listMyWebhooks","responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/WebhookEndpoint"},"type":"array"}},"type":"object"}}},"description":"Personal webhook endpoints"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"}},"summary":"List my webhook subscriptions","tags":["Webhooks"],"x-required-scope":"api.read.me"},"post":{"description":"Register a webhook endpoint owned by the API key holder. event_types is restricted to content.published (the default when omitted). Deliveries only fire for content visible to the key owner at emit time. The endpoint starts inactive — call POST /public/me/webhooks/{id}/verify to complete challenge/response activation. Capped by the api.webhooks.max_per_key system setting (default 5). Requires the admin-granted api.write.me scope. The signing secret is returned exactly once.","operationId":"createMyWebhook","requestBody":{"content":{"application/json":{"schema":{"properties":{"event_types":{"default":["content.published"],"items":{"enum":["content.published"],"type":"string"},"type":"array"},"name":{"type":"string"},"url":{"format":"uri","type":"string"}},"required":["url"],"type":"object"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/WebhookEndpointCreated"}},"type":"object"}}},"description":"Registered endpoint — secret shown once"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"}},"summary":"Register a personal webhook","tags":["Webhooks"],"x-required-scope":"api.write.me"}},"/public/me/webhooks/{id}":{"delete":{"description":"Delete a personal webhook endpoint owned by the API key holder. Foreign or absent IDs return 404.","operationId":"deleteMyWebhook","parameters":[{"description":"Webhook endpoint ID","in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"204":{"description":"Endpoint deleted"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"Delete my webhook subscription","tags":["Webhooks"],"x-required-scope":"api.write.me"}},"/public/me/webhooks/{id}/deliveries":{"get":{"description":"Recent delivery audit rows for a personal endpoint owned by the key owner. Payloads are omitted.","operationId":"listMyWebhookDeliveries","parameters":[{"description":"Webhook endpoint ID","in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"Number of results to return.","in":"query","name":"limit","schema":{"default":20,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Number of results to skip for pagination.","in":"query","name":"offset","schema":{"default":0,"minimum":0,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/WebhookDelivery"},"type":"array"}},"type":"object"}}},"description":"Delivery audit rows"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"List my webhook deliveries","tags":["Webhooks"],"x-required-scope":"api.read.me"}},"/public/me/webhooks/{id}/verify":{"post":{"description":"Run the §12 challenge/response verification against the endpoint URL and activate it on success. The endpoint must echo ?challenge={token} back with a 2xx.","operationId":"verifyMyWebhook","parameters":[{"description":"Webhook endpoint ID","in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"description":"Endpoint verified and activated"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"502":{"description":"Challenge/response verification failed"}},"summary":"Verify my webhook subscription","tags":["Webhooks"],"x-required-scope":"api.write.me"}},"/public/scam-alerts":{"get":{"description":"Retrieve confirmed scam reports, optionally filtered by scam type and destination space. Only status=confirmed reports are ever exposed. Gated by the scam_alert.enabled feature flag.","operationId":"listScamAlerts","parameters":[{"description":"Scam type filter — see GET /public/scam-alerts/schema for valid values","in":"query","name":"scam_type","schema":{"type":"string"}},{"description":"Destination space ID filter","in":"query","name":"destination_space_id","schema":{"format":"uuid","type":"string"}},{"description":"Number of results to return.","in":"query","name":"limit","schema":{"default":20,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Number of results to skip for pagination.","in":"query","name":"offset","schema":{"default":0,"minimum":0,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/PublicScamReport"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}},"type":"object"}}},"description":"List of confirmed scam reports"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"List scam alerts","tags":["Safety"],"x-feature-flag":"scam_alert.enabled","x-required-scope":"api.read.safety"}},"/public/scam-alerts/schema":{"get":{"description":"Retrieve the canonical scam_type and platform option lists used to filter and interpret scam reports. Gated by the scam_alert.enabled feature flag.","operationId":"getScamAlertSchema","responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/ScamAlertSchema"}},"type":"object"}}},"description":"Scam alert schema options"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"Get scam alert schema","tags":["Safety"],"x-feature-flag":"scam_alert.enabled","x-required-scope":"api.read.safety"}},"/public/scam-alerts/{id}":{"get":{"description":"Retrieve a single confirmed scam report by its unique identifier. Gated by the scam_alert.enabled feature flag.","operationId":"getScamAlert","parameters":[{"description":"Scam report ID","in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/PublicScamReport"}},"type":"object"}}},"description":"Scam report details"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"Get scam alert detail","tags":["Safety"],"x-feature-flag":"scam_alert.enabled","x-required-scope":"api.read.safety"}},"/public/scholarships":{"get":{"description":"Search the scholarship finder. Filters mirror the web scholarship search. Gated by the scholarship_finder.enabled feature flag.","operationId":"findScholarships","parameters":[{"description":"Country filter","in":"query","name":"country","schema":{"type":"string"}},{"description":"Study level filter","in":"query","name":"level","schema":{"type":"string"}},{"description":"Free-text search","in":"query","name":"q","schema":{"type":"string"}},{"description":"Sort order","in":"query","name":"sort","schema":{"type":"string"}},{"description":"Earliest deadline (date)","in":"query","name":"deadline_from","schema":{"type":"string"}},{"description":"Latest deadline (date)","in":"query","name":"deadline_to","schema":{"type":"string"}},{"description":"Include scholarships past their deadline","in":"query","name":"include_expired","schema":{"type":"boolean"}},{"description":"Minimum award amount","in":"query","name":"min_amount","schema":{"type":"number"}},{"description":"Maximum award amount","in":"query","name":"max_amount","schema":{"type":"number"}},{"description":"Filter by renewable awards","in":"query","name":"renewable","schema":{"type":"boolean"}},{"description":"Number of results to return per page.","in":"query","name":"page_size","schema":{"default":20,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Number of results to skip for pagination.","in":"query","name":"offset","schema":{"default":0,"minimum":0,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/Scholarship"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}},"type":"object"}}},"description":"Scholarship search results"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"Search scholarships","tags":["Education"],"x-required-scope":"api.read.education"}},"/public/scholarships/levels":{"get":{"description":"Retrieve the valid study-level options for scholarship filtering.","operationId":"listScholarshipLevels","responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/Option"},"type":"array"}},"type":"object"}}},"description":"List of level options"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"List study levels","tags":["Education"],"x-required-scope":"api.read.education"}},"/public/scholarships/statuses":{"get":{"description":"Retrieve the valid scholarship status options.","operationId":"listScholarshipStatuses","responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/Option"},"type":"array"}},"type":"object"}}},"description":"List of status options"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"List scholarship statuses","tags":["Education"],"x-required-scope":"api.read.education"}},"/public/scholarships/{id}":{"get":{"description":"Retrieve a single scholarship by its guide ID.","operationId":"getScholarship","parameters":[{"description":"Scholarship guide ID","in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/Scholarship"}},"type":"object"}}},"description":"Scholarship details"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"Get scholarship detail","tags":["Education"],"x-required-scope":"api.read.education"}},"/public/search":{"get":{"description":"Search published content by title within the API key's platform.","operationId":"searchContent","parameters":[{"description":"Search query (required)","in":"query","name":"q","required":true,"schema":{"type":"string"}},{"description":"Number of results to return.","in":"query","name":"limit","schema":{"default":20,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Number of results to skip for pagination.","in":"query","name":"offset","schema":{"default":0,"minimum":0,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/Content"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}},"type":"object"}}},"description":"Search results"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"Search content","tags":["Search"],"x-required-scope":"api.read.content"}},"/public/search/semantic":{"get":{"description":"Search indexed content and spaces by embedding similarity (pgvector). Results are cached briefly — cache hits return cached=true. Returns 503 search_unavailable when no embedding provider is configured. Premium endpoint — requires a pro or business subscription.","operationId":"semanticSearch","parameters":[{"description":"Search query (required)","in":"query","name":"q","required":true,"schema":{"type":"string"}},{"description":"Content language filter (ISO language code).","in":"query","name":"lang","schema":{"default":"en","type":"string"}},{"description":"Restrict results to a space slug","in":"query","name":"space","schema":{"type":"string"}},{"description":"Number of results to return.","in":"query","name":"limit","schema":{"default":20,"maximum":50,"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SemanticSearchResult"}}},"description":"Semantic search results"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"summary":"Semantic search","tags":["Search"],"x-required-scope":"api.read.search","x-required-tier":"pro"}},"/public/spaces":{"get":{"description":"Retrieve a paginated list of public spaces visible to the API key's platform.","operationId":"listSpaces","parameters":[{"description":"Number of results to return.","in":"query","name":"limit","schema":{"default":20,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Number of results to skip for pagination.","in":"query","name":"offset","schema":{"default":0,"minimum":0,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/Space"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}},"type":"object"}}},"description":"List of spaces"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"List public spaces","tags":["Spaces"],"x-required-scope":"api.read.spaces"}},"/public/spaces/{slug}":{"get":{"description":"Retrieve a single space by its URL slug.","operationId":"getSpaceBySlug","parameters":[{"description":"Space slug","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/Space"}},"type":"object"}}},"description":"Space details"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"Get space detail","tags":["Spaces"],"x-required-scope":"api.read.spaces"}},"/public/tags":{"get":{"description":"Retrieve a paginated list of content tags.","operationId":"listTags","parameters":[{"description":"Number of results to return.","in":"query","name":"limit","schema":{"default":20,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Number of results to skip for pagination.","in":"query","name":"offset","schema":{"default":0,"minimum":0,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/Tag"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}},"type":"object"}}},"description":"List of tags"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"List tags","tags":["Tags"],"x-required-scope":"api.read.tags"}},"/public/tags/{slug}":{"get":{"description":"Retrieve a single tag by its URL slug, including follower and content counts.","operationId":"getTagBySlug","parameters":[{"description":"Tag slug","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/Tag"}},"type":"object"}}},"description":"Tag details"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"Get tag detail","tags":["Tags"],"x-required-scope":"api.read.tags"}},"/public/trending/content":{"get":{"description":"Retrieve trending content snapshots scored by recent engagement.","operationId":"listTrendingContent","parameters":[{"description":"Number of results to return.","in":"query","name":"limit","schema":{"default":10,"maximum":50,"minimum":1,"type":"integer"}},{"description":"Time window for the trending snapshot.","in":"query","name":"window","schema":{"default":"24h","enum":["24h","7d","30d"],"type":"string"}},{"description":"Geo code filter for geo-aware trending (ADR-064). Omit for global ranking.","in":"query","name":"geo","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"computed_at":{"format":"date-time","type":"string"},"data":{"items":{"$ref":"#/components/schemas/TrendingItem"},"type":"array"}},"type":"object"}}},"description":"Trending snapshot"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"Trending content","tags":["Trending"],"x-required-scope":"api.read.content"}},"/public/trending/spaces":{"get":{"description":"Retrieve trending space snapshots scored by recent member activity.","operationId":"listTrendingSpaces","parameters":[{"description":"Number of results to return.","in":"query","name":"limit","schema":{"default":10,"maximum":50,"minimum":1,"type":"integer"}},{"description":"Time window for the trending snapshot.","in":"query","name":"window","schema":{"default":"24h","enum":["24h","7d","30d"],"type":"string"}},{"description":"Geo code filter for geo-aware trending (ADR-064). Omit for global ranking.","in":"query","name":"geo","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"computed_at":{"format":"date-time","type":"string"},"data":{"items":{"$ref":"#/components/schemas/TrendingItem"},"type":"array"}},"type":"object"}}},"description":"Trending snapshot"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"Trending spaces","tags":["Trending"],"x-required-scope":"api.read.spaces"}},"/public/trending/tags":{"get":{"description":"Retrieve trending tag snapshots scored by recent follower growth.","operationId":"listTrendingTags","parameters":[{"description":"Number of results to return.","in":"query","name":"limit","schema":{"default":10,"maximum":50,"minimum":1,"type":"integer"}},{"description":"Time window for the trending snapshot.","in":"query","name":"window","schema":{"default":"24h","enum":["24h","7d","30d"],"type":"string"}},{"description":"Geo code filter for geo-aware trending (ADR-064). Omit for global ranking.","in":"query","name":"geo","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"computed_at":{"format":"date-time","type":"string"},"data":{"items":{"$ref":"#/components/schemas/TrendingItem"},"type":"array"}},"type":"object"}}},"description":"Trending snapshot"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"Trending tags","tags":["Trending"],"x-required-scope":"api.read.tags"}},"/public/trending/users":{"get":{"description":"Retrieve trending user snapshots scored by recent engagement.","operationId":"listTrendingUsers","parameters":[{"description":"Number of results to return.","in":"query","name":"limit","schema":{"default":10,"maximum":50,"minimum":1,"type":"integer"}},{"description":"Time window for the trending snapshot.","in":"query","name":"window","schema":{"default":"24h","enum":["24h","7d","30d"],"type":"string"}},{"description":"Geo code filter for geo-aware trending (ADR-064). Omit for global ranking.","in":"query","name":"geo","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"computed_at":{"format":"date-time","type":"string"},"data":{"items":{"$ref":"#/components/schemas/TrendingItem"},"type":"array"}},"type":"object"}}},"description":"Trending snapshot"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"Trending users","tags":["Trending"],"x-required-scope":"api.read.users.public"}},"/public/universities":{"get":{"description":"Retrieve a paginated list of public university spaces.","operationId":"listUniversities","parameters":[{"description":"Free-text search","in":"query","name":"q","schema":{"type":"string"}},{"description":"Country filter","in":"query","name":"country","schema":{"type":"string"}},{"description":"Sort order","in":"query","name":"sort","schema":{"type":"string"}},{"description":"Number of results to return per page.","in":"query","name":"page_size","schema":{"default":20,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Number of results to skip for pagination.","in":"query","name":"offset","schema":{"default":0,"minimum":0,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/University"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}},"type":"object"}}},"description":"List of universities"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"List universities","tags":["Education"],"x-required-scope":"api.read.education"}},"/public/universities/{slug}":{"get":{"description":"Retrieve a single public university space by its URL slug.","operationId":"getUniversity","parameters":[{"description":"University slug","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/University"}},"type":"object"}}},"description":"University details"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"Get university detail","tags":["Education"],"x-required-scope":"api.read.education"}},"/public/users":{"get":{"description":"Retrieve a paginated list of public user profiles. PII-safe: no email, status, last_login, or group membership. Filter by ?q= (username/display_name search) and ?type= (profile_type).","operationId":"listUsers","parameters":[{"description":"Search by username or display name","in":"query","name":"q","schema":{"type":"string"}},{"description":"Filter by profile type (e.g. individual, organization)","in":"query","name":"type","schema":{"type":"string"}},{"description":"Number of results to return.","in":"query","name":"limit","schema":{"default":20,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Number of results to skip for pagination.","in":"query","name":"offset","schema":{"default":0,"minimum":0,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/User"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}},"type":"object"}}},"description":"List of public user profiles"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"List public users","tags":["Users"],"x-required-scope":"api.read.users.public"}},"/public/users/{id}":{"get":{"description":"Retrieve a public user profile by their unique identifier.","operationId":"getUserByID","parameters":[{"description":"User ID","in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/User"}},"type":"object"}}},"description":"User profile"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"Get user profile","tags":["Users"],"x-required-scope":"api.read.users.public"}},"/public/visa-routes":{"get":{"description":"Retrieve visa route pathways for a destination space. Filter by profession, education level, and years of experience. Gated by the visa_routes.enabled feature flag.","operationId":"listVisaRoutes","parameters":[{"description":"Destination space ID filter","in":"query","name":"dest","schema":{"format":"uuid","type":"string"}},{"description":"Profession filter","in":"query","name":"profession","schema":{"type":"string"}},{"description":"Education level filter","in":"query","name":"education","schema":{"type":"string"}},{"description":"Years of experience filter","in":"query","name":"experience_years","schema":{"type":"integer"}},{"description":"Number of results to return per page.","in":"query","name":"page_size","schema":{"default":20,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Number of results to skip for pagination.","in":"query","name":"offset","schema":{"default":0,"minimum":0,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/VisaRoute"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}},"type":"object"}}},"description":"List of visa routes"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"List visa routes","tags":["Visa & Immigration"],"x-required-scope":"api.read.visa"}},"/public/visa-routes/compare":{"get":{"description":"Compare up to 5 visa routes side by side. Premium endpoint — requires a pro or business subscription.","operationId":"compareVisaRoutes","parameters":[{"description":"Comma-separated visa route IDs to compare (required, maximum 5)","in":"query","name":"ids","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/VisaRoute"},"type":"array"}},"type":"object"}}},"description":"Compared visa routes"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"Compare visa routes","tags":["Visa & Immigration"],"x-required-scope":"api.read.visa","x-required-tier":"pro"}},"/public/visa-routes/{id}":{"get":{"description":"Retrieve a single visa route by its unique identifier.","operationId":"getVisaRoute","parameters":[{"description":"Visa route ID","in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/VisaRoute"}},"type":"object"}}},"description":"Visa route details"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"Get visa route detail","tags":["Visa & Immigration"],"x-required-scope":"api.read.visa"}},"/public/visa-timelines/stats":{"get":{"description":"Retrieve crowd-sourced visa processing-time statistics for an origin/destination pair. Gated by the visa_timeline.enabled feature flag.","operationId":"getVisaTimelineStats","parameters":[{"description":"Origin space ID filter","in":"query","name":"origin","schema":{"format":"uuid","type":"string"}},{"description":"Destination space ID filter","in":"query","name":"dest","schema":{"format":"uuid","type":"string"}},{"description":"Visa category filter","in":"query","name":"visa","schema":{"type":"string"}},{"description":"Consulate filter","in":"query","name":"consulate","schema":{"type":"string"}},{"description":"Look-back window in months (1-60). Omit for all time.","in":"query","name":"months","schema":{"maximum":60,"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/VisaTimelineStat"},"type":"array"}},"type":"object"}}},"description":"Processing-time statistics"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"Visa processing-time stats","tags":["Visa & Immigration"],"x-required-scope":"api.read.visa"}},"/public/visa-timelines/stats/trend":{"get":{"description":"Retrieve the month-over-month processing-time trend for a destination. Premium endpoint — requires a pro or business subscription.","operationId":"getVisaTimelineTrend","parameters":[{"description":"Destination space ID filter","in":"query","name":"dest","schema":{"format":"uuid","type":"string"}},{"description":"Visa category filter","in":"query","name":"visa","schema":{"type":"string"}},{"description":"Consulate filter","in":"query","name":"consulate","schema":{"type":"string"}},{"description":"Look-back window in months (1-60).","in":"query","name":"months","schema":{"default":12,"maximum":60,"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/VisaTrendPoint"},"type":"array"}},"type":"object"}}},"description":"Processing-time trend points"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"Visa processing-time trend","tags":["Visa & Immigration"],"x-required-scope":"api.read.visa","x-required-tier":"pro"}},"/recommendations":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetRecommendations","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /recommendations","tags":["Public"]}},"/reviews/{entity_type}/{entity_id}":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetReviewsEntityTypeEntityId","parameters":[{"description":"entity_type identifier","in":"path","name":"entity_type","required":true,"schema":{"type":"string"}},{"description":"entity_id identifier","in":"path","name":"entity_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /reviews/{entity_type}/{entity_id}","tags":["Public"]}},"/reviews/{entity_type}/{entity_id}/aggregate":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetReviewsEntityTypeEntityIdAggregate","parameters":[{"description":"entity_type identifier","in":"path","name":"entity_type","required":true,"schema":{"type":"string"}},{"description":"entity_id identifier","in":"path","name":"entity_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /reviews/{entity_type}/{entity_id}/aggregate","tags":["Public"]}},"/search":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetSearch","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /search","tags":["Public"]}},"/search/autocomplete":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetSearchAutocomplete","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /search/autocomplete","tags":["Public"]}},"/sidebars/resolve":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetSidebarsResolve","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /sidebars/resolve","tags":["Public"]}},"/sidebars/widget-types":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetSidebarsWidgetTypes","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /sidebars/widget-types","tags":["Public"]}},"/space-types":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetSpaceTypes","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /space-types","tags":["Public"]}},"/space-types/{id}":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetSpaceTypesId","parameters":[{"description":"id identifier","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /space-types/{id}","tags":["Public"]}},"/spaces":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetSpaces","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /spaces","tags":["Public"]}},"/spaces/regions":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetSpacesRegions","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /spaces/regions","tags":["Public"]}},"/spaces/subregions":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetSpacesSubregions","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /spaces/subregions","tags":["Public"]}},"/spaces/{id}/reviews":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetSpacesIdReviews","parameters":[{"description":"id identifier","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /spaces/{id}/reviews","tags":["Public"]}},"/spaces/{slug}":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetSpacesSlug","parameters":[{"description":"slug identifier","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /spaces/{slug}","tags":["Public"]}},"/spaces/{slug}/achievements":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetSpacesSlugAchievements","parameters":[{"description":"slug identifier","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /spaces/{slug}/achievements","tags":["Public"]}},"/spaces/{slug}/content":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetSpacesSlugContent","parameters":[{"description":"slug identifier","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /spaces/{slug}/content","tags":["Public"]}},"/spaces/{slug}/members":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetSpacesSlugMembers","parameters":[{"description":"slug identifier","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /spaces/{slug}/members","tags":["Public"]}},"/spaces/{slug}/pinned":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetSpacesSlugPinned","parameters":[{"description":"slug identifier","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /spaces/{slug}/pinned","tags":["Public"]}},"/spaces/{slug}/rules":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetSpacesSlugRules","parameters":[{"description":"slug identifier","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /spaces/{slug}/rules","tags":["Public"]}},"/tags":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetTags","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /tags","tags":["Public"]}},"/tags/trending":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetTagsTrending","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /tags/trending","tags":["Public"]}},"/tags/{slug}":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetTagsSlug","parameters":[{"description":"slug identifier","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /tags/{slug}","tags":["Public"]}},"/tags/{slug}/content":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetTagsSlugContent","parameters":[{"description":"slug identifier","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /tags/{slug}/content","tags":["Public"]}},"/trending/content":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetTrendingContent","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /trending/content","tags":["Public"]}},"/trending/spaces":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetTrendingSpaces","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /trending/spaces","tags":["Public"]}},"/trending/users":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetTrendingUsers","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /trending/users","tags":["Public"]}},"/u/{username}/videos":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetUUsernameVideos","parameters":[{"description":"username identifier","in":"path","name":"username","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /u/{username}/videos","tags":["Public"]}},"/universities":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetUniversities","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /universities","tags":["Public"]}},"/universities/{slug}":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetUniversitiesSlug","parameters":[{"description":"slug identifier","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /universities/{slug}","tags":["Public"]}},"/universities/{slug}/compare":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetUniversitiesSlugCompare","parameters":[{"description":"slug identifier","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /universities/{slug}/compare","tags":["Public"]}},"/users":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetUsers","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /users","tags":["Public"]}},"/users/{id}/certificates":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetUsersIdCertificates","parameters":[{"description":"id identifier","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /users/{id}/certificates","tags":["Public"]}},"/users/{id}/content":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetUsersIdContent","parameters":[{"description":"id identifier","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /users/{id}/content","tags":["Public"]}},"/users/{id}/likes":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetUsersIdLikes","parameters":[{"description":"id identifier","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /users/{id}/likes","tags":["Public"]}},"/users/{id}/media":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetUsersIdMedia","parameters":[{"description":"id identifier","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /users/{id}/media","tags":["Public"]}},"/users/{id}/replies":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetUsersIdReplies","parameters":[{"description":"id identifier","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /users/{id}/replies","tags":["Public"]}},"/users/{id}/spaces":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetUsersIdSpaces","parameters":[{"description":"id identifier","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /users/{id}/spaces","tags":["Public"]}},"/users/{username}":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetUsersUsername","parameters":[{"description":"username identifier","in":"path","name":"username","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /users/{username}","tags":["Public"]}},"/videos/{id}":{"get":{"description":"Public route from the JEOS route catalog.","operationId":"GetVideosId","parameters":[{"description":"id identifier","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[],"summary":"GET /videos/{id}","tags":["Public"]}}},"security":[{"apiKeyAuth":[]}],"servers":[{"description":"Production","url":"https://b.japa.to/api/v1"},{"description":"Local development","url":"http://localhost:8080/api/v1"}],"tags":[{"description":"Public space discovery and detail","name":"Spaces"},{"description":"Published content and comments","name":"Content"},{"description":"Public user profiles and the current user","name":"Users"},{"description":"Content tags and tag detail","name":"Tags"},{"description":"Search published content","name":"Search"},{"description":"Trending snapshots across entities","name":"Trending"},{"description":"Visa routes, processing timelines, credential pathways, and language tests","name":"Visa & Immigration"},{"description":"Scholarships and universities","name":"Education"},{"description":"Aggregate destination briefs","name":"Destinations"},{"description":"Public explore feeds and the key owner's personalized feed","name":"Feeds"},{"description":"Confirmed scam reports and the scam alert schema","name":"Safety"},{"description":"Session-authenticated developer tooling (extension token mint)","name":"Developer"},{"description":"Public catalog routes that do not require an API key","name":"Public"}]}