4get API documentation

This page covers the public JSON endpoints and media proxy routes exposed by this instance.

Terms of use

Please do not misuse the API. Misuse can include:

  1. SERP scraping for SEO monitoring
  2. Intensive scraping
  3. Any other activity that is not triggered by a human
  4. Illegal activities
  5. Constant "test" queries while developing your program (please cache API responses)

Examples of good uses of the API:

  1. A chatroom bot that presents users with search results
  2. Personal use
  3. Any other activity that is initiated by a human

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!

Overview

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.

Pagination

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.

Search endpoints

GET/ami4get

Returns basic metadata about the 4get instance. CORS requests are allowed on this endpoint.

GET/api/v1/web

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.

GET/api/v1/images

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.

GET/api/v1/videos

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.

GET/api/v1/news

News search is straightforward:

GET /api/v1/news?s=elon+musk

The payload follows the same overall conventions as the other endpoints.

GET/api/v1/music

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.

Media and proxy endpoints

GET/favicon

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.

GET/proxy

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
portrait90×160
landscape160×90
square90×90
thumb236×180
cover207×270
originalOriginal resolution

You can omit s to keep the original size. Errors are reported through the X-Error header.

GET/audio/linear

Proxies a small audio file with the s parameter. Range requests are not supported.

GET/audio/sc

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.

GET/audio/spotify

Accepts a Spotify track ID through s and returns the 30-second preview flow. Clients must follow the initial redirect to /audio/linear.

Appendix

If you have any questions or need clarifications, please contact the operator of the instance you are using.