API Documentation

SeedFinder is a REST API that locates Minecraft Bedrock structures from a seed and player position. Everything returns JSON.

Overview

All endpoints below are reachable at https://www.mineseedfinder.com and return JSON. The search walks the generation regions around the player, checks biomes through cubiomes and sorts the results by distance.

Rate limit. The hosted API has a rate limit of 60 requests per IP per minute. A local server (http://127.0.0.1:7890) has no such limit.

Base URL

https://www.mineseedfinder.com

Endpoint GET /status

Health check.

200 response:

{
  "status": "ok"
}

500 response:

{
  "status": "error",
  "message": "..."
}

Endpoint GET / POST /scan

Scans for structures near the given position. Accepts both GET (query string) and POST.

Editions. Three paths share this handler: /scan (edition comes from the mc parameter below, default Bedrock), /scan/java (Java fixed) and /scan/bedrock (Bedrock fixed). On the fixed paths mc is silently ignored. The response shape is identical across editions; e.g. /scan?seed=31415&mc=java and /scan/java?seed=31415 return the same thing.

Parameters

ParameterTypeDefaultDescription
seed int (uint64) 0 The world seed.
x float 0 Player X coordinate, in blocks.
z float 0 Player Z coordinate, in blocks.
radius int 100 Search radius in chunks. Values below 1 are rejected with 400; values above 1000 are clamped to the maximum.
max int 20 Maximum results. Values below 1 are rejected with 400; values above 200 are clamped to the maximum.
types string 5 Comma-separated structure IDs.
mc string bedrock Edition, only on /scan: first letter decides — j… (e.g. java) for Java, b… for Bedrock, case-insensitive; anything else returns 400; absent means Bedrock. Ignored on /scan/java and /scan/bedrock.
Any missing or invalid parameter is replaced by its default. A missing_or_invalid array appears only in error responses, listing the parameters that were absent or invalid; successful responses contain only results.
On POST, send the same parameters in a JSON body ({"seed": 31415, "x": 0, ...}) or as form data; the query string also still works. GET behavior is unchanged.

POST example:

curl -X POST https://www.mineseedfinder.com/scan \
  -H "Content-Type: application/json" \
  -d '{"seed": 31415, "x": 0, "z": 0, "radius": 100, "max": 50, "types": "5,8,9"}'

Example 200 response:

{
  "results": [
    { "distance": 34.5, "name": "mansion", "x": 520, "z": 216 },
    { "distance": 56.5, "name": "village", "x": -360, "z": -840 },
    { "distance": 73.7, "name": "village", "x": 168, "z": 1176 },
    { "distance": 84.4, "name": "village", "x": 136, "z": -1352 },
    { "distance": 91.4, "name": "village", "x": -1448, "z": -264 }
  ]
}

400 error (invalid parameter):

{
  "error": "Invalid parameter: ...",
  "missing_or_invalid": ["seed"]
}

503 error (native library not loaded):

{
  "error": "SeedFinder native library (.so) not loaded on this server.",
  "hint": "Check Vercel build logs for messages starting with [seedfinder].",
  "missing_or_invalid": [],
  "results": []
}

Structure IDs

The types parameter accepts comma-separated IDs from the table below. For example, Outpost is 10 and Village is 5.

IDNameIDName
1Desert Pyramid 11Ruined Portal
2Jungle Temple 12Ruined Portal (Nether)
3Swamp Hut 13Ancient City
4Igloo 14Buried Treasure
5Village 15Mineshaft
6Ocean Ruin 10Pillager Outpost
7Shipwreck 23Trail Ruins
8Ocean Monument 24Trial Chambers
9Woodland Mansion

Live example

Click to open the request below - it looks for villages, monuments and mansions within 100 chunks of spawn on seed 31415:

Open request ▸
https://www.mineseedfinder.com/scan?seed=31415&x=0&z=0&radius=100&max=50&types=5,8,9

Example response:

{"results":[{"distance":34.5,"name":"mansion","x":520,"z":216},{"distance":56.5,"name":"village","x":-360,"z":-840},{"distance":73.7,"name":"village","x":168,"z":1176},{"distance":84.4,"name":"village","x":136,"z":-1352},{"distance":91.4,"name":"village","x":-1448,"z":-264}]}

Client examples

Pick a language below to see how to call /scan with requests (Python), network.get (Lua, e.g. inside Flarial Client) or the native https module (Node.js).

import requests

BASE = "https://www.mineseedfinder.com"

def scan(seed, x=0, z=0, radius=100, max_=20, types="5"):
    params = {
        "seed": seed,
        "x": x,
        "z": z,
        "radius": radius,
        "max": max_,
        "types": types,  # comma-separated structure IDs, e.g. "5,8,9"
    }
    r = requests.get(f"{BASE}/scan", params=params, timeout=15)
    r.raise_for_status()
    return r.json()

if __name__ == "__main__":
    data = scan(seed=31415, x=0, z=0, radius=100, max_=50, types="5,8,9")
    for s in data.get("results", []):
        print(f"{s['name']:<14} (x={s['x']}, z={s['z']}) dist={s['distance']}")

Attribution

Using this API, or showing what it returns, in your own project, bot or website? No sign-up and no permission needed - just credit the service with a powered by SeedFinder line linking to the home page, wherever you show the results.

<a href="https://www.mineseedfinder.com/">powered by SeedFinder</a>