Docs / API reference

Items (products & services)

Invoa API catalogue items: list and search the products and services you sell, and create items with a price in sen, tax type and LHDN code.

Catalogue items — shown as Products & Services in the app — are the products and services you sell, with a default price, tax type and LHDN classification code. Reference an item on a document line with itemId. The line still carries its own description, price and tax type, so changing an item later does not change existing documents.

MethodPathScope
GET/itemsdocuments:read
POST/itemsdocuments:draft

The item object

json
{
  "id": "1e300000-0000-4000-8000-000000000003",
  "tenantId": "7e0a0000-0000-4000-8000-000000000001",
  "sku": "TOUR-LGK-3D",
  "name": "Langkawi corporate retreat, 3 days 2 nights",
  "description": "Per person, twin sharing, includes transfers",
  "unit": "pax",
  "unitPrice": 125000,
  "taxType": "SST_SERVICE",
  "classificationCode": "022",
  "isActive": true,
  "createdAt": "2026-10-01T03:00:00.000Z",
  "updatedAt": "2026-10-01T03:00:00.000Z"
}
FieldTypeDescription
idstringItem ID (UUID).
skustring or nullYour code. Unique within the company when set.
namestringItem name.
descriptionstring or nullLonger description.
unitstringUnit label, for example unit, hour, month, pax.
unitPriceintegerDefault price in sen. 125000 is RM 1,250.00.
taxTypestringSee Tax types.
classificationCodestringLHDN e-invoice classification code (3 digits). 022 is "Others".
isActivebooleanInactive items are hidden from lists by default.

Tax types

ValueMeaning
SST_SERVICEService tax, 8% (standard rate).
SST_SERVICE_6Service tax, 6% (reduced rate: F&B, telecommunications, parking, logistics, construction, rental and leasing, some private healthcare and education).
SST_SALES_5Sales tax, 5%.
SST_SALES_10Sales tax, 10%.
EXEMPTTax exempt.
NOT_APPLICABLENot SST-registered.

List items

http
GET /api/v1/items

Returns active items sorted by name.

Query parameterTypeDescription
searchstringMatches name, SKU or description.
includeInactivebooleantrue to include inactive items.
limit, offsetintegerDefault limit 100, maximum 200. See Pagination.
bash
curl "https://app.invoa.io/api/v1/items?search=langkawi" \
  -H "Authorization: Bearer $INVOA_API_KEY"
json
{
  "data": [
    {
      "id": "1e300000-0000-4000-8000-000000000003",
      "sku": "TOUR-LGK-3D",
      "name": "Langkawi corporate retreat, 3 days 2 nights",
      "unit": "pax",
      "unitPrice": 125000,
      "taxType": "SST_SERVICE",
      "classificationCode": "022",
      "isActive": true
    }
  ],
  "pagination": { "total": 1, "limit": 100, "offset": 0, "has_more": false }
}

Create an item

http
POST /api/v1/items
FieldTypeRequiredDescription
namestringYes1 to 200 characters.
unitPriceintegerYesPrice in sen, 0 or more.
skustringNoUp to 60 characters. Must not match another item's SKU in the company.
descriptionstringNoUp to 2,000 characters.
unitstringNoUp to 20 characters. Default unit.
taxTypestringNoDefault NOT_APPLICABLE.
classificationCodestringNoA valid LHDN classification code. Default 022.
isActivebooleanNoDefault true.
bash
curl https://app.invoa.io/api/v1/items \
  -H "Authorization: Bearer $INVOA_API_KEY" \
  -H "content-type: application/json" \
  -d '{
    "sku": "TOUR-LGK-3D",
    "name": "Langkawi corporate retreat, 3 days 2 nights",
    "unit": "pax",
    "unitPrice": 125000,
    "taxType": "SST_SERVICE"
  }'

Returns 201 Created with { "data": <item object> }.

Errors:

  • 400 validation for a missing name, a non-integer price or an unknown classification code.
  • 409 conflict if another item in the company already has this sku. details has the sku and the existing item's itemId.

There are no endpoints to update or delete items. Manage existing items in the app.

Something unclear or out of date? Tell us at hello@invoa.io and we'll fix the page.