{"id":47805739,"url":"https://github.com/steipete/ordercli","last_synced_at":"2026-04-03T17:35:25.716Z","repository":{"id":329487647,"uuid":"1119783248","full_name":"steipete/ordercli","owner":"steipete","description":"CLI for Foodora and Deliveroo","archived":false,"fork":false,"pushed_at":"2026-03-05T15:09:51.000Z","size":210,"stargazers_count":57,"open_issues_count":6,"forks_count":10,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-30T05:38:59.977Z","etag":null,"topics":["cli","deliveroo","foodora"],"latest_commit_sha":null,"homepage":"https://ordercli.sh","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/steipete.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-12-19T21:00:43.000Z","updated_at":"2026-03-13T02:54:24.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/steipete/ordercli","commit_stats":null,"previous_names":["steipete/foodoracli","steipete/foodcli"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/steipete/ordercli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/steipete%2Fordercli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/steipete%2Fordercli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/steipete%2Fordercli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/steipete%2Fordercli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/steipete","download_url":"https://codeload.github.com/steipete/ordercli/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/steipete%2Fordercli/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31366366,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-03T17:13:05.644Z","status":"ssl_error","status_checked_at":"2026-04-03T17:13:04.413Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","deliveroo","foodora"],"created_at":"2026-04-03T17:35:24.969Z","updated_at":"2026-04-03T17:35:25.699Z","avatar_url":"https://github.com/steipete.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🛵 ordercli — Your takeout timeline, in the terminal.\n\nProviders:\n- `foodora` (working)\n- `deliveroo` (work in progress; requires `DELIVEROO_BEARER_TOKEN`)\n\nConcepts (shared CLI UX; provider-specific implementations):\n- `history` (past orders)\n- `orders` (active orders)\n- `order` / `history show` (details)\n\nConfig lives in your OS config dir by default; override for testing:\n\n```sh\n./ordercli --config /tmp/ordercli.json foodora config show\n```\n\n## Build\n\n```sh\ngo test ./...\ngo build ./cmd/ordercli\n```\n\n## foodora\n\n### Configure country / base URL\n\nBundled presets (from the APK):\n\n```sh\n./ordercli foodora countries\n./ordercli foodora config set --country HU\n./ordercli foodora config set --country AT\n./ordercli foodora config show\n```\n\nManual:\n\n```sh\n./ordercli foodora config set --base-url https://hu.fd-api.com/api/v5/ --global-entity-id NP_HU --target-iso HU\n```\n\n### Login\n\n`oauth2/token` needs a `client_secret` (the app fetches it via remote config). `ordercli` auto-fetches it on first use and caches it locally.\n\nOptional override (keeps secrets out of shell history):\n\n```sh\nexport FOODORA_CLIENT_SECRET='...'\n./ordercli foodora login --email you@example.com --password-stdin\n```\n\nIf MFA triggers and you're running in a TTY, `ordercli` prompts for the OTP code and retries automatically. Otherwise it stores the MFA token locally and prints a safe retry command (`--otp \u003cCODE\u003e`).\n\n### Client headers\n\nSome regions (e.g. Austria/mjam `mj.fd-api.com`) expect app-style headers like `X-FP-API-KEY` / `App-Name` / app `User-Agent`. `ordercli` uses an app-like header profile for `AT` by default.\n\nFor corporate flows, you can override the OAuth `client_id`:\n\n```sh\n./ordercli foodora login --email you@example.com --client-id corp_android --password-stdin\n```\n\n### Cloudflare / bot protection\n\nSome regions (e.g. Austria/mjam `mj.fd-api.com`) may return Cloudflare HTML (`HTTP 403`) for plain Go HTTP clients.\n\nUse an interactive Playwright session (you solve the challenge in the opened browser window; no auto-bypass):\n\n```sh\n./ordercli foodora login --email you@example.com --password-stdin --browser\n```\n\nPrereqs: `node` + `npx` available. First run may download Playwright + Chromium.\n\nTip: use a persistent profile to keep browser cookies/storage between runs (reduces re-challenges):\n\n```sh\n./ordercli foodora login --email you@example.com --password-stdin --browser --browser-profile \"$HOME/Library/Application Support/ordercli/browser-profile\"\n```\n\n### Import cookies from Chrome (no browser run)\n\nIf you already solved bot protection / logged in in Chrome, you can import the cookies for the current `base_url` host:\n\n```sh\n./ordercli foodora cookies chrome --profile \"Default\"\n./ordercli foodora orders\n```\n\nIf the bot cookies live on the website domain (e.g. `https://www.foodora.at/`), import from there and store them for the API host:\n\n```sh\n./ordercli foodora cookies chrome --url https://www.foodora.at/ --profile \"Default\"\n```\n\nIf you have multiple profiles, try `--profile \"Profile 1\"` (or pass a profile path / Cookies DB via `--cookie-path`).\n\n### Import session from Chrome (no password)\n\nIf you’re logged in on the website in Chrome, you can import `refresh_token` + `device_token` and then refresh to an API access token:\n\n```sh\n./ordercli foodora session chrome --url https://www.foodora.at/ --profile \"Default\"\n./ordercli foodora session refresh --client-id android\n./ordercli foodora history\n```\nIf `session refresh` errors with “refresh token … not found”, that site session isn’t valid for your configured `base_url` (common for some regions).\n\n### Orders\n\n```sh\n./ordercli foodora orders\n./ordercli foodora orders --watch\n./ordercli foodora history\n./ordercli foodora history --limit 50\n./ordercli foodora history show \u003corderCode\u003e\n./ordercli foodora history show \u003corderCode\u003e --json\n./ordercli foodora order \u003corderCode\u003e\n./ordercli foodora logout\n```\n\n### Reorder (add to cart)\n\nSafe default (preview only):\n\n```sh\n./ordercli foodora reorder \u003corderCode\u003e\n```\n\nActually call `orders/{orderCode}/reorder` (adds to cart; does not place an order):\n\n```sh\n./ordercli foodora reorder \u003corderCode\u003e --confirm\n```\n\nIf you have multiple saved addresses, you must pick one:\n\n```sh\n./ordercli foodora reorder \u003corderCode\u003e --confirm --address-id \u003cid\u003e\n```\n\n## deliveroo (WIP)\n\n`history` still requires a valid bearer token. `orders` can now fall back to a public Deliveroo status/share page from your local browser history.\n\n```sh\nexport DELIVEROO_BEARER_TOKEN='...'\nexport DELIVEROO_COOKIE='...' # optional\n./ordercli deliveroo config set --market uk\n./ordercli deliveroo history\n./ordercli deliveroo orders # bearer-token path if set\n./ordercli deliveroo orders --browser atlas\n./ordercli deliveroo orders --status-url 'https://deliveroo.co.uk/orders/.../status?...'\n```\n\n`orders` looks for the most recent Deliveroo status URL in Atlas or Chrome history when no bearer token is present, then renders the page in headless Chromium and extracts the order details.\n\n## Safety\n\nThis talks to private APIs. Use at your own risk; rate limits / bot protection may block requests.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsteipete%2Fordercli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsteipete%2Fordercli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsteipete%2Fordercli/lists"}