Documentation menu

API public v1

API-ul REST public este destinat integrărilor server-la-server, de exemplu cu software CRM sau de facturare.

URL de bază: https://auto.manisma.com/api/v1

Nu utilizați direct API-ul Directus și nu plasați niciodată o cheie API în JavaScript frontend.

Crearea unei chei API

Deschideți ca Admin Administrare → Chei API. Dați cheii un nume recunoscut și alegeți scopes:

  • read: marchează o cheie destinată citirii;
  • write: creează sau modifică resurse inscriptibile și utilizează endpointuri de planificare.
  • plan: solicită o propunere de planificare.

Pentru o integrare normală de citire/scriere, selectați ambele scopes. Atenție: backend-ul v1 actual verifică write explicit pentru POST/PATCH, dar permite GET pentru orice cheie activă validă; read este, așadar, în prezent doar o desemnare administrativă și nu o blocare tehnică separată. Cheia brută începe cu msk_, este afișată o singură dată și nu poate fi recuperată. În caz de pierdere, creați o cheie nouă și dezactivați sau ștergeți-o pe cea veche.

Autentificare

Utilizați unul dintre aceste headere:

Authorization: Bearer msk_...
X-API-Key: msk_...

Toate rezultatele sunt limitate server-side la organizația cheii. Un id al altui tenant returnează același 404 ca un id necunoscut.

Resurse și metode

Resursă GET listă/detaliu POST PATCH
/clients Da Da Da
/jobs Da Da Da
/assets Da Da Da
/task_types Da Da Da
/materials Da Da Da
/asset_models Da Nu Nu
/technicians Da Nu Nu

În v1 nu există endpoint DELETE.

Liste și paginare

GET /clients?limit=50&page=1

  • limit: 1 până la 100, implicit 50;
  • page: începe de la 1.
  • search: pentru listele de clienți și materiale, căutare parțială fără diferențiere între majuscule și minuscule, în text literal. Un semn procent caută un semn procent. Clienții corespund după nume, e-mail sau număr de client; materialele după SKU sau nume.
{
  "data": [],
  "meta": { "total": 0, "page": 1, "limit": 50 }
}

Un răspuns de detaliu sau de scriere folosește { "data": { ... } }.

Clienți

Câmpuri citibile: id, tenant_id, customer_number, name, client_type, email, phone, vat_number, status, created_at, updated_at.

POST /clients necesită name. Câmpurile de scriere permise sunt name, customer_number, client_type, email, phone, vat_number și status. La PATCH toate sunt opționale, dar trebuie să fie prezent cel puțin un câmp valid. Câmpurile necunoscute și un tenant_id furnizat sunt ignorate.

POST /addresses creează o adresă pentru un client și necesită client_id. Clientul trebuie să aparțină aceluiași tenant.

curl -X POST 'https://auto.manisma.com/api/v1/clients' \
  -H 'Authorization: Bearer msk_...' \
  -H 'Content-Type: application/json' \
  -d '{"name":"Bakkerij Peeters","client_type":"b2b","email":"info@example.com"}'

Sarcini

Câmpurile citibile includ id, tenant, numărul sarcinii, id client, titlu, descriere, prioritate, stare, durată estimată, id tehnician principal, număr necesar de tehnicieni, planificare, id adresă de service, id tip de sarcină, competențe necesare și timestamp-uri. Notele interne și cele ale tehnicianului nu sunt expuse.

POST /jobs necesită title. Câmpuri permise:

job_number, client_id, title, description, priority, status, estimated_duration_minutes, required_technicians, scheduled_date, scheduled_start, scheduled_end, service_address_id, task_type_id, required_skills.

Când status lipsește, se folosește unplanned. Când job_number lipsește, Manisma generează un număr cu prefixul tenantului setat. La PATCH, job_number, status și assigned_technician_id nu pot fi modificate.

Cheile externe pentru client, adresa de service și tipul de sarcină trebuie să aparțină aceluiași tenant.

POST /jobs/:id/assign planifică o sarcină cu technician_id, scheduled_start și scheduled_end. POST /jobs/:id/unassign elimină atribuirea și readuce sarcina în coada neplanificată; nu șterge sarcina.

Propunere de planificare

POST /plan returnează o propunere de planificare și nu modifică nimic: nu creează și nu mută nicio sarcină. Necesită scope-ul separat plan și este limitat la 3 apeluri per organizație la fiecare 10 minute; apelurile următoare returnează o eroare 429 clară. Nu folosește AI-ul Manisma și nu consumă acțiunile AI incluse în planul dvs. Manisma, deoarece asistentul dvs. apelant face raționamentul.

Alte resurse

  • assets: dispozitive instalate la un client; inscriptibile prin POST și PATCH.

  • task_types: inscriptibile prin POST și PATCH.

  • materials: inscriptibile prin POST și PATCH; prețul de achiziție și stocul pot fi citite și scrise.

  • asset_models: doar pentru citire.

  • technicians: nume, e-mail, telefon, statut activ și competențe. Orele de lucru, adresele și id-ul de utilizator nu sunt publice.

Erori și limite

Status Semnificație
400 Body invalid, câmp obligatoriu lipsă sau PATCH fără câmp valid.
401 Cheia lipsește, este invalidă sau a fost dezactivată.
403 Cheie validă fără scope-ul necesar write sau plan.
404 Înregistrare necunoscută sau dintr-un alt tenant.
429 Limită depășită.
502 Problemă temporară cu serviciul de date subiacent.
503 Limitarea cererilor de planificare este temporar indisponibilă.

API-ul este limitat la 600 de cereri pe minut per IP sursă. Construiți retry-uri cu backoff exponențial pentru 429, 502 și erori de rețea temporare. Nu reîncercați erorile de validare fără a corecta cererea.