meInvoice Web — Invoice Download Trial

Trial harness built from the reverse-engineered Android app (v58.0.1, Flutter). It tries the endpoints found in the app against MISA's backend, shows every raw response, and downloads invoice PDF/XML files to your browser. HTTP verbs and parameters were not provable from the binary alone — this tool tries the candidates in order and reports which one actually works, so you can confirm the real API shape with your own account.

Credentials: anything you type (MISA ID password, tokens) lives only in this browser tab's memory (sessionStorage) and is sent only to MISA's servers via this site's proxy. Nothing is stored on the server, nothing is logged, and closing the tab clears it. Use the Clear session button when done. Prefer the Paste token mode if you already have a token — it avoids typing your password here at all.

1 · Settings

Host and company scope. Dates default to yesterday (the daily-download window).

2 · Sign in

Auth in the app: MISA ID → access token → meInvoice JWT. Password login calls the MISA ID password grant at id.misa.vn/connect/token (verified live), then exchanges the token for a JWT at api.meinvoice.vn/api2/auth/jwttoken (the token goes in the Authorization: Bearer header — without it the endpoint answers INVALIDPARAMETER). The password grant needs the app's OAuth client_id, which is not recoverable from the APK — if you know it, fill it in; otherwise use Paste token, which is the reliable path right now.

Status: Not signed in

3 · List invoices

Tries the paging endpoints for the chosen family (POST with JSON body first, then GET) and renders the result. The raw response is shown in the log below.

4 · Download PDF / XML

For each listed invoice, tries the file-download candidates in order: /Handler/V3DownloadHandler.ashx, then /invoices/print-pdf, then /invoices/invoicefiles-trans. Note: the handler answered 406 even with a Bearer token, so it likely needs the web session (cookie) rather than a Bearer token — the first candidate may fail until that is confirmed; the other two are tried next. The handler's exact query parameters were not in the binary — edit the templates below if the first try fails; {refId}, {code}, {id} are replaced per invoice.

5 · Raw API tester

Try any endpoint from the spec directly. Useful for confirming a verb or a parameter the list/download steps guessed wrong.

Try: /api/v2/v3system/appconfig on the app host (needs a token — 401 without one), /api/v2/v3sainvoice/paging, /api2/auth/jwttoken on the API host (POST, with a Bearer MISA token).

Request log

Every attempt, in order, with status and a truncated body. Tokens are masked here.

Ready. Sign in first, then list invoices.
Endpoints found in the app (reference)

Auth: MISA ID password grant POST id.misa.vn/connect/token (form-urlencoded, needs the app's OAuth client_id), GET app.meinvoice.vn/api/v2/v3system/misaid/accessToken, GET app.meinvoice.vn/api/v2/v3system/misaid/refreshAccessToken, POST api.meinvoice.vn/api2/auth/jwttoken (Bearer = MISA token), POST api.meinvoice.vn/api2/user/refreshtoken, /User/AuthenticationOTPV2. List (all under app.meinvoice.vn/api/v2): /v3sainvoice/paging, /v3sainvoice/code/paging, /v3approve/invoice/paging, /cashregisterinvoice/paging/v2. Detail: /v3invoice/code/preview, /v3invoice/published/preview/. Files: /Handler/V3DownloadHandler.ashx, /invoices/print-pdf, /invoices/invoicefiles-trans. Full catalog (126 paths) in the architecture document and the OpenAPI spec.