# PHP port route-by-route status

Legend: **Implemented** = PHP handler exists and passed syntax check, **Partial** = algorithm/transport port is not proven equivalent to the original, **External untested** = requires live credentials/network.

| Original API | PHP status | Notes |
| --- | --- | --- |
| GET /api/ | Implemented | Static response |
| GET /api/currency-pairs | Implemented | Original 27 display flag mappings |
| POST /api/status, GET /api/status | Implemented | MySQL data storage |
| GET /api/analysis-history | Implemented | MySQL data storage |
| POST /api/auth/verify | Implemented | One-time invite consumption uses transactions |
| POST /api/auth/invite/create | Implemented | Codes stored in MySQL |
| GET /api/auth/invite/list | Implemented | List 200 |
| DELETE /api/auth/invite/{code} | Implemented | Owner gate |
| GET /api/telegram/config | Implemented | Same settings keys and 119 market catalogue |
| POST /api/telegram/config | Implemented | Persisted settings |
| POST /api/telegram/test | Partial | Queues Cron next run, not an immediate Python asyncio task |
| POST /api/telegram/report/manual | Partial | Simple MySQL tracking summary, not full Python report styles |
| GET /api/supported-pairs | Implemented | All 119 symbols |
| POST /api/analyze-live | Partial | PHP technical indicators replicate original inputs/approach; remote data provider behavior unverified; multi-LLM voting omitted |
| GET /api/scan | Partial | Cron cached batch scan rather than all-pairs parallel scan |
| GET /api/scan/suggest | Partial | Cached scanner, not immediate 119-pair parallel run |
| POST /api/analyze-image | Partial/external untested | OpenAI Responses Vision replacing Emergent Claude vision |
| POST /api/analyze-chart | Partial/external untested | OpenAI Vision instead of Emergent provider |
| GET /api/pocketoption/status | External untested | Socket.IO v4 TLS read-only session check |
| POST /api/pocketoption/session | External untested | Encrypted MySQL storage, auth parser unit-tested |
| POST /api/pocketoption/otc/candles | External untested | Tick & OHLC parsing unit-tested; actual live broker not verified |
| GET /api/news/upcoming | Partial | Economic feed parsed; original TradingView fallback and detailed recommendations differ |
| POST /api/news/send-to-telegram | Partial | Sends and queues tracking; messages/settlements differ |
| POST /api/m1/analyze | Partial | PHP M1 checks, small explicit pair set, Cron scan for all; full realtime parallel parity not yet shown |
| POST /api/m1/publish | Implemented/external untested | Telegram send API |
| GET /api/m1/stats | Partial | MySQL stats from proxy settlement, no broker confirmation |
| POST /api/m1/image-metadata | Partial/external untested | Uses OpenAI Vision rather than Emergent Claude |
| GET /api/download/source | Implemented (needs zip extension) | Zip without config/.env or node_modules |

**NOT A ZERO-LOSS, 100%-EQUIVALENT PORT.** Before moving existing production, run black-box differential tests against original endpoints, especially strategy scoring, notifications, full multi-provider LLM analysis, news timing, broker live feeds, data persistence, Cron behavior and settlement. Original Python backend is included under `source_reference` for this purpose.
