Skip to main content

REST API: Units

How to retrieve and manage measurement units

Gustavo Vera avatar
Written by Gustavo Vera
Updated today

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.

Did this answer your question?