1. Overview
Units let you express recipe quantities and purchase formats naturally.
You can define universal conversions (e.g., 1 kg = 1000 g).
Avoid product-specific assumptions (e.g., “1 bottle = 750 ml”), because that varies by product.
1.1 REST API: Login
Authenticate first; the login returns a token you must include in all requests.
[email protected] password=XXXXXXX url=https://www.tspoonlab.com/recipes/api authenticate="username=$username&password=$password" echo -n 'rememberme:' > rememberme.txt curl -v --data "$authenticate" "$url/login" >> rememberme.txt
Use the token in subsequent calls:
curl -X PUT -v -H "$(cat rememberme.txt)" "$url/integration/call"
1.2 Select a Cost Center / Restaurant
Most unit queries run in the context of a cost center.
Get cost centers and IDs, then add idOrderCenter
to headers:
echo -n 'order:351583444167656299610202XXXXXXXXXXXX' >> rememberme.txt
Headers example
rememberme:aGVucnkudXBzYWxsLmRAZXXXXXXXXXXXXXXXXXX order:351583444167656299610202XXXXXXXXXXXX
1.3 List units
Endpoint
GET https://www.tspoonlab.com/recipes/api/listUnitsPaged?filter=&rows=50&start=0
Params
filter
(string, optional)rows
,start
(int, required) – pagination
Response
class Unit { private String id; private String descr; // unit name }
1.4 Get a unit (with usage)
Endpoint
GET https://www.tspoonlab.com/recipes/api/unit/{idUnit}/num/{numElements}
idUnit
: unit ID (from previous call)numElements
: number of related records to return
Response (key fields)
public class Unit extends EntityBaseDescr { private String id; private String descr; private boolean defecte; // default for weight (e.g., kg) private boolean defectePlat; // default for dishes (e.g., Rac) private boolean defecteMenu; // default for menus (e.g., Pax) private boolean defecteDetall; // default for recipe detail (e.g., kg/g) private boolean defecteFormat; // default for vendor format (purchase) private List<EntityBaseBool> listVendors; private List<EntityBaseBool> listCustomers; private List<EntityBaseComponent> listDetails; // recipe lines using this unit private List<EntityBaseComponent> listComponents; // products/recipes using this unit private long listVendorsCount; private long listCustomersCount; private long listDetailsCount; private long listComponentsCount; private List<UnitConversion> listConversions; // defined conversions (e.g., kg↔g) } public class EntityBaseBool extends EntityBaseDescr { private String id; private String descr; private boolean defecte; } public class EntityBaseComponent extends EntityBaseDescr { private String id; private String descr; private Short type; // 0=ingredient/product, 1=intermediate, 2=material, 3=dish/final private Long color; // color for ingredient families }
Related paged endpoints (to fetch full lists):
GET https://www.tspoonlab.com/recipes/api/unit/{idUnit}/components/paged?filter=&rows=20&start=0 GET https://www.tspoonlab.com/recipes/api/unit/{idUnit}/details/paged?filter=&rows=20&start=0 GET https://www.tspoonlab.com/recipes/api/unit/{idUnit}/vendors/paged?filter=&rows=20&start=0 GET https://www.tspoonlab.com/recipes/api/unit/{idUnit}/customers/paged?filter=&rows=20&start=0
1.5 Create a unit
Endpoint
POST https://www.tspoonlab.com/recipes/api/unit
Body
public class NewUnit { String descr; boolean defecte; // default for weight Boolean defectePlat; // default for dishes Boolean defecteMenu; // default for menus Boolean defecteDetall; // default for recipe detail Boolean defecteFormat; // default for vendor formats }
1.6 Delete a unit
Endpoint
DELETE https://www.tspoonlab.com/recipes/api/unit/{idUnit}
A unit cannot be deleted if it’s in use in recipes, ingredients, dishes, menus, purchases, or vendors.
Notes
Required headers:
rememberme
(login token)order
(cost center)
Conversions must be universal (product-agnostic).
Always use pagination when fetching related entities.