{"openapi":"3.1.0","info":{"title":"CarryFeed API","version":"0.2.0","description":"Public social URL resolvers plus authenticated, metered media tools that use a CarryFeed Tools balance."},"servers":[{"url":"https://api.carryfeed.com"}],"x-mcp":{"endpoint":"https://api.carryfeed.com/mcp","transport":"streamable-http","authentication":"oauth-2.1","tools":[{"name":"resolve_public_x_input","title":"Resolve public X input","description":"Resolve a public X or Twitter handle, profile URL, post URL, article URL, or post ID.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"url":{"type":"string","minLength":1,"maxLength":2048,"description":"A public x.com or twitter.com URL, handle, article URL, or post ID."}},"required":["url"]},"outputSchema":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean"},"tool":{"type":"string"},"source":{"type":"object","additionalProperties":false,"properties":{"input":{"type":"object","additionalProperties":true},"apiUrl":{"type":"string"},"access":{"type":"string","enum":["public","authenticated","authenticated_metered"]}},"required":["input","apiUrl","access"]},"data":{"type":"object","additionalProperties":true}},"required":["ok","tool","source","data"]},"annotations":{"title":"Resolve public X input","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"get_public_x_profile","title":"Get public X profile","description":"Return public profile metadata for an X or Twitter handle.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"handle":{"type":"string","minLength":1,"maxLength":100,"description":"A public X or Twitter handle, with or without a leading @."}},"required":["handle"]},"outputSchema":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean"},"tool":{"type":"string"},"source":{"type":"object","additionalProperties":false,"properties":{"input":{"type":"object","additionalProperties":true},"apiUrl":{"type":"string"},"access":{"type":"string","enum":["public","authenticated","authenticated_metered"]}},"required":["input","apiUrl","access"]},"data":{"type":"object","additionalProperties":true}},"required":["ok","tool","source","data"]},"annotations":{"title":"Get public X profile","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"search_public_x_posts","title":"Search public X posts","description":"Search public X or Twitter posts by keyword, account, date, media, link, and other public operators.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"query":{"type":"string","minLength":1,"maxLength":500,"description":"A public X search query, such as \"from:NASA filter:images since:2026-07-01\"."},"count":{"type":"integer","minimum":2,"maximum":40,"default":12,"description":"Maximum number of public results to request."},"feed":{"type":"string","enum":["latest","top"],"default":"latest","description":"Sort by the latest public posts or the upstream top feed."},"cursor":{"type":"string","minLength":1,"maxLength":2048,"description":"Optional upstream cursor for the next result page."}},"required":["query"]},"outputSchema":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean"},"tool":{"type":"string"},"source":{"type":"object","additionalProperties":false,"properties":{"input":{"type":"object","additionalProperties":true},"apiUrl":{"type":"string"},"access":{"type":"string","enum":["public","authenticated","authenticated_metered"]}},"required":["input","apiUrl","access"]},"data":{"type":"object","additionalProperties":true}},"required":["ok","tool","source","data"]},"annotations":{"title":"Search public X posts","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"get_public_x_post","title":"Get public X post","description":"Return public post text, author context, metrics, and media metadata.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","minLength":1,"maxLength":32,"description":"The numeric public X or Twitter post ID.","pattern":"^[0-9]+$"},"handle":{"type":"string","minLength":1,"maxLength":100,"description":"Optional author handle used to retain source URL context."}},"required":["id"]},"outputSchema":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean"},"tool":{"type":"string"},"source":{"type":"object","additionalProperties":false,"properties":{"input":{"type":"object","additionalProperties":true},"apiUrl":{"type":"string"},"access":{"type":"string","enum":["public","authenticated","authenticated_metered"]}},"required":["input","apiUrl","access"]},"data":{"type":"object","additionalProperties":true}},"required":["ok","tool","source","data"]},"annotations":{"title":"Get public X post","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"list_public_x_media","title":"List public X media","description":"List public media resource URLs and metadata exposed by an X or Twitter post.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"url":{"type":"string","minLength":1,"maxLength":2048,"description":"A public x.com or twitter.com post URL."},"mediaType":{"type":"string","enum":["any","photo","video","gif"],"default":"any","description":"Optional media type filter."}},"required":["url"]},"outputSchema":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean"},"tool":{"type":"string"},"source":{"type":"object","additionalProperties":false,"properties":{"input":{"type":"object","additionalProperties":true},"apiUrl":{"type":"string"},"access":{"type":"string","enum":["public","authenticated","authenticated_metered"]}},"required":["input","apiUrl","access"]},"data":{"type":"object","additionalProperties":true}},"required":["ok","tool","source","data"]},"annotations":{"title":"List public X media","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"resolve_public_tiktok_input","title":"Resolve public TikTok input","description":"Resolve public metadata and preview details for a TikTok video or short link.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"url":{"type":"string","minLength":1,"maxLength":2048,"description":"A public TikTok video URL, player URL, or supported TikTok short link."}},"required":["url"]},"outputSchema":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean"},"tool":{"type":"string"},"source":{"type":"object","additionalProperties":false,"properties":{"input":{"type":"object","additionalProperties":true},"apiUrl":{"type":"string"},"access":{"type":"string","enum":["public","authenticated","authenticated_metered"]}},"required":["input","apiUrl","access"]},"data":{"type":"object","additionalProperties":true}},"required":["ok","tool","source","data"]},"annotations":{"title":"Resolve public TikTok input","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"get_youtube_transcript","title":"Get YouTube caption transcript","description":"Extract an existing caption track from one public YouTube video. This is a metered Tools-balance call and does not transcribe audio.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"url":{"type":"string","minLength":1,"maxLength":2048,"description":"A public YouTube video URL."},"language":{"type":"string","minLength":1,"maxLength":32,"description":"Optional BCP-47 caption language, such as en or zh-Hans."},"requestId":{"type":"string","minLength":16,"maxLength":120,"description":"A unique idempotency key for this paid request."},"maxCostMicros":{"type":"integer","minimum":0,"default":5000,"description":"Maximum approved cost in USD micros. Current price: 5000 ($0.005)."},"startSeconds":{"type":"number","minimum":0,"default":0,"description":"Optional start time for the returned caption slice. The paid extraction still checks the full source video."},"endSeconds":{"type":"number","exclusiveMinimum":0,"description":"Optional end time for the returned caption slice. It must be greater than startSeconds."},"maxCharacters":{"type":"integer","minimum":1000,"maximum":100000,"default":50000,"description":"Maximum transcript characters returned to the agent. A truncated result includes nextStartSeconds."}},"required":["url","requestId"]},"outputSchema":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean"},"tool":{"type":"string"},"source":{"type":"object","additionalProperties":false,"properties":{"input":{"type":"object","additionalProperties":true},"apiUrl":{"type":"string"},"access":{"type":"string","enum":["public","authenticated","authenticated_metered"]}},"required":["input","apiUrl","access"]},"data":{"type":"object","additionalProperties":true}},"required":["ok","tool","source","data"]},"annotations":{"title":"Get YouTube caption transcript","readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"download_youtube_video","title":"Download YouTube video","description":"Create a short-lived private MP4 download from one public YouTube video. This is a metered Tools-balance call.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"url":{"type":"string","minLength":1,"maxLength":2048,"description":"A public YouTube video URL."},"requestId":{"type":"string","minLength":16,"maxLength":120,"description":"A unique idempotency key for this paid request."},"maxCostMicros":{"type":"integer","minimum":0,"default":100000,"description":"Maximum approved cost in USD micros. Current price: 100000 ($0.10)."}},"required":["url","requestId"]},"outputSchema":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean"},"tool":{"type":"string"},"source":{"type":"object","additionalProperties":false,"properties":{"input":{"type":"object","additionalProperties":true},"apiUrl":{"type":"string"},"access":{"type":"string","enum":["public","authenticated","authenticated_metered"]}},"required":["input","apiUrl","access"]},"data":{"type":"object","additionalProperties":true}},"required":["ok","tool","source","data"]},"annotations":{"title":"Download YouTube video","readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"download_tiktok_video","title":"Download TikTok video","description":"Create a short-lived private MP4 download from one public TikTok video. This is a metered Tools-balance call.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"url":{"type":"string","minLength":1,"maxLength":2048,"description":"A public TikTok video URL or supported TikTok short link."},"requestId":{"type":"string","minLength":16,"maxLength":120,"description":"A unique idempotency key for this paid request."},"maxCostMicros":{"type":"integer","minimum":0,"default":10000,"description":"Maximum approved cost in USD micros. Current price: 10000 ($0.01)."}},"required":["url","requestId"]},"outputSchema":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean"},"tool":{"type":"string"},"source":{"type":"object","additionalProperties":false,"properties":{"input":{"type":"object","additionalProperties":true},"apiUrl":{"type":"string"},"access":{"type":"string","enum":["public","authenticated","authenticated_metered"]}},"required":["input","apiUrl","access"]},"data":{"type":"object","additionalProperties":true}},"required":["ok","tool","source","data"]},"annotations":{"title":"Download TikTok video","readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"get_tool_usage","title":"Get Tools balance and prices","description":"Return the signed-in CarryFeed account's Tools balance, allowance, and current unit prices. The returned price keys identify the media tools that are currently live.","inputSchema":{"type":"object","additionalProperties":false,"properties":{},"required":[]},"outputSchema":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean"},"tool":{"type":"string"},"source":{"type":"object","additionalProperties":false,"properties":{"input":{"type":"object","additionalProperties":true},"apiUrl":{"type":"string"},"access":{"type":"string","enum":["public","authenticated","authenticated_metered"]}},"required":["input","apiUrl","access"]},"data":{"type":"object","additionalProperties":true}},"required":["ok","tool","source","data"]},"annotations":{"title":"Get Tools balance and prices","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"resolve_public_bluesky_input","title":"Resolve public Bluesky input","description":"Resolve a public Bluesky profile, post, thread, handle, or at:// post URI.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"url":{"type":"string","minLength":1,"maxLength":2048,"description":"A public bsky.app URL, handle, or at:// app.bsky.feed.post URI."},"view":{"type":"string","enum":["auto","thread"],"default":"auto","description":"Use thread to request a deeper public post thread tree."}},"required":["url"]},"outputSchema":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean"},"tool":{"type":"string"},"source":{"type":"object","additionalProperties":false,"properties":{"input":{"type":"object","additionalProperties":true},"apiUrl":{"type":"string"},"access":{"type":"string","enum":["public","authenticated","authenticated_metered"]}},"required":["input","apiUrl","access"]},"data":{"type":"object","additionalProperties":true}},"required":["ok","tool","source","data"]},"annotations":{"title":"Resolve public Bluesky input","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"resolve_public_threads_profile","title":"Resolve public Threads profile","description":"Resolve a public Threads profile and its available recent-post snapshot.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"url":{"type":"string","minLength":1,"maxLength":2048,"description":"A public Threads username or threads.com profile URL."}},"required":["url"]},"outputSchema":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean"},"tool":{"type":"string"},"source":{"type":"object","additionalProperties":false,"properties":{"input":{"type":"object","additionalProperties":true},"apiUrl":{"type":"string"},"access":{"type":"string","enum":["public","authenticated","authenticated_metered"]}},"required":["input","apiUrl","access"]},"data":{"type":"object","additionalProperties":true}},"required":["ok","tool","source","data"]},"annotations":{"title":"Resolve public Threads profile","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"list_x_trend_locations","title":"List X trend locations","description":"List the country and worldwide locations supported by CarryFeed's public X trends.","inputSchema":{"type":"object","additionalProperties":false,"properties":{},"required":[]},"outputSchema":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean"},"tool":{"type":"string"},"source":{"type":"object","additionalProperties":false,"properties":{"input":{"type":"object","additionalProperties":true},"apiUrl":{"type":"string"},"access":{"type":"string","enum":["public","authenticated","authenticated_metered"]}},"required":["input","apiUrl","access"]},"data":{"type":"object","additionalProperties":true}},"required":["ok","tool","source","data"]},"annotations":{"title":"List X trend locations","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"get_location_x_trends","title":"Get X trends by location","description":"Return the current cached public X trend snapshot for a supported country or worldwide.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"country":{"type":"string","enum":["worldwide","us","gb","ca","au","de","fr","es","it","nl","ie","in","jp","br","mx","ar","za","tr","sa","ph","id"],"default":"us","description":"Supported trend location key."},"limit":{"type":"integer","minimum":1,"maximum":50,"default":20,"description":"Maximum number of trends to return."}},"required":[]},"outputSchema":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean"},"tool":{"type":"string"},"source":{"type":"object","additionalProperties":false,"properties":{"input":{"type":"object","additionalProperties":true},"apiUrl":{"type":"string"},"access":{"type":"string","enum":["public","authenticated","authenticated_metered"]}},"required":["input","apiUrl","access"]},"data":{"type":"object","additionalProperties":true}},"required":["ok","tool","source","data"]},"annotations":{"title":"Get X trends by location","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}}]},"x-webmcp-tools":[{"name":"resolve_public_x_input","description":"Resolve a public X or Twitter handle, profile URL, post URL, article URL, or post id."},{"name":"search_public_x_posts","description":"Search public X/Twitter posts by query operators such as keyword, hashtag, account, date, media, and links."},{"name":"get_location_x_trends","description":"Return cached public X/Twitter trends for a supported country or Worldwide."},{"name":"get_public_x_profile","description":"Return public profile metadata for an X or Twitter handle."},{"name":"get_public_x_post","description":"Return public post metadata, text, author context, metrics, and media metadata."},{"name":"list_public_x_media","description":"List public media resource URLs and metadata exposed by an X or Twitter post."},{"name":"resolve_public_tiktok_input","description":"Resolve official public metadata and preview details for a TikTok video URL or short link."},{"name":"resolve_public_bluesky_input","description":"Resolve a public Bluesky handle, profile URL, post URL, thread URL, or at:// post URI."},{"name":"resolve_public_threads_profile","description":"Resolve a public Threads profile and recent posts from its search-crawler payload."}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"CarryFeed access token"}}},"paths":{"/health":{"get":{"summary":"Service health","responses":{"200":{"description":"Service metadata"}}}},"/api/youtube/transcript":{"post":{"summary":"Extract an existing caption track from a public YouTube video","security":[{"bearerAuth":[]}],"description":"Extract an existing caption track from a public video up to 12 hours. Successful results cost $0.005 from the signed-in account's Tools balance. This endpoint does not transcribe audio, and failed requests release the reservation.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url","requestId"],"properties":{"url":{"type":"string","format":"uri"},"language":{"type":"string","description":"Optional existing caption language code"},"requestId":{"type":"string","minLength":16,"maxLength":120},"maxCostMicros":{"type":"integer","default":5000,"description":"Maximum approved cost in USD micros"}}}}}},"responses":{"200":{"description":"Normalized transcript, video metadata, caption-track details, and timestamps"},"400":{"description":"Invalid YouTube URL or request"},"402":{"description":"Insufficient Tools balance"},"404":{"description":"No caption track is available"},"409":{"description":"The current unit price exceeds maxCostMicros"},"422":{"description":"Video exceeds the 12-hour operational limit"},"502":{"description":"Temporary YouTube or extraction failure; the Tools reservation is released"},"504":{"description":"The total extraction deadline elapsed; the Tools reservation is released"}}}},"/api/youtube/download":{"post":{"summary":"Create a short-lived private MP4 from one public YouTube video","security":[{"bearerAuth":[]}],"description":"Successful files cost $0.10 from the signed-in account's Tools balance. The service selects video and audio up to 720p, merges them without re-encoding, enforces a 100 MiB file limit, and returns a private link that expires after 15 minutes.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url","requestId"],"properties":{"url":{"type":"string","format":"uri"},"requestId":{"type":"string","minLength":16,"maxLength":120},"maxCostMicros":{"type":"integer","default":100000,"description":"Maximum approved cost in USD micros"}}}}}},"responses":{"200":{"description":"Private download asset, source metadata, checksum, expiry, and billing result"},"400":{"description":"Invalid YouTube URL or request"},"402":{"description":"Insufficient Tools balance"},"404":{"description":"The YouTube video is unavailable"},"413":{"description":"The returned media exceeds 100 MiB"},"502":{"description":"Temporary YouTube extraction failure; the Tools reservation is released"}}}},"/api/tiktok/download":{"post":{"summary":"Create a short-lived private MP4 from one public TikTok video","security":[{"bearerAuth":[]}],"description":"Successful files cost $0.01 from the signed-in account's Tools balance. The returned private link expires after 15 minutes.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url","requestId"],"properties":{"url":{"type":"string","format":"uri"},"requestId":{"type":"string","minLength":16,"maxLength":120},"maxCostMicros":{"type":"integer","default":10000,"description":"Maximum approved cost in USD micros"}}}}}},"responses":{"200":{"description":"Private download asset, source metadata, checksum, expiry, and billing result"},"400":{"description":"Invalid TikTok URL or request"},"402":{"description":"Insufficient Tools balance"},"404":{"description":"The TikTok video is unavailable"},"413":{"description":"The returned media exceeds 100 MiB"},"502":{"description":"Temporary TikTok extraction failure; the Tools reservation is released"}}}},"/api/tools/usage":{"get":{"summary":"Return the signed-in account's Tools balance and current prices","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"USD balance, allowance source and expiry, last top-up, and enabled unit prices"},"401":{"description":"CarryFeed authentication is required"},"503":{"description":"The Tools wallet is not configured or temporarily unavailable"}}}},"/api/resolve":{"get":{"summary":"Resolve a public handle, post URL, or profile URL","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string"}},{"name":"provider","in":"query","required":false,"schema":{"type":"string","enum":["fxtwitter","direct"]}}],"responses":{"200":{"description":"Resolved public content payload"}}}},"/api/media":{"get":{"summary":"Resolve media files exposed by a public post","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string"}},{"name":"provider","in":"query","required":false,"schema":{"type":"string","enum":["fxtwitter","direct"]}}],"responses":{"200":{"description":"Media file list"}}}},"/api/tiktok/resolve":{"get":{"summary":"Resolve official oEmbed metadata for a public TikTok video URL","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Public TikTok video metadata and embed payload"}}}},"/api/tiktok/embed-preview":{"get":{"summary":"Resolve TikTok embed-fixer OpenGraph metadata for a public video URL","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string"}},{"name":"provider","in":"query","required":false,"schema":{"type":"string","enum":["tfxktok","tnktok"]}}],"responses":{"200":{"description":"TikTok embed-fixer metadata, metrics, and media candidates"}}}},"/api/bluesky/resolve":{"get":{"summary":"Resolve a public Bluesky profile, post, thread, or at:// post URI","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use thread for a deeper bounded parent and nested-reply tree; thread mode accepts post records only.","schema":{"type":"string","enum":["thread"]}}],"responses":{"200":{"description":"Public Bluesky profile or post payload with source identifiers"},"400":{"description":"Thread mode received a handle, profile, or invalid post source"}}}},"/api/threads/resolve":{"get":{"summary":"Resolve a public Threads profile and recent-post snapshot","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Public Threads profile, exact returned follower count, and recent public posts"},"404":{"description":"The public profile or readable crawler payload was not found"},"429":{"description":"Threads rate limited public preview requests"}}}},"/api/tiktok/search":{"get":{"summary":"Search public TikTok video signals through a configured Research API token","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string"}},{"name":"start_date","in":"query","required":true,"schema":{"type":"string"}},{"name":"end_date","in":"query","required":true,"schema":{"type":"string"}},{"name":"count","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100}}],"responses":{"200":{"description":"TikTok Research API video signal search results"},"503":{"description":"TikTok Research API token is not configured"}}}},"/api/search":{"get":{"summary":"Search public X/Twitter posts","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string"}},{"name":"count","in":"query","required":false,"schema":{"type":"integer","minimum":2,"maximum":40}},{"name":"feed","in":"query","required":false,"schema":{"type":"string","enum":["latest","top"]}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Public search payload with normalized status and media arrays"},"403":{"description":"Optional Turnstile verification required after repeated searches when configured"},"429":{"description":"Search rate limit exceeded"}}}},"/api/trends":{"get":{"summary":"Return current public X/Twitter trends for a supported country","parameters":[{"name":"country","in":"query","required":false,"schema":{"type":"string","default":"us","enum":["worldwide","us","ca","gb","de","fr"]}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50}}],"responses":{"200":{"description":"Cached country trends with source timestamps and search links"},"400":{"description":"Unsupported country"},"429":{"description":"X upstream rate limit reached during a cache miss"},"503":{"description":"No usable snapshot and X trends collection is temporarily unavailable"}}}},"/api/trends/locations":{"get":{"summary":"List supported X/Twitter trend countries and WOEIDs","responses":{"200":{"description":"Supported country and Worldwide trend locations"}}}},"/api/popular-users":{"get":{"summary":"Return curated popular public X users by category","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100}}],"responses":{"200":{"description":"Curated public X user directory grouped by topic"}}}},"/api/popular-users/categories":{"get":{"summary":"List curated popular user categories","responses":{"200":{"description":"Curated user category list"}}}},"/api/profile/{handle}":{"get":{"summary":"Resolve a public profile","parameters":[{"name":"handle","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Profile payload"}}}},"/api/profile/{handle}/statuses":{"get":{"summary":"Resolve recent public statuses for a profile","parameters":[{"name":"handle","in":"path","required":true,"schema":{"type":"string"}},{"name":"count","in":"query","required":false,"schema":{"type":"integer","minimum":2,"maximum":40}},{"name":"with_replies","in":"query","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Recent public profile statuses"}}}},"/api/profile/{handle}/media":{"get":{"summary":"Resolve recent public media posts for a profile","parameters":[{"name":"handle","in":"path","required":true,"schema":{"type":"string"}},{"name":"count","in":"query","required":false,"schema":{"type":"integer","minimum":2,"maximum":40}}],"responses":{"200":{"description":"Recent public profile media and normalized media files"}}}},"/api/post/{id}":{"get":{"summary":"Resolve a public post","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Post payload"}}}},"/api/view-records":{"post":{"summary":"Store a public X, TikTok, or Bluesky result for server-rendered sharing","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"source":{"type":"string"},"payload":{"type":"object"}},"required":["source","payload"]}}}},"responses":{"201":{"description":"View record stored in R2"},"400":{"description":"Payload does not contain a supported public result"},"413":{"description":"Snapshot payload exceeds the storage limit"},"503":{"description":"Stable share-page storage is unavailable"}}}}}}