Macrolizer Agent API
2026-10-10
A Macrolizer Agent API verziózott, determinisztikus JSON felület gépeknek és automatizálásoknak. A PAT-es és az általános OpenAPI-kliensek szerződése a teljes OpenAPI. A ChatGPT Action és Plugin a szűkített chatgpt/openapi.json dokumentumot és OAuth 2.1-et használ. A felfedezés a .well-known manifestből indul.
Felfedezés
Manifest: GET /.well-known/macrolizer.json — apiBase, OpenAPI URL, auth módok és az MCP útvonal.
Teljes OpenAPI: GET /api/agent/v1/openapi.json. Ez a személyes API-kulcs (PAT) és az OAuth-kliensek szerződése. A securitySchemes alatt Bearer PAT és oauth2 is szerepel, műveletenként a szükséges scope-pal.
ChatGPT Action és Plugin: GET /.well-known/ai-plugin.json, a 8 műveletes GET /api/agent/v1/chatgpt/openapi.json, és OAuth 2.1. Ezek nem a teljes OpenAPI-t hívják.
Az API-t, az MCP-t és a plugin-felfedezést a https://macrolizer.hu originről hívd. A macrolizer.app apex egyes útvonalakon 308-cal a www-re mehet; MCP-bázisnak ne add meg, amíg ez a redirect nem garantált.
Belépési utak ágenseknek
ChatGPT Plugin és Action (ajánlott ChatGPT-hez): dedikált manifest (/.well-known/ai-plugin.json) és szűkített, 8 műveletes OpenAPI (/api/agent/v1/chatgpt/openapi.json) OAuth 2.1 (PKCE S256) hitelesítéssel. A fiók összekötése a /hu/settings/chatgpt oldalon történik.
Személyes API-kulcs (Bearer PAT — Claude, Cursor, szkriptek, egyéb kliensek): a /hu/settings/api-key oldalon generált mlz_pat_... tokennel a teljes OpenAPI hívható (/api/agent/v1/openapi.json). Új kulcs alapból csak diary:read. Profilhoz és testsúlyhoz profile:read, katalógushoz diary:read vagy catalog:read, íráshoz diary:write, az összehasonlító listához compare:write kell.
Az OAuth token csak az MCP címre szól (/api/mcp). Ha a közönség az agent API bázisa vagy a site origin, a refresh és a bearer ellenőrzés elutasítja, és az appot újra össze kell kötni.
Cursor és MCP: állapotmentes POST /api/mcp, streamable-http transzport, minden kérésnél Bearer token (PAT vagy OAuth 2.1). Az MCP 25 toolt ad, köztük a restore_item-et és az összehasonlítást (get_compare, add_compare_item, remove_compare_item, clear_compare). A ChatGPT felület 8 művelet, az összehasonlítás nincs benne. A get_me a profilt adja, benne a ma érvényes étrendet (eatingStyle), csak olvasásra.
Az étkezéscsoport átnevezése, tételmozgatás, összevonás és szétválasztás (rename_meal, move_diary_items, merge_meals, split_meal) MCP-n és REST-en is elérhető: PATCH /api/agent/v1/meals/groups/{id}, POST /api/agent/v1/meals/groups/{id}/items, POST /api/agent/v1/meals/groups/merge, POST /api/agent/v1/meals/groups/{id}/split. A ChatGPT 8 művelete ezeket nem tartalmazza. Mindegyik íráshoz diary:write, agents_can_write és Idempotency-Key kell.
Hiányzó adat
Ismeretlen ár, mennyiség vagy tápérték nem hiba: a mező értéke null, nem becsült szám. A rost (fiberG) és a nettó szénhidrát (netCarbG) ugyanígy null, ha nem ismert. Napi és heti összeg csak akkor szám, ha minden tétel számolható. Az étkezéscsoport totaljai coverage mezőt is kapnak: complete, partial vagy none.
A katalógus- és naplótételek weightBasis mezője jelzi az alapanyag állapotát (dry, cooked vagy null); ha a felhasználó főtt mennyiséget ad meg, a főtt (*-fott) tételt kell választani, száraz tételre soha ne naplózzunk főtt tömeget.
Ha szükséges, kiegészítő magyarázó mező (pl. missingReason) jelzi, miért hiányzik az adat.
Hibakódok
Egységes boríték: { "error": { "code", "message", "details?" } }. HTTP státusz és code együtt értelmezendő.
Kódkészlet: unauthorized, forbidden, invalid, not_found, conflict, rate_limited, internal.
- unauthorized — hiányzó vagy érvénytelen Bearer token
- forbidden — nincs jogosultság a scope-hoz
- invalid — hibás paraméter vagy body
- not_found — ismeretlen erőforrás
- conflict — ütközés (pl. nap revision)
- rate_limited — túl sok kérés
- internal — váratlan szerverhiba
Locale és ország
Az ágens API nem sütiből olvas locale/country értéket. Feloldási sorrend: query (locale, country) → Accept-Language / X-Market-Country → mentett profil → hu.