The Product
A product is a catalog entity in DigiAnt representing a raw material or feed managed by a logistics company. Examples: "Pienso Porcino Blanco", "Maíz", "Cebada".
Products are catalog entities — DigiAnt does not validate quantities or units against them. Their role is to provide naming consistency across authorizations and the operations generated from them.
Two possible origins
| Origin | Description |
|---|---|
| Native DigiAnt | Created manually in DigiAnt. No external reference. |
| ERP-synced | Imported from the ERP's product catalog. Has an external_id that uniquely identifies it in the source system. |
When an ERP updates a product (e.g. its name), DigiAnt applies the change to the existing record without creating a new one — identity is maintained by the external_id.
The productExternalId field in authorizations
When creating an authorization via the Partner API, the product is referenced by its ERP identifier in the productExternalId field:
{
"productExternalId": "ERP-PROD-001"
}
The UUID is obtained from the catalog via GET /partner/products. The authorization response returns the resolved name as product (text).
Create products in the catalog before sending authorizations. This ensures references are valid and avoids 422 errors for unknown products.
ERP catalog sync
If your integration uses the ERP catalog sync model, products are imported with their ERP external_id. In that flow:
- The ERP sends its product catalog to DigiAnt.
- DigiAnt creates or updates each product using the
external_idas the upsert key. - Authorizations arriving from the ERP use the synced name to link the product.
The external_id is opaque to DigiAnt — it can be an ERP internal code, a GUID, or any non-empty string.
Lifecycle
Products support soft delete: deleting a product does not remove it physically — it is marked as deleted. Existing authorizations that referenced the product are not affected.
| Operation | Effect |
|---|---|
| Create | New catalog record. |
| Sync from ERP | Upsert by external_id: creates if not found, updates the name if it already exists. |
| Delete | Soft delete — deleted: true, deleted_at recorded. |