Skip to content

API — Zadania

Endpointy do pobierania treści zadań, rozpoczynania, kończenia i przesyłania prac kreatywnych.

Wszystkie endpointy wymagają Authorization: Bearer <token>.

GET /app/tasks/:id

Pełne dane zadania z blokami treści (content blocks).

Response 200:

json
{
  "data": {
    "id": "task_vowel_o",
    "location_id": "loc_a_vowels",
    "title": "Litera O",
    "description": "Narysuj coś, co zaczyna się na literę O!",
    "type": "creative",
    "difficulty": "medium",
    "xp_reward": 15,
    "estimated_minutes": 5,
    "status": "available",
    "content_blocks": [
      {
        "type": "text",
        "body": "Litera **O** jest okrągła jak obręcz!"
      },
      {
        "type": "image",
        "url": "https://cdn.lumos-islands.pl/tasks/letter_o.png",
        "alt": "Litera O"
      },
      {
        "type": "audio",
        "url": "https://cdn.lumos-islands.pl/tasks/letter_o.mp3",
        "duration_seconds": 8
      },
      {
        "type": "prompt",
        "body": "Narysuj coś, co zaczyna się na literę O.",
        "input_type": "drawing"
      }
    ]
  }
}

Typy content blocks

TypPolaOpis
textbodyTekst (Markdown)
imageurl, altObrazek
audiourl, duration_secondsNagranie audio
videourl, duration_seconds, thumbnail_urlWideo
quizquestion, options[], correct_indexPytanie quiz
matchingpairs[]Pary do połączenia
orderingitems[]Elementy do uporządkowania
fill_blanktemplate, blanks[]Uzupełnianie luk
promptbody, input_typePolecenie pracy twórczej

Pole input_type w bloku prompt: drawing, photo, audio_recording, text_input.

POST /app/tasks/:id/start

Rozpoczyna zadanie — rejestruje czas startu.

Request: pusty body

Response 200:

json
{
  "data": {
    "task_id": "task_vowel_o",
    "started_at": "2026-03-08T10:00:00Z",
    "status": "in_progress"
  }
}

Błędy:

HTTPcodeKiedy
409ALREADY_STARTEDZadanie jest już w trakcie
403TASK_LOCKEDZadanie jest zablokowane

POST /app/tasks/:id/complete

Ukończ zadanie — przesyła odpowiedzi i zwraca nagrodę.

Request:

json
{
  "answers": [
    {
      "block_index": 3,
      "type": "quiz",
      "selected_index": 2
    }
  ],
  "time_spent_seconds": 142
}

Dla zadań kreatywnych pole answers może być puste (praca jest przesyłana osobno przez submit-creative).

Response 200:

json
{
  "data": {
    "task_id": "task_vowel_o",
    "completed_at": "2026-03-08T10:05:22Z",
    "correct_answers": 1,
    "total_questions": 1,
    "xp_earned": 15,
    "xp_bonus": 5,
    "total_xp": 20,
    "new_xp_total": 340,
    "level_up": {
      "new_level": 4,
      "level_name": "Odkrywca",
      "unlocked_items": ["hat_explorer"]
    },
    "badges_earned": [
      {
        "id": "badge_first_creative",
        "name": "Pierwszy Artysta",
        "icon_url": "https://cdn.lumos-islands.pl/badges/first_creative.png"
      }
    ],
    "unlocked_items": [
      {
        "id": "hat-pirate",
        "name": "Piracka czapka",
        "category": "hats",
        "thumbnail_url": "https://cdn.lumos-islands.pl/avatar/accessories/pirate_hat.png"
      }
    ],
    "location_completed": false
  }
}

Pole level_up jest obecne tylko gdy dziecko awansuje na nowy poziom. Pole badges_earned to tablica (może być pusta). Pole unlocked_items to tablica przedmiotów odblokowanych na statku kosmicznym (ubrania awatara, akcesoria, dekoracje pokoju) — może być pusta. Przedmioty odblokowywane są przez zdobycie odznak, osiągnięcie poziomu lub kamienie milowe (np. ukończenie N zadań).

POST /app/tasks/:id/submit-creative

Przesyła pracę twórczą (rysunek, zdjęcie, nagranie audio). Używa multipart/form-data.

Headers:

Authorization: Bearer <token>
Content-Type: multipart/form-data

Form fields:

PoleTypWymaganeOpis
filebinarytakPlik pracy (PNG, JPEG, MP3, MP4)
block_indexinttakIndeks bloku prompt w zadaniu
commentstringnieKomentarz dziecka

Response 201:

json
{
  "data": {
    "submission_id": "sub_x9y8z7",
    "task_id": "task_vowel_o",
    "file_url": "https://cdn.lumos-islands.pl/submissions/sub_x9y8z7.png",
    "submitted_at": "2026-03-08T10:04:00Z",
    "status": "submitted"
  }
}

Błędy:

HTTPcodeKiedy
400INVALID_FILE_TYPENieprawidłowy format pliku
413FILE_TOO_LARGEPlik przekracza 10 MB
409ALREADY_SUBMITTEDPraca już została przesłana dla tego bloku

Lumos Islands v2 - Dokumentacja Projektowa