diff --git a/31_api_heroes/calculator.py b/31_api_heroes/calculator.py
new file mode 100644
index 0000000..dd95ac5
--- /dev/null
+++ b/31_api_heroes/calculator.py
@@ -0,0 +1,70 @@
+from flask import Flask, jsonify
+
+app = Flask(__name__)
+
+@app.route("/")
+def index():
+ return """
+
+ - /secti/A/B
+ - /odecti/A/B
+ - /vynasov/A/B
+ - /vydel/A/B
+ - /mocnina/zaklad/exponent
+
+ """
+
+@app.route("/secti//")
+def add(a,b):
+ vysledek = a+b
+ return jsonify({
+ "operace":"soucet",
+ "vstup":{"a":a,"b":b},
+ "vysledek":vysledek
+ })
+
+@app.route("/odecti//")
+def subtract(a,b):
+ vysledek = a-b
+ return jsonify({
+ "operace":"odčítání",
+ "vstup":{"a":a,"b":b},
+ "vysledek":vysledek
+ })
+
+@app.route("/vynasob//")
+def multiply(a,b):
+ vysledek = a*b
+ return jsonify({
+ "operace":"násobení",
+ "vstup":{"a":a,"b":b},
+ "vysledek":vysledek
+ })
+
+@app.route("/vydel//")
+def divide(a,b):
+ if b == 0:
+ return jsonify({
+ "operace":"dělení",
+ "vstup":{"a":a,"b":b},
+ "chyba":"Dělení nulou není povolené"
+ }), 400 #HTTP 400 je Bad Request
+ vysledek = a/b
+ return jsonify({
+ "operace":"dělení",
+ "vstup":{"a":a,"b":b},
+ "vysledek":vysledek
+ })
+
+@app.route("/mocnina//")
+def mocnina(zaklad,exponent):
+ vysledek = zaklad**exponent
+ return jsonify({
+ "operace":"mocnina",
+ "vstup":{"základ":zaklad,"exponent":exponent},
+ "vysledek":vysledek
+ })
+
+if __name__ == "__main__":
+ print("Server beží na http://localhost:8080")
+ app.run(host="0.0.0.0",port=8080,debug=True)
\ No newline at end of file
diff --git a/31_api_heroes/main.py b/31_api_heroes/main.py
new file mode 100644
index 0000000..2079ab7
--- /dev/null
+++ b/31_api_heroes/main.py
@@ -0,0 +1,68 @@
+from flask import Flask, jsonify
+import random
+
+app = Flask(__name__)
+
+# AltGR + F|G = [|]
+# AltGR + B|N = {|}
+hrdinove = [
+ #{"jmeno":"","rasa":"","hp":100,"level":20}
+ {"jmeno":"Aragorn","rasa":"clovek","hp":100,"level":20},
+ {"jmeno":"Legolas","rasa":"elf","hp":80,"level":18},
+ {"jmeno":"Gimli","rasa":"trpaslik","hp":120,"level":21},
+ {"jmeno":"Frodo","rasa":"hobbit","hp":40,"level":5},
+ {"jmeno":"Gandalf","rasa":"clovek","hp":150,"level":50},
+ {"jmeno":"Sauron","rasa":"demon","hp":500,"level":100}
+]
+
+@app.route("/")
+def index():
+ """Hlavní stránka s rozcesníkem"""
+ # AltGR + ,|. = <|>
+ return """
+ RPG Heroes API Server
+
+ - Všichni hrdinové: /api/heroes
+ - Náhodný hrdina: /api/heroes/random
+ - Konkretní hrdnina: /api/heroes/ČÍSLO
+ - Filtrovat podle rasy (např.elf): /api/heroes/filter/elf
+
+ """
+
+@app.route("/api/heroes")
+def get_all_heroes():
+ """Vrátí celý seznam hrdinů jako JSON"""
+ return jsonify(hrdinove)
+
+@app.route("/api/heroes/random")
+def get_random_hero():
+ """Vrátí náhodného hrdinu jako JSON"""
+ nahodny = random.choice(hrdinove)
+ return jsonify(nahodny)
+
+@app.route("/api/heroes/")
+def get_hero_by_id(hero_id):
+ """Vrátí hrdinu dle jeho indexu v seznamu poli(array)"""
+ if 0 <= hero_id < len(hrdinove):
+ return jsonify(hrdinove[hero_id])
+ else:
+ return jsonify({"chyba":"Hrdina s tímto ID neexistuje"}), 404
+
+@app.route("/api/heroes/filter/")
+def filter_heroes_by_race(rasa):
+ """Vrátí hrdiny, kteří odpovídají zadané rase"""
+ vysledek = []
+ for hrdina in hrdinove:
+ if hrdina["rasa"].lower() == rasa.lower():
+ vysledek.append(hrdina)
+ if not vysledek:
+ return jsonify({"chyba":f"Žádný hrnina rasy '{rasa}'"})
+ return jsonify(vysledek)
+
+
+
+if __name__ == "__main__":
+ print("--- HERO SERVER NASTARTOVÁN ---")
+ print("Server běží na http://localhost:8080")
+ print("Vypnout server -> CTRL + C")
+ app.run(host="0.0.0.0",port=8080,debug=True)
\ No newline at end of file