Endpoints
| Method | Path | Description |
|---|---|---|
GET | /api/v1/suppliers | List suppliers with pagination and optional search |
GET | /api/v1/suppliers/{id} | Get a single supplier by id |
POST | /api/v1/suppliers | Create a new supplier |
PATCH | /api/v1/suppliers/{id} | Partially update a supplier |
DELETE | /api/v1/suppliers/{id} | Delete a supplier (cascades to certifications) |
GET /api/v1/suppliers
Lists suppliers visible to the current tenant.
| Query parameter | Type | Required | Notes |
|---|---|---|---|
search | string | no | Search suppliers |
page | number | no | 1-based page number |
limit | number | no | Items per page |
Shell
curl "{{BASE_URL}}/api/v1/suppliers?search=acme&page=1&limit=20" \-H "Authorization: Bearer $CONFORMA_PAT"
Response 200 OK:
JSON
{"data": [],"meta": {"page": 1,"limit": 20,"total": 0,"totalPages": 0,"hasNextPage": false,"hasPreviousPage": false}}
GET /api/v1/suppliers/{id}
Fetches a single supplier, including its certifications inlined in the certifications array.
Shell
curl {{BASE_URL}}/api/v1/suppliers/3f2b9a1c-4d2e-4b6e-9c1a-6f5b8e2d7c10
200 OK—SupplierDtowithcertifications[].404 Not Found— no supplier with that id belongs to your tenant.
POST /api/v1/suppliers
Creates a new supplier.
Request body (CreateSupplierDto)
| Field | Type | Required | Description |
|---|---|---|---|
name | string | ✅ | Supplier legal / commercial name |
category | string | ✅ | Business category |
customCategory | string | — | Custom label when category is a generic bucket |
vatNumber | string | — | VAT / fiscal identifier |
address | string | — | Street address |
city | string | — | City |
zipCode | string | — | Postal code |
province | string | — | Province / region |
country | string | — | ISO 3166-1 alpha-2 |
latitude | number | — | Geographic latitude |
longitude | number | — | Geographic longitude |
contactName | string | — | Contact person |
contactEmail | string (email) | — | Contact email |
contactPhone | string | — | Contact phone |
reachCompliant | boolean | — | REACH compliance flag |
svhcCompliant | boolean | — | SVHC compliance flag |
activityType | string | — | Activity description (e.g. Dyeing) |
companyId | uuid | — | Owning company (optional) |
metadata | object | — | Arbitrary JSON (ERP codes, tags) |
Shell
curl -X POST {{BASE_URL}}/api/v1/suppliers \-H "Content-Type: application/json" \-d '{"name": "Acme Textiles Ltd","category": "TEXTILES","vatNumber": "IT01234567890","address": "Via Roma 12","city": "Milano","zipCode": "20100","province": "MI","country": "IT","latitude": 45.4642,"longitude": 9.1900,"contactName": "Mario Rossi","contactEmail": "mario@acme.it","reachCompliant": true,"activityType": "Dyeing","metadata": { "erpCode": "SUP-042" }}'
JavaScript
const res = await fetch(`${BASE_URL}/api/v1/suppliers`, {method: 'POST',headers: { 'Content-Type': 'application/json' },body: JSON.stringify({name: 'Acme Textiles Ltd',category: 'TEXTILES',country: 'IT',city: 'Milano',contactEmail: 'mario@acme.it',reachCompliant: true,metadata: { erpCode: 'SUP-042' },}),});const supplier = await res.json();
Response 201 Created — the created SupplierDto.
PATCH /api/v1/suppliers/{id}
Partially updates a supplier. Send only the fields you want to change.
Shell
curl -X PATCH {{BASE_URL}}/api/v1/suppliers/3f2b9a1c-… \-H "Content-Type: application/json" \-d '{ "reachCompliant": true, "contactPhone": "+39 02 1234567" }'
200 OK— updatedSupplierDto.404 Not Found— supplier does not exist in your tenant.
DELETE /api/v1/suppliers/{id}
Deletes the supplier. All certifications attached to the supplier are deleted as well.
Shell
curl -X DELETE {{BASE_URL}}/api/v1/suppliers/3f2b9a1c-…
204 No Content— deleted.404 Not Found— supplier does not exist in your tenant.
Supplier schema
SupplierDto:
JSON
{"id": "3f2b9a1c-4d2e-4b6e-9c1a-6f5b8e2d7c10","name": "Acme Textiles Ltd","category": "TEXTILES","customCategory": null,"address": "Via Roma 12","city": "Milano","zipCode": "20100","province": "MI","country": "IT","latitude": 45.4642,"longitude": 9.19,"contactName": "Mario Rossi","contactEmail": "mario@acme.it","contactPhone": "+39 02 1234567","vatNumber": "IT01234567890","reachCompliant": true,"svhcCompliant": false,"companyId": null,"activityType": "Dyeing","metadata": { "erpCode": "SUP-042" },"certifications": [],"createdAt": "2026-04-21T10:00:00.000Z","updatedAt": "2026-04-21T10:00:00.000Z"}
Fields like customCategory, address, latitude, vatNumber, contactEmail are nullable — expect null when unset.