Sari la conținut

Urmărire publică

Endpoint-uri publice, fără autentificare, care alimentează pagina de status pe care o vede clientul pentru comanda lui. Nu se trimite niciun Bearer token — autorizarea se face exclusiv prin tracking_token-ul de 40 de caractere generat la crearea comenzii.

Fără prefix de versiune

Aceste căi sunt sub /api/track/..., nu sub /api/v1. Tenantul este rezolvat din token prin indexul central, nu din subdomeniu sau din cheia API.

Payload-ul este deliberat filtrat: doar prenumele clientului, numărul mascat de înmatriculare și cronologia de status. Nu expune adresa, numele de familie, notele interne, costurile sau identitatea mecanicului.

În plus, modulul public_tracking trebuie să fie activ pe tenant; altfel răspunsul este 404.

Endpoint-uri

MetodăCaleDescriere
GET/api/track/{token}Statusul comenzii (JSON public filtrat).
GET/api/track/{token}/estimate/{estimate}Devizul, pentru pagina de aprobare.
POST/api/track/{token}/estimate/{estimate}/respondTrimite deciziile clientului pe liniile devizului.
POST/api/track/{token}/inspection/{inspection}/acknowledgeClientul confirmă o inspecție finalizată.

{token} trebuie să fie 40 de caractere alfanumerice; {estimate} și {inspection} sunt numerice.

Status comandă

bash
curl https://tenant.notsowms.ro/api/track/f3a9c1e8b2d74a6f90c5e1d8a7b4c2f0e9d6a3b1

Răspuns 200:

json
{
  "shop": { "name": "Moto Service SRL", "locale": "ro" },
  "work_order": {
    "number": "WO-2026-000142",
    "status": "in_progress",
    "status_label": "În lucru",
    "intake_date": "2026-05-25T09:30:00+00:00",
    "promise_date": "2026-05-28T00:00:00+00:00",
    "last_update_at": "2026-05-25T11:05:00+00:00",
    "customer_first_name": "Andrei",
    "vehicle": {
      "make": "Yamaha",
      "model": "MT-07",
      "model_year": 2024,
      "plate_masked": "B1•••••"
    }
  },
  "timeline": [
    { "at": "2026-05-25T09:30:00+00:00", "status": "received", "label": "Primit" },
    { "at": "2026-05-25T11:05:00+00:00", "status": "in_progress", "label": "În lucru" }
  ],
  "notes_to_customer": [
    { "at": "2026-05-25T11:05:00+00:00", "text": "Am început lucrul, vă anunțăm la finalizare." }
  ],
  "inspection_summary": {
    "inspection_id": 333,
    "result": "advise",
    "fail_count": 0,
    "advise_count": 2,
    "acknowledged": false
  }
}

status_label și etichetele din timeline sunt traduse în limba tenantului. inspection_summary este null cât timp nu există o inspecție finalizată. plate_masked păstrează doar primele 2 caractere.

Erori: 404 dacă token-ul este necunoscut, tenantul e suspendat sau modulul e inactiv; 410 dacă link-ul de urmărire a fost revocat sau a expirat.

Deviz — aprobare

Pagina de aprobare cere, pe lângă token-ul de urmărire, și approval_token-ul devizului (generat la trimiterea devizului).

bash
curl "https://tenant.notsowms.ro/api/track/f3a9.../estimate/555?approval_token=ab12cd34..."

Răspuns 200:

json
{
  "estimate": {
    "id": 555,
    "version": 1,
    "status": "sent",
    "currency": "RON",
    "subtotal_cents": 52000,
    "tax_cents": 9880,
    "total_cents": 61880,
    "deposit_required_cents": 20000,
    "valid_until": "2026-06-25",
    "customer_message": "Devizul pentru revizia de 10.000 km.",
    "lines": [
      { "id": 1, "line_type": "labor", "description": "Manoperă revizie", "quantity": 1, "total_cents": 30000, "tax_cents": 5700, "customer_decision": "pending" },
      { "id": 2, "line_type": "part", "description": "Set plăcuțe frână față", "quantity": 1, "total_cents": 22000, "tax_cents": 4180, "customer_decision": "pending" }
    ]
  }
}

Erori: 403 dacă approval_token lipsește sau nu corespunde; 404 dacă devizul nu aparține comenzii din token.

Trimiterea deciziilor

bash
curl -X POST https://tenant.notsowms.ro/api/track/f3a9.../estimate/555/respond \
  -H "Content-Type: application/json" \
  -d '{
    "approval_token": "ab12cd34...",
    "decisions": [
      { "line_id": 1, "decision": "approved" },
      { "line_id": 2, "decision": "declined" }
    ]
  }'
CâmpTipObligatoriuNote
approval_tokenstringdaToken-ul devizului.
decisionsarraydaMinim 1 element.
decisions[].line_idintegerdaId-ul liniei de deviz.
decisions[].decisionenumdaapproved | declined | deferred.

Deciziile sunt înregistrate cu responded_via = tap_link, status-ul devizului se recalculează, iar răspunsul include status-ul rezultat plus devizul actualizat:

json
{ "status": "partially_approved", "estimate": { /* … */ } }

Inspecție — confirmare

bash
curl -X POST https://tenant.notsowms.ro/api/track/f3a9.../inspection/333/acknowledge

Marchează inspecția finalizată drept confirmată de client (setează customer_acknowledged_at dacă nu e deja setat). Răspuns 200:

json
{ "acknowledged_at": "2026-05-25T12:00:00+00:00" }

Erori: 404 dacă inspecția nu aparține comenzii din token.

Documentație API notso WMS