Přeskočit na obsah

FluoTest API Reference

Veřejné API FluoTestu je dostupné přes jeho MCP endpoint — JSON-RPC 2.0 API přes běžné HTTPS, které funguje s curl i jakýmkoli HTTP klientem, bez MCP knihovny. Ověřujete se osobním API klíčem.

Naposledy aktualizováno

Jak zavolám FluoTest API?

Vygenerujte si API klíč v Nastavení → Zabezpečení → API klíče a posílejte JSON-RPC požadavky metodou POST na https://fluotest.com/api/mcp s klíčem v hlavičce „Authorization: Bearer“. Dnes je k dispozici osm nástrojů: list_quizzes, create_quiz, get_quiz_questions, get_quiz_settings, update_quiz, publish_quiz, get_results a delete_quiz.

Získání API klíče#

API klíče jsou osobní — každý požadavek s klíčem jedná jako váš uživatelský účet se stejnými oprávněními, jaká máte v aplikaci.

  1. Otevřete Nastavení → Zabezpečení → API klíče ve svém FluoTest dashboardu.
  2. Zadejte název, podle kterého poznáte, kde se klíč používá (např. „Zapier skript“).
  3. Klikněte na Vygenerovat klíč a hodnotu fluo_… si hned zkopírujte.
  4. Uložte ji na bezpečné místo — do správce hesel nebo úložiště tajemství vašeho nástroje.
  • Zobrazí se jen jednou: Ukládá se pouze SHA-256 hash klíče — pokud ho ztratíte, zrušte ho a vygenerujte nový.
  • Až 10 klíčů: Vytvářejte samostatné klíče pro každý nástroj či skript, ať můžete jeden zrušit bez rozbití ostatních.
  • Kdykoli zrušitelné: Zrušení klíče platí okamžitě od dalšího požadavku.
  • Sledování použití: U každého klíče vidíte, kdy byl naposledy použit, takže staré klíče snadno najdete a uklidíte.

Ověřování#

Klíč posílejte s každým požadavkem v hlavičce Authorization:

Authorization: Bearer fluo_YOUR_API_KEY

Připojujete AI asistenta místo psaní kódu? Podívejte se na průvodce MCP serverem →

Formát požadavků#

Endpoint je https://fluotest.com/api/mcp. Posílejte požadavky POST s „Content-Type: application/json“, hlavičkou Accept „application/json, text/event-stream“ a tělem ve formátu JSON-RPC 2.0. Není potřeba žádný initialize handshake — tools/list a tools/call můžete volat přímo.

Odpovědi přicházejí jako server-sent-events: výsledek JSON-RPC je na řádku „data:“ a payload každého nástroje je JSON řetězec v result.content[0].text:

event: message
data: {"jsonrpc":"2.0","id":1,"result":{"content":[{"type":"text","text":"{\n  \"quiz_id\": \"…\",\n  \"status\": \"draft\", …}"}]}}

Ukázky#

Výpis dostupných nástrojů

curl -X POST https://fluotest.com/api/mcp \
  -H "Authorization: Bearer fluo_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'

Výpis vašich kvízů

curl -X POST https://fluotest.com/api/mcp \
  -H "Authorization: Bearer fluo_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{
    "jsonrpc": "2.0",
    "id": 3,
    "method": "tools/call",
    "params": { "name": "list_quizzes", "arguments": {} }
  }'

Vytvoření konceptu kvízu

curl -X POST https://fluotest.com/api/mcp \
  -H "Authorization: Bearer fluo_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "create_quiz",
      "arguments": {
        "title": "Customer readiness check",
        "questions": [
          { "text": "Do you have a budget?", "type": "yes_no", "points": 2 },
          {
            "text": "Company size?",
            "type": "multiple_choice",
            "options": [
              { "label": "1-10", "score": 1 },
              { "label": "11-50", "score": 2 },
              { "label": "50+", "score": 3 }
            ]
          }
        ]
      }
    }
  }'

Získání otázek kvízu

curl -X POST https://fluotest.com/api/mcp \
  -H "Authorization: Bearer fluo_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{
    "jsonrpc": "2.0",
    "id": 4,
    "method": "tools/call",
    "params": {
      "name": "get_quiz_questions",
      "arguments": { "quiz_id": "Customer readiness check" }
    }
  }'

Získání nastavení kvízu

curl -X POST https://fluotest.com/api/mcp \
  -H "Authorization: Bearer fluo_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{
    "jsonrpc": "2.0",
    "id": 8,
    "method": "tools/call",
    "params": {
      "name": "get_quiz_settings",
      "arguments": { "quiz_id": "Customer readiness check" }
    }
  }'

Úprava kvízu

curl -X POST https://fluotest.com/api/mcp \
  -H "Authorization: Bearer fluo_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{
    "jsonrpc": "2.0",
    "id": 5,
    "method": "tools/call",
    "params": {
      "name": "update_quiz",
      "arguments": {
        "quiz_id": "Customer readiness check",
        "questions": [
          { "text": "Do you have a budget?", "type": "yes_no", "points": 2 },
          { "text": "What's your budget range?", "type": "multiple_choice",
            "options": [
              { "label": "Under $1k", "score": 1 },
              { "label": "$1k-$10k", "score": 2 },
              { "label": "$10k+", "score": 3 }
            ]
          }
        ]
      }
    }
  }'

