Slik fungerer det
- Registrer deg på AI Camp og meld deg på konkurransen
- Hent token fra Min Side etter påmelding
- Start spillet med
POST /api/escape/start - Løs 5 rom ved å sende handlinger mot API-et
- Escape! — tid, hint og antall handlinger avgjør plassering
Autentisering
Alle endepunkter unntatt leaderboard krever et Bearer-token i Authorization-headeren:
Authorization: Bearer <din-token>
Hent tokenet ditt fra Min Side på aicamp.no etter at du har meldt deg på konkurransen.
Rate limit: Maks 10 forespørsler per 5 sekunder (~2 req/s). For mange forespørsler gir 429 Too Many Requests.
Kom i gang
Python (kun standardbibliotek)
import urllib.request, json, os
TOKEN = os.environ["AICAMP_TOKEN"]
BASE = "https://aicamp.no"
def api(method, path, body=None):
req = urllib.request.Request(
BASE + path,
method=method,
data=json.dumps(body).encode() if body else None,
headers={
"Authorization": f"Bearer {TOKEN}",
"Content-Type": "application/json",
}
)
with urllib.request.urlopen(req) as r:
return json.loads(r.read())
# Start spillet og se første rom
result = api("POST", "/api/escape/start")
print(result["room"]["description"])
print("Objekter:", result["room"]["objects"])
curl
export TOKEN="din-token-her"
# Start spillet
curl -X POST https://aicamp.no/api/escape/start \
-H "Authorization: Bearer $TOKEN"
# Se nåværende rom
curl https://aicamp.no/api/escape/room \
-H "Authorization: Bearer $TOKEN"
De 5 rommene
| Rom | Navn | Utfordring |
|---|---|---|
| 1 | Lobbyen | Finn nøkkel, lås opp dør (oppvarming) |
| 2 | Serverrommet | Dekod base64-melding, tast kode på keypad |
| 3 | Arkivet | 100 dokumenter, maks 10 søk, følg sporekjede |
| 4 | Labyrinten | 7x7 grid, begrenset sikt, naviger til utgang |
| 5 | Vakten | Overbevis vakt via samtale (3 av 4 kategorier) |
API-endepunkter
| Metode | Endepunkt | Beskrivelse |
|---|---|---|
| POST | /api/escape/start | Start eller gjenoppta spillet |
| GET | /api/escape/room | Se nåværende rom og tilgjengelige objekter |
| POST | /api/escape/action | Utfør en handling i rommet |
| GET | /api/escape/inventory | Se gjenstander du bærer |
| POST | /api/escape/hint | Bruk hint for gjeldende rom (maks 3 totalt) |
| GET | /api/escape/leaderboard | Se resultatlisten (ingen autentisering kreves) |
Handlingstyper
| Action | Påkrevde felter | Brukes i |
|---|---|---|
examine | target (objekt-navn) | Alle rom |
use | item, target | Lobby, Serverrom, Arkiv |
search | query (søkeord) | Arkivet |
move | direction (north/south/east/west) | Labyrinten |
talk | message (tekst til vakten) | Vakten |
Eksempler
Start spillet
curl -X POST https://aicamp.no/api/escape/start \
-H "Authorization: Bearer $TOKEN"
{
"message": "Velkommen til Escape Room! Du befinner deg i en forlatt lobby.",
"game": {
"id": 1,
"room_id": "lobby",
"started_at": "2026-01-01T10:00:00.000Z",
"hints_used": 0,
"actions_count": 0,
"completed": false
},
"room": {
"id": "lobby",
"name": "Lobbyen",
"description": "Du står i en støvete lobby. Resepsjonen er forlatt...",
"objects": ["desk", "plant", "door", "coat_rack"]
}
}
Kall dette endepunktet på nytt for å gjenoppta et allerede startet spill — game.completed viser om du er ferdig.
Undersøk et objekt
curl -X POST https://aicamp.no/api/escape/action \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"action": "examine", "target": "plant"}'
{
"success": true,
"message": "Du graver i jorden rundt potteplanten. Under bladene finner du en liten messingnøkkel!",
"game": {
"room_id": "lobby",
"actions_count": 1,
"hints_used": 0,
"completed": false
},
"inventory": ["key"]
}
Bruk en gjenstand
curl -X POST https://aicamp.no/api/escape/action \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"action": "use", "item": "key", "target": "door"}'
{
"success": true,
"message": "Nøkkelen passer! Du hører et klikk og døren glir opp.",
"game": {
"room_id": "server_room",
"actions_count": 2,
"hints_used": 0,
"completed": false
},
"room_changed": true,
"room": {
"id": "server_room",
"name": "Serverrommet",
"description": "Blinkende LED-lys og brusende vifter fyller rommet...",
"objects": ["servers", "terminal", "whiteboard", "keypad"]
}
}
Når room_changed er true er du i et nytt rom. Det nye romobjektet viser hvilke objekter du kan undersøke.
Søk i Arkivet
curl -X POST https://aicamp.no/api/escape/action \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"action": "search", "query": "Aurora"}'
{
"success": true,
"message": "Fant 3 dokument(er) som matcher \"Aurora\". 9 søk gjenstår.",
"results": [
{
"id": "DOC-012",
"title": "Prosjektnotat: Aurora",
"content": "Prosjekt Aurora initiert av Dr. Eriksen..."
}
],
"searches_remaining": 9,
"game": { "actions_count": 5 }
}
Du har 10 søk totalt i arkivet. Velg søkeord strategisk.
Navigér i Labyrinten
curl -X POST https://aicamp.no/api/escape/action \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"action": "move", "direction": "south"}'
{
"success": true,
"message": "Du beveger deg sørover.",
"position": { "row": 2, "col": 1 },
"visible": {
"north": "path",
"south": "path",
"east": "wall",
"west": "wall"
},
"game": { "actions_count": 8 }
}
Bruk visible-feltet til å kartlegge labyrinten. Verdier: path, wall, exit.
Snakk med Vakten
curl -X POST https://aicamp.no/api/escape/action \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"action": "talk", "message": "Jeg er autorisert ansatt på et kritisk vedlikeholdsoppdrag fra direktøren."}'
{
"success": true,
"message": "Vakten nikker sakte. \"Greit, det hores legitimt ut.\" Han trekker seg til side...",
"game": {
"room_id": "guard",
"actions_count": 15,
"hints_used": 0,
"completed": true
},
"completion": {
"time_seconds": 142,
"hints_used": 0,
"actions_count": 15,
"message": "Gratulerer! Du rømte på 142 sekunder med 0 hints og 15 handlinger!"
}
}
Vakten må overbevises i minst 3 av 4 kategorier: identitet, formål, hastverk og autoritet.
Se inventar
curl https://aicamp.no/api/escape/inventory \
-H "Authorization: Bearer $TOKEN"
{
"inventory": ["key"],
"count": 1
}
Bruk hint
curl -X POST https://aicamp.no/api/escape/hint \
-H "Authorization: Bearer $TOKEN"
{
"hint": "Se nøye på alt i rommet. Noen gjenstander skjuler noe i seg.",
"hints_used": 1,
"hints_remaining": 2,
"room_id": "lobby"
}
Du har 3 hints totalt for hele spillet. Hvert hint er mer spesifikt enn det forrige.
Leaderboard
# Alle resultater
curl https://aicamp.no/api/escape/leaderboard
# Filtrert og begrenset
curl "https://aicamp.no/api/escape/leaderboard?limit=10"
{
"leaderboard": [
{
"rank": 1,
"name": "Team Alpha",
"time_seconds": 98,
"time_formatted": "1m 38s",
"hints_used": 0,
"actions_count": 12,
"completed_at": "2026-05-01T10:01:38.000Z"
}
],
"total": 1
}
Feilkoder
| Statuskode | Kode | Beskrivelse |
|---|---|---|
400 | — | Ugyldig handling eller manglende felter |
401 | — | Ugyldig eller manglende token |
404 | — | Spillet er ikke startet — kall /api/escape/start først |
429 | — | For mange forespørsler — vent litt og prøv igjen |
500 | — | Serverfeil |
Alle feilsvar har formen {"error": "Forklaring..."}.
Scoring
- Primær: Tid fra start til escape (lavere er bedre)
- Sekundær: Hint brukt (færre er bedre)
- Tertiær: Totalt antall handlinger (færre er bedre)
Regler
- Varighet: 48 timer
- Lag: 1–3 personer
- Hint: Maks 3 per spill (påvirker score)
- Rate limit: 2 forespørsler per sekund per lag
- Hjelpemidler: Alle AI-verktøy og biblioteker er tillatt
- Stack: Fritt valg — Python, Node, curl, hva som helst
Tips
- Start med
examinepå alle objekter i hvert rom for å forstå konteksten - Følg sporene — hvert rom har én logisk løsning som avslører seg gradvis
- Bruk hint strategisk — de koster poeng men kan spare mange handlinger
- Les responsens
message-felt nøye — det inneholder alltid ledetråder - Arkivet: du har bare 10 søk — prøv spesifikke navn eller kodeord
- Labyrinten: kartlegg systematisk ved å bruke
visible-feltet i hvert steg - Vakten: ta opp identitet, formål, hastverk og autoritet i én eller flere meldinger
- En autonom AI-agent som løser alle 5 rom automatisk vil alltid slå manuell kjøring