Skip to content

Companii

Companiile sunt entitatea centrală a CRM-ului. Contactele și adresele aparțin unei companii prin company_id.

Endpoint-uri

MetodăCaleDescriere
GET/api/v1/companiesListă paginată; filtre search, status, assigned_to.
GET/api/v1/companies/{id}Citește o companie (cu numărul de contacte și adrese).
POST/api/v1/companiesCreează o companie.
PUT/api/v1/companies/{id}Actualizează o companie (parțial).
DELETE/api/v1/companies/{id}Șterge o companie (doar dacă nu are înregistrări asociate).

Filtre la listare

ParametruTipNote
searchstringCaută în name, tax_id, email, city.
statusenumactive | inactive | prospect | churned.
assigned_tointegerId-ul utilizatorului asignat.
per_pageintegerImplicit 50, plafonat la 200.

Schema unei companii

Câmpuri acceptate la POST / PUT. La POST, name este obligatoriu; restul sunt opționale. La PUT, toate sunt opționale.

CâmpTipNote
namestring ≤ 255Obligatoriu la POST.
tax_idstring ≤ 20CUI. Unic — un POST cu un tax_id deja existent primește 409 (vezi mai jos).
registration_numberstring ≤ 30Nr. înregistrare la Registrul Comerțului.
industrystring ≤ 100
websitestring ≤ 255
phonestring ≤ 30Stocat criptat; returnat în clar în răspuns (vezi erori pentru ce nu apare niciodată în JSON).
emailemail ≤ 255
addressstring ≤ 255
citystring ≤ 100
countystring ≤ 100Județ.
countrystring ≤ 100
postal_codestring ≤ 20
statusenumactive | inactive | prospect | churned. Implicit prospect.
status_codeintegerCod intern de status (moștenit din CRM-ul legacy).
assigned_tointegerTrebuie să existe în users.
notestext
managing_companystring ≤ 255
employee_countinteger ≥ 0
activity_domainstring ≤ 255
fiscal_addressstring ≤ 255
delivery_notestext
callback_datedate

wms_subdomain și wms_api_key nu sunt scriabile prin acest API — orice valoare trimisă pentru ele este ignorată silențios. Sunt configurate exclusiv din interfața web (integrarea cu notso WMS).

Răspunsul mai conține câmpuri needitabile prin API: id, created_at, updated_at, deleted_at, metadata, wms_subdomain (doar citire — vezi mai sus), assigned_user (relația încărcată, {id, name} sau null), și la GET /api/v1/companies/{id} în plus contacts_count / addresses_count.

Exemplu — creare companie

bash
curl -X POST https://wartung.notsocrm.ro/api/v1/companies \
  -H "Authorization: Bearer wartung.crm_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Wartung SRL",
    "tax_id": "RO12345678",
    "email": "office@wartung.ro",
    "city": "Cluj-Napoca",
    "status": "active"
  }'

Răspuns 201:

json
{
    "data": {
        "id": 1,
        "name": "Wartung SRL",
        "tax_id": "RO12345678",
        "registration_number": null,
        "industry": null,
        "website": null,
        "email": "office@wartung.ro",
        "address": null,
        "city": "Cluj-Napoca",
        "county": null,
        "country": "România",
        "postal_code": null,
        "status": "active",
        "assigned_to": null,
        "notes": null,
        "metadata": null,
        "created_at": "2026-07-31T22:18:51.000000Z",
        "updated_at": "2026-07-31T22:18:51.000000Z",
        "deleted_at": null,
        "managing_company": null,
        "employee_count": null,
        "activity_domain": null,
        "callback_date": null,
        "fiscal_address": null,
        "delivery_notes": null,
        "status_code": null,
        "wms_subdomain": null,
        "phone": null,
        "assigned_user": null
    }
}

Conflict pe CIF duplicat

Un tax_id este unic în tot CRM-ul — orice altă căutare (tichete, facturare, puntea WMS) presupune asta. Un POST cu un tax_id deja folosit nu creează un duplicat; returnează 409 cu compania existentă, ca un apelant care reîncearcă să recupereze fără o a doua cerere:

json
{
    "error": "Company with this tax_id already exists.",
    "data": {
        "id": 1,
        "name": "Wartung SRL",
        "tax_id": "RO12345678"
    }
}

Ștergere

bash
curl -X DELETE https://wartung.notsocrm.ro/api/v1/companies/1 \
  -H "Authorization: Bearer wartung.crm_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

Ștergerea este permisă doar dacă nu există înregistrări asociate. Blocanții verificați sunt: facturi, oferte, tranzacții (deals), tichete și abonamente. Dacă oricare există, ștergerea este refuzată cu 422:

json
{
    "error": "Cannot delete company with related records.",
    "details": "Blocked by: tickets."
}