Publikování konceptu kvízu

curl -X POST https://fluotest.com/api/mcp \
  -H "Authorization: Bearer fluo_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{
    "jsonrpc": "2.0",
    "id": 6,
    "method": "tools/call",
    "params": {
      "name": "publish_quiz",
      "arguments": { "quiz_id": "Customer readiness check" }
    }
  }'

Získání výsledků kvízu

curl -X POST https://fluotest.com/api/mcp \
  -H "Authorization: Bearer fluo_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{
    "jsonrpc": "2.0",
    "id": 2,
    "method": "tools/call",
    "params": {
      "name": "get_results",
      "arguments": { "quiz_id": "Customer readiness check" }
    }
  }'

Smazání kvízu (s potvrzením)

curl -X POST https://fluotest.com/api/mcp \
  -H "Authorization: Bearer fluo_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{
    "jsonrpc": "2.0",
    "id": 7,
    "method": "tools/call",
    "params": {
      "name": "delete_quiz",
      "arguments": { "quiz_id": "Customer readiness check", "confirm": true }
    }
  }'

Chyby#

Problémy s ověřením používají HTTP stavové kódy s OAuth chybovým tělem (RFC 6750) a hlavičkou WWW-Authenticate. Ostatní HTTP chyby (neexistující endpoint, rate limit) vracejí application/problem+json (RFC 9457) se stabilním kódem a nápovědou. Problémy uvnitř volání nástroje se vracejí jako běžná JSON-RPC odpověď s nastaveným isError a vysvětlením v textovém obsahu.

StavVýznam
401Chybějící, neplatný nebo zrušený API klíč. Zkontrolujte hlavičku Authorization a že klíč v Nastavení stále existuje.
400Chybné JSON-RPC tělo. Zkontrolujte pole jsonrpc, id, method a params.
404Na této cestě není žádný endpoint. Tělo je application/problem+json s kódem not_found.
429Překročený rate limit. Tělo je application/problem+json s kódem rate_limited; počkejte počet sekund z hlavičky Retry-After.
200 + isErrorSelhalo samotné volání nástroje — např. název/ID kvízu, který nevlastníte, název odpovídající více vašim kvízům, úprava publikovaného kvízu bez confirm_edit_published: true, mazání kvízu bez confirm: true, nebo multiple_choice otázka s méně než 2 možnostmi. Textový obsah vysvětluje, co opravit.

Chybové kódy (application/problem+json)

Každé chybové tělo obsahuje type, title, status, code a většinou i detail a hint. URI v type odkazuje na odpovídající položku níže.

not_found
Cesta není API endpoint. Zdokumentované endpointy najdete v /openapi.json.
rate_limited
Příliš mnoho požadavků v aktuálním okně. Počkejte Retry-After sekund a zkuste to znovu.

Rate limity a verzování#

Každý API klíč nebo OAuth token může poslat 120 požadavků za minutu na /api/mcp (požadavky bez přihlašovacích údajů se počítají podle IP adresy). Každá odpověď nese RateLimit-Policy a RateLimit (formát IETF draftu) a také RateLimit-Limit, RateLimit-Remaining a RateLimit-Reset, takže můžete zpomalit dřív, než limit vyčerpáte. Nad limitem dostanete 429 s hlavičkou Retry-After.

HTTP/1.1 429 Too Many Requests
Content-Type: application/problem+json
RateLimit-Policy: "default";q=120;w=60
RateLimit: "default";r=0;t=17
Retry-After: 17

{"type":"https://fluotest.com/en/docs/api-reference#error-rate_limited","title":"Too Many Requests","status":429,"code":"rate_limited","hint":"Wait 17 seconds (Retry-After) before retrying."}

Transport je verzovaný hlavičkou MCP-Protocol-Version, která se vyjedná při initialize. Sada nástrojů se řídí sémantickým verzováním (pole version v /openapi.json): nové nástroje a nové volitelné argumenty se jen přidávají a nikdy nerozbijí existující volání.

Nekompatibilní změna vyjde pod novým názvem nástroje. Starý nástroj funguje ještě nejméně 90 dní; odpovědi, které ho používají, nesou hlavičku Deprecation a hlavičku Sunset s datem odstranění a změnu oznámíme v changelogu.

Časté dotazy#

Existuje rate limit?

Ano: 120 požadavků za minutu na API klíč nebo OAuth token na /api/mcp. Každá odpověď obsahuje hlavičky RateLimit se zbývajícím limitem a odpověď 429 v hlavičce Retry-After řekne, jak dlouho počkat.

Můžu místo API klíče použít OAuth?

Ano — OAuth je doporučený způsob připojení AI asistentů jako Claude, kdy uživatel schvaluje přístup na potvrzovací obrazovce. API klíče jsou jednodušší volba pro skripty a klienty, kteří jen posílají hlavičky. Nastavení OAuth najdete v průvodci MCP serverem.

Co dnes API umí?

Osm operací: list_quizzes, create_quiz, get_quiz_questions, get_quiz_settings, update_quiz (s potvrzovacím krokem pro úpravu publikovaných kvízů), publish_quiz, get_results a delete_quiz (s potvrzovacím krokem). Kdekoli se odkazujete na kvíz, můžete použít název, slug i ID. Další operace plánujeme — napište nám přes formulář zpětné vazby v dashboardu, co potřebujete.