{"apiVersion":"0.6","ok":true,"routes":[{"method":"GET","path":"/health","what":"Is AgentFlow up (no token needed; NeuronEV is not asked)"},{"method":"GET","path":"/routes","what":"This list (GET / gives it too, except to a browser, which goes to the dashboard)"},{"method":"GET","path":"/skill","what":"The AgentFlow skill for Hermes (SKILL.md, as text): the latest one, to install or replace its own copy"},{"method":"GET","path":"/skill/neuronev","what":"The NeuronEV skill for Hermes (SKILL.md, as text), as the NeuronEV side keeps it (NEURONEV_SKILL_FILE)"},{"method":"GET","path":"/agents","what":"Agent-site logins (labels and usernames, never passwords)"},{"method":"GET","path":"/files","what":"The kept files (weekly bet lists, statements) by week, newest first, each with its download address (?week=last|<week>&agent=&kind=betlist|statement)"},{"method":"GET","path":"/files/:id/:name","what":"Download one kept file"},{"method":"GET","path":"/files/week/:week.zip","what":"Download a whole week's files as one zip (?agent=)"},{"method":"GET","path":"/accounts","what":"The member accounts AgentFlow created, with login, password, status and credit (?status=ready&platform=sbo&login=)"},{"method":"POST","path":"/jobs/:platform/:action","what":"Start an agent-site job: { ...input, agent? } (agent only when the platform has several) -> { jobId, agent }"},{"method":"GET","path":"/jobs/:id","what":"A job: status, steps, needsYou, result or error"},{"method":"GET","path":"/jobs","what":"Newest jobs (?limit=20)"},{"method":"GET","path":"/pipelines","what":"Every pipeline (a whole piece of work started by one call) and its input"},{"method":"POST","path":"/pipelines/:name","what":"Start a pipeline, e.g. create-accounts { count, credit }: picks the agent itself -> { jobId }"},{"method":"GET","path":"/dashboard","what":"The dashboard page (asks for the token in the browser)"},{"method":"GET","path":"/admin/overview","what":"For the dashboard: AgentFlow, agents and their Chrome, jobs, requests, logs, MongoDB, the NeuronEV link"},{"method":"GET","path":"/admin/requests","what":"For the dashboard: the latest API calls (?after=<seq>&limit=200)"},{"method":"GET","path":"/admin/logs","what":"For the dashboard: AgentFlow's latest log lines (?after=<seq>&level=&limit=500)"},{"method":"GET","path":"/central/status","what":"Health of NeuronEV: brain, odds feeds, accounts, autobet presets and executor, unresolved bets, warnings"},{"method":"GET","path":"/central/params","what":"Every autobet preset param: type, allowed values, meaning"},{"method":"GET","path":"/central/presets","what":"Autobet presets with their params"},{"method":"GET","path":"/central/presets/:id","what":"One autobet preset"},{"method":"GET","path":"/central/presets/:id/opportunities","what":"What the brain allows for a preset right now, with the stake it would bet (?limit=20)"},{"method":"POST","path":"/central/presets/create","what":"Copy a preset: { from, id?, name?, params? } (autobet starts OFF)"},{"method":"POST","path":"/central/presets/:id/update","what":"Change a preset: { name?, enabled?, params?, copyParamsFrom? }"},{"method":"POST","path":"/central/presets/:id/autobet","what":"Switch a preset's autobet: { on: true | false }"},{"method":"POST","path":"/central/presets/:id/select","what":"Show this preset in the dashboards' params panel"},{"method":"POST","path":"/central/presets/:id/delete","what":"Delete a preset (autobet must be OFF)"},{"method":"POST","path":"/central/autobet/stop-all","what":"Switch autobet OFF on every preset"},{"method":"GET","path":"/central/executor","what":"What Central's autobet executor is doing and why it is not betting"},{"method":"POST","path":"/central/executor/update","what":"Change the autobet executor fallback poll: { cycleMs } (200 - 10000); it also runs on every odds change"},{"method":"GET","path":"/central/ev-settings","what":"EV terminal settings"},{"method":"POST","path":"/central/ev-settings/update","what":"Change EV terminal settings: { minEv?, minFuzzScore?, capital?, kellyMultiplier?, targetPlatform?, hideClockMismatch? }"},{"method":"GET","path":"/central/ev","what":"Current EV opportunities (?platform=sbo&limit=20)"},{"method":"GET","path":"/central/matches","what":"Matches in the odds feeds by team or league (?q=arsenal&platform=sbo), with what each is matched with"},{"method":"GET","path":"/central/matches/:platform/:eventId","what":"One match with every market and price (the odds grid)"},{"method":"GET","path":"/central/matched","what":"Matched pairs (?q=&filter=kickoff-mismatch|inverted&limit=50), with counts"},{"method":"GET","path":"/central/unmatched","what":"Games the brain paired with nothing (?platform=sbo&q=&limit=50)"},{"method":"GET","path":"/central/unmatched/candidates","what":"The other book's unmatched games for linking, nearest kickoff first (?platform=sbo&eventId=&q=)"},{"method":"GET","path":"/central/team-links","what":"Team links (PS3838 name = SBO name)"},{"method":"POST","path":"/central/team-links/add","what":"Link two team names: { ps3838, sbo } or { links: [{ ps3838, sbo }] }"},{"method":"POST","path":"/central/team-links/link-games","what":"Link both teams of two games that are the same: { ps3838EventId, sboEventId, swapped? }"},{"method":"POST","path":"/central/team-links/remove","what":"Remove a team link: { ps3838, sbo }"},{"method":"GET","path":"/central/bets","what":"Bet history (?status=UNKNOWN,WAITING&platform=sbo&account=&mode=AUTO&since=today&limit=20)"},{"method":"GET","path":"/central/bets/summary","what":"Bet counts and stakes by status and platform (?since=today)"},{"method":"GET","path":"/central/bets/:id","what":"One bet: its whole record and timeline"},{"method":"POST","path":"/central/bets/:id/resolve","what":"Record what My Bets on the site shows for an UNKNOWN bet: { outcome: \"ACCEPTED\" | \"NOT_PLACED\" }"},{"method":"POST","path":"/central/bets/clear","what":"Delete every finished bet from the bet history (unresolved bets stay)"},{"method":"GET","path":"/central/autobet-logs","what":"The autobet activity log, newest first (?limit=20)"},{"method":"POST","path":"/central/autobet-logs/clear","what":"Delete the autobet activity log"},{"method":"GET","path":"/central/accounts","what":"Every eyes and bet account with live balance and status (?mask=true hides passwords)"},{"method":"GET","path":"/central/accounts/balances","what":"Live balances of every account, totals by currency, age of each reading (?target=eyes|bet)"},{"method":"GET","path":"/central/accounts/params","what":"Every account param (type, allowed values, meaning) and each account's values (?target=eyes|bet&mask=true)"},{"method":"GET","path":"/central/accounts/:target/balances","what":"Live balances of the eyes or bet accounts, totals by currency"},{"method":"GET","path":"/central/accounts/:target/params","what":"Param schema and current params of the eyes or bet accounts (?mask=true)"},{"method":"GET","path":"/central/accounts/:target","what":"The eyes or bet accounts with live balances (?mask=true)"},{"method":"POST","path":"/central/accounts/:target/update","what":"Change one account: { label, run?, headless?, credentials?, ... } (applies at its next session start)"},{"method":"PATCH","path":"/central/accounts/:target","what":"Change one account by \"label\" in the body, or several: { accounts: [{ label, ... }] }"},{"method":"GET","path":"/central/accounts/:target/:label/balance","what":"One account's live balance"},{"method":"GET","path":"/central/accounts/:target/:label/params","what":"One account's current params (?mask=true)"},{"method":"GET","path":"/central/accounts/:target/:label","what":"One account with its whole configuration and live balance (?mask=true)"},{"method":"PATCH","path":"/central/accounts/:target/:label","what":"Change one account: { run?, headless?, credentials: { password }?, ... } (applies at its next session start)"}]}