This page covers the public JSON endpoints and media proxy routes exposed by this instance.
Please do not misuse the API. Misuse can include:
Examples of good uses of the API:
If you wish to engage in the activities listed under "misuses", feel free to download the source code of the project and run your own instance under your own terms. Please respect the terms of use listed here so that this website may remain available to others.
Get your instance running here: https://foundry.fsky.io/fsky/4get
Thanks!
All API endpoints return JSON and use the GET method.
Some instances require a captcha-derived pass token in your cookies before API requests are accepted. A pass currently allows about 100 requests over the next 24 hours.
Check the top-level status field on every response. A value other than ok means the request failed. Invalid passes return HTTP 429; other API responses normally return HTTP 200.
Most fields may legitimately be null, so clients should treat missing data as normal.
You can often prototype a request in the web UI first, then replace /web with /api/v1/web.
date values are Unix timestamps in seconds. time values are durations in seconds.
Paginated responses include an npt token. To fetch the next page, call the same endpoint with npt only.
GET /api/v1/web?s=higurashi GET /api/v1/web?npt=ddg1._rJ2hWmYSjpI2hsXWmYajJx...
The token contains a server-side state reference and a client-held decryption key. Tokens expire after first use or after 15 minutes of inactivity.
Returns basic metadata about the 4get instance. CORS requests are allowed on this endpoint.
Main web search endpoint.
When using the DuckDuckGo scraper, set extendedsearch=true if you want richer answer payloads from extra sources. The default for API calls is false.
The optional spelling object describes autocorrection hints:
{
"spelling": {
"type": "including",
"using": "4chan",
"correction": "\"4cha\""
}
}
Expected type values are no_correction, including, and not_many.
The optional answer array can contain rich descriptions built from typed nodes such as text, title, italic, quote, code, inline_code, link, image, and audio.
{
"answer": [
{
"title": "Higurashi",
"description": [
{ "type": "text", "value": "Higurashi is a great show!" },
{ "type": "quote", "value": "Source: my ass" },
{ "type": "link", "url": "https://example.com", "value": "Visit my website!" }
]
}
]
}
If an answer includes table, it is an associative object keyed by label.
Image results are returned under image. Each result contains one or more source entries with a URL, width, and height.
{
"image": [
{
"title": "My awesome Higurashi image",
"source": [
{ "url": "https://example.com/static/profile_pix.png", "width": 400, "height": 400 },
{ "url": "https://example.com/static/pixels.png", "width": 640, "height": 640 },
{ "url": "https://tse1.mm.bing.net/th?id=...", "width": 194, "height": 160 }
]
}
]
}
The last source entry is always the thumbnail, which makes a good fallback if larger sources fail.
Video results use the same general JSON structure as the other search endpoints. For live streams, time may be _LIVE and current viewers are exposed through views.
News search is straightforward:
GET /api/v1/news?s=elon+musk
The payload follows the same overall conventions as the other endpoints.
Each song result includes a stream object:
{
"stream": {
"endpoint": "sc",
"url": "https://api-v2.soundcloud..."
}
}
If endpoint is not linear, use the provided proxy route:
https://search.fsky.io/audio/<endpoint>?s=<url>
When endpoint is linear, the returned URL should already be a directly playable HTTP audio stream.
Fetches a site favicon. The only parameter is s, and it should include the protocol when a cache miss may happen.
GET /favicon?s=https://example.com
If the resolver falls back to Google's favicon cache, any related failure details are exposed in the X-Error header. Invalid domains return a placeholder image and HTTP 404.
Proxies an image so clients do not contact the upstream host directly. Parameters: i for the image URL and s for the size preset.
| Preset | Resolution |
| portrait | 90×160 |
| landscape | 160×90 |
| square | 90×90 |
| thumb | 236×180 |
| cover | 207×270 |
| original | Original resolution |
You can omit s to keep the original size. Errors are reported through the X-Error header.
Proxies a small audio file with the s parameter. Range requests are not supported.
Streams SoundCloud audio from the JSON m3u8 payload supplied through s. Clients must support an initial HTTP 302 and subsequent 206 Partial Content responses.
This route does not currently accept normal SoundCloud page URLs.
Accepts a Spotify track ID through s and returns the 30-second preview flow. Clients must follow the initial redirect to /audio/linear.
If you have any questions or need clarifications, please contact the operator of the instance you are using.