These place the inputs, press whatever needs pressing, wait for the result and take it.

Most return the resulting item and count, and all fail with 409 when the station produces nothing — which the server does not otherwise report.

/brew and /beacon are the exceptions: they answer with the envelope alone. A 200 means the action completed, and there is no item to report because brewing changes bottles in place and a beacon has no output.

Every response below was captured from a live 26.2 server.

Opening what you need

Every endpoint on this page needs the right block open. Give it the position and it opens the block itself:

field type meaning
X, Y, Z int the block to work at; all three or none
face int which face to click, 0–5; defaults to the one facing the bot

With no position, the verb uses whatever window is already open, which is how it has always behaved. The window is left open afterwards, so a caller that opens once and acts several times still works.

It cannot find the block for you. The version tables carry item names and block classification, not block names, so “the nearest furnace” is not a question this client can answer.


POST /smelt

Works at a furnace, blast furnace or smoker.

Parameters

name type required default meaning
input string yes   what to smelt
fuel string yes   what to burn
count int no 1 how many to smelt
{
  "X": 7001, "Y": 100, "Z": 7000,
  "input": "raw_iron",
  "fuel": "coal",
  "count": 2
}
{
  "count": 2,
  "item": "minecraft:iron_ingot",
  "ok": true,
  "pitch": 48.2397,
  "x": 5000.5,
  "y": 100,
  "yaw": -90,
  "z": 5000.5
}

It waits for the smelt rather than assuming it, so count is what came out. An unsmeltable input produces nothing and no error on the wire; this reports it.


POST /anvil

Combines two items.

Parameters

name type required meaning
first string yes the item being upgraded
second string yes what is applied to it
curl -X POST localhost:8181/anvil \
  -d '{"first":"diamond_sword","second":"minecraft:enchanted_book"}'

POST /rename

Renames at an anvil.

Parameters

name type required meaning
item string yes what to rename
name string yes the new name
{
  "item": "minecraft:diamond_sword",
  "name": "Understudy"
}
{
  "count": 1,
  "item": "minecraft:diamond_sword",
  "ok": true,
  "pitch": 48.2397,
  "renamed_to": "Understudy",
  "x": 5000.5,
  "y": 100,
  "yaw": -90,
  "z": 5000.5
}

POST /grindstone

Strips enchantments.

Parameters

name type required meaning
item string yes what to strip
{
  "item": "minecraft:diamond_sword"
}
{
  "count": 1,
  "item": "minecraft:diamond_sword",
  "ok": true,
  "pitch": 48.2397,
  "x": 5000.5,
  "y": 100,
  "yaw": -90,
  "z": 5000.5
}

POST /enchant

Enchants at a table.

Parameters

name type required meaning
item string yes what to enchant
level int yes which of the three offers to take, 1–3

level is the offer slot, not the resulting enchantment level.

curl -X POST localhost:8181/enchant -d '{"item":"diamond_sword","level":3}'

POST /smith

Upgrades at a smithing table.

Parameters

name type required meaning
template string yes the smithing template
base string yes the item being upgraded
addition string yes the material
curl -X POST localhost:8181/smith -d '{
  "template":"netherite_upgrade_smithing_template",
  "base":"diamond_pickaxe",
  "addition":"netherite_ingot"}'

Note that the vanilla statistic interact_with_smithing_table counts opening the table, not completing an upgrade. If you are asserting that something was smithed, assert on the resulting item.


POST /loom

Applies a banner pattern.

Parameters

name type required default meaning
banner string yes   the banner
dye string yes   the dye
pattern_item string no   for patterns that need a pattern item
index int no 0 which of the offered patterns to take
{
  "banner": "minecraft:white_banner",
  "dye": "minecraft:red_dye",
  "index": 0
}
{
  "count": 1,
  "item": "minecraft:white_banner",
  "ok": true,
  "pitch": 48.2397,
  "x": 5000.5,
  "y": 100,
  "yaw": -90,
  "z": 5000.5
}

POST /brew

Brews at a stand.

Parameters

name type required default meaning
bottle string yes   the bottles to brew into
ingredient string yes   what to brew with
fuel string yes   blaze powder
count int no 1 how many bottles
{
  "bottle": "minecraft:potion",
  "ingredient": "minecraft:nether_wart",
  "fuel": "minecraft:blaze_powder",
  "count": 1
}
{
  "ok": true,
  "pitch": 48.2397,
  "x": 5000.5,
  "y": 100,
  "yaw": -90,
  "z": 5000.5
}

The bottle must be a water bottle, which is minecraft:potion carrying a potion_contents component. A bare minecraft:potion is an empty potion item and brews nothing, which the stand reports as silence and this reports as a timeout naming the ingredient.


POST /cartography

Extends, copies or locks a map.

Parameters

name type required meaning
map string yes the map item
applied string yes paper, an empty map, or a glass pane
curl -X POST localhost:8181/cartography -d '{"map":"filled_map","applied":"paper"}'

POST /beacon

Sets a beacon’s effects.

Parameters

name type required meaning
payment string yes the ingot or gem to pay with
primary int yes the primary effect id
secondary int no the secondary effect id

Effect ids are the registry’s own, the same numbers effects reports in GET /state.

curl -X POST localhost:8181/beacon \
  -d '{"payment":"netherite_ingot","primary":1,"secondary":0}'

Back to top

understudy-client — Apache-2.0. Minecraft is a trademark of Mojang Synergies AB; this project is not affiliated with, endorsed by, or connected to Mojang or Microsoft.

This site uses Just the Docs, a documentation theme for Jekyll.