Appearance
Companii
Companiile sunt entitatea centrală a CRM-ului. Contactele și adresele aparțin unei companii prin company_id.
Endpoint-uri
| Metodă | Cale | Descriere |
|---|---|---|
| GET | /api/v1/companies | Listă 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/companies | Creează 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
| Parametru | Tip | Note |
|---|---|---|
search | string | Caută în name, tax_id, email, city. |
status | enum | active | inactive | prospect | churned. |
assigned_to | integer | Id-ul utilizatorului asignat. |
per_page | integer | Implicit 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âmp | Tip | Note |
|---|---|---|
name | string ≤ 255 | Obligatoriu la POST. |
tax_id | string ≤ 20 | CUI. Unic — un POST cu un tax_id deja existent primește 409 (vezi mai jos). |
registration_number | string ≤ 30 | Nr. înregistrare la Registrul Comerțului. |
industry | string ≤ 100 | |
website | string ≤ 255 | |
phone | string ≤ 30 | Stocat criptat; returnat în clar în răspuns (vezi erori pentru ce nu apare niciodată în JSON). |
email | email ≤ 255 | |
address | string ≤ 255 | |
city | string ≤ 100 | |
county | string ≤ 100 | Județ. |
country | string ≤ 100 | |
postal_code | string ≤ 20 | |
status | enum | active | inactive | prospect | churned. Implicit prospect. |
status_code | integer | Cod intern de status (moștenit din CRM-ul legacy). |
assigned_to | integer | Trebuie să existe în users. |
notes | text | |
managing_company | string ≤ 255 | |
employee_count | integer ≥ 0 | |
activity_domain | string ≤ 255 | |
fiscal_address | string ≤ 255 | |
delivery_notes | text | |
callback_date | date |
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."
}