What's Wrong? — Dispatch Integration API

Base URL: https://qa.eltur.co · QA adapter under /qa-adapter/v1 · async submit→poll.

1. Flow

Dispatch POSTs a bilingual file to /qa-adapter/v1/check. The engine auto-picks the QA profile by Account + Division + Language pair, runs the deterministic rules, and (if the profile has AI on, or enableAi=true) the AI deep-review in the background. The call returns a checkId immediately; poll GET /qa-adapter/v1/check/{checkId} until status is completed or failed. The file is never modified — only findings are returned.

2. Authentication

Every /qa-adapter/v1/* data endpoint requires: Authorization: Bearer <WW_ADAPTER_TOKEN>. The same secret must be set on this service and on Dispatch. Wrong/missing → 401.

3. POST /qa-adapter/v1/check

multipart/form-data

FieldReqDefaultNotes
fileyesBilingual file. Allowed: .wsxz, .zip, .xlz, .mqxlz, .sdlrpx, .sdlppx, .sdlxliff, .xliff, .xlf, .mxliff, .mqxliff, .txlf
accountno""e.g. Apple, Amazon — drives auto-match
divisionno""e.g. AppleCare, Ads
sourceLangnoene.g. en, en-US
targetLangnotre.g. tr, ar, ru (RTL aware)
projectRefno""Your job reference, stored with the run
profileno""Explicit profile override (wins over auto-match)
enableAino""true/1/yes/on forces AI review

Response: {"checkId":"ww_...","status":"pending"}completed if rule-only (ready now), pending if AI runs in background.

4. GET /qa-adapter/v1/check/{checkId}

{
  "checkId": "ww_...",
  "status": "completed",            // pending | completed | failed
  "errors": [
    {
      "errorId": "519ac8c7c704a375", // stable across re-runs
      "category": "Accuracy",
      "subcategory": "Number",
      "severity": "critical",        // critical | major | minor | preferential
      "segmentText": "...",
      "errorDescription": "Numeric values do not match.",
      "penaltyPoints": 5
    }
  ],
  "qualityScore": 98.7,
  "errorsCount": 1
}

Poll every 3–5s until status is completed/failed. Results are durably stored. 404 = unknown id; 503 = retry.

5. Profile auto-match (priority)

explicit profile= > structured (account+division+langpair > account+langpair > account+division > account > langpair) > filename > content/generic. Send account + targetLang (and division + sourceLang when known) to guarantee the right client profile.

6. Example (curl)

curl -X POST https://qa.eltur.co/qa-adapter/v1/check   -H "Authorization: Bearer $WW_ADAPTER_TOKEN"   -F "file=@job.sdlxliff"   -F "account=Apple" -F "division=AppleCare"   -F "sourceLang=en" -F "targetLang=tr"   -F "projectRef=DISPATCH-9912"

curl https://qa.eltur.co/qa-adapter/v1/check/ww_...   -H "Authorization: Bearer $WW_ADAPTER_TOKEN"

7. Notes