Skip to main content

Products & Product Bundles

This section covers the Products API for managing your product and service catalog, and the Product Bundles API for grouping products into pre-configured packages.


Products

Products represent items or services that can be added as line items to invoices. Managing them via API lets you keep your catalog in sync with external systems.

Product Endpoints

All product endpoints require apiKeyAuth.

EndpointMethodDescription
GET /productsGETPaginated list of all products. Supports filtering and sorting.
GET /product/{id}GETGet a single product by its ID.
POST /productPOSTCreate a new product.
PATCH /product/{id}PATCHUpdate an existing product (partial update).
DELETE /product/{id}DELETEDelete a product. Returns { "succeed": true }.
GET /product/valid-codeGETCheck whether a product code is unique. Returns { "succeed": true/false }.

Query Parameters for GET /products

ParameterTypeDescription
pagenumberPage number (1-based).
perPagenumberResults per page.
sortstringField to sort by: code, name, unit, tax, price, cost, inventoryCount, createdAt, description, buyerAssignedID.
orderstringSort direction: asc or desc.
keywordstringSearch term matched against name, code, and description.
codestringFilter by exact product code.

Product Fields

FieldTypeRequiredDescription
namestringProduct name (no emoji).
unitstringUnit of measure (e.g., H87 for piece, HUR for hour).
taxnumberVAT rate in percent (e.g., 19, 7, 0).
codestringInternal product code or SKU.
descriptionstringProduct description (no emoji).
pricenumberSelling price (net).
costnumberPurchase cost.
inventoryCountnumberCurrent stock count.
timenumberEstimated time in hours.
estimatenumberEstimated value.
buyerAssignedIDstringBuyer-side product identifier (BT-156 in EN 16931).
globalIDobjectGlobal product identifier: { "id": "...", "schemeId": "..." }. schemeId must be an ISO/IEC 6523 code.
additionalReferencedDocumentobjectAdditional referenced document.
Example: Create a product
curl -X POST \
-H "X-API-KEY: your-api-token" \
-H "Content-Type: application/json" \
-d '{
"name": "Web Development Services",
"unit": "HUR",
"tax": 19,
"price": 120.00,
"code": "WEB-DEV-001",
"description": "Hourly rate for web development"
}' \
https://api.faktoora.com/api/v1/product

Response (200 OK) — the created product object including its id.

Example: List products with filtering
curl -G -H "X-API-KEY: your-api-token" \
--data-urlencode "keyword=development" \
--data-urlencode "page=1" \
--data-urlencode "perPage=20" \
--data-urlencode "sort=name" \
--data-urlencode "order=asc" \
https://api.faktoora.com/api/v1/products
Example: Validate a product code
curl -G -H "X-API-KEY: your-api-token" \
--data-urlencode "value=WEB-DEV-001" \
https://api.faktoora.com/api/v1/product/valid-code

Response (200 OK)

{ "succeed": false }

succeed: false means the code is already in use. succeed: true means the code is available.

Example: Update a product
curl -X PATCH \
-H "X-API-KEY: your-api-token" \
-H "Content-Type: application/json" \
-d '{
"price": 130.00
}' \
https://api.faktoora.com/api/v1/product/prod_abc123
Example: Delete a product
curl -X DELETE \
-H "X-API-KEY: your-api-token" \
https://api.faktoora.com/api/v1/product/prod_abc123

Response (200 OK)

{ "succeed": true }

Product Bundles

Product bundles group multiple products into a single package that can be added to invoices in one step. This feature is subscription-gated — it requires the PRODUCT_BUNDLE feature to be enabled on your account.

Feature requirement: All product bundle endpoints return 403 Forbidden if the PRODUCT_BUNDLE feature is not enabled on your subscription.

Product Bundle Endpoints

All product bundle endpoints require apiKeyAuth.

EndpointMethodDescription
GET /productbundlesGETPaginated list of all product bundles.
GET /productbundle/{id}GETGet a single product bundle by its ID.
POST /productbundlePOSTCreate a new product bundle.
PATCH /productbundle/{id}PATCHUpdate an existing product bundle (partial update).
DELETE /productbundle/{id}DELETEDelete a product bundle. Returns { "succeed": true }.
Example: List product bundles
curl -G -H "X-API-KEY: your-api-token" \
--data-urlencode "page=1" \
--data-urlencode "perPage=20" \
https://api.faktoora.com/api/v1/productbundles
Example: Delete a product bundle
curl -X DELETE \
-H "X-API-KEY: your-api-token" \
https://api.faktoora.com/api/v1/productbundle/bundle_xyz789

Response (200 OK)

{ "succeed": true }