Download OpenAPI specification:Download
The Tillhub API is a utility to acces POS data models in a flexible and model independent manner.
The API implements REST based on industry best practices, where possible, such [1]. The API tries to be idempotent with all resources, however with legal regulations and required business processes, we offer some higher level functions, such as deleting customers with GDPR conformity.
We not only allow doing operations on our own, but also abstract or connect third party APIs with their resources, such as ERP Systems, other apps and their backends, transaction signing APIs.
The documentation can be found on every API environment running, e.g. https://staging-api.tillhub.com, https://api.tillhub.com, via the download button at the top of this page.
Examples and how-to articles can be found under: https://developer.tillhub.com
The authentication flow is split in into several flows, to cater for multiple headless, headfull and elevation of rights scenarios:
Devices are considered Highly Trusted Clients and are required only to be passed a short password (like a short number sequence) that comes directly from the resource owner. This process will be described in greater detail in the device section. Unlike devices, users need to register through a headfull auth flow to validate themselves (e.g. email). More on that in User Authententication.
Flow | Example | Description |
---|---|---|
Highly Trusted Client | iPAd client after user auth or OTP auth | 1. The end user enters the credentials into the client application. 2. The client forwards the credentials to the API server 3. the API server validates the the OAuth token and issues a long lived token mean for the API client, but with limited access rights 4. The client can use the token to call the API on behalf of the end user. |
User Authentication | User with user/password and/or OTP auth | |
Service Accounts | SDKs | token or configuration file, e.g. included in the SDKs or via API call |
The login is (again) independent on the actual client and happens through the API. Users must specify their email and password and get returned a hard token, that does not expire, but can be blacklisted by the API and the user themselves. Blacklisting requires a new login procedure.
{
"status": 200,
"msg": "Authentication was good.",
"request": {
"host": "api.tillhub.com",
"id": "034bf4f9-4107-4bc0-bdab-882cae7d3e08"
},
"user": {
"id": "some-user-id",
"name": "some-user-name",
"legacy_id": "some-user-id-for-accounts-pre2018"
},
"token": "some-jwtoken",
"token_type": "Bearer",
"sub_user": {
"id": "dd77cd17-b0b6-408a-87c2-09dc88ad5145",
"created_at": "2020-03-25T10:30:58.052Z",
"updated_at": "2020-03-25T10:30:58.176Z",
"metadata": null,
"groups": null,
"scopes": null,
"attributes": null,
"user": {
"id": null,
"email": null
},
"description": "API User",
"active": true,
"role": "serviceaccount",
"parents": null,
"children": null,
"blocked": false,
"configuration_id": "6bcf2faa-b618-4b00-b12a-2a8bba9a9b31",
"user_id": null,
"deleted": false,
"api_key": "81f7f582-b3e9-4912-b45a-fdf23bdf3fc5",
"key": null,
"username": null,
"name": "Test",
"locations": null
},
"expires_at": "2020-05-28T07:28:44.000Z"
}
Subeseuquent API calls need to set an Authorization header in every request:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5c...
device authentication is currently restricted via email/password auth flow
A client generally has access to it's resources via the token it retrieves from the authentication flow. Clients can ask for delegated rights or being assigned such in order to access other account's data.
An example would the voucher API, where a user account 8dd82ae3-d8ba-4c5f-baff-b60509ebb7bf
can access the URI api/v0/vouchers/bb0aa785-e4bb-496f-bad6-f7e815a78f35?code=1234
(make a voucher lookup), but not api/v0/vouchers/bb0aa785-e4bb-496f-bad6-f7e815a78f35
(retrieve all vouchers).
In general the authorization is decoded into the JWT token retrieved by the authentication and can be inspected through tools like jwt.io.
The products model is at the heart of the application. Understanding and utlising the model is key.
The product system can be described as product-child model. The model can handle higher level product-product relations, relations to child products, such as deposits, variants of products (trousers with different sizes and colours) and vouchers.
All products also drive financial data processes, in order to comply with regulations. Revenues for products will be booked to accounts, have multiple taxes (e.g. lowered tax rates when selling a product for to-go, or different local taxes).
Prices of products can be based on scaling (such as 20x cans of soda will be bundled with a lower price but with a crate), depending on branch, region time of day or season.
The types will drive speicific behaviours in Tillhub Clients, e.g. demonstrate a view with the options to click through, an edit view of all product_variants
under a variant
product or automatically add items to carts.
API implementors and external clients should retrieve those product from their low to high specialisation. E.g. to start a sale of a variant
product it is likely more important to present the cashier with the options
combination and load the leafs of the options later or even just the target product. This selective retrieval can be driven through query parameters of the /products
endpoints.
Type | Stockable | Sellable | Description | Relevant Properties | Example | Comment |
---|---|---|---|---|---|---|
product | yes | yes | a simple product that carries description, prices etc. | name , description , prices |
a cooling fan | |
voucher | yes | yes | a voucher that can be sold or generated | name , description , prices |
a gift card that is pre-printed and stocked | |
linked_product | yes | yes | a product that has a mandatory linked product | name , description , prices (including scaled prices) |
a lemonade can with a mandatory deposit | Note that linked_product s can also include items, that do not exist as separate products, but will be embedded |
linked | (yes) | (yes) | a product that is linked to a parent | the deposit for a can | ||
variant_product | no | no | a variant product that has meta information, and has required children | options (transiently generated object), name , description |
a fashion shoe wiht different sizes and colours / a mobile phone with different technical speicifications like memory | |
variant | yes | yes | a product that is a child to a parent, has attributes and price information | attributes |
a sellable item of parent product with the combinations of one or more attributes, e.g. size and colour | |
composed_product | yes | yes | a product that is composed from other products with some quantity proportion | a glass of wine is made of 0.25 "Bordeaux bottle 1L" |
Below we will illustrate the type specific object extensions and later all the common properties.
We will embed a options comibations matrix as JSON map at query time
Note: generally we will apply a natural sort of the keys in our client, meaning special characters first, numeric characters second and lastly all strings alphabetically: e.g. sizes: -, 36, 40, M, L, XL, XS, XXL
// on the parent at query time
{
"id": "d3c685bd-ef6e-4891-b474-7b06857a547b", // unique resource ID in the database (not your custom ID / SKU) of the parent product
"stockable": false,
// ...other properties
"options": { // transient property at query time, for easier discovery
"size": ["22", "23", "24"],
"color": ["red", "orange"]
}
}
The attributes correspond to the matrix colum / row match of a single ID (for the first item in the matrix)
// on the parent at query time
{
"id": "6a9de45b-5a75-4b6b-90b3-9e33fd96be09", // unique resource ID in the database (not your custom ID / SKU) of the child product
"product": "d3c685bd-ef6e-4891-b474-7b06857a547b", // the parent product
"stockable": true,
// ...other properties
"attributes": { // property set upon product creation
"Size": "S",
"Colour": "blue"
}
}
{
"id": "8a7f7ba8-2240-4bda-ab10-3836c4d609d5",
// other properties
}
{
"id": "8a7f7ba8-2240-4bda-ab10-3836c4d609d5",
// other properties
"stockable": false // ... will likely denote a voucher that will be generated, e.g. printed. If true, there are e.g. physical gift cards that will be depleted
}
{
"id": "c33ace04-4c2c-496b-97e0-d720c62d95e5",
// other properties
"stockable": true,
"linked_to": [
{
// the full product that links to this product
"id": "8e15e674-148e-4bd2-a216-0536e5c6fd7e"
},
{
// the embedded versions
"name": "generic embedded deposit",
"account": "d20191ce-9f62-4e71-a4ff-e6ef3ab2fc73",
// other properties
"prices"; {
"default": [
{
"amount": {
"gross": 0.3,
"net": null
},
"currency": "EUR"
}
]
}
}
]
}
{
"id": "8e15e674-148e-4bd2-a216-0536e5c6fd7e",
// other properties
"stockable": false,
"prices"; {
"default": [
{
"amount": {
"gross": 0.3,
"net": null
},
"currency": "EUR"
}
]
}
}
Prices are naturally a very important class of properties. We support many kinds of prices and will add support for many more in the future. The type of prices usually drive temporally, spacially or numerically specific behaviour that often is at the heart of the our your business logic and proesses. Those are
Type | Description | Example | Comment |
---|---|---|---|
default_prices | A regular price with no special behaviour, or the fallback | ||
scaled_prices | rebated prices based on qty or mandatory thresholds | 30 lemonade bottles with a crate and some rebate | |
branch_prices | specific prices for branches, e.g. in different locations | A city shop needs to have more revenue than a rural one | |
purchase_prices | The base price to put margin on and calculate net and gross | ||
base_prices | prices based on units, e.g. price per 100ml | beauty product volumes, for comparison |
All prices come as amount
/ currency
pair, whereas the currency is an ISO 4217 formatted 3 letter string and the amount
an object of a net
and gross
value. net
and gross
have an either-or-relationship. This is because some clients prefer deriving the selling_price
from net
others form gross
. This becomes relevant on customer facing prices that need to be gross
stable, but have can have differnt taxes applied to them e.g. a coffee for 1.50
for "to-go" can in some countries be taxed with lower tax rates and clerks are required to ask this during the sales process.
{
"id": "8e15e674-148e-4bd2-a216-0536e5c6fd7e",
// other properties
"prices": {
"default_prices": [
{
"amount": {
"net": 1.49,
"gross": 1.77
},
"currency": "EUR"
}
],
"scaled_prices": [
{
"qty": 1,
"prices": [
{
"amount": {
"net": 1.49,
"gross": 1.77
},
"currency": "EUR"
}
]
},
{
"qty": 30,
"prices": [
{
"amount": {
"net": 1.49,
"gross": 1.77
},
"currency": "EUR"
}
]
}
],
"branch_prices": [
{
"branch": "e43f2a88-bae9-494f-979a-31438ecfa342",
"prices": [
{
"amount": {
"net": 1.49,
"gross": 1.77
},
"currency": "EUR"
}
]
},
{
"branch": "1ae7a14d-1ecb-4261-8c80-b80161efb79e",
"prices": [
{
"amount": {
"net": 1.49,
"gross": 1.77
},
"currency": "GBP"
}
]
}
]
}
}
Below we will list common properties, that drive special behaviour, require some knowledge or are required
metadata
The metdata is a field for arbitrary data anyone can use. for custom data as JSON object. Though we do not have any household guarentees for preserving information here, it's generally safe to store custom information here (that will not be used by Tillhub clients). We often use this during bulk importants of possibly incompatible data we need to keep reference to temporarily.
custom_id
The custom_id
typically refers to a generic product number, that does not follow any format, standardization or business logic. This custom field that is queryable in client application.
attributes
The attributes
field drives the options logic in variant_products
, to that extent that the key value combinations will be shown in a option selection. When configured in the configurations API, also regular products can display attributes for informational purposes. Note that keys are UTF-8 and will be shown in the UI.
{
"attributes": {
"Size": "S",
"Colour": "blue"
}
}
sku
Business that have a complete stock system and ensure uniqueness of SKUs (Stock keeping unit), can store such in the sku
field. This field will be relevant during translation of external systems and in our stock management if so desired. Many businesses will have overlap to custom_id
s here though.
gtin
Bsiness that are running standardised Global Trade Item Numbers can reference such in the gtin
field.
stock_minimum
For doing stock and order management we have a number of ways predicting or informing on low stock. The numeric, not null
, stock minimum is the sure circuit breaker, to receive an email notification (if desired) or the item as suggestion once a corresponding stock falls under this threshold.
barcodes
Barcodes drive the local discovery of data. They come in many formats.
serial_number_input_required
Defines whether a product requires to enter a serial number during the sale so cashier must enter and store this information in the cart item.
For the products API documentation, jump to
The Tillhub locations model allows to physically or virtually separate business entities of an account.
The most simple and even required business entity is the branch
. A branch for example can have stock, has a separated financial scheme, is a physical location that cannot exist twice and has registers.
Below is a list of all entity types and their specific behaviours
Name | Description | Example | Stock | Financial Scheme | Belongs to | Can Have Separated Configuration | physical / Virtual | Required / Requires | Comment |
---|---|---|---|---|---|---|---|---|---|
branches |
a business branch | a branch of a chain of stores that legally belong togehter | yes | yes | (Tillhub) client_accounts |
yes | physical | yes / registers | |
registers |
a Tillhub register / license | - | no | yes | branches |
yes | physical | yes / - | Note: registers must be bound to branches. If they are already bound to a branch they need to be unbound in order to reutilise the license |
clients |
a virtual construct to separate arbitrary business entities | the shop-in-shop of a brand in a department store | yes | yes | not required, but common to e.g. branches |
yes | physical and virtual | - / registers |
clients must at least be set on a register |
warehouses |
a physical warehouse | a central warehouse | yes | no | - | no | physical | - / - | |
shelves |
a shelf in a warehouse | a storage location in a warehouse | yes | no | warehouses |
no | physical | no / warehouses |
We are validating incoming data rather strictly as a data quality mechanism. For example on any call, may it be POST, PUT, PATCH we throwing validation errors, when one sends fields like id
, created_at
or updated_at
, because when it is send we assume the client wants to write those fields, which is not allowed.
NOTE: we currently allow sending some properties for convenience of some downstream clients, but may remove support any time without notice
Most validations are based on JSON Schema, which we will publish also in the future.
The most secure way to send updates is using the PATCH routes which may explicitly allow the content type application/json-patch+json
for JSON Patch.
An example from http://jsonpatch.com/ would be
{
"baz": "qux",
"foo": "bar"
}
[
{ "op": "replace", "path": "/baz", "value": "boo" },
{ "op": "add", "path": "/hello", "value": ["world"] },
{ "op": "remove", "path": "/foo"}
]
{
"baz": "boo",
"hello": ["world"]
}
For some of the APIs we offer configurable integrations into third party systems, such as webhooks, message queues or direct implementations.
E.g. the customers
, transactions
and vouchers
APIs it is possible to get realtime updates via a message queue based on Google PubSub. Client libraries are available for a number of languages
Client accounts are required to purchase support of this feature (if applies), configure it and authenticating a matching service account.
While the client account is being created the API will also factor google service accounts and create the necessary topics and subscriptions.
The returned google credentials can be use as credentials object for the PubSub SDK Classes
const topic = new PubSub({
// credentials come as JSON and have the necessary information, like the google project, already included
credentials: CREDENTIALS
}).topic('api.v1.transactions')
const subscription = topic.subscription('api.v1.transactions', {
flowControl: {
maxMessages: 5
}
})
subscription.on('error', (err) => console.error(err))
subscription.on('message', (msg) => console.log(msg))
Scenario: an external application wants to create a cart that can be consumed by Tillhub client applications and to a valid sale while using local payment methods.
Actions:
authenticate through any auth mechanism from the /users/login
-API
Note: Mensure or assume you are sufficiently authorised to do all following actions
query a product from the /product
-API
Note: ensure that the product is on the last leaf of the product-child model, namely that it can be sold. It must have a price and financial information, such as accounts and taxes.
Construct a cart via the /carts
-API
Note: comply to the required fields. This contract then will then make sure to fill all other necessary parameters implicitly.
The simplest form of authentication is via the accounts password and email. All other flows, such as delegated account, a service account or an API token, will yield the same the same response, but with differnt tokens. Those token might then have fewer rights and/or a shorter/longer lifetime.
curl -X POST \
https://api.tillhub.com/api/v0/users/login \
-H 'Content-Type: application/json' \
-d '{
"email": "[email protected]",
"password": "[PASSWORD OMITTED]"
}'
Response:
{
"status": 200,
"msg": "Authentication was good.",
"request": {
"host": "api.tillhub.com",
"id": "0694a625-1892-4782-9a1f-7faaa98da19c"
},
"user": {
"id": "b8ca3bbd-df45-4228-8b97-e5d8e986f2f3",
"name": "demo-demo",
"legacy_id": "EDDB2494C2434EFE948655D6BA27E69A"
},
"valid_password": true,
"token": "[TOKEN OMITTED]",
"token_type": "Bearer",
"expires_at": "2018-06-22T14:52:38.000Z"
}
Please take note here of the user object. The IDs here are critical for making subsequent calls, as we will describe below. It is imperative to check for the legacy_id
field though, since some of our accounts are having assigned while others have not been. If there legacy ID is present always use it in subsequent calls. This has historic reasons and is important for our tenancy model.
Any further call will be made on the client accounts resources. That is either the id or legacy ID as described in the previous paragraph. The ID must constructed into the request's URL as we can see in the following call to the products API:
A product can be searched by a number of parameters or you can list them all and and have your custom selection logic.
Below is an example to search a product by barcode. Note, that this likely implicilty returns a product that is sellable, because higher level products, like a variant usually do not have barcodes since they are not stockable.
curl -X GET \
'https://api.tillhub.com/api/v1/products/EDDB2494C2434EFE948655D6BA27E69A?barcode=55000182' \
-H 'Cache-Control: no-cache' \
-H 'Authorization: Bearer [TOKEN OMITTED]'
Note the use of the client account ID. Also take note, that depending on your use case or application maturity, you can use differnt API versions. When starting development greenfield, please always use the highest version number.
Response:
{
"status": 200,
"msg": "Queried products successfully.",
"request": {
"host": "api.tillhub.com",
"id": "732a5ebb-8864-4ba2-8818-1189aa737db1",
"cursor": {
"first": {
"id": "f5f2b11e-d7e7-47f0-ba26-c4322b2f4552",
"updated_at": "2018-03-02T19:08:22.000Z",
"page": 0,
"cursor_field": "updated_at"
},
"page": 0
}
},
"cursor": {
"first": "https://api.tillhub.com/api/v0/products/EDDB2494C2434EFE948655D6BA27E69A?first=2018-03-02T19%3A08%3A22.000Z&page=0&size=1000&cursor_field=updated_at",
"self": "https://api.tillhub.com/api/v0/products/EDDB2494C2434EFE948655D6BA27E69A?first=2018-03-02T19%3A08%3A22.000Z&page=0&size=1000&cursor_field=updated_at"
},
"count": 1,
"results": [
{
"id": "f5f2b11e-d7e7-47f0-ba26-c4322b2f4552",
"metadata": 44,
"created_at": {
"iso": "2018-03-02T19:08:22.000Z",
"unix": 1520017702000
},
"updated_at": {
"iso": "2018-03-02T19:08:22.000Z",
"unix": 1520017702000
},
"product": null,
"product_group": "0abcdc67-f619-4db9-a2c6-7828580d399d",
"name": "Ice Cream",
"description": null,
"type": "product",
"summary": null,
"account": "3abcdc67-f619-4db9-a2c6-7828580d399d",
"tax": "2abcdc67-f619-4db9-a2c6-7828580d399d",
"category": null,
"images": null,
"condition": null,
"manufacturer": null,
"produced_at": null,
"purchased_at": null,
"released_at": null,
"similar_to": null,
"related_to": null,
"audiences": null,
"keywords": null,
"categories": null,
"custom_ids": null,
"active": true,
"deleted": false,
"insert_id": 16,
"brand": null,
"prices": {
"default_prices": [
{
"amount": {
"net": 1.59,
"gross": 1.49
},
"currency": "EUR"
}
],
"scaled_prices": [
{
"qty": 1,
"prices": [
{
"amount": {
"net": 1.59,
"gross": 1.49
},
"currency": "EUR"
}
]
},
{
"qty": 30,
"prices": [
{
"amount": {
"net": 1.59,
"gross": 1.49
},
"currency": "EUR"
}
]
}
],
"branch_prices": [
{
"branch": "e43f2a88-bae9-494f-979a-31438ecfa342",
"prices": [
{
"amount": {
"net": 1.59,
"gross": 1.49
},
"currency": "EUR"
}
]
},
{
"branch": "1ae7a14d-1ecb-4261-8c80-b80161efb79e",
"prices": [
{
"amount": {
"net": 1.59,
"gross": 1.49
},
"currency": "GBP"
}
]
}
]
},
"stock_minimum": null,
"stockable": true,
"attributes": null,
"custom_id": null,
"linked_to": null,
"barcode": "55000182"
}
]
}
Alternatively, you can search for products by their textual information and their custom id (which is generic "product number"). This will match all strings on all of those fields combined, that start with, end with or contain the input of q
.
curl -X GET \
'https://api.tillhub.com/api/v1/products/EDDB2494C2434EFE948655D6BA27E69A/search?q=ice%20cream' \
-H 'Cache-Control: no-cache' \
-H 'Authorization: Bearer [TOKEN OMITTED]'
curl -X POST \
https://api.tillhub.com/api/v0/carts/EDDB2494C2434EFE948655D6BA27E69A \
-H 'Authorization: Bearer [TOKEN OMITTED]' \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: application/json' \
-d '{
"client_id": "SOME ID of your choosing",
"cartitems": [
{
"product": "f5f2b11e-d7e7-47f0-ba26-c4322b2f4552",
"qty": 1,
"discounts": [
{
"amount": 25,
"group": "cart",
"name": "Erstkundenrabatt",
"type": "percentage"
}
]
}
]
}'
Note: the cart item takes optional fields, that can be set manually also if prices are not available. That is the single selling_price
(includes discounts) of the item, the quantity of all selling_price
s and the origial_price
of the product.
tenantId required | string |
companyName | string |
number | string |
taxNumber | string |
q | string |
start | string |
end | string |
limit | number Default: 100 |
offset | number Default: 0 |
orderFields | Array of strings |
{- "cursors": {
- "after": "string",
- "before": "string"
}, - "msg": "Success",
- "results": [
- {
- "accountsPayable": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "accountsReceivable": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "active": true,
- "addresses": [
- {
- "country": "string",
- "createdAt": null,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "lines": "string",
- "locality": "string",
- "postalCode": "string",
- "region": "string",
- "street": "string",
- "streetNumber": "string",
- "type": "default",
- "updatedAt": null
}
], - "bankAccounts": [
- {
- "createdAt": null,
- "iban": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "swift": "string",
- "updatedAt": null
}
], - "companyName": "string",
- "createdAt": null,
- "deletedAt": null,
- "description": "string",
- "firstName": "string",
- "glnNumber": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "lastName": "string",
- "number": "string",
- "paymentTerms": 0,
- "phoneNumbers": [
- {
- "createdAt": null,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "number": "string",
- "type": "main",
- "updatedAt": null
}
], - "taxNumber": "string",
- "taxSubject": true,
- "updatedAt": null
}
], - "status": 200
}
tenantId required | string |
accountsPayable | Array of strings <uuid> |
accountsReceivable | Array of strings <uuid> |
active | boolean |
Array of objects | |
Array of objects | |
companyName required | string or null non-empty |
createdAt | string |
deletedAt | string or null |
description | string or null |
string or null <email> | |
firstName | string or null |
glnNumber | string or null |
id | string <uuid> |
lastName | string or null |
number | string or null |
paymentTerms | integer or null >= 0 |
Array of objects | |
taxNumber | string or null |
taxSubject | boolean |
updatedAt | string |
{- "accountsPayable": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "accountsReceivable": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "active": true,
- "addresses": [
- {
- "country": "string",
- "createdAt": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "lines": "string",
- "locality": "string",
- "postalCode": "string",
- "region": "string",
- "street": "string",
- "streetNumber": "string",
- "type": "default",
- "updatedAt": "string"
}
], - "bankAccounts": [
- {
- "createdAt": "string",
- "iban": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "swift": "string",
- "updatedAt": "string"
}
], - "companyName": "string",
- "createdAt": "string",
- "deletedAt": "string",
- "description": "string",
- "firstName": "string",
- "glnNumber": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "lastName": "string",
- "number": "string",
- "paymentTerms": 0,
- "phoneNumbers": [
- {
- "createdAt": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "number": "string",
- "type": "main",
- "updatedAt": "string"
}
], - "taxNumber": "string",
- "taxSubject": true,
- "updatedAt": "string"
}
{- "cursors": {
- "after": "string",
- "before": "string"
}, - "msg": "Success",
- "results": [
- {
- "accountsPayable": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "accountsReceivable": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "active": true,
- "addresses": [
- {
- "country": "string",
- "createdAt": null,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "lines": "string",
- "locality": "string",
- "postalCode": "string",
- "region": "string",
- "street": "string",
- "streetNumber": "string",
- "type": "default",
- "updatedAt": null
}
], - "bankAccounts": [
- {
- "createdAt": null,
- "iban": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "swift": "string",
- "updatedAt": null
}
], - "companyName": "string",
- "createdAt": null,
- "deletedAt": null,
- "description": "string",
- "firstName": "string",
- "glnNumber": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "lastName": "string",
- "number": "string",
- "paymentTerms": 0,
- "phoneNumbers": [
- {
- "createdAt": null,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "number": "string",
- "type": "main",
- "updatedAt": null
}
], - "taxNumber": "string",
- "taxSubject": true,
- "updatedAt": null
}
], - "status": 200
}
tenantId required | string |
companyName | string |
number | string |
taxNumber | string |
q | string |
start | string |
end | string |
limit | number Default: 100 |
offset | number Default: 0 |
orderFields | Array of strings |
{- "cursors": {
- "after": "string",
- "before": "string"
}, - "msg": "Success",
- "results": [
- {
- "expiresAt": "string",
- "filename": "string",
- "url": "string"
}
], - "status": 200
}
tenantId required | string |
accountsPayable | Array of strings <uuid> |
accountsReceivable | Array of strings <uuid> |
active | boolean |
Array of objects | |
Array of objects | |
companyName required | string or null non-empty |
createdAt | string |
deletedAt | string or null |
description | string or null |
string or null <email> | |
firstName | string or null |
glnNumber | string or null |
id | string <uuid> |
lastName | string or null |
number | string or null |
paymentTerms | integer or null >= 0 |
Array of objects | |
taxNumber | string or null |
taxSubject | boolean |
updatedAt | string |
[- {
- "accountsPayable": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "accountsReceivable": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "active": true,
- "addresses": [
- {
- "country": "string",
- "createdAt": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "lines": "string",
- "locality": "string",
- "postalCode": "string",
- "region": "string",
- "street": "string",
- "streetNumber": "string",
- "type": "default",
- "updatedAt": "string"
}
], - "bankAccounts": [
- {
- "createdAt": "string",
- "iban": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "swift": "string",
- "updatedAt": "string"
}
], - "companyName": "string",
- "createdAt": "string",
- "deletedAt": "string",
- "description": "string",
- "firstName": "string",
- "glnNumber": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "lastName": "string",
- "number": "string",
- "paymentTerms": 0,
- "phoneNumbers": [
- {
- "createdAt": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "number": "string",
- "type": "main",
- "updatedAt": "string"
}
], - "taxNumber": "string",
- "taxSubject": true,
- "updatedAt": "string"
}
]
{- "cursors": {
- "after": "string",
- "before": "string"
}, - "msg": "Success",
- "results": [
- {
- "count": 0,
- "errors": [
- {
- "key": "string",
- "text": "string"
}
]
}
], - "status": 200
}
tenantId required | string |
companyName | string |
number | string |
taxNumber | string |
q | string |
start | string |
end | string |
limit | number Default: 100 |
offset | number Default: 0 |
orderFields | Array of strings |
{- "cursors": {
- "after": "string",
- "before": "string"
}, - "msg": "Success",
- "results": [
- {
- "count": 0
}
], - "status": 200
}
{- "cursors": {
- "after": "string",
- "before": "string"
}, - "msg": "Success",
- "results": [
- {
- "accountsPayable": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "accountsReceivable": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "active": true,
- "addresses": [
- {
- "country": "string",
- "createdAt": null,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "lines": "string",
- "locality": "string",
- "postalCode": "string",
- "region": "string",
- "street": "string",
- "streetNumber": "string",
- "type": "default",
- "updatedAt": null
}
], - "bankAccounts": [
- {
- "createdAt": null,
- "iban": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "swift": "string",
- "updatedAt": null
}
], - "companyName": "string",
- "createdAt": null,
- "deletedAt": null,
- "description": "string",
- "firstName": "string",
- "glnNumber": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "lastName": "string",
- "number": "string",
- "paymentTerms": 0,
- "phoneNumbers": [
- {
- "createdAt": null,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "number": "string",
- "type": "main",
- "updatedAt": null
}
], - "taxNumber": "string",
- "taxSubject": true,
- "updatedAt": null
}
], - "status": 200
}
tenantId required | string |
id required | string <uuid> |
accountsPayable | Array of strings <uuid> |
accountsReceivable | Array of strings <uuid> |
active | boolean |
Array of objects | |
Array of objects | |
companyName required | string or null non-empty |
createdAt | string |
deletedAt | string or null |
description | string or null |
string or null <email> | |
firstName | string or null |
glnNumber | string or null |
id | string <uuid> |
lastName | string or null |
number | string or null |
paymentTerms | integer or null >= 0 |
Array of objects | |
taxNumber | string or null |
taxSubject | boolean |
updatedAt | string |
{- "accountsPayable": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "accountsReceivable": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "active": true,
- "addresses": [
- {
- "country": "string",
- "createdAt": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "lines": "string",
- "locality": "string",
- "postalCode": "string",
- "region": "string",
- "street": "string",
- "streetNumber": "string",
- "type": "default",
- "updatedAt": "string"
}
], - "bankAccounts": [
- {
- "createdAt": "string",
- "iban": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "swift": "string",
- "updatedAt": "string"
}
], - "companyName": "string",
- "createdAt": "string",
- "deletedAt": "string",
- "description": "string",
- "firstName": "string",
- "glnNumber": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "lastName": "string",
- "number": "string",
- "paymentTerms": 0,
- "phoneNumbers": [
- {
- "createdAt": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "number": "string",
- "type": "main",
- "updatedAt": "string"
}
], - "taxNumber": "string",
- "taxSubject": true,
- "updatedAt": "string"
}
{- "cursors": {
- "after": "string",
- "before": "string"
}, - "msg": "Success",
- "results": [
- {
- "accountsPayable": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "accountsReceivable": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "active": true,
- "addresses": [
- {
- "country": "string",
- "createdAt": null,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "lines": "string",
- "locality": "string",
- "postalCode": "string",
- "region": "string",
- "street": "string",
- "streetNumber": "string",
- "type": "default",
- "updatedAt": null
}
], - "bankAccounts": [
- {
- "createdAt": null,
- "iban": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "swift": "string",
- "updatedAt": null
}
], - "companyName": "string",
- "createdAt": null,
- "deletedAt": null,
- "description": "string",
- "firstName": "string",
- "glnNumber": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "lastName": "string",
- "number": "string",
- "paymentTerms": 0,
- "phoneNumbers": [
- {
- "createdAt": null,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "number": "string",
- "type": "main",
- "updatedAt": null
}
], - "taxNumber": "string",
- "taxSubject": true,
- "updatedAt": null
}
], - "status": 200
}
tenantId required | string |
productId required | string <uuid> |
{- "cursors": {
- "after": "string",
- "before": "string"
}, - "msg": "Success",
- "results": [
- {
- "businessPartners": [
- {
- "accountsPayable": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "accountsReceivable": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "active": true,
- "addresses": [
- {
- "country": "string",
- "createdAt": null,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "lines": "string",
- "locality": "string",
- "postalCode": "string",
- "region": "string",
- "street": "string",
- "streetNumber": "string",
- "type": "default",
- "updatedAt": null
}
], - "bankAccounts": [
- {
- "createdAt": null,
- "iban": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "swift": "string",
- "updatedAt": null
}
], - "companyName": "string",
- "createdAt": null,
- "deletedAt": null,
- "description": "string",
- "firstName": "string",
- "glnNumber": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "lastName": "string",
- "number": "string",
- "paymentTerms": 0,
- "phoneNumbers": [
- {
- "createdAt": null,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "number": "string",
- "type": "main",
- "updatedAt": null
}
], - "taxNumber": "string",
- "taxSubject": true,
- "updatedAt": null
}
], - "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113"
}
], - "status": 200
}
tenantId required | string |
createdAt | string |
id | string <uuid> |
productId required | Array of strings <uuid> |
updatedAt | string |
{- "createdAt": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "productId": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "updatedAt": "string"
}
{- "cursors": {
- "after": "string",
- "before": "string"
}, - "msg": "Success",
- "results": [
- {
- "businessPartners": {
- "property1": {
- "accountsPayable": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "accountsReceivable": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "active": true,
- "addresses": [
- {
- "country": "string",
- "createdAt": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "lines": "string",
- "locality": "string",
- "postalCode": "string",
- "region": "string",
- "street": "string",
- "streetNumber": "string",
- "type": "default",
- "updatedAt": "string"
}
], - "bankAccounts": [
- {
- "createdAt": "string",
- "iban": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "swift": "string",
- "updatedAt": "string"
}
], - "companyName": "string",
- "createdAt": "string",
- "deletedAt": "string",
- "description": "string",
- "firstName": "string",
- "glnNumber": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "lastName": "string",
- "number": "string",
- "paymentTerms": 0,
- "phoneNumbers": [
- {
- "createdAt": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "number": "string",
- "type": "main",
- "updatedAt": "string"
}
], - "taxNumber": "string",
- "taxSubject": true,
- "updatedAt": "string"
}, - "property2": {
- "accountsPayable": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "accountsReceivable": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "active": true,
- "addresses": [
- {
- "country": "string",
- "createdAt": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "lines": "string",
- "locality": "string",
- "postalCode": "string",
- "region": "string",
- "street": "string",
- "streetNumber": "string",
- "type": "default",
- "updatedAt": "string"
}
], - "bankAccounts": [
- {
- "createdAt": "string",
- "iban": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "swift": "string",
- "updatedAt": "string"
}
], - "companyName": "string",
- "createdAt": "string",
- "deletedAt": "string",
- "description": "string",
- "firstName": "string",
- "glnNumber": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "lastName": "string",
- "number": "string",
- "paymentTerms": 0,
- "phoneNumbers": [
- {
- "createdAt": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "number": "string",
- "type": "main",
- "updatedAt": "string"
}
], - "taxNumber": "string",
- "taxSubject": true,
- "updatedAt": "string"
}
}, - "productsToBusinessPartnersMap": {
- "property1": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "property2": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}
}
], - "status": 200
}
tenantId required | string |
businessPartnerId required | string <uuid> |
createdAt | string |
id | string <uuid> |
productId required | Array of strings <uuid> |
updatedAt | string |
{- "createdAt": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "productId": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "updatedAt": "string"
}
{- "cursors": {
- "after": "string",
- "before": "string"
}, - "msg": "Success",
- "results": [
- {
- "businessPartnerId": "08bdfefc-b1ce-4c99-a2d9-676298f0109d",
- "productId": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}
], - "status": 200
}
tenantId required | string |
businessPartnerId required | string <uuid> |
{- "cursors": {
- "after": "string",
- "before": "string"
}, - "msg": "Success",
- "results": [
- {
- "businessPartnerId": "08bdfefc-b1ce-4c99-a2d9-676298f0109d",
- "productId": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}
], - "status": 200
}
tenantId required | string |
businessPartnerId required | string <uuid> |
createdAt | string |
id | string <uuid> |
productId required | Array of strings <uuid> |
updatedAt | string |
{- "createdAt": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "productId": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "updatedAt": "string"
}
{- "cursors": {
- "after": "string",
- "before": "string"
}, - "msg": "Success",
- "results": [
- {
- "businessPartnerId": "08bdfefc-b1ce-4c99-a2d9-676298f0109d",
- "productId": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}
], - "status": 200
}
tenantId required | string |
businessPartnerId required | string <uuid> |
productId required | string <uuid> |
{- "cursors": {
- "after": "string",
- "before": "string"
}, - "msg": "Success",
- "results": [
- {
- "businessPartnerId": "08bdfefc-b1ce-4c99-a2d9-676298f0109d",
- "productId": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}
], - "status": 200
}
tenantId required | string |
businessPartnerId required | string <uuid> |
productId required | string <uuid> |
{- "cursors": {
- "after": "string",
- "before": "string"
}, - "msg": "Success",
- "results": [
- {
- "businessPartnerId": "08bdfefc-b1ce-4c99-a2d9-676298f0109d",
- "productId": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}
], - "status": 200
}
tenantId required | string |
businessPartnerId required | string <uuid> |
{- "cursors": {
- "after": "string",
- "before": "string"
}, - "msg": "Success",
- "results": [
- {
- "businessPartnerId": "08bdfefc-b1ce-4c99-a2d9-676298f0109d",
- "products": [
- {
- "minOrder": 0,
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113"
}
]
}
], - "status": 200
}
tenantId required | string |
businessPartnerId required | string <uuid> |
minOrder | number >= 0 |
productId required | string <uuid> |
{- "minOrder": 0,
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113"
}
{- "cursors": {
- "after": "string",
- "before": "string"
}, - "msg": "Success",
- "results": [
- {
- "businessPartnerId": "08bdfefc-b1ce-4c99-a2d9-676298f0109d",
- "productId": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}
], - "status": 200
}
tenantId required | string |
businessPartnerId required | string <uuid> |
createdAt | string |
id | string <uuid> |
required | Array of objects |
updatedAt | string |
{- "createdAt": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "products": [
- {
- "minOrder": 0,
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113"
}
], - "updatedAt": "string"
}
{- "cursors": {
- "after": "string",
- "before": "string"
}, - "msg": "Success",
- "results": [
- null
], - "status": 200
}
tenantId required | string |
businessPartnerId | string |
businessPartnerName | string |
status | string |
orderNumber | string |
q | string |
start | string |
end | string |
limit | number Default: 100 |
offset | number Default: 0 |
orderFields | Array of strings |
{- "cursors": {
- "after": "string",
- "before": "string"
}, - "msg": "Success",
- "results": [
- {
- "businessPartner": {
- "companyName": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}, - "consignmentNotes": [
- null
], - "createdAt": null,
- "createdBy": "25a02396-1048-48f9-bf93-102d2fb7895e",
- "creatorFullName": "string",
- "doneAt": null,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5",
- "notes": "string",
- "products": [
- {
- "createdAt": null,
- "discountPercent": 0,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "price": 0,
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "productName": "string",
- "quantity": 0,
- "quantityReceived": 0,
- "totalUntaxed": 0,
- "totalWithTax": 0,
- "updatedAt": null,
- "vatPercent": 0
}
], - "productsMissingQuantity": 0,
- "purchaseOrderNumber": "string",
- "sentAt": null,
- "status": "draft",
- "totalAmount": 0,
- "updatedAt": null
}
], - "status": 200
}
tenantId required | string |
active | boolean |
object | |
createdAt | string |
deletedAt | string or null |
id | string <uuid> |
location | string or null <uuid> |
notes | string or null |
purchaseOrderNumber | string non-empty |
recipients | Array of strings <email> |
status | string Enum: "draft" "sent" "done" |
updatedAt | string |
{- "active": true,
- "businessPartner": {
- "Id": "38a5a5bb-dc30-49a2-b175-1de0d1488c43"
}, - "createdAt": "string",
- "deletedAt": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5",
- "notes": "string",
- "purchaseOrderNumber": "string",
- "status": "draft",
- "updatedAt": "string"
}
{- "cursors": {
- "after": "string",
- "before": "string"
}, - "msg": "Success",
- "results": [
- {
- "businessPartner": {
- "companyName": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}, - "consignmentNotes": [
- null
], - "createdAt": null,
- "createdBy": "25a02396-1048-48f9-bf93-102d2fb7895e",
- "creatorFullName": "string",
- "doneAt": null,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5",
- "notes": "string",
- "products": [
- {
- "createdAt": null,
- "discountPercent": 0,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "price": 0,
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "productName": "string",
- "quantity": 0,
- "quantityReceived": 0,
- "totalUntaxed": 0,
- "totalWithTax": 0,
- "updatedAt": null,
- "vatPercent": 0
}
], - "productsMissingQuantity": 0,
- "purchaseOrderNumber": "string",
- "sentAt": null,
- "status": "draft",
- "totalAmount": 0,
- "updatedAt": null
}
], - "status": 200
}
tenantId required | string |
businessPartnerId | string |
businessPartnerName | string |
status | string |
orderNumber | string |
q | string |
start | string |
end | string |
limit | number Default: 100 |
offset | number Default: 0 |
orderFields | Array of strings |
{- "cursors": {
- "after": "string",
- "before": "string"
}, - "msg": "Success",
- "results": [
- {
- "bucket": "string",
- "expiresAt": "string",
- "filePath": "string",
- "filename": "string",
- "url": "string"
}
], - "status": 200
}
tenantId required | string |
businessPartnerId | string |
businessPartnerName | string |
status | string |
orderNumber | string |
q | string |
start | string |
end | string |
limit | number Default: 100 |
offset | number Default: 0 |
orderFields | Array of strings |
{- "cursors": {
- "after": "string",
- "before": "string"
}, - "msg": "Success",
- "results": [
- {
- "count": 0
}
], - "status": 200
}
tenantId required | string |
purchaseOrderId required | string <uuid> |
{- "cursors": {
- "after": "string",
- "before": "string"
}, - "msg": "Success",
- "results": [
- {
- "businessPartner": {
- "companyName": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}, - "consignmentNotes": [
- null
], - "createdAt": null,
- "createdBy": "25a02396-1048-48f9-bf93-102d2fb7895e",
- "creatorFullName": "string",
- "doneAt": null,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5",
- "notes": "string",
- "products": [
- {
- "createdAt": null,
- "discountPercent": 0,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "price": 0,
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "productName": "string",
- "quantity": 0,
- "quantityReceived": 0,
- "totalUntaxed": 0,
- "totalWithTax": 0,
- "updatedAt": null,
- "vatPercent": 0
}
], - "productsMissingQuantity": 0,
- "purchaseOrderNumber": "string",
- "sentAt": null,
- "status": "draft",
- "totalAmount": 0,
- "updatedAt": null
}
], - "status": 200
}
tenantId required | string |
purchaseOrderId required | string <uuid> |
active | boolean |
object | |
createdAt | string |
deletedAt | string or null |
id | string <uuid> |
location | string or null <uuid> |
notes | string or null |
purchaseOrderNumber | string non-empty |
recipients | Array of strings <email> |
status | string Enum: "draft" "sent" "done" |
updatedAt | string |
{- "active": true,
- "businessPartner": {
- "Id": "38a5a5bb-dc30-49a2-b175-1de0d1488c43"
}, - "createdAt": "string",
- "deletedAt": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5",
- "notes": "string",
- "purchaseOrderNumber": "string",
- "status": "draft",
- "updatedAt": "string"
}
{- "cursors": {
- "after": "string",
- "before": "string"
}, - "msg": "Success",
- "results": [
- {
- "businessPartner": {
- "companyName": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}, - "consignmentNotes": [
- null
], - "createdAt": null,
- "createdBy": "25a02396-1048-48f9-bf93-102d2fb7895e",
- "creatorFullName": "string",
- "doneAt": null,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5",
- "notes": "string",
- "products": [
- {
- "createdAt": null,
- "discountPercent": 0,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "price": 0,
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "productName": "string",
- "quantity": 0,
- "quantityReceived": 0,
- "totalUntaxed": 0,
- "totalWithTax": 0,
- "updatedAt": null,
- "vatPercent": 0
}
], - "productsMissingQuantity": 0,
- "purchaseOrderNumber": "string",
- "sentAt": null,
- "status": "draft",
- "totalAmount": 0,
- "updatedAt": null
}
], - "status": 200
}
tenantId required | string |
purchaseOrderId required | string <uuid> |
{- "cursors": {
- "after": "string",
- "before": "string"
}, - "msg": "Success",
- "results": [
- {
- "base64Content": "string",
- "contentType": "application/pdf",
- "filename": "string"
}
], - "status": 200
}
tenantId required | string |
purchaseOrderId required | string <uuid> |
{- "cursors": {
- "after": "string",
- "before": "string"
}, - "msg": "Success",
- "results": [
- {
- "body": "string",
- "replyToEmail": "string",
- "subject": "string"
}
], - "status": 200
}
tenantId required | string |
purchaseOrderId required | string <uuid> |
products required | Array of strings <uuid> non-empty |
{- "products": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}
{- "cursors": {
- "after": "string",
- "before": "string"
}, - "msg": "Success",
- "results": [
- {
- "businessPartner": {
- "companyName": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}, - "consignmentNotes": [
- null
], - "createdAt": null,
- "createdBy": "25a02396-1048-48f9-bf93-102d2fb7895e",
- "creatorFullName": "string",
- "doneAt": null,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5",
- "notes": "string",
- "products": [
- {
- "createdAt": null,
- "discountPercent": 0,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "price": 0,
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "productName": "string",
- "quantity": 0,
- "quantityReceived": 0,
- "totalUntaxed": 0,
- "totalWithTax": 0,
- "updatedAt": null,
- "vatPercent": 0
}
], - "productsMissingQuantity": 0,
- "purchaseOrderNumber": "string",
- "sentAt": null,
- "status": "draft",
- "totalAmount": 0,
- "updatedAt": null
}
], - "status": 200
}
tenantId required | string |
purchaseOrderId required | string <uuid> |
required | Array of objects non-empty |
{- "products": [
- {
- "active": true,
- "createdAt": "string",
- "deletedAt": "string",
- "discountPercent": 0,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "price": 0,
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "productName": "string",
- "quantity": 0,
- "quantityReceived": 0,
- "totalUntaxed": 0,
- "totalWithTax": 0,
- "updatedAt": "string",
- "vatPercent": 0
}
]
}
{- "cursors": {
- "after": "string",
- "before": "string"
}, - "msg": "Success",
- "results": [
- {
- "businessPartner": {
- "companyName": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}, - "consignmentNotes": [
- null
], - "createdAt": null,
- "createdBy": "25a02396-1048-48f9-bf93-102d2fb7895e",
- "creatorFullName": "string",
- "doneAt": null,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5",
- "notes": "string",
- "products": [
- {
- "createdAt": null,
- "discountPercent": 0,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "price": 0,
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "productName": "string",
- "quantity": 0,
- "quantityReceived": 0,
- "totalUntaxed": 0,
- "totalWithTax": 0,
- "updatedAt": null,
- "vatPercent": 0
}
], - "productsMissingQuantity": 0,
- "purchaseOrderNumber": "string",
- "sentAt": null,
- "status": "draft",
- "totalAmount": 0,
- "updatedAt": null
}
], - "status": 200
}
tenantId required | string |
productId required | string <uuid> |
{- "cursors": {
- "after": "string",
- "before": "string"
}, - "msg": "Success",
- "results": [
- {
- "businessPartner": {
- "companyName": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}, - "consignmentNotes": [
- null
], - "createdAt": null,
- "createdBy": "25a02396-1048-48f9-bf93-102d2fb7895e",
- "creatorFullName": "string",
- "doneAt": null,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5",
- "notes": "string",
- "products": [
- {
- "createdAt": null,
- "discountPercent": 0,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "price": 0,
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "productName": "string",
- "quantity": 0,
- "quantityReceived": 0,
- "totalUntaxed": 0,
- "totalWithTax": 0,
- "updatedAt": null,
- "vatPercent": 0
}
], - "productsMissingQuantity": 0,
- "purchaseOrderNumber": "string",
- "sentAt": null,
- "status": "draft",
- "totalAmount": 0,
- "updatedAt": null
}
], - "status": 200
}
tenantId required | string |
productId required | string <uuid> |
active | boolean |
createdAt | string |
deletedAt | string or null |
discountPercent required | number >= 0 |
id | string <uuid> |
price required | number >= 0 |
productId | string <uuid> |
productName | string non-empty |
quantity required | number >= 0 |
quantityReceived | number |
totalUntaxed required | number >= 0 |
totalWithTax required | number >= 0 |
updatedAt | string |
vatPercent required | number >= 0 |
{- "active": true,
- "createdAt": "string",
- "deletedAt": "string",
- "discountPercent": 0,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "price": 0,
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "productName": "string",
- "quantity": 0,
- "quantityReceived": 0,
- "totalUntaxed": 0,
- "totalWithTax": 0,
- "updatedAt": "string",
- "vatPercent": 0
}
{- "cursors": {
- "after": "string",
- "before": "string"
}, - "msg": "Success",
- "results": [
- {
- "businessPartner": {
- "companyName": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}, - "consignmentNotes": [
- null
], - "createdAt": null,
- "createdBy": "25a02396-1048-48f9-bf93-102d2fb7895e",
- "creatorFullName": "string",
- "doneAt": null,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5",
- "notes": "string",
- "products": [
- {
- "createdAt": null,
- "discountPercent": 0,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "price": 0,
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "productName": "string",
- "quantity": 0,
- "quantityReceived": 0,
- "totalUntaxed": 0,
- "totalWithTax": 0,
- "updatedAt": null,
- "vatPercent": 0
}
], - "productsMissingQuantity": 0,
- "purchaseOrderNumber": "string",
- "sentAt": null,
- "status": "draft",
- "totalAmount": 0,
- "updatedAt": null
}
], - "status": 200
}
tenantId required | string |
active | boolean |
createdAt | string |
deletedAt | string or null |
id | string <uuid> |
recipients | Array of strings <email> |
replyToEmail | string <email> |
updatedAt | string |
{- "active": true,
- "createdAt": "string",
- "deletedAt": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "updatedAt": "string"
}
{- "cursors": {
- "after": "string",
- "before": "string"
}, - "msg": "Success",
- "results": [
- {
- "businessPartner": {
- "companyName": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}, - "consignmentNotes": [
- null
], - "createdAt": null,
- "createdBy": "25a02396-1048-48f9-bf93-102d2fb7895e",
- "creatorFullName": "string",
- "doneAt": null,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5",
- "notes": "string",
- "products": [
- {
- "createdAt": null,
- "discountPercent": 0,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "price": 0,
- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "productName": "string",
- "quantity": 0,
- "quantityReceived": 0,
- "totalUntaxed": 0,
- "totalWithTax": 0,
- "updatedAt": null,
- "vatPercent": 0
}
], - "productsMissingQuantity": 0,
- "purchaseOrderNumber": "string",
- "sentAt": null,
- "status": "draft",
- "totalAmount": 0,
- "updatedAt": null
}
], - "status": 200
}
tenantId required | string |
start | string |
end | string |
limit | number Default: 100 |
offset | number Default: 0 |
orderFields | Array of strings |
q | string |
{- "cursors": {
- "after": "string",
- "before": "string"
}, - "msg": "Success",
- "results": [
- {
- "active": true,
- "channel": "email",
- "createdAt": null,
- "criteria": {
- "targetEntitiesIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}, - "deletedAt": null,
- "events": [
- "string"
], - "fallbackMinStock": 0,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "lastSent": null,
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "name": "string",
- "nextRunAt": null,
- "period": "daily",
- "schedule": [
- "monday"
], - "startAt": null,
- "updatedAt": null
}
], - "status": 200
}
tenantId required | string |
active | boolean Default: true |
channel | string Default: "email" Value: "email" |
createdAt | string |
required | object |
deletedAt | string or null |
fallbackMinStock required | number |
id | string <uuid> |
lastSent | any or null |
locations required | Array of strings <uuid> non-empty |
name required | string non-empty |
nextRunAt | any or null |
period required | string Enum: "daily" "weekly" "monthly" |
recipients required | Array of strings <email> |
schedule | Array of strings or null Enum: "monday" "tuesday" "wednesday" "thursday" "friday" "saturday" "sunday" |
startAt required | any |
updatedAt | string |
{- "active": true,
- "channel": "email",
- "createdAt": "string",
- "criteria": {
- "targetEntitiesIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}, - "deletedAt": "string",
- "fallbackMinStock": 0,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "lastSent": null,
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "name": "string",
- "nextRunAt": null,
- "period": "daily",
- "schedule": [
- "monday"
], - "startAt": null,
- "updatedAt": "string"
}
{- "cursors": {
- "after": "string",
- "before": "string"
}, - "msg": "Success",
- "results": [
- {
- "active": true,
- "channel": "email",
- "createdAt": null,
- "criteria": {
- "targetEntitiesIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}, - "deletedAt": null,
- "events": [
- "string"
], - "fallbackMinStock": 0,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "lastSent": null,
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "name": "string",
- "nextRunAt": null,
- "period": "daily",
- "schedule": [
- "monday"
], - "startAt": null,
- "updatedAt": null
}
], - "status": 200
}
tenantId required | string |
start | string |
end | string |
limit | number Default: 100 |
offset | number Default: 0 |
orderFields | Array of strings |
q | string |
{- "cursors": {
- "after": "string",
- "before": "string"
}, - "msg": "Success",
- "results": [
- {
- "count": 0
}
], - "status": 200
}
tenantId required | string |
notificationId required | string <uuid> |
{- "cursors": {
- "after": "string",
- "before": "string"
}, - "msg": "Success",
- "results": [
- {
- "active": true,
- "channel": "email",
- "createdAt": null,
- "criteria": {
- "targetEntitiesIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}, - "deletedAt": null,
- "events": [
- "string"
], - "fallbackMinStock": 0,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "lastSent": null,
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "name": "string",
- "nextRunAt": null,
- "period": "daily",
- "schedule": [
- "monday"
], - "startAt": null,
- "updatedAt": null
}
], - "status": 200
}
tenantId required | string |
notificationId required | string <uuid> |
active | boolean Default: true |
channel | string Default: "email" Value: "email" |
createdAt | string |
required | object |
deletedAt | string or null |
events | Array of strings non-empty |
fallbackMinStock required | number |
id | string <uuid> |
lastSent | any or null |
locations required | Array of strings <uuid> non-empty |
name required | string non-empty |
nextRunAt | any or null |
period required | string Enum: "daily" "weekly" "monthly" |
recipients required | Array of strings <email> |
schedule | Array of strings or null Enum: "monday" "tuesday" "wednesday" "thursday" "friday" "saturday" "sunday" |
startAt required | any |
updatedAt | string |
{- "active": true,
- "channel": "email",
- "createdAt": "string",
- "criteria": {
- "targetEntitiesIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}, - "deletedAt": "string",
- "events": [
- "string"
], - "fallbackMinStock": 0,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "lastSent": null,
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "name": "string",
- "nextRunAt": null,
- "period": "daily",
- "schedule": [
- "monday"
], - "startAt": null,
- "updatedAt": "string"
}
{- "cursors": {
- "after": "string",
- "before": "string"
}, - "msg": "Success",
- "results": [
- {
- "active": true,
- "channel": "email",
- "createdAt": null,
- "criteria": {
- "targetEntitiesIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}, - "deletedAt": null,
- "events": [
- "string"
], - "fallbackMinStock": 0,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "lastSent": null,
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "name": "string",
- "nextRunAt": null,
- "period": "daily",
- "schedule": [
- "monday"
], - "startAt": null,
- "updatedAt": null
}
], - "status": 200
}
Information about a new customer
webhook_id | string <uuid> The webhook UUID |
event_id | string <uuid> The event UUID |
event_entity | string The entity name the event refers to |
event_type | string The event type (e.g. create, update, delete) |
event_version | number The event payload version |
entity_instance_id | string <uuid> The entity instance UUID |
timestamp | string <date-time> The date and time event was received by webhooks service |
object |
{- "webhook_id": "ff30cfdf-5167-4f72-b4fc-c1d72db3c07e",
- "event_id": "c6fe918a-7bdc-4ccd-af36-95c03853233d",
- "event_entity": "customer",
- "event_type": "create",
- "event_version": 0,
- "entity_instance_id": "10b06f38-031d-4e0c-8706-0474c8c5b61c",
- "timestamp": "2024-12-02T18:25:23.894Z",
- "payload": {
- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "active": "true",
- "deleted": false,
- "firstname": "Boba",
- "lastname": "Fett",
- "middlename": "Alpha",
- "displayname": "Boba F.",
- "phonenumbers": {
- "main": "+49-555-123-4567"
}, - "customer_number": "fett-002",
- "company": {
- "name": "Bounty Hunter's Guild"
}, - "description": "Bounty hunter",
- "is_b2b": true,
- "date_of_birth": "2019-08-24T14:15:22Z",
- "images": {
}, - "contacts": {
- "email": {
- "enabled": true
}, - "newsletter": {
- "enabled": true
}, - "phone": {
- "enabled": true
}, - "post": {
- "enabled": true
}
}, - "metadata": { },
- "addresses": [
- {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
], - "custom": { },
- "comment": "Don't mess with",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percentage",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "client_id": "string",
- "external_reference": "string",
- "customer_since": "2019-08-24T14:15:22Z",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "gender": "male",
- "vat_id": "string",
- "source": "N/A, DASHBOARD, APPOINTMENT_CALENDAR, WEB_RESERVATION, POS",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc",
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "reminder_notification_enabled": "true",
- "insert_id": 0,
- "customer_group": "string",
- "price_list": { },
- "delegated_to": [
- "string"
], - "owner": "string"
}
}
Information about updated customer
webhook_id | string <uuid> The webhook UUID |
event_id | string <uuid> The event UUID |
event_entity | string The entity name the event refers to |
event_type | string The event type (e.g. create, update, delete) |
event_version | number The event payload version |
entity_instance_id | string <uuid> The entity instance UUID |
timestamp | string <date-time> The date and time event was received by webhooks service |
object |
{- "webhook_id": "ff30cfdf-5167-4f72-b4fc-c1d72db3c07e",
- "event_id": "c6fe918a-7bdc-4ccd-af36-95c03853233d",
- "event_entity": "customer",
- "event_type": "update",
- "event_version": 0,
- "entity_instance_id": "10b06f38-031d-4e0c-8706-0474c8c5b61c",
- "timestamp": "2024-12-02T18:25:23.895Z",
- "payload": {
- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "active": "true",
- "deleted": false,
- "firstname": "Boba",
- "lastname": "Fett",
- "middlename": "Alpha",
- "displayname": "Boba F.",
- "phonenumbers": {
- "main": "+49-555-123-4567"
}, - "customer_number": "fett-002",
- "company": {
- "name": "Bounty Hunter's Guild"
}, - "description": "Bounty hunter",
- "is_b2b": true,
- "date_of_birth": "2019-08-24T14:15:22Z",
- "images": {
}, - "contacts": {
- "email": {
- "enabled": true
}, - "newsletter": {
- "enabled": true
}, - "phone": {
- "enabled": true
}, - "post": {
- "enabled": true
}
}, - "metadata": { },
- "addresses": [
- {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
], - "custom": { },
- "comment": "Don't mess with",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percentage",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "client_id": "string",
- "external_reference": "string",
- "customer_since": "2019-08-24T14:15:22Z",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "gender": "male",
- "vat_id": "string",
- "source": "N/A, DASHBOARD, APPOINTMENT_CALENDAR, WEB_RESERVATION, POS",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc",
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "reminder_notification_enabled": "true",
- "insert_id": 0,
- "customer_group": "string",
- "price_list": { },
- "delegated_to": [
- "string"
], - "owner": "string"
}
}
Information about deleted customer
webhook_id | string <uuid> The webhook UUID |
event_id | string <uuid> The event UUID |
event_entity | string The entity name the event refers to |
event_type | string The event type (e.g. create, update, delete) |
event_version | number The event payload version |
entity_instance_id | string <uuid> The entity instance UUID |
timestamp | string <date-time> The date and time event was received by webhooks service |
object |
{- "webhook_id": "ff30cfdf-5167-4f72-b4fc-c1d72db3c07e",
- "event_id": "c6fe918a-7bdc-4ccd-af36-95c03853233d",
- "event_entity": "customer",
- "event_type": "delete",
- "event_version": 0,
- "entity_instance_id": "10b06f38-031d-4e0c-8706-0474c8c5b61c",
- "timestamp": "2024-12-02T18:25:23.895Z",
- "payload": {
- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "active": "true",
- "deleted": false,
- "firstname": "Boba",
- "lastname": "Fett",
- "middlename": "Alpha",
- "displayname": "Boba F.",
- "phonenumbers": {
- "main": "+49-555-123-4567"
}, - "customer_number": "fett-002",
- "company": {
- "name": "Bounty Hunter's Guild"
}, - "description": "Bounty hunter",
- "is_b2b": true,
- "date_of_birth": "2019-08-24T14:15:22Z",
- "images": {
}, - "contacts": {
- "email": {
- "enabled": true
}, - "newsletter": {
- "enabled": true
}, - "phone": {
- "enabled": true
}, - "post": {
- "enabled": true
}
}, - "metadata": { },
- "addresses": [
- {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
], - "custom": { },
- "comment": "Don't mess with",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percentage",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "client_id": "string",
- "external_reference": "string",
- "customer_since": "2019-08-24T14:15:22Z",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "gender": "male",
- "vat_id": "string",
- "source": "N/A, DASHBOARD, APPOINTMENT_CALENDAR, WEB_RESERVATION, POS",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc",
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "reminder_notification_enabled": "true",
- "insert_id": 0,
- "customer_group": "string",
- "price_list": { },
- "delegated_to": [
- "string"
], - "owner": "string"
}
}
Create many new customer of a user.
Customer numbers can be set directly. However implementers can choose to send a customer_number_template
the API
is supporting based on the below logic
Name | RegExp | Description | Required Parameters | Example (plain) | Example (encoded) | Result |
---|---|---|---|---|---|---|
{country}{franchise}{branch,3,0}{PLACEHOLDER,3,0}{SEQUENCE} | /{country}{franchise}{branch,3,0}{PLACEHOLDER,3,0}{SEQUENCE}/ | Generate a customer number based on country, franchise, branch (3 letters) and use the database sequence as suffix | country, branch, franchise | ? customer_number_template={country}{franchise}{branch,3,0}{PLACEHOLDER,3,0}{SEQUENCE}& country=DE&branch=000&franchise=000 |
? customer_number_template=%7Bcountry%7D%7Bfranchise%7D%7Bbranch %2C3%2C0%7D%7BPLACEHOLDER%2C3%2C0%7D%7BSEQUENCE%7D& country=DE&branch=000&franchise=000 |
DE0000000005812 |
clientAccountID required | string Alphanumeric client ID of the user |
customer_number_template | string the template which will be used to generate a customer number. This is stored as object inside the configuration |
Array of Simple Customers
active | boolean Default: true Customer active |
deleted | boolean Default: false Customer deleted |
required | string or (any or null) First name |
string or (any or null) Last name | |
string or (any or null) Middle name | |
string or (any or null) Display name | |
(object or object or object or object) or (any or null) Phone numbers | |
string or (any or null) Default: null Email address | |
string or (any or null) Unique customer number | |
object or (any or null) Company name | |
string or (any or null) Description | |
boolean or (any or null) Is B2B customer | |
string or (any or null) Birth date | |
object or (any or null) Images object with URLs of various types of images | |
object or (any or null) DEPRECATED. Omit or set null. | |
object or (any or null) Contact info | |
metadata | object Additional metadata |
Array of objects or (any or null) Addresses | |
object or (any or null) Custom data | |
string or (any or null) Comment | |
(Array of objects or objects) or (any or null) Available discounts | |
string or (any or null) Client ID | |
string or (any or null) External reference | |
string or (any or null) Customer since | |
Array of strings or (any or null) Locations customer belongs to | |
Array of strings or (any or null) Branch groups customer belongs to | |
string or (any or null) Gender | |
string or (any or null) Customer VAT ID | |
string or (any or null) Customer source of creation | |
string or (any or null) in cases where the customer is created via the POS, the branch_id is required | |
string or (any or null) in cases where the customer is going to have personal pricebook (like for discounts in pharmacy by personal insurance number), price_book is required | |
reminder_notification_enabled | boolean Default: true The flag indicate whether the customer can receive reminder notification |
[- {
- "active": "true",
- "deleted": false,
- "firstname": "Boba",
- "lastname": "Fett",
- "middlename": "Alpha",
- "displayname": "Boba F.",
- "phonenumbers": {
- "main": "+49-555-123-4567"
}, - "customer_number": "fett-002",
- "company": {
- "name": "Bounty Hunter's Guild"
}, - "description": "Bounty hunter",
- "is_b2b": true,
- "date_of_birth": "2019-08-24T14:15:22Z",
- "images": {
}, - "contacts": {
- "email": {
- "enabled": true
}, - "newsletter": {
- "enabled": true
}, - "phone": {
- "enabled": true
}, - "post": {
- "enabled": true
}
}, - "metadata": { },
- "addresses": [
- {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
], - "custom": { },
- "comment": "Don't mess with",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percentage",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "client_id": "string",
- "external_reference": "string",
- "customer_since": "2019-08-24T14:15:22Z",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "gender": "male",
- "vat_id": "string",
- "source": "N/A, DASHBOARD, APPOINTMENT_CALENDAR, WEB_RESERVATION, POS",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc",
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "reminder_notification_enabled": "true"
}
]
{- "status": 200,
- "msg": "string",
- "count": 1,
- "created_customers": [
- {
- "active": "true",
- "deleted": false,
- "firstname": "Boba",
- "lastname": "Fett",
- "middlename": "Alpha",
- "displayname": "Boba F.",
- "phonenumbers": {
- "main": "+49-555-123-4567"
}, - "customer_number": "fett-002",
- "company": {
- "name": "Bounty Hunter's Guild"
}, - "description": "Bounty hunter",
- "is_b2b": true,
- "date_of_birth": "2019-08-24T14:15:22Z",
- "images": {
}, - "contacts": {
- "email": {
- "enabled": true
}, - "newsletter": {
- "enabled": true
}, - "phone": {
- "enabled": true
}, - "post": {
- "enabled": true
}
}, - "metadata": { },
- "addresses": [
- {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
], - "custom": { },
- "comment": "Don't mess with",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percentage",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "client_id": "string",
- "external_reference": "string",
- "customer_since": "2019-08-24T14:15:22Z",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "gender": "male",
- "vat_id": "string",
- "source": "N/A, DASHBOARD, APPOINTMENT_CALENDAR, WEB_RESERVATION, POS",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc",
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "reminder_notification_enabled": "true"
}
], - "updated_customers": [
- {
- "active": "true",
- "deleted": false,
- "firstname": "Boba",
- "lastname": "Fett",
- "middlename": "Alpha",
- "displayname": "Boba F.",
- "phonenumbers": {
- "main": "+49-555-123-4567"
}, - "customer_number": "fett-002",
- "company": {
- "name": "Bounty Hunter's Guild"
}, - "description": "Bounty hunter",
- "is_b2b": true,
- "date_of_birth": "2019-08-24T14:15:22Z",
- "images": {
}, - "contacts": {
- "email": {
- "enabled": true
}, - "newsletter": {
- "enabled": true
}, - "phone": {
- "enabled": true
}, - "post": {
- "enabled": true
}
}, - "metadata": { },
- "addresses": [
- {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
], - "custom": { },
- "comment": "Don't mess with",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percentage",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "client_id": "string",
- "external_reference": "string",
- "customer_since": "2019-08-24T14:15:22Z",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "gender": "male",
- "vat_id": "string",
- "source": "N/A, DASHBOARD, APPOINTMENT_CALENDAR, WEB_RESERVATION, POS",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc",
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "reminder_notification_enabled": "true"
}
], - "invalid_customers": [
- {
- "active": "true",
- "deleted": false,
- "firstname": "Boba",
- "lastname": "Fett",
- "middlename": "Alpha",
- "displayname": "Boba F.",
- "phonenumbers": {
- "main": "+49-555-123-4567"
}, - "customer_number": "fett-002",
- "company": {
- "name": "Bounty Hunter's Guild"
}, - "description": "Bounty hunter",
- "is_b2b": true,
- "date_of_birth": "2019-08-24T14:15:22Z",
- "images": {
}, - "contacts": {
- "email": {
- "enabled": true
}, - "newsletter": {
- "enabled": true
}, - "phone": {
- "enabled": true
}, - "post": {
- "enabled": true
}
}, - "metadata": { },
- "addresses": [
- {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
], - "custom": { },
- "comment": "Don't mess with",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percentage",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "client_id": "string",
- "external_reference": "string",
- "customer_since": "2019-08-24T14:15:22Z",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "gender": "male",
- "vat_id": "string",
- "source": "N/A, DASHBOARD, APPOINTMENT_CALENDAR, WEB_RESERVATION, POS",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc",
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "reminder_notification_enabled": "true"
}
]
}
Create a new customer of a user.
Customer numbers can be set directly. However implementers can choose to send a customer_number_template
the API
is supporting based on the below logic
Name | RegExp | Description | Required Parameters | Example (plain) | Example (encoded) | Result |
---|---|---|---|---|---|---|
{country}{franchise}{branch,3,0}{PLACEHOLDER,3,0}{SEQUENCE} | /{country}{franchise}{branch,3,0}{PLACEHOLDER,3,0}{SEQUENCE}/ | Generate a customer number based on country, franchise, branch (3 letters) and use the database sequence as suffix | country, branch, franchise | ? customer_number_template={country}{franchise}{branch,3,0}{PLACEHOLDER,3,0}{SEQUENCE}& country=DE&branch=000&franchise=000 |
? customer_number_template=%7Bcountry%7D%7Bfranchise%7D%7Bbranch %2C3%2C0%7D%7BPLACEHOLDER%2C3%2C0%7D%7BSEQUENCE%7D& country=DE&branch=000&franchise=000 |
DE0000000005812 |
clientAccountID required | string Alphanumeric client ID of the user |
customer_number_template | string the template which will be used to generate a customer number. This is stored as object inside the configuration |
Simple Customer
active | boolean Default: true Customer active |
deleted | boolean Default: false Customer deleted |
string or (any or null) First name | |
string or (any or null) Last name | |
string or (any or null) Middle name | |
string or (any or null) Display name | |
(object or object or object or object) or (any or null) Phone numbers | |
string or (any or null) Default: null Email address | |
string or (any or null) Unique customer number | |
object or (any or null) Company name | |
string or (any or null) Description | |
boolean or (any or null) Is B2B customer | |
string or (any or null) Birth date | |
object or (any or null) Images object with URLs of various types of images | |
object or (any or null) DEPRECATED. Omit or set null. | |
object or (any or null) Contact info | |
metadata | object Additional metadata |
Array of objects or (any or null) Addresses | |
object or (any or null) Custom data | |
string or (any or null) Comment | |
(Array of objects or objects) or (any or null) Available discounts | |
string or (any or null) Client ID | |
string or (any or null) External reference | |
string or (any or null) Customer since | |
Array of strings or (any or null) Locations customer belongs to | |
Array of strings or (any or null) Branch groups customer belongs to | |
string or (any or null) Gender | |
string or (any or null) Customer VAT ID | |
string or (any or null) Customer source of creation | |
string or (any or null) in cases where the customer is created via the POS, the branch_id is required | |
string or (any or null) in cases where the customer is going to have personal pricebook (like for discounts in pharmacy by personal insurance number), price_book is required | |
reminder_notification_enabled | boolean Default: true The flag indicate whether the customer can receive reminder notification |
{- "active": "true",
- "deleted": false,
- "firstname": "Boba",
- "lastname": "Fett",
- "middlename": "Alpha",
- "displayname": "Boba F.",
- "phonenumbers": {
- "main": "+49-555-123-4567"
}, - "customer_number": "fett-002",
- "company": {
- "name": "Bounty Hunter's Guild"
}, - "description": "Bounty hunter",
- "is_b2b": true,
- "date_of_birth": "2019-08-24T14:15:22Z",
- "images": {
}, - "contacts": {
- "email": {
- "enabled": true
}, - "newsletter": {
- "enabled": true
}, - "phone": {
- "enabled": true
}, - "post": {
- "enabled": true
}
}, - "metadata": { },
- "addresses": [
- {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
], - "custom": { },
- "comment": "Don't mess with",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percentage",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "client_id": "string",
- "external_reference": "string",
- "customer_since": "2019-08-24T14:15:22Z",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "gender": "male",
- "vat_id": "string",
- "source": "N/A, DASHBOARD, APPOINTMENT_CALENDAR, WEB_RESERVATION, POS",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc",
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "reminder_notification_enabled": "true"
}
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "active": "true",
- "deleted": false,
- "firstname": "Boba",
- "lastname": "Fett",
- "middlename": "Alpha",
- "displayname": "Boba F.",
- "phonenumbers": {
- "main": "+49-555-123-4567"
}, - "customer_number": "fett-002",
- "company": {
- "name": "Bounty Hunter's Guild"
}, - "description": "Bounty hunter",
- "is_b2b": true,
- "date_of_birth": "2019-08-24T14:15:22Z",
- "images": {
}, - "contacts": {
- "email": {
- "enabled": true
}, - "newsletter": {
- "enabled": true
}, - "phone": {
- "enabled": true
}, - "post": {
- "enabled": true
}
}, - "metadata": { },
- "addresses": [
- {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
], - "custom": { },
- "comment": "Don't mess with",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percentage",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "client_id": "string",
- "external_reference": "string",
- "customer_since": "2019-08-24T14:15:22Z",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "gender": "male",
- "vat_id": "string",
- "source": "N/A, DASHBOARD, APPOINTMENT_CALENDAR, WEB_RESERVATION, POS",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc",
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "reminder_notification_enabled": "true"
}
]
}
Query all customers
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2022-02-01T00:00:00.000Z The start date to filter customers by "updated_at" field value |
created_at_start | string <date-time> Example: created_at_start=2022-02-01T00:00:00.000Z The start date to filter customers by "created_at" field value |
created_at_end | string <date-time> Example: created_at_end=2022-02-28T23:59:59.999Z The end date to filter customers by "created_at" field value |
limit | integer >= 1 Example: limit=50 The maximum amount of entries on page (for paginated output)' |
active | string Enum: "true" "false" Filter customers by "active" field value |
deleted | string Enum: "true" "false" Filter customers which are deleted or not |
customer_number | string Note: in this version of the API call customer number is a special flag. It ignores all other flags and is an exact match. |
location | string One or more ids of locations (branches, registers, clients) to filter customers for. |
owner | string An id of owner (branch, register, client) to filter customers for. |
firstname | string First name substring to filter customers for. |
lastname | string Last name substring to filter customers for. |
string Email address substring to filter customers for. | |
company | string Company name substring to filter customers for. |
phonenumbers | string Phone number substring to filter customers for. |
postal_code | string Postal code to filter customers for. |
address | string Street name to filter customers for. |
q | string this will text search by first name / last name / email / company name/ number, with a partial match (by comma or space separated words with minimal length of 2 chars) |
limit | integer the discrete limit, that will default to 1000 on the legacy route |
cursor | string the alphanumeric cursor field |
cursor_field | string which column to cursor on. Currently we only support |
format | string Enum: "csv" "csv_custom" To get data in any other format then JSON straight away, you can set |
import * as tillhub from '@tillhub/javascript-sdk' const { data: customers } = await tillhub.customers().getAll({ deleted: false, limit: 50 })
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 10,
- "results": [
- {
- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "active": "true",
- "deleted": false,
- "firstname": "Boba",
- "lastname": "Fett",
- "middlename": "Alpha",
- "displayname": "Boba F.",
- "phonenumbers": {
- "main": "+49-555-123-4567"
}, - "customer_number": "fett-002",
- "company": {
- "name": "Bounty Hunter's Guild"
}, - "description": "Bounty hunter",
- "is_b2b": true,
- "date_of_birth": "2019-08-24T14:15:22Z",
- "images": {
}, - "contacts": {
- "email": {
- "enabled": true
}, - "newsletter": {
- "enabled": true
}, - "phone": {
- "enabled": true
}, - "post": {
- "enabled": true
}
}, - "metadata": { },
- "addresses": [
- {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
], - "custom": { },
- "comment": "Don't mess with",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percentage",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "client_id": "string",
- "external_reference": "string",
- "customer_since": "2019-08-24T14:15:22Z",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "gender": "male",
- "vat_id": "string",
- "source": "N/A, DASHBOARD, APPOINTMENT_CALENDAR, WEB_RESERVATION, POS",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc",
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "reminder_notification_enabled": "true",
- "insert_id": 0,
- "customer_group": "string",
- "price_list": { },
- "delegated_to": [
- "string"
], - "owner": "string"
}
], - "cursor": {
}
}
Delete a single customer object. This is a soft delete, that will leave the object with IDs it has gained throughout it's lifetime intact, but will null all other fields.
clientAccountID required | string Alphanumeric client ID of the user |
customerID required | string Alphanumeric customer ID |
import * as tillhub from '@tillhub/javascript-sdk' const { msg } = await tillhub.customers().delete('09ba6f6c-ecc4-4cdb-9cfa-0e1fdb3979a4')
Get a single customer object.
clientAccountID required | string Alphanumeric client ID of the user |
customerID required | string Alphanumeric customer ID |
extended | boolean embed extended fields |
import * as tillhub from '@tillhub/javascript-sdk' const { data: customer } = await tillhub.customers().get('09ba6f6c-ecc4-4cdb-9cfa-0e1fdb3979a4')
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 10,
- "results": [
- {
- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "active": "true",
- "deleted": false,
- "firstname": "Boba",
- "lastname": "Fett",
- "middlename": "Alpha",
- "displayname": "Boba F.",
- "phonenumbers": {
- "main": "+49-555-123-4567"
}, - "customer_number": "fett-002",
- "company": {
- "name": "Bounty Hunter's Guild"
}, - "description": "Bounty hunter",
- "is_b2b": true,
- "date_of_birth": "2019-08-24T14:15:22Z",
- "images": {
}, - "contacts": {
- "email": {
- "enabled": true
}, - "newsletter": {
- "enabled": true
}, - "phone": {
- "enabled": true
}, - "post": {
- "enabled": true
}
}, - "metadata": { },
- "addresses": [
- {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
], - "custom": { },
- "comment": "Don't mess with",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percentage",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "client_id": "string",
- "external_reference": "string",
- "customer_since": "2019-08-24T14:15:22Z",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "gender": "male",
- "vat_id": "string",
- "source": "N/A, DASHBOARD, APPOINTMENT_CALENDAR, WEB_RESERVATION, POS",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc",
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "reminder_notification_enabled": "true",
- "insert_id": 0,
- "customer_group": "string",
- "price_list": { },
- "delegated_to": [
- "string"
], - "owner": "string",
- "analytics": {
- "summary": {
- "top_seller": [
- {
- "gross": "27633.02",
- "net": "27633.02",
- "currency": "str",
- "salesman_staff": "60aa716a-e92b-4c7a-a991-84c21829042f"
}
], - "top_branch": [
- {
- "gross": "27633.02",
- "net": "27633.02",
- "currency": "str",
- "branch_number": 0,
- "branch": "7c628a07-d557-4cd4-9105-51f9aade2c65"
}
], - "average_items_per_transaction": 0,
- "total_quantity_returns": 0,
- "total_quantity_cartitems": 0,
- "total_amount_returns": [
- {
- "gross": "27633.02",
- "net": "27633.02",
- "currency": "str"
}
], - "total_transactions": 0,
- "total_amount_items_sold": [
- {
- "gross": "27633.02",
- "net": "27633.02",
- "currency": "str"
}
], - "average_purchase_value": [
- {
- "gross": "27633.02",
- "net": "27633.02",
- "currency": "str"
}
], - "last_seen": "2019-08-24T14:15:22Z"
}, - "last_transactions_v0": [
- { }
]
}, - "notes": [
- {
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "type": "text",
- "payload": "string",
- "client_id": "string",
- "date": "2019-08-24T14:15:22Z"
}
]
}
], - "cursor": {
}
}
Replace an entire customer object.
clientAccountID required | string Alphanumeric client ID of the user |
customerID required | string Alphanumeric customer ID |
Simple Customer
active | boolean Default: true Customer active |
deleted | boolean Default: false Customer deleted |
string or (any or null) First name | |
string or (any or null) Last name | |
string or (any or null) Middle name | |
string or (any or null) Display name | |
(object or object or object or object) or (any or null) Phone numbers | |
string or (any or null) Default: null Email address | |
string or (any or null) Unique customer number | |
object or (any or null) Company name | |
string or (any or null) Description | |
boolean or (any or null) Is B2B customer | |
string or (any or null) Birth date | |
object or (any or null) Images object with URLs of various types of images | |
object or (any or null) DEPRECATED. Omit or set null. | |
object or (any or null) Contact info | |
metadata | object Additional metadata |
Array of objects or (any or null) Addresses | |
object or (any or null) Custom data | |
string or (any or null) Comment | |
(Array of objects or objects) or (any or null) Available discounts | |
string or (any or null) Client ID | |
string or (any or null) External reference | |
string or (any or null) Customer since | |
Array of strings or (any or null) Locations customer belongs to | |
Array of strings or (any or null) Branch groups customer belongs to | |
string or (any or null) Gender | |
string or (any or null) Customer VAT ID | |
string or (any or null) Customer source of creation | |
string or (any or null) in cases where the customer is created via the POS, the branch_id is required | |
string or (any or null) in cases where the customer is going to have personal pricebook (like for discounts in pharmacy by personal insurance number), price_book is required | |
reminder_notification_enabled | boolean Default: true The flag indicate whether the customer can receive reminder notification |
{- "active": "true",
- "deleted": false,
- "firstname": "Boba",
- "lastname": "Fett",
- "middlename": "Alpha",
- "displayname": "Boba F.",
- "phonenumbers": {
- "main": "+49-555-123-4567"
}, - "customer_number": "fett-002",
- "company": {
- "name": "Bounty Hunter's Guild"
}, - "description": "Bounty hunter",
- "is_b2b": true,
- "date_of_birth": "2019-08-24T14:15:22Z",
- "images": {
}, - "contacts": {
- "email": {
- "enabled": true
}, - "newsletter": {
- "enabled": true
}, - "phone": {
- "enabled": true
}, - "post": {
- "enabled": true
}
}, - "metadata": { },
- "addresses": [
- {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
], - "custom": { },
- "comment": "Don't mess with",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percentage",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "client_id": "string",
- "external_reference": "string",
- "customer_since": "2019-08-24T14:15:22Z",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "gender": "male",
- "vat_id": "string",
- "source": "N/A, DASHBOARD, APPOINTMENT_CALENDAR, WEB_RESERVATION, POS",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc",
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "reminder_notification_enabled": "true"
}
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "active": "true",
- "deleted": false,
- "firstname": "Boba",
- "lastname": "Fett",
- "middlename": "Alpha",
- "displayname": "Boba F.",
- "phonenumbers": {
- "main": "+49-555-123-4567"
}, - "customer_number": "fett-002",
- "company": {
- "name": "Bounty Hunter's Guild"
}, - "description": "Bounty hunter",
- "is_b2b": true,
- "date_of_birth": "2019-08-24T14:15:22Z",
- "images": {
}, - "contacts": {
- "email": {
- "enabled": true
}, - "newsletter": {
- "enabled": true
}, - "phone": {
- "enabled": true
}, - "post": {
- "enabled": true
}
}, - "metadata": { },
- "addresses": [
- {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
], - "custom": { },
- "comment": "Don't mess with",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percentage",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "client_id": "string",
- "external_reference": "string",
- "customer_since": "2019-08-24T14:15:22Z",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "gender": "male",
- "vat_id": "string",
- "source": "N/A, DASHBOARD, APPOINTMENT_CALENDAR, WEB_RESERVATION, POS",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc",
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "reminder_notification_enabled": "true"
}
]
}
Checks if a customer number is unique based on exsiting customer numbers
clientAccountID required | string Alphanumeric client ID of the user |
customer_number required | string the customer number to be checked |
tillhub.customers.get((err, result) => {})
Query all legacy customers
clientAccountID required | string Alphanumeric client ID of the user |
limit | integer the discrete limit, that will default to 1000 on the legacy route |
cursor | string the alphanumeric cursor field |
cursor_field | string which column to cursor on. Currently we only support |
tillhub.customers.legacy.get((err, result) => {})
Create a new customer note.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric customer ID |
Simple Note
type required | string Value: "text" |
payload required | string <= 16384 characters |
string or (any or null) | |
string or (any or null) |
{- "type": "text",
- "payload": "string",
- "client_id": "string",
- "date": "2019-08-24T14:15:22Z"
}
{ }
Make a fuzzy search query for costomers on the name, description and ID fields as a string. This will return max. 20 results, with their score and some metadata. Also it will treat the input as incomplete string and make a suggestion for correction.
NOTE: if the index does not exist yet, we will try to create it on the fly. On a customers database with millions of costomers, that will take up to 7 minutes.
clientAccountID required | string Alphanumeric client ID of the user |
q required | string the search string |
tillhub.customers.search.get((err, result) => {})
If an index exists, replace all existing documents in the index with new ones from the database table. If no index exists yet, it will be created.
clientAccountID required | string Alphanumeric client ID of the user |
tillhub.customers.search.get((err, result) => {})
Create index for customers on the name, email, addresses, customer_number, locations, and ID fields as a string. If an index already exists, an error will be returned.
clientAccountID required | string Alphanumeric client ID of the user |
tillhub.customers.search.get((err, result) => {})
Create a new customer of a user.
Customer numbers can be set directly. However implementers can choose to send a customer_number_template
the API
is supporting based on the below logic
Name | RegExp | Description | Required Parameters | Example (plain) | Example (encoded) | Result |
---|---|---|---|---|---|---|
{country}{franchise}{branch,3,0}{PLACEHOLDER,3,0}{SEQUENCE} | /{country}{franchise}{branch,3,0}{PLACEHOLDER,3,0}{SEQUENCE}/ | Generate a customer number based on country, franchise, branch (3 letters) and use the database sequence as suffix | country, branch, franchise | ? customer_number_template={country}{franchise}{branch,3,0}{PLACEHOLDER,3,0}{SEQUENCE}& country=DE&branch=000&franchise=000 |
? customer_number_template=%7Bcountry%7D%7Bfranchise%7D%7Bbranch %2C3%2C0%7D%7BPLACEHOLDER%2C3%2C0%7D%7BSEQUENCE%7D& country=DE&branch=000&franchise=000 |
DE0000000005812 |
clientAccountID required | string Alphanumeric client ID of the user |
customer_number_template | string the template which will be used to generate a customer number. This is stored as object inside the configuration |
Simple Customer
active | boolean Default: true Customer active |
deleted | boolean Default: false Customer deleted |
string or (any or null) First name | |
string or (any or null) Last name | |
string or (any or null) Middle name | |
string or (any or null) Display name | |
(object or object or object or object) or (any or null) Phone numbers | |
string or (any or null) Default: null Email address | |
string or (any or null) Unique customer number | |
object or (any or null) Company name | |
string or (any or null) Description | |
boolean or (any or null) Is B2B customer | |
string or (any or null) Birth date | |
object or (any or null) Images object with URLs of various types of images | |
object or (any or null) DEPRECATED. Omit or set null. | |
object or (any or null) Contact info | |
metadata | object Additional metadata |
Array of objects or (any or null) Addresses | |
object or (any or null) Custom data | |
string or (any or null) Comment | |
(Array of objects or objects) or (any or null) Available discounts | |
string or (any or null) Client ID | |
string or (any or null) External reference | |
string or (any or null) Customer since | |
Array of strings or (any or null) Locations customer belongs to | |
Array of strings or (any or null) Branch groups customer belongs to | |
string or (any or null) Gender | |
string or (any or null) Customer VAT ID | |
string or (any or null) Customer source of creation | |
string or (any or null) in cases where the customer is created via the POS, the branch_id is required | |
string or (any or null) in cases where the customer is going to have personal pricebook (like for discounts in pharmacy by personal insurance number), price_book is required | |
reminder_notification_enabled | boolean Default: true The flag indicate whether the customer can receive reminder notification |
{- "active": "true",
- "deleted": false,
- "firstname": "Boba",
- "lastname": "Fett",
- "middlename": "Alpha",
- "displayname": "Boba F.",
- "phonenumbers": {
- "main": "+49-555-123-4567"
}, - "customer_number": "fett-002",
- "company": {
- "name": "Bounty Hunter's Guild"
}, - "description": "Bounty hunter",
- "is_b2b": true,
- "date_of_birth": "2019-08-24T14:15:22Z",
- "images": {
}, - "contacts": {
- "email": {
- "enabled": true
}, - "newsletter": {
- "enabled": true
}, - "phone": {
- "enabled": true
}, - "post": {
- "enabled": true
}
}, - "metadata": { },
- "addresses": [
- {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
], - "custom": { },
- "comment": "Don't mess with",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percentage",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "client_id": "string",
- "external_reference": "string",
- "customer_since": "2019-08-24T14:15:22Z",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "gender": "male",
- "vat_id": "string",
- "source": "N/A, DASHBOARD, APPOINTMENT_CALENDAR, WEB_RESERVATION, POS",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc",
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "reminder_notification_enabled": "true"
}
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "active": "true",
- "deleted": false,
- "firstname": "Boba",
- "lastname": "Fett",
- "middlename": "Alpha",
- "displayname": "Boba F.",
- "phonenumbers": {
- "main": "+49-555-123-4567"
}, - "customer_number": "fett-002",
- "company": {
- "name": "Bounty Hunter's Guild"
}, - "description": "Bounty hunter",
- "is_b2b": true,
- "date_of_birth": "2019-08-24T14:15:22Z",
- "images": {
}, - "contacts": {
- "email": {
- "enabled": true
}, - "newsletter": {
- "enabled": true
}, - "phone": {
- "enabled": true
}, - "post": {
- "enabled": true
}
}, - "metadata": { },
- "addresses": [
- {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
], - "custom": { },
- "comment": "Don't mess with",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percentage",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "client_id": "string",
- "external_reference": "string",
- "customer_since": "2019-08-24T14:15:22Z",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "gender": "male",
- "vat_id": "string",
- "source": "N/A, DASHBOARD, APPOINTMENT_CALENDAR, WEB_RESERVATION, POS",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc",
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "reminder_notification_enabled": "true"
}
]
}
Query all customers
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2022-02-01T00:00:00.000Z The start date to filter customers by "updated_at" field value |
created_at_start | string <date-time> Example: created_at_start=2022-02-01T00:00:00.000Z The start date to filter customers by "created_at" field value |
created_at_end | string <date-time> Example: created_at_end=2022-02-28T23:59:59.999Z The end date to filter customers by "created_at" field value |
limit | integer >= 1 Example: limit=50 The maximum amount of entries on page (for paginated output)' |
active | string Enum: "true" "false" Filter customers by "active" field value |
deleted | string Enum: "true" "false" Filter customers which are deleted or not |
customer_number | string Note: in this version of the API call customer number is a special flag. It ignores all other flags and is an exact match. |
owner | string An id of owner (branch, register, client) to filter customers for. |
firstname | string First name substring to filter customers for. |
lastname | string Last name substring to filter customers for. |
string Email address substring to filter customers for. | |
company | string Company name substring to filter customers for. |
phonenumbers | string Phone number substring to filter customers for. |
postal_code | string Postal code to filter customers for. |
address | string Street name to filter customers for. |
q | string this will text search by first name / last name / email / company name / number, with a partial match (by comma or space separated words with minimal length of 2 chars) |
limit | integer the discrete limit, that will default to 1000 on the legacy route |
locations | string One or more ids of locations (branches, registers, clients) to filter customers for. |
format | string Value: "csv" To get data in any other format then JSON straight away, you can set |
import * as tillhub from '@tillhub/javascript-sdk' const { data: customers } = await tillhub.customersV1().getAll({ deleted: false, limit: 50 })
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "active": "true",
- "deleted": false,
- "firstname": "Boba",
- "lastname": "Fett",
- "middlename": "Alpha",
- "displayname": "Boba F.",
- "phonenumbers": {
- "main": "+49-555-123-4567"
}, - "customer_number": "fett-002",
- "company": {
- "name": "Bounty Hunter's Guild"
}, - "description": "Bounty hunter",
- "is_b2b": true,
- "date_of_birth": "2019-08-24T14:15:22Z",
- "images": {
}, - "contacts": {
- "email": {
- "enabled": true
}, - "newsletter": {
- "enabled": true
}, - "phone": {
- "enabled": true
}, - "post": {
- "enabled": true
}
}, - "metadata": { },
- "addresses": [
- {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
], - "custom": { },
- "comment": "Don't mess with",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percentage",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "client_id": "string",
- "external_reference": "string",
- "customer_since": "2019-08-24T14:15:22Z",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "gender": "male",
- "vat_id": "string",
- "source": "N/A, DASHBOARD, APPOINTMENT_CALENDAR, WEB_RESERVATION, POS",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc",
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "reminder_notification_enabled": "true",
- "insert_id": 0,
- "customer_group": "string",
- "price_list": { },
- "delegated_to": [
- "string"
], - "owner": "string"
}
],
}
Delete a single customer object. This is a soft delete, that will leave the object with IDs it has gained throughout it's lifetime intact, but will null all other fields.
clientAccountID required | string Alphanumeric client ID of the user |
customerID required | string Alphanumeric customer ID |
import * as tillhub from '@tillhub/javascript-sdk' const { msg } = await tillhub.customersV1().delete('09ba6f6c-ecc4-4cdb-9cfa-0e1fdb3979a4')
Get a single customer object.
clientAccountID required | string Alphanumeric client ID of the user |
customerID required | string Alphanumeric customer ID |
extended | boolean embed extended fields |
import * as tillhub from '@tillhub/javascript-sdk' const { data: customer } = await tillhub.customersV1().get('09ba6f6c-ecc4-4cdb-9cfa-0e1fdb3979a4')
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 10,
- "results": [
- {
- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "active": "true",
- "deleted": false,
- "firstname": "Boba",
- "lastname": "Fett",
- "middlename": "Alpha",
- "displayname": "Boba F.",
- "phonenumbers": {
- "main": "+49-555-123-4567"
}, - "customer_number": "fett-002",
- "company": {
- "name": "Bounty Hunter's Guild"
}, - "description": "Bounty hunter",
- "is_b2b": true,
- "date_of_birth": "2019-08-24T14:15:22Z",
- "images": {
}, - "contacts": {
- "email": {
- "enabled": true
}, - "newsletter": {
- "enabled": true
}, - "phone": {
- "enabled": true
}, - "post": {
- "enabled": true
}
}, - "metadata": { },
- "addresses": [
- {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
], - "custom": { },
- "comment": "Don't mess with",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percentage",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "client_id": "string",
- "external_reference": "string",
- "customer_since": "2019-08-24T14:15:22Z",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "gender": "male",
- "vat_id": "string",
- "source": "N/A, DASHBOARD, APPOINTMENT_CALENDAR, WEB_RESERVATION, POS",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc",
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "reminder_notification_enabled": "true",
- "insert_id": 0,
- "customer_group": "string",
- "price_list": { },
- "delegated_to": [
- "string"
], - "owner": "string",
- "analytics": {
- "summary": {
- "top_seller": [
- {
- "gross": "27633.02",
- "net": "27633.02",
- "currency": "str",
- "salesman_staff": "60aa716a-e92b-4c7a-a991-84c21829042f"
}
], - "top_branch": [
- {
- "gross": "27633.02",
- "net": "27633.02",
- "currency": "str",
- "branch_number": 0,
- "branch": "7c628a07-d557-4cd4-9105-51f9aade2c65"
}
], - "average_items_per_transaction": 0,
- "total_quantity_returns": 0,
- "total_quantity_cartitems": 0,
- "total_amount_returns": [
- {
- "gross": "27633.02",
- "net": "27633.02",
- "currency": "str"
}
], - "total_transactions": 0,
- "total_amount_items_sold": [
- {
- "gross": "27633.02",
- "net": "27633.02",
- "currency": "str"
}
], - "average_purchase_value": [
- {
- "gross": "27633.02",
- "net": "27633.02",
- "currency": "str"
}
], - "last_seen": "2019-08-24T14:15:22Z"
}, - "last_transactions_v0": [
- { }
]
}, - "notes": [
- {
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "type": "text",
- "payload": "string",
- "client_id": "string",
- "date": "2019-08-24T14:15:22Z"
}
]
}
], - "cursor": {
}
}
Replace an entire customer object.
clientAccountID required | string Alphanumeric client ID of the user |
customerID required | string Alphanumeric customer ID |
Simple Customer
active | boolean Default: true Customer active |
deleted | boolean Default: false Customer deleted |
string or (any or null) First name | |
string or (any or null) Last name | |
string or (any or null) Middle name | |
string or (any or null) Display name | |
(object or object or object or object) or (any or null) Phone numbers | |
string or (any or null) Default: null Email address | |
string or (any or null) Unique customer number | |
object or (any or null) Company name | |
string or (any or null) Description | |
boolean or (any or null) Is B2B customer | |
string or (any or null) Birth date | |
object or (any or null) Images object with URLs of various types of images | |
object or (any or null) DEPRECATED. Omit or set null. | |
object or (any or null) Contact info | |
metadata | object Additional metadata |
Array of objects or (any or null) Addresses | |
object or (any or null) Custom data | |
string or (any or null) Comment | |
(Array of objects or objects) or (any or null) Available discounts | |
string or (any or null) Client ID | |
string or (any or null) External reference | |
string or (any or null) Customer since | |
Array of strings or (any or null) Locations customer belongs to | |
Array of strings or (any or null) Branch groups customer belongs to | |
string or (any or null) Gender | |
string or (any or null) Customer VAT ID | |
string or (any or null) Customer source of creation | |
string or (any or null) in cases where the customer is created via the POS, the branch_id is required | |
string or (any or null) in cases where the customer is going to have personal pricebook (like for discounts in pharmacy by personal insurance number), price_book is required | |
reminder_notification_enabled | boolean Default: true The flag indicate whether the customer can receive reminder notification |
{- "active": "true",
- "deleted": false,
- "firstname": "Boba",
- "lastname": "Fett",
- "middlename": "Alpha",
- "displayname": "Boba F.",
- "phonenumbers": {
- "main": "+49-555-123-4567"
}, - "customer_number": "fett-002",
- "company": {
- "name": "Bounty Hunter's Guild"
}, - "description": "Bounty hunter",
- "is_b2b": true,
- "date_of_birth": "2019-08-24T14:15:22Z",
- "images": {
}, - "contacts": {
- "email": {
- "enabled": true
}, - "newsletter": {
- "enabled": true
}, - "phone": {
- "enabled": true
}, - "post": {
- "enabled": true
}
}, - "metadata": { },
- "addresses": [
- {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
], - "custom": { },
- "comment": "Don't mess with",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percentage",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "client_id": "string",
- "external_reference": "string",
- "customer_since": "2019-08-24T14:15:22Z",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "gender": "male",
- "vat_id": "string",
- "source": "N/A, DASHBOARD, APPOINTMENT_CALENDAR, WEB_RESERVATION, POS",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc",
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "reminder_notification_enabled": "true"
}
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "active": "true",
- "deleted": false,
- "firstname": "Boba",
- "lastname": "Fett",
- "middlename": "Alpha",
- "displayname": "Boba F.",
- "phonenumbers": {
- "main": "+49-555-123-4567"
}, - "customer_number": "fett-002",
- "company": {
- "name": "Bounty Hunter's Guild"
}, - "description": "Bounty hunter",
- "is_b2b": true,
- "date_of_birth": "2019-08-24T14:15:22Z",
- "images": {
}, - "contacts": {
- "email": {
- "enabled": true
}, - "newsletter": {
- "enabled": true
}, - "phone": {
- "enabled": true
}, - "post": {
- "enabled": true
}
}, - "metadata": { },
- "addresses": [
- {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
], - "custom": { },
- "comment": "Don't mess with",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percentage",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "client_id": "string",
- "external_reference": "string",
- "customer_since": "2019-08-24T14:15:22Z",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "gender": "male",
- "vat_id": "string",
- "source": "N/A, DASHBOARD, APPOINTMENT_CALENDAR, WEB_RESERVATION, POS",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc",
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "reminder_notification_enabled": "true"
}
]
}
Checks if a customer number is unique based on existing customer numbers
clientAccountID required | string Alphanumeric client ID of the user |
customer_number required | string the customer number to be checked |
tillhub.customers.get((err, result) => {})
Get metadata of the vouchers bounded to customer model.
clientAccountID required | string Alphanumeric client ID of the user |
customerID required | string Alphanumeric customer ID |
tillhub.customers.vouchers.meta.get((err, result) => {})
Query all vouchers bounded to customer
clientAccountID required | string Alphanumeric client ID of the user |
customerID required | string Alphanumeric customer ID |
limit | integer the discrete limit, that will default to 1000 on the legacy route |
cursor | string the alphanumeric cursor field |
cursor_field | string which column to cursor on. Currently we only support |
tillhub.customers.vouchers.get((err, result) => {})
Make a fuzzy search query for customers on the name, description, email fields as a string. This will return max. 100 results, with their score and some metadata. Also it will treat the input as incomplete string and make a suggestion for correction.
clientAccountID required | string Alphanumeric client ID of the user |
q required | string the search string |
type | string the product type to filter |
branch | string the location to filter |
limit | string the results limit |
offset | string the results offset |
tillhub.customers.search.get((err, result) => {})
Scale an uploaded image into various sizes, then upload to Google Storage and return
user required | string username of the client |
subsystem required | string sub system of the image e.g. products, customers, branches, staff |
prefix required | string prefix of image title |
image file
null
Scale an uploaded image into various sizes, then upload to Google Storage and return
user required | string username of the client |
subsystem required | string sub system of the image e.g. products, customers, branches, staff |
prefix required | string prefix of image title |
image file
null
Scale an uploaded image into various sizes, then upload to Google Storage. This version of the endpoint is asynchronous. It will return an immediate 200 response with a correlation Id, which could then be used to listen to the upload events via sockets. Another option to monitor the download is to poll (with timeout) the endpoint: GET /api/v1/images/{user}/{subsystem}/{image}/upload_status
user required | string username of the client |
subsystem required | string sub system of the image e.g. products, customers, branches, staff |
prefix required | string prefix of image title |
image file
null
Scale an uploaded image into various sizes, then upload to Google Storage. This version of the endpoint is asynchronous. It will return an immediate 200 response with a correlation Id, which could then be used to listen to the upload events via sockets. Another option to monitor the download is to poll (with timeout) the endpoint: GET /api/v1/images/{user}/{subsystem}/{image}/upload_status
user required | string username of the client |
subsystem required | string sub system of the image e.g. products, customers, branches, staff |
prefix required | string prefix of image title |
image file
null
Get a single image status (whether uploaded already or not yet)
user required | string username of the client |
subsystem required | string sub system of the image e.g. products, customers, branches |
image required | string image name with format e.g. profile-picture_original.jpg |
Update images for the transaction
clientAccountID required | string Alphanumeric client ID of the user |
transactionId required | string Alphanumeric transaction ID |
image file at form field field named 'image'
null
Update first image for the transaction
clientAccountID required | string Alphanumeric client ID of the user |
transactionId required | string Alphanumeric transaction ID |
Image file at form field field named 'image'
null
Update images for the transaction. version V2 is an async version of the API, it will return a correlationId to follow the upload either via a socket (with events 'imageUploadUploading', 'imageUploadSuccess' or 'imageUploadError'), or by polling for the file using the V2 GET corresponding API.
clientAccountID required | string Alphanumeric client ID of the user |
transactionId required | string Alphanumeric transaction ID |
image file at form field field named 'image'
null
Update image with given index for the transaction
clientAccountID required | string Alphanumeric client ID of the user |
transactionId required | string Alphanumeric transaction ID |
index required | number Position of the image |
Image file at form field field named 'image'
null
Update a Time Entry Item
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric ID of the time entry |
Simple Time Entry
type | string Enum: "day" "break" The type of the time entry. |
string or (any or null) The description about the task. | |
started_at | string <date-time> The start of the time entry. |
string or (any or null) The end of the time entry. | |
staff | string <= 64 characters The staff member which is clocking in/out. |
owner | string <= 128 characters The client account id |
string or (any or null) A identifier used locally on POS for their own reference. | |
string or (any or null) Arbitrary custom properties for this time entry. | |
active | boolean Default: true Soft disable or enabled this time entry. |
deleted | boolean Default: false Soft delete this time entry. |
object or (any or null) Arbitrary user defined data. | |
string or (any or null) Arbitrary user location. | |
string or (any or null) An IANA timezone that will be used to automatically clock out a time entry. |
{- "type": "day",
- "description": "string",
- "started_at": "2019-08-24T14:15:22Z",
- "ended_at": "2019-08-24T14:15:22Z",
- "staff": "string",
- "owner": "string",
- "client_id": "string",
- "custom_properties": "string",
- "active": true,
- "deleted": false,
- "metadata": { },
- "location": "string",
- "timezone": "string"
}
Create a time entry item
clientAccountID required | string Alphanumeric client ID of the user |
Simple Time Entry
type required | string Enum: "day" "break" The type of the time entry. |
string or (any or null) The description about the task. | |
started_at required | string <date-time> The start of the time entry. |
string or (any or null) The end of the time entry. | |
staff required | string <= 64 characters The staff member which is clocking in/out. |
owner | string <= 128 characters The client account id |
string or (any or null) A identifier used locally on POS for their own reference. | |
string or (any or null) Arbitrary custom properties for this time entry. | |
active | boolean Default: true Soft disable or enabled this time entry. |
deleted | boolean Default: false Soft delete this time entry. |
object or (any or null) Arbitrary user defined data. | |
string or (any or null) Arbitrary user location. | |
string or (any or null) An IANA timezone that will be used to automatically clock out a time entry. |
{- "type": "day",
- "description": "string",
- "started_at": "2019-08-24T14:15:22Z",
- "ended_at": "2019-08-24T14:15:22Z",
- "staff": "string",
- "owner": "string",
- "client_id": "string",
- "custom_properties": "string",
- "active": true,
- "deleted": false,
- "metadata": { },
- "location": "string",
- "timezone": "string"
}
Get all time entries items of a staff member.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric staff ID |
date | string date of the time entries, e.g. 2020-12-01 |
after_date | string date of the time entries to look after the start date, e.g. 2020-12-01 |
before_end | string date of the time entries to look before the end date, e.g. 2020-12-08 |
type required | string The type of time entry, e.g. day or break |
Get the time entries report of a staff member.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric staff ID of the user |
start | string a timestamp for filter starting period |
end | string a timestamp for filter ending period |
Get Summary of a Staff's Time Entries.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric staff ID |
started_at | string a timestamp for filter starting period |
ended_at | string a timestamp for filter ending period |
Get the time sheet of a staff member.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric staff ID of the user |
started_at | string a timestamp for filter starting period |
ended_at | string a timestamp for filter ending period |
Soft delete a single configuration object.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric configuration ID |
tillhub.timetracking.configurations.delete((err, result) => {})
{- "status": 200,
- "msg": "Deleted configuration 96341e35-0fe1-4b72-89bc-6f62e9114ac6",
- "request": {
- "host": "staging-api.tillhub.com",
- "id": "UUID"
}
}
Update an entire configuration object.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric configuration ID |
Simple configuration
string or (any or null) A identifier used locally on POS for their own reference. | |
active | boolean Default: true Soft disable or enabled this time entry. |
deleted | boolean Default: false Soft delete this time entry. |
auto_clock_out | boolean Default: false Feature enabled/disabled. |
object or (any or null) Time configuration for clock out after a period of time. | |
auto_clock_out_at_midnight | boolean Default: false DEPRECATED: do not use - Automatically clock out at midnight. |
string or (any or null) Automatically clock out at specific time. |
{- "client_id": "string",
- "active": true,
- "deleted": false,
- "auto_clock_out": false,
- "auto_clock_out_after": {
- "value": 0,
- "period": "hours"
}, - "auto_clock_out_at_midnight": false,
- "auto_clock_out_at": "20:20:39+00:00"
}
Query all configurations of a user.
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
deleted | string the string representation of boolean values as |
active | string the string representation of boolean values as |
tillhub.timetracking.configurations.get((err, result) => {})
Create a new configuration of a user.
clientAccountID required | string Alphanumeric client ID of the user |
Simple configuration
string or (any or null) A identifier used locally on POS for their own reference. | |
active | boolean Default: true Soft disable or enabled this time entry. |
deleted | boolean Default: false Soft delete this time entry. |
auto_clock_out | boolean Default: false Feature enabled/disabled. |
object or (any or null) Time configuration for clock out after a period of time. | |
auto_clock_out_at_midnight | boolean Default: false DEPRECATED: do not use - Automatically clock out at midnight. |
string or (any or null) Automatically clock out at specific time. |
{- "client_id": "string",
- "active": true,
- "deleted": false,
- "auto_clock_out": false,
- "auto_clock_out_after": {
- "value": 0,
- "period": "hours"
}, - "auto_clock_out_at_midnight": false,
- "auto_clock_out_at": "20:20:39+00:00"
}
Creates a new cart object that can be loaded by the Tllhub clients and be used to produce a transactions. It's highly recommended to provide client_id field with unique cart id to avoid cart duplications due to transport level issues. If client_id is not provided it's gonna be be taken from external_reference_id or custom_id if available.
This can happen in three forms
Name | Description | Use Case | Requirements |
---|---|---|---|
cart of external products | You have qualifiable products and assume will add default financials to it | You use your products, but our financial system and can assume we will add all necessary data on the fly. This will also create or update the products on the fly, based on the primary identifiers of your products | the minimum required fields of a cart item, e.g. the name and quantity of the items |
cart of tillhub products | You have knowledge about our products, via their IDs | Your product business logic is on your side, but you assume the financials will be handled by us | knowledge about product IDs, a groomed product system ahead of time |
full cart | you are an internal application, or have deep knowledge about the transaction system. | Generate transaction with no margin for business logic errors | specifying all the required fields and have your own sane defaults |
clientAccountID required | string Alphanumeric client ID of the user |
Simple Cart
string or (any or null) Date of this cart | |
string or (any or null) Date when this cart was used in a transaction (currently). If date is not null, this cart must not be used. | |
string or (any or null) The branch cart belongs to | |
string or (any or null) The register cart belongs to | |
string or (any or null) Cashier who handled the cart | |
string or (any or null) Staff who was lending permissions temporarily (in case that 'cashier_staff' did not have that permission) | |
string or (any or null) Currency being used | |
string or (any or null) User defined (human readable) identifier for the cart, e.g. counting number 1, 2, 3 ... | |
string or (any or null) Producer side unique identifier to resolve downstream mapping targets, e.g. GUID or UUID | |
string or (any or null) Cart ID | |
string or (any or null) Cart ID in external system | |
boolean or (any or null) Lean Payment System: If TRUE the client application will process this cart with minimal validation and without forced property fetching. Use on at your own risk. | |
boolean or (any or null) If TRUE this cart will be checked out immediately and thus landing on the payment screen. | |
boolean or (any or null) If TRUE this cart will not be editable, thus a user can not remove nor add new items. | |
string or (any or null) Customer ID cart belongs to | |
string or (any or null) Customer name | |
string or (any or null) Customer description | |
string or (any or null) Customer number | |
string or (any or null) | |
string or (any or null) Cart name | |
string or (any or null) Cart description | |
string or (any or null) Additional comments | |
required | Array of (object or objects) or (object or objects) or objects [ 1 .. 300 ] items |
object or (any or null) | |
string or (any or null) Date when this cart was opened. If date is not null, this cart must not be used. |
{- "date": "2022-02-20T19:41:07.736Z",
- "done_at": "2022-02-21T16:14:55.076Z",
- "branch": "0eb9ad65-63e5-445e-a7c2-3e13591011de",
- "register": "ede968cc-1ea1-4710-8d81-97d5a5fb166e",
- "cashier_staff": "bcd84d35-f887-4c35-bdad-291a154802a7",
- "temporary_staff": "f925ce8c-fd80-40e5-bac4-b269a04bda6f",
- "currency": "EUR",
- "custom_id": "17",
- "client_id": "00060968000420200624004214945",
- "cart_id": "4553332",
- "external_reference_id": "4433fg44ghnh4dfdf322",
- "lps": true,
- "instant_checkout": true,
- "immutable": true,
- "customer": "55ec2da5-f9a4-4868-8f00-65ae0804a9d3",
- "customer_name": "Morpheus",
- "customer_description": "Color pills seller",
- "customer_number": "322223",
- "customer_price_book": "512448db-5e6c-4fcf-bd70-f8a5e56fa269",
- "name": "For the chosen one",
- "description": "Red or blue",
- "comments": "Just funny choice",
- "items": [
- {
- "product": "cd0a2886-e245-4ed9-a758-443e7e5b3a3f",
- "product_supplier_name": "00555kff34323",
- "is_service": false,
- "discountable": true,
- "qty": 2,
- "custom_id": "string",
- "vat_rate": 0.12,
- "vat_rate_class": "normal",
- "currency": "EUR",
- "amount": {
- "net": -1000000,
- "gross": -1000000
}, - "promotion_amount": -1000000,
- "promotion_amount_total": -1000000,
- "product_service_answers": [
- {
- "id": "1d53f799-c24f-49e3-b68f-93ae5fc69921",
- "question": "Which colour is used?",
- "type": "checkbox",
- "content_type": "string",
- "required": null,
- "answer": null
}
], - "is_voucher": false,
- "voucher": null,
- "is_refund": true,
- "return_reason": null,
- "attributes_description": "red | big | 32",
- "reference_cartitem_client_id": "01331B44-130B-45D4-97A7-401247FD5B68",
- "used_barcode": "0E9761310XF",
- "name": "string",
- "position": 0,
- "comments": null,
- "client_id": "string",
- "external_reference_id": "823742686434462376376376473647346",
- "custom_properties": { },
- "salesman_staff": "68722313-4077-42eb-8cc2-bf3359940efc",
- "tax": "2b46be7d-65ac-4a23-a5dd-524b80fe8e49",
- "account": "f5b54a51-a98c-44cf-bb68-a676332e7d12",
- "account_number": "string",
- "product_group": "9d319324-1900-4660-8658-5d638e57fa1f",
- "addons": [
- {
- "addon": "ac847a66-d7dc-4ac2-8e8a-c44920e1f220",
- "product": "ff847a44-07dc-4ac2-8e8a-c44920e1f220",
- "price": 0.99,
- "currency": "EUR",
- "quantity": 3.6,
- "stock_quantity": 3.6,
- "name": "Extra Mushrooms"
}
], - "discounts": [
- {
- "amount": 0,
- "amount_total": 0,
- "order_index": 0,
- "currency": "str",
- "type_name": "percentage",
- "group": "customer",
- "value": 0,
- "rate": 1,
- "client_id": "string",
- "external_reference_id": "string",
- "source_id": "ae50a35c-df42-4eff-ba26-f8bc28d2af81",
- "assignment_id": "string",
- "assignment_source": "customer",
- "name": "string",
- "is_automatic": false,
- "order": "first",
- "vat_rate_class": "normal"
}
], - "attributes": null
}
], - "metadata": {
- "customer": {
- "price_book": "512448db-5e6c-4fcf-bd70-f8a5e56fa269"
}
}, - "opened_at": "2022-02-19T00:00:00.001Z"
}
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "date": "2022-02-20T19:41:07.736Z",
- "done_at": "2022-02-21T16:14:55.076Z",
- "branch": "0eb9ad65-63e5-445e-a7c2-3e13591011de",
- "register": "ede968cc-1ea1-4710-8d81-97d5a5fb166e",
- "cashier_staff": "bcd84d35-f887-4c35-bdad-291a154802a7",
- "temporary_staff": "f925ce8c-fd80-40e5-bac4-b269a04bda6f",
- "currency": "EUR",
- "custom_id": "17",
- "client_id": "00060968000420200624004214945",
- "cart_id": "4553332",
- "external_reference_id": "4433fg44ghnh4dfdf322",
- "lps": true,
- "instant_checkout": true,
- "immutable": true,
- "customer": "55ec2da5-f9a4-4868-8f00-65ae0804a9d3",
- "customer_name": "Morpheus",
- "customer_description": "Color pills seller",
- "customer_number": "322223",
- "customer_price_book": "512448db-5e6c-4fcf-bd70-f8a5e56fa269",
- "name": "For the chosen one",
- "description": "Red or blue",
- "comments": "Just funny choice",
- "items": [
- {
- "product": "cd0a2886-e245-4ed9-a758-443e7e5b3a3f",
- "product_supplier_name": "00555kff34323",
- "is_service": false,
- "discountable": true,
- "qty": 2,
- "custom_id": "string",
- "vat_rate": 0.12,
- "vat_rate_class": "normal",
- "currency": "EUR",
- "amount": {
- "net": -1000000,
- "gross": -1000000
}, - "promotion_amount": -1000000,
- "promotion_amount_total": -1000000,
- "product_service_answers": [
- {
- "id": "1d53f799-c24f-49e3-b68f-93ae5fc69921",
- "question": "Which colour is used?",
- "type": "checkbox",
- "content_type": "string",
- "required": null,
- "answer": null
}
], - "is_voucher": false,
- "voucher": null,
- "is_refund": true,
- "return_reason": null,
- "attributes_description": "red | big | 32",
- "reference_cartitem_client_id": "01331B44-130B-45D4-97A7-401247FD5B68",
- "used_barcode": "0E9761310XF",
- "name": "string",
- "position": 0,
- "comments": null,
- "client_id": "string",
- "external_reference_id": "823742686434462376376376473647346",
- "custom_properties": { },
- "salesman_staff": "68722313-4077-42eb-8cc2-bf3359940efc",
- "tax": "2b46be7d-65ac-4a23-a5dd-524b80fe8e49",
- "account": "f5b54a51-a98c-44cf-bb68-a676332e7d12",
- "account_number": "string",
- "product_group": "9d319324-1900-4660-8658-5d638e57fa1f",
- "addons": [
- {
- "addon": "ac847a66-d7dc-4ac2-8e8a-c44920e1f220",
- "product": "ff847a44-07dc-4ac2-8e8a-c44920e1f220",
- "price": 0.99,
- "currency": "EUR",
- "quantity": 3.6,
- "stock_quantity": 3.6,
- "name": "Extra Mushrooms"
}
], - "discounts": [
- {
- "amount": 0,
- "amount_total": 0,
- "order_index": 0,
- "currency": "str",
- "type_name": "percentage",
- "group": "customer",
- "value": 0,
- "rate": 1,
- "client_id": "string",
- "external_reference_id": "string",
- "source_id": "ae50a35c-df42-4eff-ba26-f8bc28d2af81",
- "assignment_id": "string",
- "assignment_source": "customer",
- "name": "string",
- "is_automatic": false,
- "order": "first",
- "vat_rate_class": "normal"
}
], - "attributes": null
}
], - "metadata": {
- "customer": {
- "price_book": "512448db-5e6c-4fcf-bd70-f8a5e56fa269"
}
}, - "opened_at": "2022-02-19T00:00:00.001Z"
}
]
}
Query all carts of a user.
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2022-02-01T00:00:00.000Z The start date to filter carts by "updated_at" field value |
branch | integer Set the branch id to filter carts per branch. |
register | integer Set the register id to filter carts per register |
external_reference_id | string Set the external reference id to filter carts per register |
done | string Enum: "true" "false" Return only already done cart or not. Done is the presence of any done_at timestamp |
cashier_staff | string Filter carts by cashier staff (null values always included regardless filter value) |
embed | string Value: "customer" Let the API embed a specified object |
import * as tillhub from '@tillhub/javascript-sdk' const { data: carts } = await tillhub.carts().getAll({ done: false, limit: 50 })
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "date": "2022-02-20T19:41:07.736Z",
- "done_at": "2022-02-21T16:14:55.076Z",
- "branch": "0eb9ad65-63e5-445e-a7c2-3e13591011de",
- "register": "ede968cc-1ea1-4710-8d81-97d5a5fb166e",
- "cashier_staff": "bcd84d35-f887-4c35-bdad-291a154802a7",
- "temporary_staff": "f925ce8c-fd80-40e5-bac4-b269a04bda6f",
- "currency": "EUR",
- "custom_id": "17",
- "client_id": "00060968000420200624004214945",
- "cart_id": "4553332",
- "external_reference_id": "4433fg44ghnh4dfdf322",
- "lps": true,
- "instant_checkout": true,
- "immutable": true,
- "customer": "55ec2da5-f9a4-4868-8f00-65ae0804a9d3",
- "customer_name": "Morpheus",
- "customer_description": "Color pills seller",
- "customer_number": "322223",
- "customer_price_book": "512448db-5e6c-4fcf-bd70-f8a5e56fa269",
- "name": "For the chosen one",
- "description": "Red or blue",
- "comments": "Just funny choice",
- "items": [
- {
- "product": "cd0a2886-e245-4ed9-a758-443e7e5b3a3f",
- "product_supplier_name": "00555kff34323",
- "is_service": false,
- "discountable": true,
- "qty": 2,
- "custom_id": "string",
- "vat_rate": 0.12,
- "vat_rate_class": "normal",
- "currency": "EUR",
- "amount": {
- "net": -1000000,
- "gross": -1000000
}, - "promotion_amount": -1000000,
- "promotion_amount_total": -1000000,
- "product_service_answers": [
- {
- "id": "1d53f799-c24f-49e3-b68f-93ae5fc69921",
- "question": "Which colour is used?",
- "type": "checkbox",
- "content_type": "string",
- "required": null,
- "answer": null
}
], - "is_voucher": false,
- "voucher": null,
- "is_refund": true,
- "return_reason": null,
- "attributes_description": "red | big | 32",
- "reference_cartitem_client_id": "01331B44-130B-45D4-97A7-401247FD5B68",
- "used_barcode": "0E9761310XF",
- "name": "string",
- "position": 0,
- "comments": null,
- "client_id": "string",
- "external_reference_id": "823742686434462376376376473647346",
- "custom_properties": { },
- "salesman_staff": "68722313-4077-42eb-8cc2-bf3359940efc",
- "tax": "2b46be7d-65ac-4a23-a5dd-524b80fe8e49",
- "account": "f5b54a51-a98c-44cf-bb68-a676332e7d12",
- "account_number": "string",
- "product_group": "9d319324-1900-4660-8658-5d638e57fa1f",
- "addons": [
- {
- "addon": "ac847a66-d7dc-4ac2-8e8a-c44920e1f220",
- "product": "ff847a44-07dc-4ac2-8e8a-c44920e1f220",
- "price": 0.99,
- "currency": "EUR",
- "quantity": 3.6,
- "stock_quantity": 3.6,
- "name": "Extra Mushrooms"
}
], - "discounts": [
- {
- "amount": 0,
- "amount_total": 0,
- "order_index": 0,
- "currency": "str",
- "type_name": "percentage",
- "group": "customer",
- "value": 0,
- "rate": 1,
- "client_id": "string",
- "external_reference_id": "string",
- "source_id": "ae50a35c-df42-4eff-ba26-f8bc28d2af81",
- "assignment_id": "string",
- "assignment_source": "customer",
- "name": "string",
- "is_automatic": false,
- "order": "first",
- "vat_rate_class": "normal"
}
], - "attributes": null
}
], - "metadata": {
- "customer": {
- "price_book": "512448db-5e6c-4fcf-bd70-f8a5e56fa269"
}
}, - "opened_at": "2022-02-19T00:00:00.001Z"
}
]
}
Get a single cart.
clientAccountID required | string Alphanumeric client ID of the user |
cartID required | string Alphanumeric ID of the cart |
embed | string Value: "customer" let the API embed a specified object |
import * as tillhub from '@tillhub/javascript-sdk' const { data: cart } = await tillhub.carts().get('748aebef-1456-4dc7-8257-aa11304afa53')
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "date": "2022-02-20T19:41:07.736Z",
- "done_at": "2022-02-21T16:14:55.076Z",
- "branch": "0eb9ad65-63e5-445e-a7c2-3e13591011de",
- "register": "ede968cc-1ea1-4710-8d81-97d5a5fb166e",
- "cashier_staff": "bcd84d35-f887-4c35-bdad-291a154802a7",
- "temporary_staff": "f925ce8c-fd80-40e5-bac4-b269a04bda6f",
- "currency": "EUR",
- "custom_id": "17",
- "client_id": "00060968000420200624004214945",
- "cart_id": "4553332",
- "external_reference_id": "4433fg44ghnh4dfdf322",
- "lps": true,
- "instant_checkout": true,
- "immutable": true,
- "customer": "55ec2da5-f9a4-4868-8f00-65ae0804a9d3",
- "customer_name": "Morpheus",
- "customer_description": "Color pills seller",
- "customer_number": "322223",
- "customer_price_book": "512448db-5e6c-4fcf-bd70-f8a5e56fa269",
- "name": "For the chosen one",
- "description": "Red or blue",
- "comments": "Just funny choice",
- "items": [
- {
- "product": "cd0a2886-e245-4ed9-a758-443e7e5b3a3f",
- "product_supplier_name": "00555kff34323",
- "is_service": false,
- "discountable": true,
- "qty": 2,
- "custom_id": "string",
- "vat_rate": 0.12,
- "vat_rate_class": "normal",
- "currency": "EUR",
- "amount": {
- "net": -1000000,
- "gross": -1000000
}, - "promotion_amount": -1000000,
- "promotion_amount_total": -1000000,
- "product_service_answers": [
- {
- "id": "1d53f799-c24f-49e3-b68f-93ae5fc69921",
- "question": "Which colour is used?",
- "type": "checkbox",
- "content_type": "string",
- "required": null,
- "answer": null
}
], - "is_voucher": false,
- "voucher": null,
- "is_refund": true,
- "return_reason": null,
- "attributes_description": "red | big | 32",
- "reference_cartitem_client_id": "01331B44-130B-45D4-97A7-401247FD5B68",
- "used_barcode": "0E9761310XF",
- "name": "string",
- "position": 0,
- "comments": null,
- "client_id": "string",
- "external_reference_id": "823742686434462376376376473647346",
- "custom_properties": { },
- "salesman_staff": "68722313-4077-42eb-8cc2-bf3359940efc",
- "tax": "2b46be7d-65ac-4a23-a5dd-524b80fe8e49",
- "account": "f5b54a51-a98c-44cf-bb68-a676332e7d12",
- "account_number": "string",
- "product_group": "9d319324-1900-4660-8658-5d638e57fa1f",
- "addons": [
- {
- "addon": "ac847a66-d7dc-4ac2-8e8a-c44920e1f220",
- "product": "ff847a44-07dc-4ac2-8e8a-c44920e1f220",
- "price": 0.99,
- "currency": "EUR",
- "quantity": 3.6,
- "stock_quantity": 3.6,
- "name": "Extra Mushrooms"
}
], - "discounts": [
- {
- "amount": 0,
- "amount_total": 0,
- "order_index": 0,
- "currency": "str",
- "type_name": "percentage",
- "group": "customer",
- "value": 0,
- "rate": 1,
- "client_id": "string",
- "external_reference_id": "string",
- "source_id": "ae50a35c-df42-4eff-ba26-f8bc28d2af81",
- "assignment_id": "string",
- "assignment_source": "customer",
- "name": "string",
- "is_automatic": false,
- "order": "first",
- "vat_rate_class": "normal"
}
], - "attributes": null
}
], - "metadata": {
- "customer": {
- "price_book": "512448db-5e6c-4fcf-bd70-f8a5e56fa269"
}
}, - "opened_at": "2022-02-19T00:00:00.001Z"
}
]
}
Get the latest carts.
clientAccountID required | string Alphanumeric client ID of the user |
embed | string Value: "customer" let the API embed a specified object; currently the only options is "customer" |
limit | integer limits the number of returned results; default and maximum is 200 |
done | boolean by default returns only carts that are not "done" - "done" is the presence of any done_at |
branch | string alphanumeric uuid of the branch |
external_reference_id | string Set the external reference id to filter carts per register |
import * as tillhub from '@tillhub/javascript-sdk' const { data: carts } = await tillhub.carts().getLatest({ done: false, limit: 50 })
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "date": "2022-02-20T19:41:07.736Z",
- "done_at": "2022-02-21T16:14:55.076Z",
- "branch": "0eb9ad65-63e5-445e-a7c2-3e13591011de",
- "register": "ede968cc-1ea1-4710-8d81-97d5a5fb166e",
- "cashier_staff": "bcd84d35-f887-4c35-bdad-291a154802a7",
- "temporary_staff": "f925ce8c-fd80-40e5-bac4-b269a04bda6f",
- "currency": "EUR",
- "custom_id": "17",
- "client_id": "00060968000420200624004214945",
- "cart_id": "4553332",
- "external_reference_id": "4433fg44ghnh4dfdf322",
- "lps": true,
- "instant_checkout": true,
- "immutable": true,
- "customer": "55ec2da5-f9a4-4868-8f00-65ae0804a9d3",
- "customer_name": "Morpheus",
- "customer_description": "Color pills seller",
- "customer_number": "322223",
- "customer_price_book": "512448db-5e6c-4fcf-bd70-f8a5e56fa269",
- "name": "For the chosen one",
- "description": "Red or blue",
- "comments": "Just funny choice",
- "items": [
- {
- "product": "cd0a2886-e245-4ed9-a758-443e7e5b3a3f",
- "product_supplier_name": "00555kff34323",
- "is_service": false,
- "discountable": true,
- "qty": 2,
- "custom_id": "string",
- "vat_rate": 0.12,
- "vat_rate_class": "normal",
- "currency": "EUR",
- "amount": {
- "net": -1000000,
- "gross": -1000000
}, - "promotion_amount": -1000000,
- "promotion_amount_total": -1000000,
- "product_service_answers": [
- {
- "id": "1d53f799-c24f-49e3-b68f-93ae5fc69921",
- "question": "Which colour is used?",
- "type": "checkbox",
- "content_type": "string",
- "required": null,
- "answer": null
}
], - "is_voucher": false,
- "voucher": null,
- "is_refund": true,
- "return_reason": null,
- "attributes_description": "red | big | 32",
- "reference_cartitem_client_id": "01331B44-130B-45D4-97A7-401247FD5B68",
- "used_barcode": "0E9761310XF",
- "name": "string",
- "position": 0,
- "comments": null,
- "client_id": "string",
- "external_reference_id": "823742686434462376376376473647346",
- "custom_properties": { },
- "salesman_staff": "68722313-4077-42eb-8cc2-bf3359940efc",
- "tax": "2b46be7d-65ac-4a23-a5dd-524b80fe8e49",
- "account": "f5b54a51-a98c-44cf-bb68-a676332e7d12",
- "account_number": "string",
- "product_group": "9d319324-1900-4660-8658-5d638e57fa1f",
- "addons": [
- {
- "addon": "ac847a66-d7dc-4ac2-8e8a-c44920e1f220",
- "product": "ff847a44-07dc-4ac2-8e8a-c44920e1f220",
- "price": 0.99,
- "currency": "EUR",
- "quantity": 3.6,
- "stock_quantity": 3.6,
- "name": "Extra Mushrooms"
}
], - "discounts": [
- {
- "amount": 0,
- "amount_total": 0,
- "order_index": 0,
- "currency": "str",
- "type_name": "percentage",
- "group": "customer",
- "value": 0,
- "rate": 1,
- "client_id": "string",
- "external_reference_id": "string",
- "source_id": "ae50a35c-df42-4eff-ba26-f8bc28d2af81",
- "assignment_id": "string",
- "assignment_source": "customer",
- "name": "string",
- "is_automatic": false,
- "order": "first",
- "vat_rate_class": "normal"
}
], - "attributes": null
}
], - "metadata": {
- "customer": {
- "price_book": "512448db-5e6c-4fcf-bd70-f8a5e56fa269"
}
}, - "opened_at": "2022-02-19T00:00:00.001Z"
}
]
}
Update an entire cart object.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric cart ID |
Simple cart
string or (any or null) Date of this cart | |
string or (any or null) Date when this cart was used in a transaction (currently). If date is not null, this cart must not be used. | |
string or (any or null) The branch cart belongs to | |
string or (any or null) The register cart belongs to | |
string or (any or null) Cashier who handled the cart | |
string or (any or null) Staff who was lending permissions temporarily (in case that 'cashier_staff' did not have that permission) | |
string or (any or null) Currency being used | |
string or (any or null) User defined (human readable) identifier for the cart, e.g. counting number 1, 2, 3 ... | |
string or (any or null) Producer side unique identifier to resolve downstream mapping targets, e.g. GUID or UUID | |
string or (any or null) Cart ID | |
string or (any or null) Cart ID in external system | |
boolean or (any or null) Lean Payment System: If TRUE the client application will process this cart with minimal validation and without forced property fetching. Use on at your own risk. | |
boolean or (any or null) If TRUE this cart will be checked out immediately and thus landing on the payment screen. | |
boolean or (any or null) If TRUE this cart will not be editable, thus a user can not remove nor add new items. | |
string or (any or null) Customer ID cart belongs to | |
string or (any or null) Customer name | |
string or (any or null) Customer description | |
string or (any or null) Customer number | |
string or (any or null) | |
string or (any or null) Cart name | |
string or (any or null) Cart description | |
string or (any or null) Additional comments | |
Array of (object or objects) or (object or objects) or objects [ 1 .. 300 ] items | |
object or (any or null) | |
string or (any or null) Date when this cart was opened. If date is not null, this cart must not be used. |
{- "date": "2022-02-20T19:41:07.736Z",
- "done_at": "2022-02-21T16:14:55.076Z",
- "branch": "0eb9ad65-63e5-445e-a7c2-3e13591011de",
- "register": "ede968cc-1ea1-4710-8d81-97d5a5fb166e",
- "cashier_staff": "bcd84d35-f887-4c35-bdad-291a154802a7",
- "temporary_staff": "f925ce8c-fd80-40e5-bac4-b269a04bda6f",
- "currency": "EUR",
- "custom_id": "17",
- "client_id": "00060968000420200624004214945",
- "cart_id": "4553332",
- "external_reference_id": "4433fg44ghnh4dfdf322",
- "lps": true,
- "instant_checkout": true,
- "immutable": true,
- "customer": "55ec2da5-f9a4-4868-8f00-65ae0804a9d3",
- "customer_name": "Morpheus",
- "customer_description": "Color pills seller",
- "customer_number": "322223",
- "customer_price_book": "512448db-5e6c-4fcf-bd70-f8a5e56fa269",
- "name": "For the chosen one",
- "description": "Red or blue",
- "comments": "Just funny choice",
- "items": [
- {
- "tax": "2b46be7d-65ac-4a23-a5dd-524b80fe8e49",
- "taxes_options": [
- null
], - "attributes": null,
- "description": "string",
- "id": "string",
- "product": "cd0a2886-e245-4ed9-a758-443e7e5b3a3f",
- "product_supplier_name": "00555kff34323",
- "is_service": false,
- "discountable": true,
- "qty": 2,
- "custom_id": "string",
- "vat_rate": 0.12,
- "vat_rate_class": "normal",
- "currency": "EUR",
- "amount": {
- "net": -1000000,
- "gross": -1000000
}, - "promotion_amount": -1000000,
- "promotion_amount_total": -1000000,
- "product_service_answers": [
- {
- "id": "1d53f799-c24f-49e3-b68f-93ae5fc69921",
- "question": "Which colour is used?",
- "type": "checkbox",
- "content_type": "string",
- "required": null,
- "answer": null
}
], - "is_voucher": false,
- "voucher": null,
- "is_refund": true,
- "return_reason": null,
- "attributes_description": "red | big | 32",
- "reference_cartitem_client_id": "01331B44-130B-45D4-97A7-401247FD5B68",
- "used_barcode": "0E9761310XF",
- "name": "string",
- "position": 0,
- "comments": null,
- "client_id": "string",
- "external_reference_id": "823742686434462376376376473647346",
- "custom_properties": { },
- "salesman_staff": "68722313-4077-42eb-8cc2-bf3359940efc",
- "account": "f5b54a51-a98c-44cf-bb68-a676332e7d12",
- "account_number": "string",
- "product_group": "9d319324-1900-4660-8658-5d638e57fa1f",
- "addons": [
- {
- "addon": "ac847a66-d7dc-4ac2-8e8a-c44920e1f220",
- "product": "ff847a44-07dc-4ac2-8e8a-c44920e1f220",
- "price": 0.99,
- "currency": "EUR",
- "quantity": 3.6,
- "stock_quantity": 3.6,
- "name": "Extra Mushrooms"
}
], - "discounts": [
- {
- "amount": 0,
- "amount_total": 0,
- "order_index": 0,
- "currency": "str",
- "type_name": "percentage",
- "group": "customer",
- "value": 0,
- "rate": 1,
- "client_id": "string",
- "external_reference_id": "string",
- "source_id": "ae50a35c-df42-4eff-ba26-f8bc28d2af81",
- "assignment_id": "string",
- "assignment_source": "customer",
- "name": "string",
- "is_automatic": false,
- "order": "first",
- "vat_rate_class": "normal"
}
]
}
], - "metadata": {
- "customer": {
- "price_book": "512448db-5e6c-4fcf-bd70-f8a5e56fa269"
}
}, - "opened_at": "2022-02-19T00:00:00.001Z"
}
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "date": "2022-02-20T19:41:07.736Z",
- "done_at": "2022-02-21T16:14:55.076Z",
- "branch": "0eb9ad65-63e5-445e-a7c2-3e13591011de",
- "register": "ede968cc-1ea1-4710-8d81-97d5a5fb166e",
- "cashier_staff": "bcd84d35-f887-4c35-bdad-291a154802a7",
- "temporary_staff": "f925ce8c-fd80-40e5-bac4-b269a04bda6f",
- "currency": "EUR",
- "custom_id": "17",
- "client_id": "00060968000420200624004214945",
- "cart_id": "4553332",
- "external_reference_id": "4433fg44ghnh4dfdf322",
- "lps": true,
- "instant_checkout": true,
- "immutable": true,
- "customer": "55ec2da5-f9a4-4868-8f00-65ae0804a9d3",
- "customer_name": "Morpheus",
- "customer_description": "Color pills seller",
- "customer_number": "322223",
- "customer_price_book": "512448db-5e6c-4fcf-bd70-f8a5e56fa269",
- "name": "For the chosen one",
- "description": "Red or blue",
- "comments": "Just funny choice",
- "items": [
- {
- "product": "cd0a2886-e245-4ed9-a758-443e7e5b3a3f",
- "product_supplier_name": "00555kff34323",
- "is_service": false,
- "discountable": true,
- "qty": 2,
- "custom_id": "string",
- "vat_rate": 0.12,
- "vat_rate_class": "normal",
- "currency": "EUR",
- "amount": {
- "net": -1000000,
- "gross": -1000000
}, - "promotion_amount": -1000000,
- "promotion_amount_total": -1000000,
- "product_service_answers": [
- {
- "id": "1d53f799-c24f-49e3-b68f-93ae5fc69921",
- "question": "Which colour is used?",
- "type": "checkbox",
- "content_type": "string",
- "required": null,
- "answer": null
}
], - "is_voucher": false,
- "voucher": null,
- "is_refund": true,
- "return_reason": null,
- "attributes_description": "red | big | 32",
- "reference_cartitem_client_id": "01331B44-130B-45D4-97A7-401247FD5B68",
- "used_barcode": "0E9761310XF",
- "name": "string",
- "position": 0,
- "comments": null,
- "client_id": "string",
- "external_reference_id": "823742686434462376376376473647346",
- "custom_properties": { },
- "salesman_staff": "68722313-4077-42eb-8cc2-bf3359940efc",
- "tax": "2b46be7d-65ac-4a23-a5dd-524b80fe8e49",
- "account": "f5b54a51-a98c-44cf-bb68-a676332e7d12",
- "account_number": "string",
- "product_group": "9d319324-1900-4660-8658-5d638e57fa1f",
- "addons": [
- {
- "addon": "ac847a66-d7dc-4ac2-8e8a-c44920e1f220",
- "product": "ff847a44-07dc-4ac2-8e8a-c44920e1f220",
- "price": 0.99,
- "currency": "EUR",
- "quantity": 3.6,
- "stock_quantity": 3.6,
- "name": "Extra Mushrooms"
}
], - "discounts": [
- {
- "amount": 0,
- "amount_total": 0,
- "order_index": 0,
- "currency": "str",
- "type_name": "percentage",
- "group": "customer",
- "value": 0,
- "rate": 1,
- "client_id": "string",
- "external_reference_id": "string",
- "source_id": "ae50a35c-df42-4eff-ba26-f8bc28d2af81",
- "assignment_id": "string",
- "assignment_source": "customer",
- "name": "string",
- "is_automatic": false,
- "order": "first",
- "vat_rate_class": "normal"
}
], - "attributes": null
}
], - "metadata": {
- "customer": {
- "price_book": "512448db-5e6c-4fcf-bd70-f8a5e56fa269"
}
}, - "opened_at": "2022-02-19T00:00:00.001Z"
}
]
}
Update a Cart status to DONE. The app will discard this carts.
clientAccountID required | string Alphanumeric client ID of the user |
cartID required | string Cart ID |
to object to replace the cart with
done_at | string |
{- "done_at": "2018-05-07T14:35:52.626+02:00 If not set will be set automatically"
}
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "date": "2022-02-20T19:41:07.736Z",
- "done_at": "2022-02-21T16:14:55.076Z",
- "branch": "0eb9ad65-63e5-445e-a7c2-3e13591011de",
- "register": "ede968cc-1ea1-4710-8d81-97d5a5fb166e",
- "cashier_staff": "bcd84d35-f887-4c35-bdad-291a154802a7",
- "temporary_staff": "f925ce8c-fd80-40e5-bac4-b269a04bda6f",
- "currency": "EUR",
- "custom_id": "17",
- "client_id": "00060968000420200624004214945",
- "cart_id": "4553332",
- "external_reference_id": "4433fg44ghnh4dfdf322",
- "lps": true,
- "instant_checkout": true,
- "immutable": true,
- "customer": "55ec2da5-f9a4-4868-8f00-65ae0804a9d3",
- "customer_name": "Morpheus",
- "customer_description": "Color pills seller",
- "customer_number": "322223",
- "customer_price_book": "512448db-5e6c-4fcf-bd70-f8a5e56fa269",
- "name": "For the chosen one",
- "description": "Red or blue",
- "comments": "Just funny choice",
- "items": [
- {
- "product": "cd0a2886-e245-4ed9-a758-443e7e5b3a3f",
- "product_supplier_name": "00555kff34323",
- "is_service": false,
- "discountable": true,
- "qty": 2,
- "custom_id": "string",
- "vat_rate": 0.12,
- "vat_rate_class": "normal",
- "currency": "EUR",
- "amount": {
- "net": -1000000,
- "gross": -1000000
}, - "promotion_amount": -1000000,
- "promotion_amount_total": -1000000,
- "product_service_answers": [
- {
- "id": "1d53f799-c24f-49e3-b68f-93ae5fc69921",
- "question": "Which colour is used?",
- "type": "checkbox",
- "content_type": "string",
- "required": null,
- "answer": null
}
], - "is_voucher": false,
- "voucher": null,
- "is_refund": true,
- "return_reason": null,
- "attributes_description": "red | big | 32",
- "reference_cartitem_client_id": "01331B44-130B-45D4-97A7-401247FD5B68",
- "used_barcode": "0E9761310XF",
- "name": "string",
- "position": 0,
- "comments": null,
- "client_id": "string",
- "external_reference_id": "823742686434462376376376473647346",
- "custom_properties": { },
- "salesman_staff": "68722313-4077-42eb-8cc2-bf3359940efc",
- "tax": "2b46be7d-65ac-4a23-a5dd-524b80fe8e49",
- "account": "f5b54a51-a98c-44cf-bb68-a676332e7d12",
- "account_number": "string",
- "product_group": "9d319324-1900-4660-8658-5d638e57fa1f",
- "addons": [
- {
- "addon": "ac847a66-d7dc-4ac2-8e8a-c44920e1f220",
- "product": "ff847a44-07dc-4ac2-8e8a-c44920e1f220",
- "price": 0.99,
- "currency": "EUR",
- "quantity": 3.6,
- "stock_quantity": 3.6,
- "name": "Extra Mushrooms"
}
], - "discounts": [
- {
- "amount": 0,
- "amount_total": 0,
- "order_index": 0,
- "currency": "str",
- "type_name": "percentage",
- "group": "customer",
- "value": 0,
- "rate": 1,
- "client_id": "string",
- "external_reference_id": "string",
- "source_id": "ae50a35c-df42-4eff-ba26-f8bc28d2af81",
- "assignment_id": "string",
- "assignment_source": "customer",
- "name": "string",
- "is_automatic": false,
- "order": "first",
- "vat_rate_class": "normal"
}
], - "attributes": null
}
], - "metadata": {
- "customer": {
- "price_book": "512448db-5e6c-4fcf-bd70-f8a5e56fa269"
}
}, - "opened_at": "2022-02-19T00:00:00.001Z"
}
]
}
Update a Cart status to UNDONE.
clientAccountID required | string Alphanumeric client ID of the user |
cartID required | string Cart ID |
curl 'https://api.tillhub.com/api/v1/carts/58b4ff3f-73dd-4712-a732-388127a52217/bbda0a01-a03b-49a7-9bd6-a70256feade8/undone' \ -X 'POST' \ -H 'authorization: Bearer ***' \ -H 'content-type: application/json' \ --data-raw $'{}' \ --compressed
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "date": "2022-02-20T19:41:07.736Z",
- "done_at": "2022-02-21T16:14:55.076Z",
- "branch": "0eb9ad65-63e5-445e-a7c2-3e13591011de",
- "register": "ede968cc-1ea1-4710-8d81-97d5a5fb166e",
- "cashier_staff": "bcd84d35-f887-4c35-bdad-291a154802a7",
- "temporary_staff": "f925ce8c-fd80-40e5-bac4-b269a04bda6f",
- "currency": "EUR",
- "custom_id": "17",
- "client_id": "00060968000420200624004214945",
- "cart_id": "4553332",
- "external_reference_id": "4433fg44ghnh4dfdf322",
- "lps": true,
- "instant_checkout": true,
- "immutable": true,
- "customer": "55ec2da5-f9a4-4868-8f00-65ae0804a9d3",
- "customer_name": "Morpheus",
- "customer_description": "Color pills seller",
- "customer_number": "322223",
- "customer_price_book": "512448db-5e6c-4fcf-bd70-f8a5e56fa269",
- "name": "For the chosen one",
- "description": "Red or blue",
- "comments": "Just funny choice",
- "items": [
- {
- "product": "cd0a2886-e245-4ed9-a758-443e7e5b3a3f",
- "product_supplier_name": "00555kff34323",
- "is_service": false,
- "discountable": true,
- "qty": 2,
- "custom_id": "string",
- "vat_rate": 0.12,
- "vat_rate_class": "normal",
- "currency": "EUR",
- "amount": {
- "net": -1000000,
- "gross": -1000000
}, - "promotion_amount": -1000000,
- "promotion_amount_total": -1000000,
- "product_service_answers": [
- {
- "id": "1d53f799-c24f-49e3-b68f-93ae5fc69921",
- "question": "Which colour is used?",
- "type": "checkbox",
- "content_type": "string",
- "required": null,
- "answer": null
}
], - "is_voucher": false,
- "voucher": null,
- "is_refund": true,
- "return_reason": null,
- "attributes_description": "red | big | 32",
- "reference_cartitem_client_id": "01331B44-130B-45D4-97A7-401247FD5B68",
- "used_barcode": "0E9761310XF",
- "name": "string",
- "position": 0,
- "comments": null,
- "client_id": "string",
- "external_reference_id": "823742686434462376376376473647346",
- "custom_properties": { },
- "salesman_staff": "68722313-4077-42eb-8cc2-bf3359940efc",
- "tax": "2b46be7d-65ac-4a23-a5dd-524b80fe8e49",
- "account": "f5b54a51-a98c-44cf-bb68-a676332e7d12",
- "account_number": "string",
- "product_group": "9d319324-1900-4660-8658-5d638e57fa1f",
- "addons": [
- {
- "addon": "ac847a66-d7dc-4ac2-8e8a-c44920e1f220",
- "product": "ff847a44-07dc-4ac2-8e8a-c44920e1f220",
- "price": 0.99,
- "currency": "EUR",
- "quantity": 3.6,
- "stock_quantity": 3.6,
- "name": "Extra Mushrooms"
}
], - "discounts": [
- {
- "amount": 0,
- "amount_total": 0,
- "order_index": 0,
- "currency": "str",
- "type_name": "percentage",
- "group": "customer",
- "value": 0,
- "rate": 1,
- "client_id": "string",
- "external_reference_id": "string",
- "source_id": "ae50a35c-df42-4eff-ba26-f8bc28d2af81",
- "assignment_id": "string",
- "assignment_source": "customer",
- "name": "string",
- "is_automatic": false,
- "order": "first",
- "vat_rate_class": "normal"
}
], - "attributes": null
}
], - "metadata": {
- "customer": {
- "price_book": "512448db-5e6c-4fcf-bd70-f8a5e56fa269"
}
}, - "opened_at": "2022-02-19T00:00:00.001Z"
}
]
}
Update a Cart status to open. If no date is specified in the request, it will default to now.
clientAccountID required | string Alphanumeric client ID of the user |
cartID required | string Cart ID |
to object to replace the cart with
opened_at | string |
{- "opened_at": "2019-11-12T13:39:17.654Z"
}
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "date": "2022-02-20T19:41:07.736Z",
- "done_at": "2022-02-21T16:14:55.076Z",
- "branch": "0eb9ad65-63e5-445e-a7c2-3e13591011de",
- "register": "ede968cc-1ea1-4710-8d81-97d5a5fb166e",
- "cashier_staff": "bcd84d35-f887-4c35-bdad-291a154802a7",
- "temporary_staff": "f925ce8c-fd80-40e5-bac4-b269a04bda6f",
- "currency": "EUR",
- "custom_id": "17",
- "client_id": "00060968000420200624004214945",
- "cart_id": "4553332",
- "external_reference_id": "4433fg44ghnh4dfdf322",
- "lps": true,
- "instant_checkout": true,
- "immutable": true,
- "customer": "55ec2da5-f9a4-4868-8f00-65ae0804a9d3",
- "customer_name": "Morpheus",
- "customer_description": "Color pills seller",
- "customer_number": "322223",
- "customer_price_book": "512448db-5e6c-4fcf-bd70-f8a5e56fa269",
- "name": "For the chosen one",
- "description": "Red or blue",
- "comments": "Just funny choice",
- "items": [
- {
- "product": "cd0a2886-e245-4ed9-a758-443e7e5b3a3f",
- "product_supplier_name": "00555kff34323",
- "is_service": false,
- "discountable": true,
- "qty": 2,
- "custom_id": "string",
- "vat_rate": 0.12,
- "vat_rate_class": "normal",
- "currency": "EUR",
- "amount": {
- "net": -1000000,
- "gross": -1000000
}, - "promotion_amount": -1000000,
- "promotion_amount_total": -1000000,
- "product_service_answers": [
- {
- "id": "1d53f799-c24f-49e3-b68f-93ae5fc69921",
- "question": "Which colour is used?",
- "type": "checkbox",
- "content_type": "string",
- "required": null,
- "answer": null
}
], - "is_voucher": false,
- "voucher": null,
- "is_refund": true,
- "return_reason": null,
- "attributes_description": "red | big | 32",
- "reference_cartitem_client_id": "01331B44-130B-45D4-97A7-401247FD5B68",
- "used_barcode": "0E9761310XF",
- "name": "string",
- "position": 0,
- "comments": null,
- "client_id": "string",
- "external_reference_id": "823742686434462376376376473647346",
- "custom_properties": { },
- "salesman_staff": "68722313-4077-42eb-8cc2-bf3359940efc",
- "tax": "2b46be7d-65ac-4a23-a5dd-524b80fe8e49",
- "account": "f5b54a51-a98c-44cf-bb68-a676332e7d12",
- "account_number": "string",
- "product_group": "9d319324-1900-4660-8658-5d638e57fa1f",
- "addons": [
- {
- "addon": "ac847a66-d7dc-4ac2-8e8a-c44920e1f220",
- "product": "ff847a44-07dc-4ac2-8e8a-c44920e1f220",
- "price": 0.99,
- "currency": "EUR",
- "quantity": 3.6,
- "stock_quantity": 3.6,
- "name": "Extra Mushrooms"
}
], - "discounts": [
- {
- "amount": 0,
- "amount_total": 0,
- "order_index": 0,
- "currency": "str",
- "type_name": "percentage",
- "group": "customer",
- "value": 0,
- "rate": 1,
- "client_id": "string",
- "external_reference_id": "string",
- "source_id": "ae50a35c-df42-4eff-ba26-f8bc28d2af81",
- "assignment_id": "string",
- "assignment_source": "customer",
- "name": "string",
- "is_automatic": false,
- "order": "first",
- "vat_rate_class": "normal"
}
], - "attributes": null
}
], - "metadata": {
- "customer": {
- "price_book": "512448db-5e6c-4fcf-bd70-f8a5e56fa269"
}
}, - "opened_at": "2022-02-19T00:00:00.001Z"
}
]
}
Generate a token for register that is highly trusted and will not expire. Contrary to the the legacy call a user must exist in the database to receive a token.
clientAccountID required | string Alphanumeric client ID of the user |
registerNumber required | string Alphanumeric configuration ID |
Authorization required | string <jwt> Bearer JWT token |
tillhub.registers.authenticate.legacy.post((err, result) => {})
Login via a sub user's API key. This route returns a JWT token with the same layout as a headfull login.
Note: in the future we might allow restricting scopes, based on user choosing
id required | string a users legacy ID or ID |
api_key required | string a sub users |
{- "id": "string",
- "api_key": "string"
}
Sub users with email and password can login into an organisation
organisation required | string the display name of the organisation |
username required | string admin defined username |
password required | string user defined password |
{- "organisation": "string",
- "username": "string",
- "password": "string"
}
All client accounts can allow Tillhub or delegated support to login into their account to perform specified actions.
This auth flow requires a token that has a been requested through the Tillhub Management Platform (Endor).
client_account required | string the uuid or legacy ID of that Tillhub client account |
token required | string prerequested token |
{- "client_account": "string",
- "token": "string"
}
Query all tokens.
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
deleted | string the string representation of boolean values as |
tillhub.tokens.get((err, result) => {})
Update a token object.
id required | string Alphanumeric tokens ID |
Simple token
token_id | string <uuid> The id of the jwt token of the user. |
client_account | string The client account id of the user. |
issued_at | string <date-time> When the token was issued. |
object or (any or null) Default: null Details about the issuer. | |
valid_until | string <date-time> When the token expires. |
is_logged_out | boolean Default: false If the token was logged out. |
string or (any or null) Default: null When the token was logged out. |
{- "token_id": "dcfe3e92-730b-4db5-9f1c-9e10c2f62d39",
- "client_account": "string",
- "issued_at": "2019-08-24T14:15:22Z",
- "issuer": null,
- "valid_until": "2019-08-24T14:15:22Z",
- "is_logged_out": false,
- "logged_out_at": null
}
Block a token object.
id required | string Alphanumeric token ID |
Simple token
string or (any or null) Default: null | |
object or (any or null) Default: null |
{- "block_reason": null,
- "block_origin": null
}
Create an API Key for an API user
clientAccountID required | string Alphanumeric client ID of the user |
configurationID required | string Alphanumeric configuration ID |
userID required | string Alphanumeric user ID |
tillhub.configurations.users.api.key.post((err, result) => {})
Soft delete a single user permission template object.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric user permission template ID |
tillhub.user_permission_templates.delete((err, result) => {})
{- "status": 200,
- "msg": "Deleted user permission template 96341e35-0fe1-4b72-89bc-6f62e9114ac6",
- "request": {
- "host": "staging-api.tillhub.com",
- "id": "UUID"
}
}
Get a single user permission template object.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric user permission template ID |
tillhub.user_permission_templates.get((err, result) => {})
Update an entire user permission template object.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric user permission template ID |
Simple user permission template
name | string <= 64 characters |
Array of strings or (any or null) | |
string or (any or null) An identifier used locally on POS for their own reference. | |
active | boolean Default: true Soft disable or enable this user_permission_templates. |
deleted | boolean Default: false Soft delete this user_permission_templates. |
{- "name": "string",
- "scopes": [
- "string"
], - "client_id": "string",
- "active": true,
- "deleted": false
}
Query all user permission templates of a user.
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
deleted | string the string representation of boolean values as |
tillhub.user_permission_templates.get((err, result) => {})
Create a new user permission template of a user.
clientAccountID required | string Alphanumeric client ID of the user |
Simple user permission template
name required | string <= 64 characters |
required | Array of strings or (any or null) |
string or (any or null) An identifier used locally on POS for their own reference. | |
active | boolean Default: true Soft disable or enable this user_permission_templates. |
deleted | boolean Default: false Soft delete this user_permission_templates. |
{- "name": "string",
- "scopes": [
- "string"
], - "client_id": "string",
- "active": true,
- "deleted": false
}
Any client with sufficient authorization can create a user by providing an ID and email address.
Simple User
id | string |
string |
{- "id": "4249e24b-7f85-44b3-a1fe-61d834013392",
- "email": "[email protected]"
}
{- "status": 200,
- "msg": "User created.",
- "result": {
- "user": {
- "id": "4249e24b-7f85-44b3-a1fe-61d834013392",
- "name": "demo-user",
- "display_name": "Demo User",
- "is_organization": false,
- "created_at": "2017-10-23T10:58:41.829Z"
}
}
}
Any client with sufficient authorization can delete a user.
clientAccountID required | string Alphanumeric client ID of the user |
hard | boolean hard delete a user or not, defaults to hard |
tillhub.users.delete((err, result) => {})
{- "status": 200,
- "msg": "Successfully deleted user {clientAccountID}."
}
Any client with sufficient authorization can create a user by providing an ID and email address.
Simple User
id | string |
string |
{- "id": "4249e24b-7f85-44b3-a1fe-61d834013392",
- "email": "[email protected]"
}
{- "status": 200,
- "msg": "User created.",
- "result": {
- "user": {
- "id": "4249e24b-7f85-44b3-a1fe-61d834013392",
- "name": "demo-user",
- "display_name": "Demo User",
- "is_organization": false,
- "created_at": "2017-10-23T10:58:41.829Z"
}
}
}
Any client with sufficient authorization can delete a user.
clientAccountID required | string Alphanumeric client ID of the user |
hard | boolean hard delete a user or not, defaults to hard |
tillhub.users.delete((err, result) => {})
{- "status": 200,
- "msg": "Successfully deleted user {clientAccountID}."
}
Create a new favourite of a user.
The top level ID is not assignable. However, every ID of subject can be set by the client, as long as they are valid uuids. If they are not or are missing, they will be overridden.
Simple Favourite
metadata | object |
Array of objects |
{- "metadata": { },
- "tabs": [
- {
- "name": "customerPolicy"
}
]
}
{- "status": 200,
- "msg": "Favourite added."
}
Query all favourites of a user.
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
branch | string DEPRECATED, will fall to locations. The UUID representation of a location |
q | string this will text search by favourite name, with a partial match (by comma or space separated words with minimal length of 2 chars) |
locations | Array and array of UUID representing a location |
name | string the name or part of the name of a favourite |
tillhub.favourites.get((err, result) => {})
Get all articles from favourite object products set.
clientAccountID required | string Alphanumeric client ID of the user |
favouriteID required | string Alphanumeric favourite ID |
tillhub.favourites.products.articles.get((err, result) => {})
Manage branches. See Locations for more information.
Soft delete a single branch group object.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric branch_groups ID |
tillhub.branch_groups.delete((err, result) => {})
{- "status": 200,
- "msg": "Deleted branch_groups 96341e35-0fe1-4b72-89bc-6f62e9114ac6",
- "request": {
- "host": "staging-api.tillhub.com",
- "id": "UUID"
}
}
Update an entire branch group object.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric branch group ID |
Simple branch group
name | string <= 64 characters |
string or (any or null) | |
string or (any or null) | |
Array of strings or (any or null) | |
string or (any or null) A identifier used locally on POS for their own reference. | |
active | boolean Default: true Soft disable or enabled this branch group. |
deleted | boolean Default: false Soft delete this branch group. |
available_in_online_booking | boolean Branches in this group are available for online booking. |
{- "name": "string",
- "description": "string",
- "color": "string",
- "branches": [
- "string"
], - "client_id": "string",
- "active": true,
- "deleted": false,
- "available_in_online_booking": true
}
Query all branch groups of a user.
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
deleted | string the string representation of boolean values as |
name | string search on the name field |
available_in_online_booking | boolean check if branch group is available in online booking |
q | string text search by name, with a partial match (by comma or space separated words with minimal length of 2 chars) |
tillhub.branch_groups.get((err, result) => {})
Create a new branch group of a user.
clientAccountID required | string Alphanumeric client ID of the user |
Simple Branch Group
name required | string <= 64 characters |
string or (any or null) | |
string or (any or null) | |
Array of strings or (any or null) | |
string or (any or null) A identifier used locally on POS for their own reference. | |
active | boolean Default: true Soft disable or enabled this branch group. |
deleted | boolean Default: false Soft delete this branch group. |
available_in_online_booking | boolean Branches in this group are available for online booking. |
{- "name": "string",
- "description": "string",
- "color": "string",
- "branches": [
- "string"
], - "client_id": "string",
- "active": true,
- "deleted": false,
- "available_in_online_booking": true
}
Create a new branch of a user.
clientAccountID required | string Alphanumeric client ID of the user |
Simple Branch
required | string or (any or null) Any arbitrary name for a branch that can be displayed in applications. |
string or (any or null) When the branch was created. It was added for creating branches coming from MMS | |
string or (any or null) When the branch was last updated. It was added for creating branches coming from MMS | |
(object or object or object) or (any or null) A number of valid types of phone numbers for a branch. | |
string or (any or null) The main contact email for a branch. | |
string or (any or null) An arbitrary string that will be printed on every receipt as the header. | |
string or (any or null) An arbitrary string that will be printed on every receipt as the footer | |
string or (any or null) An arbitrary string that will be printed on every receipt as the receipt logo. | |
string or (any or null) DEPRECATED. Set null or ignore. | |
object or (any or null) A Tillhub image object with URLs to display images this for this branch. | |
object or (any or null) A Tillhub image object with URLs to display receipt footer image this for this branch. | |
object or (any or null) DEPRECATED. Omit or set null. | |
active | boolean Default: true Soft disable or enabled this branch. |
deleted | boolean Default: false Soft delete this branch. |
string or (any or null) | |
metadata | object <= 10 properties Arbitrary user defined data. |
branch_number | number [ 0 .. 2147483647 ] The maximum stems from the fact that is it stored as an postgres int4 type, with 4 bytes of space |
string or (any or null) Branch custom unique ID. | |
string or (any or null) Unique ID of this branch in external system. Uses for synchronization. | |
is_mms | boolean Default: false The branch belongs to MMS. |
string or (any or null) Cost center unique ID | |
Array of objects or (any or null) A Tillhub address object, with different types of addresses. More description in the properties... | |
object or (any or null) Necessary core or allowed authentication data for financial signing systems. This is an opt-in feature. NOTE: Depending on the respective configuration (transactions.signing.resource_type) this will be looked up here or on register level (device_configuration.fiscal_signing). | |
string or (any or null) Deprecated: Overwriting a fa_account_number on cash payments for DATEV export. | |
object or (any or null) | |
string or (any or null) An IANA timezone that will be used to display local timezones in documents and UI. Validation for the timezone will happen in memory of the server, but not on that schema. | |
string or (any or null) The three letter ISO currency of this branch. | |
(any or null) or object User-defined branch properties | |
string or (any or null) Define which favourite set to show as default in the POS if none is defined on the register. | |
string or (any or null) Define which category tree to use as default in the POS if none is defined on the register. | |
shift_plan_enabled | boolean Default: false Define if this branch uses a shift plan. |
available_in_online_booking | boolean Default: true The Flag to indicate if the branch is available for online booking / reservation. |
{- "name": "Head office",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "phonenumbers": {
- "line_main": "+49-555-1976",
- "line_1": "+49-555-1977",
- "line_2": "string"
}, - "receipt_header": "Perfect socks LTD",
- "receipt_footer": "Thank you!",
- "receipt_logo": "string",
- "images": {
}, - "receipt_footer_images": {
}, - "image": {
- "url": "string"
}, - "active": "true",
- "deleted": "false",
- "deleted_at": "2023-04-05T16:06:04.849Z",
- "metadata": { },
- "branch_number": 107,
- "custom_id": "dd3234of",
- "external_custom_id": "7882448928329",
- "is_mms": "false",
- "cost_center": "7882448928329",
- "addresses": [
- {
- "lines": [
- "string"
], - "street": "Downing Street",
- "street_number": "10",
- "locality": "London",
- "region": "Greater London",
- "postal_code": "SW1A",
- "country": "UK",
- "type": "delivery",
}
], - "signing_configuration": {
- "signature_type": "fiskaltrust",
- "auth": {
- "key": "string",
- "secret": "string"
}, - "resource": "string"
}, - "configuration": "string",
- "external_rewards": {
- "coop": {
- "store_eain": "7640147960015",
- "store_name": "Coop Supermarkt Riehen Schmiedgasse",
- "store_sap_number": "000001"
}
}, - "timezone_default": "Europe/London",
- "currency_default": "GBP",
- "custom_properties": { },
- "default_favourite": "20e89159-28d9-46f2-bda3-d74bb70834e7",
- "default_category_tree": "c45764ed-fc6d-4b32-b406-59a5e84d2999",
- "shift_plan_enabled": "false",
- "available_in_online_booking": "false"
}
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "name": "Head office",
- "phonenumbers": {
- "line_main": "+49-555-1976",
- "line_1": "+49-555-1977",
- "line_2": "string"
}, - "receipt_header": "Perfect socks LTD",
- "receipt_footer": "Thank you!",
- "receipt_logo": "string",
- "images": {
}, - "receipt_footer_images": {
}, - "image": {
- "url": "string"
}, - "active": "true",
- "deleted": "false",
- "deleted_at": "2023-04-05T16:06:04.849Z",
- "metadata": { },
- "branch_number": 107,
- "custom_id": "dd3234of",
- "external_custom_id": "7882448928329",
- "is_mms": "false",
- "cost_center": "7882448928329",
- "addresses": [
- {
- "lines": [
- "string"
], - "street": "Downing Street",
- "street_number": "10",
- "locality": "London",
- "region": "Greater London",
- "postal_code": "SW1A",
- "country": "UK",
- "type": "delivery",
}
], - "signing_configuration": {
- "signature_type": "fiskaltrust",
- "auth": {
- "key": "string",
- "secret": "string"
}, - "resource": "string"
}, - "configuration": "string",
- "external_rewards": {
- "coop": {
- "store_eain": "7640147960015",
- "store_name": "Coop Supermarkt Riehen Schmiedgasse",
- "store_sap_number": "000001"
}
}, - "timezone_default": "Europe/London",
- "currency_default": "GBP",
- "custom_properties": { },
- "default_favourite": "20e89159-28d9-46f2-bda3-d74bb70834e7",
- "default_category_tree": "c45764ed-fc6d-4b32-b406-59a5e84d2999",
- "shift_plan_enabled": "false",
- "available_in_online_booking": "false"
}
]
}
Delete a single branch object.
clientAccountID required | string Alphanumeric client ID of the user |
accountID required | string Alphanumeric branch ID |
import * as tillhub from '@tillhub/javascript-sdk' const { data: branch } = await tillhub.branches().delete('3e35cf30-e61c-4570-b8b5-5161ee9b1470')
Get metadata of the Branches model.
clientAccountID required | string Alphanumeric client ID of the user |
total | string Enum: "true" "false" Return the total count of branches |
import * as tillhub from '@tillhub/javascript-sdk' const { data: meta } = await tillhub.branches().count()
Get a single branch object.
clientAccountID required | string Alphanumeric client ID of the user |
branchID required | string Alphanumeric branch ID |
import * as tillhub from '@tillhub/javascript-sdk' const { data: branch } = await tillhub.branches().get('0b99513a-6d97-4111-88db-81e930611656')
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "name": "Head office",
- "phonenumbers": {
- "line_main": "+49-555-1976",
- "line_1": "+49-555-1977",
- "line_2": "string"
}, - "receipt_header": "Perfect socks LTD",
- "receipt_footer": "Thank you!",
- "receipt_logo": "string",
- "images": {
}, - "receipt_footer_images": {
}, - "image": {
- "url": "string"
}, - "active": "true",
- "deleted": "false",
- "deleted_at": "2023-04-05T16:06:04.849Z",
- "metadata": { },
- "branch_number": 107,
- "custom_id": "dd3234of",
- "external_custom_id": "7882448928329",
- "is_mms": "false",
- "cost_center": "7882448928329",
- "addresses": [
- {
- "lines": [
- "string"
], - "street": "Downing Street",
- "street_number": "10",
- "locality": "London",
- "region": "Greater London",
- "postal_code": "SW1A",
- "country": "UK",
- "type": "delivery",
}
], - "signing_configuration": {
- "signature_type": "fiskaltrust",
- "auth": {
- "key": "string",
- "secret": "string"
}, - "resource": "string"
}, - "configuration": "string",
- "external_rewards": {
- "coop": {
- "store_eain": "7640147960015",
- "store_name": "Coop Supermarkt Riehen Schmiedgasse",
- "store_sap_number": "000001"
}
}, - "timezone_default": "Europe/London",
- "currency_default": "GBP",
- "custom_properties": { },
- "default_favourite": "20e89159-28d9-46f2-bda3-d74bb70834e7",
- "default_category_tree": "c45764ed-fc6d-4b32-b406-59a5e84d2999",
- "shift_plan_enabled": "false",
- "available_in_online_booking": "false",
- "insert_id": 0,
- "fa_account_number": "string",
- "configurations": { },
- "merged_configurations": { }
}
]
}
Replace an entire branch object.
clientAccountID required | string Alphanumeric client ID of the user |
branchID required | string Alphanumeric branch ID |
Simple Branch
string or (any or null) Any arbitrary name for a branch that can be displayed in applications. | |
string or (any or null) When the branch was created. It was added for creating branches coming from MMS | |
string or (any or null) When the branch was last updated. It was added for creating branches coming from MMS | |
(object or object or object) or (any or null) A number of valid types of phone numbers for a branch. | |
string or (any or null) The main contact email for a branch. | |
string or (any or null) An arbitrary string that will be printed on every receipt as the header. | |
string or (any or null) An arbitrary string that will be printed on every receipt as the footer | |
string or (any or null) An arbitrary string that will be printed on every receipt as the receipt logo. | |
string or (any or null) DEPRECATED. Set null or ignore. | |
object or (any or null) A Tillhub image object with URLs to display images this for this branch. | |
object or (any or null) A Tillhub image object with URLs to display receipt footer image this for this branch. | |
object or (any or null) DEPRECATED. Omit or set null. | |
active | boolean Default: true Soft disable or enabled this branch. |
deleted | boolean Default: false Soft delete this branch. |
string or (any or null) | |
metadata | object <= 10 properties Arbitrary user defined data. |
branch_number | number [ 0 .. 2147483647 ] The maximum stems from the fact that is it stored as an postgres int4 type, with 4 bytes of space |
string or (any or null) Branch custom unique ID. | |
string or (any or null) Unique ID of this branch in external system. Uses for synchronization. | |
is_mms | boolean Default: false The branch belongs to MMS. |
string or (any or null) Cost center unique ID | |
Array of objects or (any or null) A Tillhub address object, with different types of addresses. More description in the properties... | |
object or (any or null) Necessary core or allowed authentication data for financial signing systems. This is an opt-in feature. NOTE: Depending on the respective configuration (transactions.signing.resource_type) this will be looked up here or on register level (device_configuration.fiscal_signing). | |
string or (any or null) Deprecated: Overwriting a fa_account_number on cash payments for DATEV export. | |
object or (any or null) | |
string or (any or null) An IANA timezone that will be used to display local timezones in documents and UI. Validation for the timezone will happen in memory of the server, but not on that schema. | |
string or (any or null) The three letter ISO currency of this branch. | |
(any or null) or object User-defined branch properties | |
string or (any or null) Define which favourite set to show as default in the POS if none is defined on the register. | |
string or (any or null) Define which category tree to use as default in the POS if none is defined on the register. | |
shift_plan_enabled | boolean Default: false Define if this branch uses a shift plan. |
available_in_online_booking | boolean Default: true The Flag to indicate if the branch is available for online booking / reservation. |
{- "name": "Head office",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "phonenumbers": {
- "line_main": "+49-555-1976",
- "line_1": "+49-555-1977",
- "line_2": "string"
}, - "receipt_header": "Perfect socks LTD",
- "receipt_footer": "Thank you!",
- "receipt_logo": "string",
- "images": {
}, - "receipt_footer_images": {
}, - "image": {
- "url": "string"
}, - "active": "true",
- "deleted": "false",
- "deleted_at": "2023-04-05T16:06:04.849Z",
- "metadata": { },
- "branch_number": 107,
- "custom_id": "dd3234of",
- "external_custom_id": "7882448928329",
- "is_mms": "false",
- "cost_center": "7882448928329",
- "addresses": [
- {
- "lines": [
- "string"
], - "street": "Downing Street",
- "street_number": "10",
- "locality": "London",
- "region": "Greater London",
- "postal_code": "SW1A",
- "country": "UK",
- "type": "delivery",
}
], - "signing_configuration": {
- "signature_type": "fiskaltrust",
- "auth": {
- "key": "string",
- "secret": "string"
}, - "resource": "string"
}, - "configuration": "string",
- "external_rewards": {
- "coop": {
- "store_eain": "7640147960015",
- "store_name": "Coop Supermarkt Riehen Schmiedgasse",
- "store_sap_number": "000001"
}
}, - "timezone_default": "Europe/London",
- "currency_default": "GBP",
- "custom_properties": { },
- "default_favourite": "20e89159-28d9-46f2-bda3-d74bb70834e7",
- "default_category_tree": "c45764ed-fc6d-4b32-b406-59a5e84d2999",
- "shift_plan_enabled": "false",
- "available_in_online_booking": "false"
}
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "name": "Head office",
- "phonenumbers": {
- "line_main": "+49-555-1976",
- "line_1": "+49-555-1977",
- "line_2": "string"
}, - "receipt_header": "Perfect socks LTD",
- "receipt_footer": "Thank you!",
- "receipt_logo": "string",
- "images": {
}, - "receipt_footer_images": {
}, - "image": {
- "url": "string"
}, - "active": "true",
- "deleted": "false",
- "deleted_at": "2023-04-05T16:06:04.849Z",
- "metadata": { },
- "branch_number": 107,
- "custom_id": "dd3234of",
- "external_custom_id": "7882448928329",
- "is_mms": "false",
- "cost_center": "7882448928329",
- "addresses": [
- {
- "lines": [
- "string"
], - "street": "Downing Street",
- "street_number": "10",
- "locality": "London",
- "region": "Greater London",
- "postal_code": "SW1A",
- "country": "UK",
- "type": "delivery",
}
], - "signing_configuration": {
- "signature_type": "fiskaltrust",
- "auth": {
- "key": "string",
- "secret": "string"
}, - "resource": "string"
}, - "configuration": "string",
- "external_rewards": {
- "coop": {
- "store_eain": "7640147960015",
- "store_name": "Coop Supermarkt Riehen Schmiedgasse",
- "store_sap_number": "000001"
}
}, - "timezone_default": "Europe/London",
- "currency_default": "GBP",
- "custom_properties": { },
- "default_favourite": "20e89159-28d9-46f2-bda3-d74bb70834e7",
- "default_category_tree": "c45764ed-fc6d-4b32-b406-59a5e84d2999",
- "shift_plan_enabled": "false",
- "available_in_online_booking": "false"
}
]
}
Tell if a provided external_custom_id is unique or not.
clientAccountID required | string Alphanumeric client ID of the user |
provided_id | string external_custom_id provided by the user |
tillhub.branches.external_id.get((err, result) => {})
Make a generic search query for branches on the name, number, addresses.street, addresses.locality, and addresses.postal_code fields as a string.
clientAccountID required | string Alphanumeric client ID of the user |
q required | string the search string |
fields | string[] array of fields to search by, e.g. 'name', 'branch_number', 'addresses.street', 'addresses.locality', 'addresses.postal_code' (if no field is specified then it will search all available fields). |
import * as tillhub from '@tillhub/javascript-sdk' const { data: branches } = await tillhub.branches().search('flagship')
Get metadata of the Branches model.
clientAccountID required | string Alphanumeric client ID of the user |
total | string Enum: "true" "false" Return the total count of branches |
import * as tillhub from '@tillhub/javascript-sdk' const { data: meta } = await tillhub.branchesV1().meta()
Query all branches of a user.
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2022-02-01T00:00:00.000Z The start date to filter entities by "updated_at" field value |
end | string <date-time> Example: end=2022-02-28T23:59:59.999Z The end date to filter entities by "updated_at" field value |
limit | integer >= 1 Example: limit=50 The maximum amount of entries on page (for paginated output)' |
active | string Enum: "true" "false" Filter entities by "active" field value |
deleted | string Enum: "true" "false" Filter entities which are deleted or not |
name | string Example: name=Head office Filter branches by name substring |
branch_group | string <uuid> Filter branches by branch group ID |
branch_number | integer Filter branches by number |
postal_code | string Filter branches by postal code |
street | string Filter branches by street name |
external_custom_id | string Filter branches by external custom ID |
city | string Filter branches by city name |
available_in_online_booking | boolean Filter by availability in online booking |
q | string Search branches by several fields which match given string |
extended | string Enum: "true" "false" Return the extended information for mms branches (Unified commerce) [mms_id, mms_state, mms_type, mms_unit_unzer_id] |
import * as tillhub from '@tillhub/javascript-sdk' const { data: branches } = await tillhub.branchesV1().getAll({ deleted: false, limit: 50 })
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 10,
- "results": [
- {
- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "name": "Head office",
- "phonenumbers": {
- "line_main": "+49-555-1976",
- "line_1": "+49-555-1977",
- "line_2": "string"
}, - "receipt_header": "Perfect socks LTD",
- "receipt_footer": "Thank you!",
- "receipt_logo": "string",
- "images": {
}, - "receipt_footer_images": {
}, - "image": {
- "url": "string"
}, - "active": "true",
- "deleted": "false",
- "deleted_at": "2023-04-05T16:06:04.849Z",
- "metadata": { },
- "branch_number": 107,
- "custom_id": "dd3234of",
- "external_custom_id": "7882448928329",
- "is_mms": "false",
- "cost_center": "7882448928329",
- "addresses": [
- {
- "lines": [
- "string"
], - "street": "Downing Street",
- "street_number": "10",
- "locality": "London",
- "region": "Greater London",
- "postal_code": "SW1A",
- "country": "UK",
- "type": "delivery",
}
], - "signing_configuration": {
- "signature_type": "fiskaltrust",
- "auth": {
- "key": "string",
- "secret": "string"
}, - "resource": "string"
}, - "configuration": "string",
- "external_rewards": {
- "coop": {
- "store_eain": "7640147960015",
- "store_name": "Coop Supermarkt Riehen Schmiedgasse",
- "store_sap_number": "000001"
}
}, - "timezone_default": "Europe/London",
- "currency_default": "GBP",
- "custom_properties": { },
- "default_favourite": "20e89159-28d9-46f2-bda3-d74bb70834e7",
- "default_category_tree": "c45764ed-fc6d-4b32-b406-59a5e84d2999",
- "shift_plan_enabled": "false",
- "available_in_online_booking": "false",
- "insert_id": 0,
- "fa_account_number": "string",
- "configurations": { },
- "merged_configurations": { }
}
], - "cursor": {
}
}
There are two roles available in the Tillhub POS System. Each role can be assigned to many staff members. One staff member can have at maximum both roles. Roles are used, in order to define responsibilities and allow different actions. A cashier is the operator of the POS system, handling the creation of financial transactions within the transaction system from the POS. Meaning, the cashier owns the checkout processes, payment processes, refund handling, and other possible actions on the POS such as configuration management, expenses and deposits, and so on.
One must have at least cashier permission and thus have the role assigned, to be able to verify oneself within the POS application, and thus make use of other permissions. You can find all the available permission options in the following table:
Scope | Description |
---|---|
staff:staff:cashier | Can take the role cashier |
staff:staff:salesman | Can take the roles salesman |
The Tillhub transaction system handles the creation and management of financial transactions within the POS. With the access to the transaction system, the user can create a sale, can connect a sale with a customer, can add discounts to a sale, refund a sale, and cancel as well as line cancel and much more. You can find all the available permission options in the following table:
Scope | Description |
---|---|
staff:staff:transactions | General access and all rights below |
staff:staff:transactions:create | Can create a transaction |
staff:staff:transactions:customer | Can add customers to a transaction |
staff:staff:transactions:discounts | Can add discounts to a transaction |
staff:staff:transactions:discounts:apply:percent | Can apply a percent discounts |
staff:staff:transactions:discounts:apply:value | Can apply a value discounts |
staff:staff:transactions:discounts:set:percent | Can set a percent for discounts |
staff:staff:transactions:discounts:set:value | Can set a custom value for discounts |
staff:staff:transactions:refund | Can refund a transaction |
staff:staff:transactions:cancel | Can cancel a transaction |
staff:staff:transactions:cancel:row | Can cancel one item of a transaction |
staff:staff:transactions:prices | Can alter prices of a transaction |
staff:staff:transactions:qty | Can alter the quantity in a transaction |
staff:staff:transactions:cash_return | Can return cash for a transaction |
staff:staff:transactions:vouchers | Can add vouchers to a transaction |
staff:staff:transactions:print | Can print a receipt of a transaction |
staff:staff:transactions:email | Can email the receipt of a transaction |
staff:staff:transactions:history:print | Can print a receipt from history |
staff:staff:transactions:history:email | Can email a receipt from history |
Expenses and deposits resemble single monetary transactions that either decrease or increase the currently available cash value in the register. Each booking of an expense or deposit has direct impact on the cash amount available in the register the expense/deposit is dedicated to. You can find all the available permission options in the following table:
Scope | Description |
---|---|
staff:staff:expenses | Can access and alter expenses |
staff:staff:deposits | Can access and alter deposits |
The balance permissions grant access to the creation and manageing of the balance feature and the closing process of the till. It reports the actual balance in comparisson to the calculated assets/balance. Thus raising awareness about discrepancies and unidentified cashflows.
You can find all the available permission options in the following table:
Scope | Description |
---|---|
staff:staff:balance | Can view balances and do balances (legacy dashboard) |
staff:staff:balances | Can view balances and do balances |
staff:staff:balances:x | Can access X-Report |
staff:staff:balances:z | Can access Z-Report |
staff:staff:balances:x:print | Can print X-Report |
staff:staff:balances:z:print | Can print Z-Report |
staff:staff:balances:z:history:print | Can print a Z-Report from history |
Payments are a part of the transaction system, and thus part of the transaction creation process. During the transaction creation flow, a cashier will be asked to enter a payment, or choose from one of the available payment options to finalise the transaction and by that creating a valid transaction object resulting in a transfer of goods from the merchant to the customer. There are several payment options available per default, and multiple per additional configuration. The payments system will be extended. You can find all the available permission options in the following table:
Scope | Description |
---|---|
staff:staff:payments | General access and all rights below |
staff:staff:payments:cash | Can handle cash |
staff:staff:payments:invoice | Can handle invoice |
staff:staff:payments:voucher | Can handle vouchers |
staff:staff:payments:card | Can handle ALL card payment |
staff:staff:payments:split | Can handle split payment |
staff:staff:payments:split:cash | Can handle cash split payment |
staff:staff:payments:split:invoice | Can handle invoices split payment |
staff:staff:payments:split:voucher | Can handle voucher payments split payments |
staff:staff:payments:split:card | Can handle card split payments |
Delivery Notes are not a part of the transaction system, they belong to an own categorie of transactional data. Each delivery note deducts stock when possible. A merchant might handout a delivery note together with goods, and combine them later to create a full transaction object containing the corresponding payment. You can find all the available permission options in the following table:
Scope | Description |
---|---|
staff:staff:delivery_notes | General access and all rights below |
staff:staff:delivery_notes:create | Can create delivery notes |
staff:staff:delivery_notes:update | Can update delivery notes |
staff:staff:delivery_notes:read | Can read delivery notes |
staff:staff:delivery_notes:delete | Can delete delivery notes |
Carts are spawned on the POS when starting a transaction process. They contain cartitems with all the necessary information to store a valid financial transaction. The cashier fills the cart with product objects, converting them into cart items. You can find all the available permission options in the following table:
Scope | Description |
---|---|
staff:staff:carts | General access and all rights below |
staff:staff:carts:create | Can create carts |
staff:staff:carts:update | Can udpate carts |
staff:staff:carts:read | Can read carts |
staff:staff:carts:delete | Can delete carts |
The selections feature is currently not avaiblabe
Scope | Description |
---|---|
staff:staff:selections | General access and all rights below |
staff:staff:selections:create | Can create selections |
staff:staff:selections:update | Can update selections |
staff:staff:selections:read | Can read selections |
staff:staff:selections:delete | Can delete selections |
A register object resembles the lowest category of interactable ressources in the tillhub ecosystem. The register is bound to an physical device (e.g.: iPad) and is equal to one license. A register must be closed and opened in regular timeframes. The register is also the physical location of the cash. You can find all the available permission options in the following table:
Scope | Description |
---|---|
staff:staff:registers | General access and all rights below |
staff:staff:registers:cash:read | Can read cash |
staff:staff:registers:open | Can open register |
The POS Settings are used to drive the behaviour of the POS and its connected systems. Connected systems can be hardware devices like printers, terminals, customer facing displays, scanner, but also software integrations like voucher systems, dashboard access, database resets (local state) etc.. You can find all the available permission options in the following table:
Scope | Description |
---|---|
staff:staff:settings | General access and all rights below |
staff:staff:settings:create | Can create settings |
staff:staff:settings:update | Can update settings |
staff:staff:settings:read | Can read settings |
staff:staff:settings:delete | Can delete settings |
staff:staff:settings:printer | Can access printer settings |
staff:staff:settings:printer:create | Can create printer settings |
staff:staff:settings:printer:update | Can update printer settings |
staff:staff:settings:printer:read | Can read printer settings |
staff:staff:settings:printer:delete | Can delete printer settings |
staff:staff:settings:terminal | Can access terminal settings |
staff:staff:settings:terminal:create | Can create terminal settings |
staff:staff:settings:terminal:update | Can update terminal settings |
staff:staff:settings:terminal:read | Can read terminal settings |
staff:staff:settings:terminal:delete | Can delete terminal settings |
staff:staff:settings:concardis | Can access concardis settings |
staff:staff:settings:tim | Can access SIX/TIM Terminal settings |
staff:staff:settings:database | Can wipe the local database |
staff:staff:settings:fleurop | Can access fleurop settings |
staff:staff:settings:dashboard | User can enter the Dashboard |
staff:staff:settings:history | Can change history filters |
The analytics permissions grant access to the analytics ressources and features such as the journal/history view in the POS. You can find all the available permission options in the following table:
Scope | Description |
---|---|
staff:staff:analytics | General access and all rights below |
staff:staff:analytics:journals | Can access journal |
The products and articles permissions are currently not supported.
Scope | Description |
---|---|
staff:staff:products | General access and all rights below |
staff:staff:products:create | Can create products |
staff:staff:products:update | Can update products |
staff:staff:products:read | Can read products |
staff:staff:products:delete | Can delete products |
staff:staff:products:articles | Can access product childs |
staff:staff:products:articles:create | Can create articles |
staff:staff:products:articles:update | Can update articles |
staff:staff:products:articles:read | Can read articles |
staff:staff:products:articles:delete | Can delete articles |
staff:staff:products:articles:name | Can read article name |
staff:staff:products:articles:summary | Can read article summary |
staff:staff:products:articles:description | Can read article description |
The customer permissions grant access to the customer ressource, and their CRUD actions. Customers are mimiking the real life customer. You can find all the available permission options in the following table:
Scope | Description |
---|---|
staff:staff:customers | General access and all rights below |
staff:staff:customers:create | Can create customers |
staff:staff:customers:update | Can update customers |
staff:staff:customers:read | Can read customers |
staff:staff:customers:delete | Can delete customers |
The voucher permissions are currently not supported on the POS.
Scope | Description |
---|---|
staff:staff:vouchers | General access and all rights below |
staff:staff:vouchers:create | Can create vouchers |
staff:staff:vouchers:update | Can update vouchers |
staff:staff:vouchers:read | Can read vouchers |
staff:staff:vouchers:delete | Can delete vouchers |
Scope | Description |
---|---|
staff:staff:receipts | Can view and print receipts etc. |
staff:staff:login | Can login |
staff:staff:logout | Can logout |
staff:staff:history | Can view the account history |
staff:staff:stocks | Can see and alter stocks |
staff:staff:down_payments | Can make down payments |
staff:staff:dashboard | Can access the dashboard |
staff:staff:logs | Can access logs |
staff:staff:favourites | Can edit tile-sets |
Soft delete a single staff_groups object.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric staff_groups ID |
tillhub.staff_groups.delete((err, result) => {})
{- "status": 200,
- "msg": "Deleted staff_groups 96341e35-0fe1-4b72-89bc-6f62e9114ac6",
- "request": {
- "host": "staging-api.tillhub.com",
- "id": "UUID"
}
}
Update an entire staff_groups object.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric staff_groups ID |
Simple staff_groups
name | string <= 64 characters |
string or (any or null) | |
Array of strings or (any or null) | |
string or (any or null) A identifier used locally on POS for their own reference. | |
active | boolean Default: true Soft disable or enabled this staff group. |
deleted | boolean Default: false Soft delete this staff group. |
{- "name": "string",
- "description": "string",
- "staffs": [
- "string"
], - "client_id": "string",
- "active": true,
- "deleted": false
}
Query all staff groups of a user.
clientAccountID required | string Alphanumeric client ID of the user |
deleted | string the string representation of boolean values as |
q | string this will text search by staff group name, with a partial match |
tillhub.staff_groups.get((err, result) => {})
Create a new staff_groups of a user.
clientAccountID required | string Alphanumeric client ID of the user |
Simple staff_groups
name required | string <= 64 characters |
string or (any or null) | |
Array of strings or (any or null) | |
string or (any or null) A identifier used locally on POS for their own reference. | |
active | boolean Default: true Soft disable or enabled this staff group. |
deleted | boolean Default: false Soft delete this staff group. |
{- "name": "string",
- "description": "string",
- "staffs": [
- "string"
], - "client_id": "string",
- "active": true,
- "deleted": false
}
Soft delete a single staff permission template object.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric staff_permission_templates ID |
tillhub.staff_permission_templates.delete((err, result) => {})
{- "status": 200,
- "msg": "Deleted staff_permission_templates 96341e35-0fe1-4b72-89bc-6f62e9114ac6",
- "request": {
- "host": "staging-api.tillhub.com",
- "id": "UUID"
}
}
Get a single staff_permission_templates object.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric staff_permission_templates ID |
tillhub.staff_permission_templates.get((err, result) => {})
Update an entire staff permission template object.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric staff_permission_templates ID |
Simple staff_permission_templates
name | string <= 64 characters |
(Array of strings or strings) or (any or null) | |
active | boolean Default: true |
deleted | boolean Default: false |
{- "name": "string",
- "scopes": [
- "staff:staff"
], - "active": true,
- "deleted": false
}
Query all staff permission templates of a user.
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
deleted | string the string representation of boolean values as |
tillhub.staff_permission_templates.get((err, result) => {})
Create a new staff permission template of a user.
clientAccountID required | string Alphanumeric client ID of the user |
Simple staff_permission_templates
name required | string <= 64 characters |
required | (Array of strings or strings) or (any or null) |
active | boolean Default: true |
deleted | boolean Default: false |
{- "name": "string",
- "scopes": [
- "staff:staff"
], - "active": true,
- "deleted": false
}
Create a new staff member of a user.
clientAccountID required | string Alphanumeric client ID of the user |
Simple Account
string or (any or null) | |
lastname required | string [ 1 .. 32 ] characters |
string or (any or null) | |
(object or object or object or object) or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) Gender | |
object or (any or null) A Tillhub image object with URLs to display images this for staff. | |
(Array of strings or strings) or (any or null) | |
string or (any or null) | |
active | boolean Default: true |
deleted | boolean Default: false |
metadata | object |
Array of objects or (any or null) | |
string or (any or null) | |
(Array of objects or objects) or (any or null) | |
short_code | string [ 1 .. 10 ] characters |
Array of strings or (any or null) | |
Array of strings or (any or null) | |
default | boolean |
owner | boolean Default: false Defines if this staff is considered to be an owner of the business and thus might be taxed differently for tips. |
string or (any or null) A caller defined custom ID for the purpose of syncing from external resources, or to use in analytics. | |
string or (any or null) A color to be used in the calendar for this staff member. | |
individual_reservation_times | boolean Whether or not this staff member is having custom work hours. |
Array of objects = 7 items Custom schedule for this staff member. | |
Array of strings or (any or null) List of ids for the services this staff member is capable of performing |
{- "firstname": "string",
- "lastname": "string",
- "displayname": "string",
- "phonenumbers": {
- "any": "string",
- "home": "string",
- "mobile": "string",
- "work": "string"
}, - "staff_number": "string",
- "password": "string",
- "pin": "string",
- "date_of_birth": "2019-08-24T14:15:22Z",
- "gender": "male",
- "images": {
}, - "scopes": [
- "staff:staff"
], - "staff_permission_template_id": "string",
- "active": true,
- "deleted": false,
- "metadata": { },
- "addresses": [
- {
- "lines": [
- "string"
], - "street": "string",
- "street_number": "string",
- "locality": "string",
- "region": "string",
- "postal_code": "string",
- "country": "st",
- "type": "home"
}
], - "comment": "string",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percent",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "short_code": "string",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "default": true,
- "owner": false,
- "external_reference_id": "string",
- "calendar_color": "strings",
- "individual_reservation_times": true,
- "individual_work_plan": [
- {
- "day_index": 6,
- "time_ranges": [
- {
- "start": "string",
- "end": "string",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc"
}
]
}, - {
- "day_index": 6,
- "time_ranges": [
- {
- "start": "string",
- "end": "string",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc"
}
]
}, - {
- "day_index": 6,
- "time_ranges": [
- {
- "start": "string",
- "end": "string",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc"
}
]
}, - {
- "day_index": 6,
- "time_ranges": [
- {
- "start": "string",
- "end": "string",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc"
}
]
}, - {
- "day_index": 6,
- "time_ranges": [
- {
- "start": "string",
- "end": "string",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc"
}
]
}, - {
- "day_index": 6,
- "time_ranges": [
- {
- "start": "string",
- "end": "string",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc"
}
]
}, - {
- "day_index": 6,
- "time_ranges": [
- {
- "start": "string",
- "end": "string",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc"
}
]
}
], - "services": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}
{- "firstname": "string",
- "lastname": "string",
- "displayname": "string",
- "phonenumbers": {
- "any": "string",
- "home": "string",
- "mobile": "string",
- "work": "string"
}, - "staff_number": "string",
- "password": "string",
- "pin": "string",
- "date_of_birth": "2019-08-24T14:15:22Z",
- "gender": "male",
- "images": {
}, - "scopes": [
- "staff:staff"
], - "staff_permission_template_id": "string",
- "active": true,
- "deleted": false,
- "metadata": { },
- "addresses": [
- {
- "lines": [
- "string"
], - "street": "string",
- "street_number": "string",
- "locality": "string",
- "region": "string",
- "postal_code": "string",
- "country": "st",
- "type": "home"
}
], - "comment": "string",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percent",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "short_code": "string",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "default": true,
- "owner": false,
- "external_reference_id": "string",
- "calendar_color": "strings",
- "individual_reservation_times": true,
- "individual_work_plan": [
- {
- "day_index": 6,
- "time_ranges": [
- {
- "start": "string",
- "end": "string",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc"
}
]
}, - {
- "day_index": 6,
- "time_ranges": [
- {
- "start": "string",
- "end": "string",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc"
}
]
}, - {
- "day_index": 6,
- "time_ranges": [
- {
- "start": "string",
- "end": "string",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc"
}
]
}, - {
- "day_index": 6,
- "time_ranges": [
- {
- "start": "string",
- "end": "string",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc"
}
]
}, - {
- "day_index": 6,
- "time_ranges": [
- {
- "start": "string",
- "end": "string",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc"
}
]
}, - {
- "day_index": 6,
- "time_ranges": [
- {
- "start": "string",
- "end": "string",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc"
}
]
}, - {
- "day_index": 6,
- "time_ranges": [
- {
- "start": "string",
- "end": "string",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc"
}
]
}
], - "services": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}
Query all staff members of a user.
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
deleted | string the string representation of boolean values as |
active | string the string representation of boolean values as |
staff_number | string the staff number as filter |
lastname | string the lastname as filter |
firstname | string the firstname as filter |
string the email as filter | |
phonenumbers | string the phonenumbers as filter |
user | string <uuid> the user id as filter |
q | string ILIKE query for columns |
default | string the string representation of boolean values as |
location | string the UUID representation of a location or an array of locations |
branch | string the UUID representation of a location or an array of locations |
is_user | string the string representation of boolean values as |
tillhub.staff.get((err, result) => {})
Replace an entire staff member.
clientAccountID required | string Alphanumeric client ID of the user |
staffID required | string Alphanumeric staff ID |
Simple Account
required | string or (any or null) |
lastname | string [ 1 .. 32 ] characters |
string or (any or null) | |
(object or object or object or object) or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) Gender | |
object or (any or null) A Tillhub image object with URLs to display images this for staff. | |
(Array of strings or strings) or (any or null) | |
string or (any or null) | |
active | boolean Default: true |
deleted | boolean Default: false |
metadata | object |
Array of objects or (any or null) | |
string or (any or null) | |
(Array of objects or objects) or (any or null) | |
short_code | string [ 1 .. 10 ] characters |
Array of strings or (any or null) | |
Array of strings or (any or null) | |
default | boolean |
owner | boolean Default: false Defines if this staff is considered to be an owner of the business and thus might be taxed differently for tips. |
string or (any or null) A caller defined custom ID for the purpose of syncing from external resources, or to use in analytics. | |
string or (any or null) A color to be used in the calendar for this staff member. | |
individual_reservation_times | boolean Whether or not this staff member is having custom work hours. |
Array of objects = 7 items Custom schedule for this staff member. | |
Array of strings or (any or null) List of ids for the services this staff member is capable of performing |
{- "firstname": "string",
- "lastname": "string",
- "displayname": "string",
- "phonenumbers": {
- "any": "string",
- "home": "string",
- "mobile": "string",
- "work": "string"
}, - "staff_number": "string",
- "password": "string",
- "pin": "string",
- "date_of_birth": "2019-08-24T14:15:22Z",
- "gender": "male",
- "images": {
}, - "scopes": [
- "staff:staff"
], - "staff_permission_template_id": "string",
- "active": true,
- "deleted": false,
- "metadata": { },
- "addresses": [
- {
- "lines": [
- "string"
], - "street": "string",
- "street_number": "string",
- "locality": "string",
- "region": "string",
- "postal_code": "string",
- "country": "st",
- "type": "home"
}
], - "comment": "string",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percent",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "short_code": "string",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "default": true,
- "owner": false,
- "external_reference_id": "string",
- "calendar_color": "strings",
- "individual_reservation_times": true,
- "individual_work_plan": [
- {
- "day_index": 6,
- "time_ranges": [
- {
- "start": "string",
- "end": "string",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc"
}
]
}, - {
- "day_index": 6,
- "time_ranges": [
- {
- "start": "string",
- "end": "string",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc"
}
]
}, - {
- "day_index": 6,
- "time_ranges": [
- {
- "start": "string",
- "end": "string",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc"
}
]
}, - {
- "day_index": 6,
- "time_ranges": [
- {
- "start": "string",
- "end": "string",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc"
}
]
}, - {
- "day_index": 6,
- "time_ranges": [
- {
- "start": "string",
- "end": "string",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc"
}
]
}, - {
- "day_index": 6,
- "time_ranges": [
- {
- "start": "string",
- "end": "string",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc"
}
]
}, - {
- "day_index": 6,
- "time_ranges": [
- {
- "start": "string",
- "end": "string",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc"
}
]
}
], - "services": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}
Generate a random pin number or determines if the provided pin is valid.
clientAccountID required | string Alphanumeric client ID of the user |
provided_pin | string pin provided by the user |
pin_length | string pin length for the generator |
tillhub.staff.get((err, result) => {})
Generate a unique staff number or determines if the provided staff number is unique based on existing staff numbers.
clientAccountID required | string Alphanumeric client ID of the user |
provided_staff_number | string staff_number provided by the user |
tillhub.staff.get((err, result) => {})
Make a generic search query for staffs on the name field as a string.
clientAccountID required | string Alphanumeric client ID of the user |
q required | string the search string |
fields | string[] array of fields to search by, e.g. 'name' (if no field is specified then it will search all available fields). |
tillhub.staff.search.get((err, result) => {})
Query all staff members of a user.
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
deleted | string the string representation of boolean values as |
active | string the string representation of boolean values as |
staff_number | string the staff number as filter |
lastname | string the lastname as filter |
firstname | string the firstname as filter |
string the email as filter | |
phonenumbers | string the phonenumbers as filter |
user | string <uuid> the user id as filter |
q | string ILIKE query for columns |
default | string the string representation of boolean values as |
location | string the UUID representation of a location or an array of locations |
branch | string the UUID representation of a location or an array of locations |
is_user | string the string representation of boolean values as |
import * as tillhub from '@tillhub/javascript-sdk' const { data: staffs } = await tillhub.staffV1().getAll({ deleted: false, limit: 50 })
{- "firstname": "string",
- "lastname": "string",
- "displayname": "string",
- "phonenumbers": {
- "any": "string",
- "home": "string",
- "mobile": "string",
- "work": "string"
}, - "staff_number": "string",
- "password": "string",
- "pin": "string",
- "date_of_birth": "2019-08-24T14:15:22Z",
- "gender": "male",
- "images": {
}, - "scopes": [
- "staff:staff"
], - "staff_permission_template_id": "string",
- "active": true,
- "deleted": false,
- "metadata": { },
- "addresses": [
- {
- "lines": [
- "string"
], - "street": "string",
- "street_number": "string",
- "locality": "string",
- "region": "string",
- "postal_code": "string",
- "country": "st",
- "type": "home"
}
], - "comment": "string",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percent",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "short_code": "string",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "default": true,
- "owner": false,
- "external_reference_id": "string",
- "calendar_color": "strings",
- "individual_reservation_times": true,
- "individual_work_plan": [
- {
- "day_index": 6,
- "time_ranges": [
- {
- "start": "string",
- "end": "string",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc"
}
]
}, - {
- "day_index": 6,
- "time_ranges": [
- {
- "start": "string",
- "end": "string",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc"
}
]
}, - {
- "day_index": 6,
- "time_ranges": [
- {
- "start": "string",
- "end": "string",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc"
}
]
}, - {
- "day_index": 6,
- "time_ranges": [
- {
- "start": "string",
- "end": "string",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc"
}
]
}, - {
- "day_index": 6,
- "time_ranges": [
- {
- "start": "string",
- "end": "string",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc"
}
]
}, - {
- "day_index": 6,
- "time_ranges": [
- {
- "start": "string",
- "end": "string",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc"
}
]
}, - {
- "day_index": 6,
- "time_ranges": [
- {
- "start": "string",
- "end": "string",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc"
}
]
}
], - "services": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}
Soft delete a single device_groups object.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric device_groups ID |
tillhub.device_groups.delete((err, result) => {})
{- "status": 200,
- "msg": "Deleted device_groups 96341e35-0fe1-4b72-89bc-6f62e9114ac6",
- "request": {
- "host": "staging-api.tillhub.com",
- "id": "UUID"
}
}
Update an entire device_groups object.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric device_groups ID |
Simple device_groups
name | string <= 64 characters |
string or (any or null) | |
Array of strings or (any or null) | |
string or (any or null) An identifier used locally on POS for their own reference. | |
active | boolean Default: true Soft disable or enable this device group. |
deleted | boolean Default: false Soft delete this device group. |
{- "name": "string",
- "description": "string",
- "devices": [
- "string"
], - "client_id": "string",
- "active": true,
- "deleted": false
}
Query all device_groups of a user.
clientAccountID required | string Alphanumeric client ID of the user |
name | string the name of the device group |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
deleted | string the string representation of boolean values as |
tillhub.device_groups.get((err, result) => {})
Create a new device_groups of a user.
clientAccountID required | string Alphanumeric client ID of the user |
Simple device_groups
name required | string <= 64 characters |
string or (any or null) | |
Array of strings or (any or null) | |
string or (any or null) An identifier used locally on POS for their own reference. | |
active | boolean Default: true Soft disable or enable this device group. |
deleted | boolean Default: false Soft delete this device group. |
{- "name": "string",
- "description": "string",
- "devices": [
- "string"
], - "client_id": "string",
- "active": true,
- "deleted": false
}
Create a new sub-user of a configuration of a user.
clientAccountID required | string Alphanumeric client ID of the user |
configurationID required | string Alphanumeric configuration ID |
Simple Sub-User
metadata | object |
Array of objects |
{- "metadata": { },
- "tabs": [
- {
- "name": "configurations"
}
]
}
{- "status": 200,
- "msg": "Configuration added."
}
Query all sub-users in a configuration of a user.
clientAccountID required | string Alphanumeric client ID of the user |
q | string search for substring in first name, last name, and username/email |
branch | string the UUID representation of a location |
locations | Array and array of UUID representing a location |
tillhub.configurations.users.get((err, result) => {})
Delete a single sub-user of a configuration object.
clientAccountID required | string Alphanumeric client ID of the user |
configurationID required | string Alphanumeric favourite ID |
userID required | string Alphanumeric user ID |
tillhub.configurations.users.delete((err, result) => {})
Get a single sub-user of configuration object.
clientAccountID required | string Alphanumeric client ID of the user |
configurationID required | string Alphanumeric configuration ID |
userID required | string Alphanumeric user ID |
tillhub.configurations.users.get((err, result) => {})
Update a whole sub-user of a configuration object by replacing its mutable properties.
clientAccountID required | string Alphanumeric client ID of the user |
configurationID required | string Alphanumeric configuration ID |
userID required | string Alphanumeric user ID |
Simple Sub-User
metadata | object |
Array of objects |
{- "metadata": { },
- "tabs": [
- {
- "name": "configurations"
}
]
}
Configurations define POS client and dashboard behavior. Configurations are based on Tillhub account, branch, register level and client (location) level.
The global Tillhub account configuration is marked by the owner
field having the value self
. All subsequent. Configurations are assigned to locations by the owner
field having the value of the location's id
(uuid) field.
If desired, all implementers that want to use location level configurations need to merge the Tillhub account level configuration with the one from the location. This is a security precaution as the Tillhub account level configuration usually includes sensitive data.
Merging take place like the following
A Tillhub account that is generally configured to have business in Europe will have either none or a following configuration
{
// ... other properties
"settings": {
"language": "de-DE",
},
"type": "inclusive" // Europe, as all values should be displayed and/or calculated from gross
// ... other properties
}
A branch of this Tillhub account that is active in the US needs and wants to override that value will at least need to have a configurations resource with that property
{
"type": "exclusive" // US, as all values should be displayed and/or calculated from net
}
Hence the merged result needs to be
{
// ... other properties
"settings": {
"language": "de-DE",
},
"type": "exclusive"
// ... other properties
}
Following the available objects:
Containing metadata like undrelated information, or dumped information not used by any client
[]
Currently unsupported.
[]
Currently unsupported.
varchar:
self
Currently available options: self, other. Defines which configuration is used by the register on account level.
Defining the voucher systems and voucher API's available on the account.
Property | Description |
---|---|
enabled | BOOLEAN state |
externals | Describing the external voucher systems |
externals.enabled | BOOLEAN state |
externals.systems | Defining the system |
externals.systems.id | UUID of voucher owner system. E.g. own account or HQ. |
externals.systems.type | VARCHAR API supported key of voucher system. E.g. 'tillhub-voucher-api' or 'fleurop-voucher-api' |
externals.systems.enabled | BOOLEAN state |
There can always be only one system of each time to each ID.
{
"enabled": true,
"externals": {
"enabled": true,
"systems": [
{
"id": "456E438E3E0E47219FE9900870C4D328",
"type": "tillhub-voucher-api",
"enabled": true
},
{
"id": "456E438E3E0E47219FE9900870C4D328",
"name": "fleurop",
"type": "fleurop-voucher-api",
"enabled": true
}
]
}
}
Array of possible scan_prefixes. The scan prefix can be part of the voucher number. Or define another action. There can be multiple scan prefixes for each system.
Property | Description |
---|---|
id | UUID of prefix |
action | VARCHAR API & Client supported key for the action. E.g. 'vouchers' |
prefix | VARCHAR Prefix string |
system | Defining the system |
system.id | UUID of voucher owner system. E.g. own account or HQ. |
systems.type | VARCHAR API supported key of voucher system. E.g. 'tillhub-voucher-api' or 'fleurop-voucher-api' |
display_name | VARCHAR string defining the name of the prefix on the Client |
min_identifier_length | INTEGER integer defining the min length of a voucher code to trigger th call |
lookup_increment | VARCHAR string defining the lookup increment parameter |
lookup_decrement | VARCHAR string defining the lookup decrement parameter |
format | VARCHAR string defining the format of the voucher code input field |
[
{
"id": "FC26A6F2-E063-4269-9F20-8FEC90AD9A79",
"action": "vouchers",
"prefix": "TH",
"system": {
"id": "456E438E3E0E47219FE9900870C4D328",
"type": "tillhub-voucher-api"
},
"display_name": "Tillhub Voucher Prefix",
"min_identifier_length": 5,
"lookup_increment": "id",
"lookup_decrement": "code",
"format": "XXXX-XXXX-XXXX-XXXX"
},
{
"id": "E1BCBD6E-26A1-453B-82EA-E3B01F4B0EB9",
"action": "vouchers",
"prefix": "PS",
"system": {
"id": "456E438E3E0E47219FE9900870C4D328",
"type": "tillhub-voucher-api"
},
"display_name": "Playstation Prefix"
},
{
"id": "77b99d03-6ce3-4c91-81eb-7dd2d5aa1537",
"action": "vouchers",
"prefix": "v/123/",
"system": {
"id": "456E438E3E0E47219FE9900870C4D328",
"type": "tillhub-voucher-api"
},
"display_name": "v/123/ Prefix"
}
]
Array of voucher actions. Products can be defined as voucher action and thus trigger the voucher system functionality on the client.
Property | Description |
---|---|
id | UUID of voucher action |
type | VARCHAR API supported key of voucher system. E.g. 'tillhub-voucher-api' or 'fleurop-voucher-api' |
action | VARCHAR string that defines 'decrement' or 'increment' action |
system | Defining the system |
system.id | UUID of voucher owner system. E.g. own account or HQ. |
systems.type | VARCHAR API supported key of voucher system. E.g. 'tillhub-voucher-api' or 'fleurop-voucher-api' |
product | Defining the product to trigger the action on the client |
product.id | UUID of product to trigger the action |
[
{
"id": "72aff794-ee90-4464-8493-f29172bbc365",
"type": "tillhub-voucher-api",
"action": "decrement",
"system": {
"id": "456E438E3E0E47219FE9900870C4D328",
"type": "tillhub-voucher-api"
},
"product": {
"id": null,
}
},
{
"id": "87b6b040-20a9-47eb-a7f6-f935ba24c870",
"type": "tillhub-voucher-api",
"action": "increment",
"system": {
"id": "456E438E3E0E47219FE9900870C4D328",
"type": "tillhub-voucher-api"
},
"product": {
"id": null
}
}
]
Defining general settings of the account as:
Property | Description |
---|---|
buttons | Configuration object for checkout buttons |
buttons.name | VARCHAR string defining the label of the button on the client |
buttons.condition | Array holding objects for the button condition |
buttons.condition.tax | UUID of the tax objects |
buttons.condition.default | BOOLEAN defining the default object |
language | VARCHAR Language ISO Code (e.g. de-DE) for global language settings |
dashboard | Object defining the dashboard url |
dashboard.url | VARCHAR String defining the URL of the dashboard for the client syste |
dashboard.auth | VARCHAR API supported key for the authentication (e.g.: 'inject' or 'querry-param') |
{
"buttons": [
{
"name": "Togo Button",
"condition": [
{
"tax": "ba06d111-4f82-4782-bd53-a36b0bb101d4"
},
{
"tax": "d8aa878b-dee8-4e78-bb80-b6bfe5cf43ca",
"default": true
}
]
}
],
"language": null,
"shop_url": null,
"dashboard": {
"url": "https://awsxstaging.tillhub.de/de_de/"
},
"zedas_url": "",
"invoice_id": "0",
"templater_url": "",
"fleurop_voucher": "1"
}
Defining themes for the dashboard and the client.
Property | Description |
---|---|
ios | Theme config object for iOS |
ios.colors | Colors object for the client |
ios.colors.background | VARCHAR HEX value for expected color |
defaults | Theme config for default |
defaults.logos | Defining default logos |
defaults.logos.dashboard | Defining default logo for the dashboard |
defaults.logos.dashboard.top_left | VARCHAR URI for the logo as png |
defaults.colors | Defining default colors |
default.colors.main | VARCHAR HEX value for expected color of main color |
default.colors.accent | VARCHAR HEX value for expected color of accent |
default.colors.defaultTwo | VARCHAR HEX value for expected color of defaultTwo |
default.colors.darkBlueGrey | VARCHAR HEX value for expected color of darkBlueGrey |
dashboard.logos | Defining dashboard logos |
dashboard.logos.top_left | VARCHAR URI for the logo as png |
dashboard.colors | Defining dashboard colors |
dashboard.colors.main | VARCHAR HEX value for expected color of main color |
dashboard.colors.accent | VARCHAR HEX value for expected color of accent |
dashboard.colors.defaultTwo | VARCHAR HEX value for expected color of defaultTwo |
dashboard.colors.darkBlueGrey | VARCHAR HEX value for expected color of darkBlueGrey |
{
"ios": {
"colors": {
"background": "white"
}
},
"defaults": {
"logos": {
"dashboard": {
"top_left": "https://s3.eu-central-1.amazonaws.com/tillhub-assets/images/tillhub-logo-white.png"
}
},
"colors": {
"main": "#0d2232",
"accent": "#059ff5",
"defualtTwo": "#0d2232",
"darkBlueGrey": "#0d2232"
}
},
"dashboard": {
"logos": {
"top_left": "https://s3.eu-central-1.amazonaws.com/tillhub-assets/images/tillhub-logo-white.png"
},
"colors": {
"main": "#0d2232",
"accent": "#059ff5",
"defualtTwo": "#0d2232",
"darkBlueGrey": "#0d2232"
}
}
}
You can add several integrations which will be triggered by the API or the clients will consume it and trigger the API based on business logic.
[
{
"auth": "[shore auth token]",
"name": "shore",
"endpoint": "https://api.shore.com",
"merchant_id": "[shore merchant id]"
}
]
The products system's behaviour can be configured in multiple ways.
We allow looking up produdcts on the fly as specified here in the below array. The llokup name
then needs to be passed as query parameter(s) in GET /products
calls.
{
"barcode_length": 15,
"show_product_number": true,
"product_number_length": 4,
"customer_number_length": 5,
"show_product_group_number": true,
"auto_product_number_enabled": true,
"product_group_number_length": 3,
"auto_product_group_number_enabled": false,
"systems": [
{
"name": "thirdpartysystem", // third party system that is supported
"lookup": true,
"sync": {
"label": "asdasdd",
"hooks": [
{
"type": "webhook",
"uri": "https://external_resource_that_accepts_post_request",
"auth": {
"type": "basic",
"payload": "some password"
}
}
]
},
"auth": {
"type": "token",
"secret": "some secret"
}
}
]
}
{
"customer_add_policy": "before",
"customer_number_type": "franchise",
"auto_customer_number_enabled": false
}
The staff configuration for the client defines the standard behaviour of staff
Property | Description |
---|---|
cashier_pin_policy | VARCHAR possible keys: none, required - defining when the cashier_pin will be requested |
salesman_pin_policy | VARCHAR possible keys: none, before, after - defining when the salesman_pin will be requested |
staff_number_length | VARCHAR Prefix string |
auto_staff_number_enabled | BOOLEAN state |
{
"cashier_pin_policy": "required",
"salesman_pin_policy": "before",
"staff_number_length": 4,
"auto_staff_number_enabled": true
}
The franchise configuration for the client defines the standard behaviour of fra
Property | Description |
---|---|
cashier_pin_policy | VARCHAR possible keys: none, required - defining when the cashier_pin will be requested |
salesman_pin_policy | VARCHAR possible keys: none, before, after - defining when the salesman_pin will be requested |
staff_number_length | VARCHAR Prefix string |
auto_staff_number_enabled | BOOLEAN state |
{
"country": "CHF",
"franchise_id": "B0"
}
Currently unsuported.
[]
Currently unsuported.
{
"type": "inclusive" // whether tax will be calculated from gross or net ('exclusive'). This is necessary in the US, as opposed to Europe
}
.transactions
drives transactions creation.
.transactions.signing
comfigures client how to drive the backend signing processes. .transactions.signing.type
chooses the signng system and .transactions.signing.resource_type
where to get the singing configuration from, and what the signing level is, e.g. based on branches.
{
"signing": {
"type": "fiskaltrust",
"resource_type": "branches"
}
}
Currently unsuported.
[]
Drives behaviour of the stock management system
{
"stock_mode": "never_out_of_stock",
"stock_notification_channel": "email",
"stock_notification_default_recipient": "[email protected]"
}
Feature configuration of saved_carts.
{
"enabled": true
}
Feature configuration of crm. Currently unsuported
{}
Feature configuration of datev. Currently unsuported
{
"enabled": true
}
Feature configuration of label printing. Currently unsuported
{
"enabled": true
}
Feature configuration of delivery note.
{
"enabled": true
}
Feature configuration of shore implementations (not connected to shore synch config in hooks) Currently unsuported
{
"enabled": true
}
Feature configuration of to go feature. Currently configured in settings.
{
"enabled": true
}
Feature configuration of receipts "print_cashier": number - name - or none,
{
"order_receipt": {
"enabled": true,
"max_number": 100,
"receipts": [{
"title": "Bagelstation",
"coaster": true,
"tags": ["tag1", "tag2", "tag3", "tag4", "tag5"]
},
{
"title": "Getränke",
"coaster": false,
"tags": ["tag6", "tag7", "tag8", "tag9", "tag10"]
}]
},
"configurable_receipt": {
"enabled": true,
"print_cashier": "number",
"print_product_description": ["customer"],
"print_product_group": ["customer", "merchant"],
"print_customer": ["merchant", "customer"]
},
"configurable_balance": {
"enabled": true,
"print_sales_total": ["X", "Z"]
}
}
Feature configuration of cart behaviour.
{
"wipe_confirmation": true
}
Create a new configuration of a user.
Simple Configuration
(any or null) or object DEPRECATED: Unused legacy property. | |
object or (any or null) | |
(any or null) or Array of objects | |
(any or null) or Array of objects | |
object or (any or null) | |
object or (any or null) | |
object or (any or null) | |
(any or null) or object | |
Array of objects | |
object | |
required | (any or null) or string |
(any or null) or string | |
object or (any or null) | |
object or (any or null) | |
object or (any or null) | |
owner | string <= 64 characters |
(any or null) or object | |
object or (any or null) | |
(any or null) or object | |
object or (any or null) | |
object | |
(any or null) or object | |
object or (any or null) | |
((any or null) or object) or (any or null) | |
(any or null) or object | |
(any or null) or object | |
(any or null) or object | |
(any or null) or object | |
(any or null) or object | |
(any or null) or object | |
(any or null) or object | |
(any or null) or object | |
object or (any or null) | |
(any or null) or object | |
object or (any or null) | |
object or (any or null) | |
(any or null) or object | |
(any or null) or object | |
level | string Default: "client_account" Enum: "client_account" "registers" "branches" |
(any or null) or object | |
object | |
(any or null) or object | |
(any or null) or object | |
deliveries | object |
object or (any or null) | |
(any or null) or object | |
(any or null) or object | |
object | |
(any or null) or object | |
object or (any or null) | |
(any or null) or object | |
(any or null) or object | |
(any or null) or object | |
(any or null) or Array of objects | |
object or (any or null) | |
created_at | string <date-time> |
updated_at | string <date-time> |
object or (any or null) | |
(any or null) or object | |
(any or null) or object | |
object |
{- "configurations": { },
- "vouchers": {
- "enabled": false,
- "allow_cart_redemption": true
}, - "scan_prefixes": { },
- "voucher_actions": { },
- "expenses_deposits": {
- "balance_proposal": "zero",
- "image_expense": "mandatory",
- "image_deposit": "mandatory",
- "image_bank": "mandatory",
- "image_safe": "mandatory",
- "image_tip": "mandatory",
- "visibility": {
- "balance": [
- "expense"
], - "opening": [
- "expense"
], - "expense_list": [
- "expense"
]
}
}, - "countings": {
- "manual_trigger": "false",
- "on_cashier_change": "false",
- "receipt_counting": "false",
- "discrepancy": { },
- "automatic_countout": { }
}, - "time_tracking": {
- "enabled": "false",
- "type": "klier",
}, - "settings": { },
- "hooks": [
- {
- "name": "string",
- "auth": "string",
- "merchant_id": "string",
- "models": [
- {
- "name": "transactions",
- "direction": "duplex"
}
]
}
], - "themes": {
- "defaults": {
- "logos": { },
- "colors": { }
}, - "ios": {
- "colors": {
- "background": "string"
}
}, - "dashboard": {
- "logos": {
- "top_left": "string"
}, - "colors": { }
}
}, - "name": { },
- "client_id": { },
- "metadata": { },
- "registers": { },
- "branches": { },
- "owner": "string",
- "franchise": { },
- "staff": {
- "staff_id_template": { },
- "generate_staff_id": "false",
- "cashier_pin_cancel_enabled": false,
- "staff_per_branch": false,
- "cashier_pin_logout_enabled": false,
- "salesman_pin_policy": "after",
- "cashier_pin_policy": "required",
- "show_staff_number": true,
- "promote_permissions": false,
- "cashier_pin_gen_length": 4,
- "staff_number_length": 2
}, - "financials": { },
- "features": {
- "library_view": {
- "enabled": true
}, - "scan_view": {
- "enabled": true
}, - "pagers": {
- "enabled": false,
- "max": 54,
- "prompt": false
}, - "payback": {
- "prompt": false,
- "number_format": "^[_A-Za-z0-9-+]+(\\.[_A-Za-z0-9-+]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)*(\\.[A-Za-z]{2,})$",
- "number_length_max": 10,
- "type": "generic",
- "validation": "none"
}, - "split_receipt": {
- "enabled": false
}, - "custom_endpoint_printing": {
- "enabled": false,
- "token": "string",
- "name": "string",
- "date_range": {
- "past": {
- "unit": "hours",
- "value": 2
}, - "future": {
- "unit": "hours",
- "value": 2
}
}
}, - "gastro_tables": {
- "enabled": false
}, - "wallets": {
- "enabled": false
}, - "web_view": {
- "enabled": false,
- "suppress_errors": false,
- "sale_confirmation": true,
- "name": "Regiondo",
- "type": "none",
- "log_level": "error"
}, - "manual_reference": {
- "enabled": false,
- "request_on_checkout": "never",
- "custom_prompt": "There seems to be no order number set. Do you want to add it manually?",
- "number_format": "^[_A-Za-z0-9-+]+(\\.[_A-Za-z0-9-+]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)*(\\.[A-Za-z]{2,})$",
- "number_length_max": 14
}
}, - "gastro": {
- "takeaway": {
- "enabled": false,
- "use_fallback": true
}, - "orders": {
- "preview_printing": {
- "enabled": "false"
}, - "remote_access": {
- "enabled": "false",
- "background_release_seconds": 15,
- "log_level": "error"
}, - "lock_to_waiters": "false",
- "reassignment": {
- "requires_pin": "false"
}
}
}, - "stock": { },
- "transactions": {
- "barcode": {
- "source": "generate"
}, - "cross_register_refunding": false,
- "cross_branch_refunding": false,
- "refund_reason_required": true,
- "signing": {
- "type": "fiskaltrust",
- "resource_type": "branches"
}, - "history": {
- "range": {
- "unit": "hours",
- "value": 2
}, - "max_count": 20000
}
}, - "products": { },
- "customers": { },
- "saved_cart": { },
- "crm": { },
- "datev": { },
- "label_printer": { },
- "delivery_note": { },
- "shore": { },
- "togo": { },
- "receipts": {
- "digital_receipt": {
- "enabled": false
}, - "order_receipt": {
- "enabled": false,
- "maxReceiptNumber": 100,
- "receipts": [
- {
- "tags": [
- "food"
], - "tag_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "title": "Kitchen",
- "coaster": false,
- "pager": false,
- "size_type": "regular",
- "triggers": {
- "sale": false,
- "booking": "none"
}
}
]
}, - "printing_behavior": {
- "non_certified_clause_types": [
- "tse_fiskaly"
], - "customer_triggers": {
- "fiscal_signing": false
}, - "pagers": true,
- "merchant_main": true,
- "merchant_terminal": true,
- "merchant_triggers": {
- "terminal_payments": true,
- "signing_failed": true,
- "has_tips": true,
- "on_refunds": "never"
}
}, - "configurable_receipt": {
- "enabled": true,
- "expense": {
- "print_branch_logo": true,
- "print_branch_header": true,
- "print_branch_footer": true,
- "print_branch_footer_image": true,
- "print_cashier_policy": "number"
}, - "pager": {
- "print_branch_logo": true,
- "print_branch_header": true,
- "print_branch_footer": true,
- "print_branch_footer_image": true,
- "print_cashier_policy": "number",
- "print_salesperson": {
- "header": {
- "style": "none",
- "conditions": [
- "is_unique"
]
}, - "footer": {
- "style": "none",
- "conditions": [
- "is_unique"
]
}, - "item": {
- "style": "none",
- "conditions": [
- "is_unique"
]
}
}, - "print_note": true,
- "print_pager_number": true,
- "print_order_number": false,
- "print_product_attributes": true,
- "print_product_description": true,
- "print_product_group": true,
- "print_product_number": true,
- "print_product_name": true,
- "print_serial_number": true,
- "print_service_question_answers": false,
- "print_customer_name": true,
- "print_customer_address": true,
- "print_customer_number": true,
- "print_total_discount": true,
- "print_total_net": true,
- "print_discount_groups": false,
- "print_applied_vouchers": false,
- "external_rewards": {
- "enabled": false,
- "coop": {
- "print_balances": false
}
}, - "minimize_signing_footer": true,
- "signing_footer_style": "qr_only",
- "refund_options": {
- "condition": "never",
- "header": {
- "print_title": false
}, - "footer": {
- "print_name_field": false,
- "print_address_field": false,
- "print_signature_field": false
}
}
}, - "customer": {
- "print_branch_logo": true,
- "print_branch_header": true,
- "print_branch_footer": true,
- "print_branch_footer_image": true,
- "print_cashier_policy": "number",
- "print_salesperson": {
- "header": {
- "style": "none",
- "conditions": [
- "is_unique"
]
}, - "footer": {
- "style": "none",
- "conditions": [
- "is_unique"
]
}, - "item": {
- "style": "none",
- "conditions": [
- "is_unique"
]
}
}, - "print_note": true,
- "print_pager_number": true,
- "print_order_number": false,
- "print_product_attributes": true,
- "print_product_description": true,
- "print_product_group": true,
- "print_product_number": true,
- "print_product_name": true,
- "print_serial_number": true,
- "print_service_question_answers": false,
- "print_customer_name": true,
- "print_customer_address": true,
- "print_customer_number": true,
- "print_total_discount": true,
- "print_total_net": true,
- "print_discount_groups": false,
- "print_applied_vouchers": false,
- "external_rewards": {
- "enabled": false,
- "coop": {
- "print_balances": false
}
}, - "minimize_signing_footer": true,
- "signing_footer_style": "qr_only",
- "refund_options": {
- "condition": "never",
- "header": {
- "print_title": false
}, - "footer": {
- "print_name_field": false,
- "print_address_field": false,
- "print_signature_field": false
}
}
}, - "merchant": {
- "print_branch_logo": true,
- "print_branch_header": true,
- "print_branch_footer": true,
- "print_branch_footer_image": true,
- "print_cashier_policy": "number",
- "print_salesperson": {
- "header": {
- "style": "none",
- "conditions": [
- "is_unique"
]
}, - "footer": {
- "style": "none",
- "conditions": [
- "is_unique"
]
}, - "item": {
- "style": "none",
- "conditions": [
- "is_unique"
]
}
}, - "print_note": true,
- "print_pager_number": true,
- "print_order_number": false,
- "print_product_attributes": true,
- "print_product_description": true,
- "print_product_group": true,
- "print_product_number": true,
- "print_product_name": true,
- "print_serial_number": true,
- "print_service_question_answers": false,
- "print_customer_name": true,
- "print_customer_address": true,
- "print_customer_number": true,
- "print_total_discount": true,
- "print_total_net": true,
- "print_discount_groups": false,
- "print_applied_vouchers": false,
- "external_rewards": {
- "enabled": false,
- "coop": {
- "print_balances": false
}
}, - "minimize_signing_footer": true,
- "signing_footer_style": "qr_only",
- "refund_options": {
- "condition": "never",
- "header": {
- "print_title": false
}, - "footer": {
- "print_name_field": false,
- "print_address_field": false,
- "print_signature_field": false
}
}
}, - "preview": {
- "print_branch_logo": true,
- "print_branch_header": true,
- "print_branch_footer": true,
- "print_branch_footer_image": true,
- "print_cashier_policy": "number",
- "print_salesperson": {
- "header": {
- "style": "none",
- "conditions": [
- "is_unique"
]
}, - "footer": {
- "style": "none",
- "conditions": [
- "is_unique"
]
}, - "item": {
- "style": "none",
- "conditions": [
- "is_unique"
]
}
}, - "print_note": true,
- "print_pager_number": true,
- "print_order_number": false,
- "print_product_attributes": true,
- "print_product_description": true,
- "print_product_group": true,
- "print_product_number": true,
- "print_product_name": true,
- "print_serial_number": true,
- "print_service_question_answers": false,
- "print_customer_name": true,
- "print_customer_address": true,
- "print_customer_number": true,
- "print_total_discount": true,
- "print_total_net": true,
- "print_discount_groups": false,
- "print_applied_vouchers": false,
- "external_rewards": {
- "enabled": false,
- "coop": {
- "print_balances": false
}
}, - "minimize_signing_footer": true,
- "signing_footer_style": "qr_only",
- "refund_options": {
- "condition": "never",
- "header": {
- "print_title": false
}, - "footer": {
- "print_name_field": false,
- "print_address_field": false,
- "print_signature_field": false
}
}
}, - "order": {
- "print_branch_logo": true,
- "print_branch_header": true,
- "print_branch_footer": true,
- "print_branch_footer_image": true,
- "print_cashier_policy": "number",
- "print_salesperson": {
- "header": {
- "style": "none",
- "conditions": [
- "is_unique"
]
}, - "footer": {
- "style": "none",
- "conditions": [
- "is_unique"
]
}, - "item": {
- "style": "none",
- "conditions": [
- "is_unique"
]
}
}, - "print_note": true,
- "print_pager_number": true,
- "print_order_number": false,
- "print_product_attributes": true,
- "print_product_description": true,
- "print_product_group": true,
- "print_product_number": true,
- "print_product_name": true,
- "print_serial_number": true,
- "print_service_question_answers": false,
- "print_customer_name": true,
- "print_customer_address": true,
- "print_customer_number": true,
- "print_total_discount": true,
- "print_total_net": true,
- "print_discount_groups": false,
- "print_applied_vouchers": false,
- "external_rewards": {
- "enabled": false,
- "coop": {
- "print_balances": false
}
}, - "minimize_signing_footer": true,
- "signing_footer_style": "qr_only",
- "refund_options": {
- "condition": "never",
- "header": {
- "print_title": false
}, - "footer": {
- "print_name_field": false,
- "print_address_field": false,
- "print_signature_field": false
}
}
}, - "digital": {
- "print_branch_logo": true,
- "print_branch_header": true,
- "print_branch_footer": true,
- "print_branch_footer_image": true,
- "print_cashier_policy": "number",
- "print_salesperson": {
- "header": {
- "style": "none",
- "conditions": [
- "is_unique"
]
}, - "footer": {
- "style": "none",
- "conditions": [
- "is_unique"
]
}, - "item": {
- "style": "none",
- "conditions": [
- "is_unique"
]
}
}, - "print_note": true,
- "print_pager_number": true,
- "print_order_number": false,
- "print_product_attributes": true,
- "print_product_description": true,
- "print_product_group": true,
- "print_product_number": true,
- "print_product_name": true,
- "print_serial_number": true,
- "print_service_question_answers": false,
- "print_customer_name": true,
- "print_customer_address": true,
- "print_customer_number": true,
- "print_total_discount": true,
- "print_total_net": true,
- "print_discount_groups": false,
- "print_applied_vouchers": false,
- "external_rewards": {
- "enabled": false,
- "coop": {
- "print_balances": false
}
}, - "minimize_signing_footer": true,
- "signing_footer_style": "qr_only",
- "refund_options": {
- "condition": "never",
- "header": {
- "print_title": false
}, - "footer": {
- "print_name_field": false,
- "print_address_field": false,
- "print_signature_field": false
}
}
}, - "balance": {
- "print_cashier_policy": "number",
- "print_total_sales": false,
- "print_tips_section": false,
- "print_cash_units_section": false,
- "print_extended_stats": false,
- "print_account_names": false
}, - "stock_adjustment": {
- "print_cashier_policy": "number",
- "print_product_description": false,
- "print_product_group": false,
- "print_product_number": true,
- "print_product_name": true
}, - "register_opening_protocol": {
- "print_cashier_policy": "number",
- "print_total_sales": false,
- "print_tips_section": false,
- "print_cash_units_section": false,
- "print_extended_stats": false,
- "print_account_names": false
}, - "cashing_up": {
- "print_cashier_policy": "number",
- "print_total_sales": false,
- "print_tips_section": false,
- "print_cash_units_section": false,
- "print_extended_stats": false,
- "print_account_names": false
}, - "voucher": {
- "print_branch_logo": true,
- "print_branch_header": true,
- "print_branch_footer": true,
- "print_branch_footer_image": true,
- "print_cashier_policy": "number"
}, - "print_cashier_policy": "number",
- "print_salesman_policy": "number",
- "print_salesperson_policy": "not_cashier",
- "print_product_attributes": [
- "merchant"
], - "print_product_description": [
- "merchant"
], - "print_product_group": [
- "merchant"
], - "print_customer": [
- "merchant"
], - "print_customer_name": [
- "merchant"
], - "print_customer_address": [
- "merchant"
], - "print_customer_number": [
- "merchant"
], - "print_total_sales": [
- "balance"
], - "print_tips_section": [
- "balance"
], - "print_extended_stats": [
- "balance"
], - "print_total_discount": [
- "merchant"
], - "print_total_net": [
- "merchant"
]
}
}, - "orders": { },
- "carts": {
- "clear_confirmation": true,
- "enforce_integer_quantities": false,
- "item_merge_policy": "none",
- "sale": {
- "items": {
- "allow_negative_quantity": true
}
}, - "refund": {
- "immutable": false
}
}, - "tips": { },
- "emails": { },
- "communications": { },
- "level": "client_account",
- "taxes": { },
- "analytics": {
- "enabled": true,
- "sync_ui_timeout": 10,
- "externals": {
- "enabled": false,
- "systems": [
- {
- "type": "tillhub-analytics-api",
- "enabled": true,
- "id": "string",
- "name": "string"
}
]
}, - "external_targets": {
- "enabled": false,
- "systems": [
- {
- "type": "tillhub-analytics-api",
- "enabled": true,
- "id": "string"
}
]
}, - "snapshots": {
- "enabled": true,
- "list": [
- {
- "label": "string",
- "job": "analytics_snapshots_bank_amount_total"
}
]
}, - "aggregate_tips": false,
- "aggregate_vouchers": false
}, - "interfaces": { },
- "custom_dashboards": { },
- "deliveries": { },
- "validations": {
- "all": "hard",
- "accounts": "hard",
- "carts": "hard",
- "transactions": "hard",
- "balances": "hard",
- "items": "hard",
- "products": "hard",
- "product_groups": "hard",
- "taxes": "hard",
- "vouchers": "hard",
- "payments": "hard",
- "discounts": "hard",
- "customers": "hard",
- "property1": "hard",
- "property2": "hard"
}, - "payments": { },
- "balances": { },
- "integrations": {
- "mailjet": { }
}, - "discounts": { },
- "clients": {
- "enabled": true
}, - "widgets": { },
- "reservations": { },
- "searches": { },
- "custom_properties": { },
- "ui_configurations": {
- "dashboard": {
- "products": {
- "list": {
- "quick_view_enabled": true
}, - "edit": {
- "prices": {
- "click_to_edit_enabled": true
}
}
}
}, - "pos": {
- "views": {
- "finish_payment": {
- "buttons": {
- "email_receipt": {
- "visible": true,
- "enabled": true
}, - "email_quittance": {
- "visible": true,
- "enabled": true
}, - "print_quittance": {
- "visible": true,
- "enabled": true
}, - "email_invoice": {
- "visible": true,
- "enabled": true
}
}
}, - "history_details": {
- "buttons": {
- "email_receipt": {
- "visible": true,
- "enabled": true
}, - "email_quittance": {
- "visible": true,
- "enabled": true
}, - "email_invoice": {
- "visible": true,
- "enabled": true
}
}
}, - "cart": {
- "items": {
- "display_salesperson": false
}
}, - "carts": {
- "grouping": {
- "by": "none",
- "max": 50,
- "sorted_by": "none"
}
}, - "sync": {
- "enabled": false
}
}
}
}, - "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "warehub": {
- "product_match_required": false
}, - "tenant": { },
- "onboarding": { },
- "reports": { }
}
{ }
Replace an entire configurations object.
The fields will be validated very strictly. The following fields are mutable, and with their type:
clientAccountID required | string Alphanumeric client ID of the user |
configurationID required | string Alphanumeric favourite ID |
Simple Configuration
(any or null) or object DEPRECATED: Unused legacy property. | |
object or (any or null) | |
(any or null) or Array of objects | |
(any or null) or Array of objects | |
object or (any or null) | |
object or (any or null) | |
object or (any or null) | |
(any or null) or object | |
Array of objects | |
object | |
(any or null) or string | |
(any or null) or string | |
object or (any or null) | |
object or (any or null) | |
object or (any or null) | |
owner | string <= 64 characters |
(any or null) or object | |
object or (any or null) | |
(any or null) or object | |
object or (any or null) | |
object | |
(any or null) or object | |
object or (any or null) | |
((any or null) or object) or (any or null) | |
(any or null) or object | |
(any or null) or object | |
(any or null) or object | |
(any or null) or object | |
(any or null) or object | |
(any or null) or object | |
(any or null) or object | |
(any or null) or object | |
object or (any or null) | |
(any or null) or object | |
object or (any or null) | |
object or (any or null) | |
(any or null) or object | |
(any or null) or object | |
level | string Default: "client_account" Enum: "client_account" "registers" "branches" |
(any or null) or object | |
object | |
(any or null) or object | |
(any or null) or object | |
deliveries | object |
object or (any or null) | |
(any or null) or object | |
(any or null) or object | |
object | |
(any or null) or object | |
object or (any or null) | |
(any or null) or object | |
(any or null) or object | |
(any or null) or object | |
(any or null) or Array of objects | |
object or (any or null) | |
created_at | string <date-time> |
updated_at | string <date-time> |
object or (any or null) | |
(any or null) or object | |
(any or null) or object | |
object |
{- "configurations": { },
- "vouchers": {
- "enabled": false,
- "allow_cart_redemption": true
}, - "scan_prefixes": { },
- "voucher_actions": { },
- "expenses_deposits": {
- "balance_proposal": "zero",
- "image_expense": "mandatory",
- "image_deposit": "mandatory",
- "image_bank": "mandatory",
- "image_safe": "mandatory",
- "image_tip": "mandatory",
- "visibility": {
- "balance": [
- "expense"
], - "opening": [
- "expense"
], - "expense_list": [
- "expense"
]
}
}, - "countings": {
- "manual_trigger": "false",
- "on_cashier_change": "false",
- "receipt_counting": "false",
- "discrepancy": { },
- "automatic_countout": { }
}, - "time_tracking": {
- "enabled": "false",
- "type": "klier",
}, - "settings": { },
- "hooks": [
- {
- "name": "string",
- "auth": "string",
- "merchant_id": "string",
- "models": [
- {
- "name": "transactions",
- "direction": "duplex"
}
]
}
], - "themes": {
- "defaults": {
- "logos": { },
- "colors": { }
}, - "ios": {
- "colors": {
- "background": "string"
}
}, - "dashboard": {
- "logos": {
- "top_left": "string"
}, - "colors": { }
}
}, - "name": { },
- "client_id": { },
- "metadata": { },
- "registers": { },
- "branches": { },
- "owner": "string",
- "franchise": { },
- "staff": {
- "staff_id_template": { },
- "generate_staff_id": "false",
- "cashier_pin_cancel_enabled": false,
- "staff_per_branch": false,
- "cashier_pin_logout_enabled": false,
- "salesman_pin_policy": "after",
- "cashier_pin_policy": "required",
- "show_staff_number": true,
- "promote_permissions": false,
- "cashier_pin_gen_length": 4,
- "staff_number_length": 2
}, - "financials": { },
- "features": {
- "library_view": {
- "enabled": true
}, - "scan_view": {
- "enabled": true
}, - "pagers": {
- "enabled": false,
- "max": 54,
- "prompt": false
}, - "payback": {
- "prompt": false,
- "number_format": "^[_A-Za-z0-9-+]+(\\.[_A-Za-z0-9-+]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)*(\\.[A-Za-z]{2,})$",
- "number_length_max": 10,
- "type": "generic",
- "validation": "none"
}, - "split_receipt": {
- "enabled": false
}, - "custom_endpoint_printing": {
- "enabled": false,
- "token": "string",
- "name": "string",
- "date_range": {
- "past": {
- "unit": "hours",
- "value": 2
}, - "future": {
- "unit": "hours",
- "value": 2
}
}
}, - "gastro_tables": {
- "enabled": false
}, - "wallets": {
- "enabled": false
}, - "web_view": {
- "enabled": false,
- "suppress_errors": false,
- "sale_confirmation": true,
- "name": "Regiondo",
- "type": "none",
- "log_level": "error"
}, - "manual_reference": {
- "enabled": false,
- "request_on_checkout": "never",
- "custom_prompt": "There seems to be no order number set. Do you want to add it manually?",
- "number_format": "^[_A-Za-z0-9-+]+(\\.[_A-Za-z0-9-+]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)*(\\.[A-Za-z]{2,})$",
- "number_length_max": 14
}
}, - "gastro": {
- "takeaway": {
- "enabled": false,
- "use_fallback": true
}, - "orders": {
- "preview_printing": {
- "enabled": "false"
}, - "remote_access": {
- "enabled": "false",
- "background_release_seconds": 15,
- "log_level": "error"
}, - "lock_to_waiters": "false",
- "reassignment": {
- "requires_pin": "false"
}
}
}, - "stock": { },
- "transactions": {
- "barcode": {
- "source": "generate"
}, - "cross_register_refunding": false,
- "cross_branch_refunding": false,
- "refund_reason_required": true,
- "signing": {
- "type": "fiskaltrust",
- "resource_type": "branches"
}, - "history": {
- "range": {
- "unit": "hours",
- "value": 2
}, - "max_count": 20000
}
}, - "products": { },
- "customers": { },
- "saved_cart": { },
- "crm": { },
- "datev": { },
- "label_printer": { },
- "delivery_note": { },
- "shore": { },
- "togo": { },
- "receipts": {
- "digital_receipt": {
- "enabled": false
}, - "order_receipt": {
- "enabled": false,
- "maxReceiptNumber": 100,
- "receipts": [
- {
- "tags": [
- "food"
], - "tag_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "title": "Kitchen",
- "coaster": false,
- "pager": false,
- "size_type": "regular",
- "triggers": {
- "sale": false,
- "booking": "none"
}
}
]
}, - "printing_behavior": {
- "non_certified_clause_types": [
- "tse_fiskaly"
], - "customer_triggers": {
- "fiscal_signing": false
}, - "pagers": true,
- "merchant_main": true,
- "merchant_terminal": true,
- "merchant_triggers": {
- "terminal_payments": true,
- "signing_failed": true,
- "has_tips": true,
- "on_refunds": "never"
}
}, - "configurable_receipt": {
- "enabled": true,
- "expense": {
- "print_branch_logo": true,
- "print_branch_header": true,
- "print_branch_footer": true,
- "print_branch_footer_image": true,
- "print_cashier_policy": "number"
}, - "pager": {
- "print_branch_logo": true,
- "print_branch_header": true,
- "print_branch_footer": true,
- "print_branch_footer_image": true,
- "print_cashier_policy": "number",
- "print_salesperson": {
- "header": {
- "style": "none",
- "conditions": [
- "is_unique"
]
}, - "footer": {
- "style": "none",
- "conditions": [
- "is_unique"
]
}, - "item": {
- "style": "none",
- "conditions": [
- "is_unique"
]
}
}, - "print_note": true,
- "print_pager_number": true,
- "print_order_number": false,
- "print_product_attributes": true,
- "print_product_description": true,
- "print_product_group": true,
- "print_product_number": true,
- "print_product_name": true,
- "print_serial_number": true,
- "print_service_question_answers": false,
- "print_customer_name": true,
- "print_customer_address": true,
- "print_customer_number": true,
- "print_total_discount": true,
- "print_total_net": true,
- "print_discount_groups": false,
- "print_applied_vouchers": false,
- "external_rewards": {
- "enabled": false,
- "coop": {
- "print_balances": false
}
}, - "minimize_signing_footer": true,
- "signing_footer_style": "qr_only",
- "refund_options": {
- "condition": "never",
- "header": {
- "print_title": false
}, - "footer": {
- "print_name_field": false,
- "print_address_field": false,
- "print_signature_field": false
}
}
}, - "customer": {
- "print_branch_logo": true,
- "print_branch_header": true,
- "print_branch_footer": true,
- "print_branch_footer_image": true,
- "print_cashier_policy": "number",
- "print_salesperson": {
- "header": {
- "style": "none",
- "conditions": [
- "is_unique"
]
}, - "footer": {
- "style": "none",
- "conditions": [
- "is_unique"
]
}, - "item": {
- "style": "none",
- "conditions": [
- "is_unique"
]
}
}, - "print_note": true,
- "print_pager_number": true,
- "print_order_number": false,
- "print_product_attributes": true,
- "print_product_description": true,
- "print_product_group": true,
- "print_product_number": true,
- "print_product_name": true,
- "print_serial_number": true,
- "print_service_question_answers": false,
- "print_customer_name": true,
- "print_customer_address": true,
- "print_customer_number": true,
- "print_total_discount": true,
- "print_total_net": true,
- "print_discount_groups": false,
- "print_applied_vouchers": false,
- "external_rewards": {
- "enabled": false,
- "coop": {
- "print_balances": false
}
}, - "minimize_signing_footer": true,
- "signing_footer_style": "qr_only",
- "refund_options": {
- "condition": "never",
- "header": {
- "print_title": false
}, - "footer": {
- "print_name_field": false,
- "print_address_field": false,
- "print_signature_field": false
}
}
}, - "merchant": {
- "print_branch_logo": true,
- "print_branch_header": true,
- "print_branch_footer": true,
- "print_branch_footer_image": true,
- "print_cashier_policy": "number",
- "print_salesperson": {
- "header": {
- "style": "none",
- "conditions": [
- "is_unique"
]
}, - "footer": {
- "style": "none",
- "conditions": [
- "is_unique"
]
}, - "item": {
- "style": "none",
- "conditions": [
- "is_unique"
]
}
}, - "print_note": true,
- "print_pager_number": true,
- "print_order_number": false,
- "print_product_attributes": true,
- "print_product_description": true,
- "print_product_group": true,
- "print_product_number": true,
- "print_product_name": true,
- "print_serial_number": true,
- "print_service_question_answers": false,
- "print_customer_name": true,
- "print_customer_address": true,
- "print_customer_number": true,
- "print_total_discount": true,
- "print_total_net": true,
- "print_discount_groups": false,
- "print_applied_vouchers": false,
- "external_rewards": {
- "enabled": false,
- "coop": {
- "print_balances": false
}
}, - "minimize_signing_footer": true,
- "signing_footer_style": "qr_only",
- "refund_options": {
- "condition": "never",
- "header": {
- "print_title": false
}, - "footer": {
- "print_name_field": false,
- "print_address_field": false,
- "print_signature_field": false
}
}
}, - "preview": {
- "print_branch_logo": true,
- "print_branch_header": true,
- "print_branch_footer": true,
- "print_branch_footer_image": true,
- "print_cashier_policy": "number",
- "print_salesperson": {
- "header": {
- "style": "none",
- "conditions": [
- "is_unique"
]
}, - "footer": {
- "style": "none",
- "conditions": [
- "is_unique"
]
}, - "item": {
- "style": "none",
- "conditions": [
- "is_unique"
]
}
}, - "print_note": true,
- "print_pager_number": true,
- "print_order_number": false,
- "print_product_attributes": true,
- "print_product_description": true,
- "print_product_group": true,
- "print_product_number": true,
- "print_product_name": true,
- "print_serial_number": true,
- "print_service_question_answers": false,
- "print_customer_name": true,
- "print_customer_address": true,
- "print_customer_number": true,
- "print_total_discount": true,
- "print_total_net": true,
- "print_discount_groups": false,
- "print_applied_vouchers": false,
- "external_rewards": {
- "enabled": false,
- "coop": {
- "print_balances": false
}
}, - "minimize_signing_footer": true,
- "signing_footer_style": "qr_only",
- "refund_options": {
- "condition": "never",
- "header": {
- "print_title": false
}, - "footer": {
- "print_name_field": false,
- "print_address_field": false,
- "print_signature_field": false
}
}
}, - "order": {
- "print_branch_logo": true,
- "print_branch_header": true,
- "print_branch_footer": true,
- "print_branch_footer_image": true,
- "print_cashier_policy": "number",
- "print_salesperson": {
- "header": {
- "style": "none",
- "conditions": [
- "is_unique"
]
}, - "footer": {
- "style": "none",
- "conditions": [
- "is_unique"
]
}, - "item": {
- "style": "none",
- "conditions": [
- "is_unique"
]
}
}, - "print_note": true,
- "print_pager_number": true,
- "print_order_number": false,
- "print_product_attributes": true,
- "print_product_description": true,
- "print_product_group": true,
- "print_product_number": true,
- "print_product_name": true,
- "print_serial_number": true,
- "print_service_question_answers": false,
- "print_customer_name": true,
- "print_customer_address": true,
- "print_customer_number": true,
- "print_total_discount": true,
- "print_total_net": true,
- "print_discount_groups": false,
- "print_applied_vouchers": false,
- "external_rewards": {
- "enabled": false,
- "coop": {
- "print_balances": false
}
}, - "minimize_signing_footer": true,
- "signing_footer_style": "qr_only",
- "refund_options": {
- "condition": "never",
- "header": {
- "print_title": false
}, - "footer": {
- "print_name_field": false,
- "print_address_field": false,
- "print_signature_field": false
}
}
}, - "digital": {
- "print_branch_logo": true,
- "print_branch_header": true,
- "print_branch_footer": true,
- "print_branch_footer_image": true,
- "print_cashier_policy": "number",
- "print_salesperson": {
- "header": {
- "style": "none",
- "conditions": [
- "is_unique"
]
}, - "footer": {
- "style": "none",
- "conditions": [
- "is_unique"
]
}, - "item": {
- "style": "none",
- "conditions": [
- "is_unique"
]
}
}, - "print_note": true,
- "print_pager_number": true,
- "print_order_number": false,
- "print_product_attributes": true,
- "print_product_description": true,
- "print_product_group": true,
- "print_product_number": true,
- "print_product_name": true,
- "print_serial_number": true,
- "print_service_question_answers": false,
- "print_customer_name": true,
- "print_customer_address": true,
- "print_customer_number": true,
- "print_total_discount": true,
- "print_total_net": true,
- "print_discount_groups": false,
- "print_applied_vouchers": false,
- "external_rewards": {
- "enabled": false,
- "coop": {
- "print_balances": false
}
}, - "minimize_signing_footer": true,
- "signing_footer_style": "qr_only",
- "refund_options": {
- "condition": "never",
- "header": {
- "print_title": false
}, - "footer": {
- "print_name_field": false,
- "print_address_field": false,
- "print_signature_field": false
}
}
}, - "balance": {
- "print_cashier_policy": "number",
- "print_total_sales": false,
- "print_tips_section": false,
- "print_cash_units_section": false,
- "print_extended_stats": false,
- "print_account_names": false
}, - "stock_adjustment": {
- "print_cashier_policy": "number",
- "print_product_description": false,
- "print_product_group": false,
- "print_product_number": true,
- "print_product_name": true
}, - "register_opening_protocol": {
- "print_cashier_policy": "number",
- "print_total_sales": false,
- "print_tips_section": false,
- "print_cash_units_section": false,
- "print_extended_stats": false,
- "print_account_names": false
}, - "cashing_up": {
- "print_cashier_policy": "number",
- "print_total_sales": false,
- "print_tips_section": false,
- "print_cash_units_section": false,
- "print_extended_stats": false,
- "print_account_names": false
}, - "voucher": {
- "print_branch_logo": true,
- "print_branch_header": true,
- "print_branch_footer": true,
- "print_branch_footer_image": true,
- "print_cashier_policy": "number"
}, - "print_cashier_policy": "number",
- "print_salesman_policy": "number",
- "print_salesperson_policy": "not_cashier",
- "print_product_attributes": [
- "merchant"
], - "print_product_description": [
- "merchant"
], - "print_product_group": [
- "merchant"
], - "print_customer": [
- "merchant"
], - "print_customer_name": [
- "merchant"
], - "print_customer_address": [
- "merchant"
], - "print_customer_number": [
- "merchant"
], - "print_total_sales": [
- "balance"
], - "print_tips_section": [
- "balance"
], - "print_extended_stats": [
- "balance"
], - "print_total_discount": [
- "merchant"
], - "print_total_net": [
- "merchant"
]
}
}, - "orders": { },
- "carts": {
- "clear_confirmation": true,
- "enforce_integer_quantities": false,
- "item_merge_policy": "none",
- "sale": {
- "items": {
- "allow_negative_quantity": true
}
}, - "refund": {
- "immutable": false
}
}, - "tips": { },
- "emails": { },
- "communications": { },
- "level": "client_account",
- "taxes": { },
- "analytics": {
- "enabled": true,
- "sync_ui_timeout": 10,
- "externals": {
- "enabled": false,
- "systems": [
- {
- "type": "tillhub-analytics-api",
- "enabled": true,
- "id": "string",
- "name": "string"
}
]
}, - "external_targets": {
- "enabled": false,
- "systems": [
- {
- "type": "tillhub-analytics-api",
- "enabled": true,
- "id": "string"
}
]
}, - "snapshots": {
- "enabled": true,
- "list": [
- {
- "label": "string",
- "job": "analytics_snapshots_bank_amount_total"
}
]
}, - "aggregate_tips": false,
- "aggregate_vouchers": false
}, - "interfaces": { },
- "custom_dashboards": { },
- "deliveries": { },
- "validations": {
- "all": "hard",
- "accounts": "hard",
- "carts": "hard",
- "transactions": "hard",
- "balances": "hard",
- "items": "hard",
- "products": "hard",
- "product_groups": "hard",
- "taxes": "hard",
- "vouchers": "hard",
- "payments": "hard",
- "discounts": "hard",
- "customers": "hard",
- "property1": "hard",
- "property2": "hard"
}, - "payments": { },
- "balances": { },
- "integrations": {
- "mailjet": { }
}, - "discounts": { },
- "clients": {
- "enabled": true
}, - "widgets": { },
- "reservations": { },
- "searches": { },
- "custom_properties": { },
- "ui_configurations": {
- "dashboard": {
- "products": {
- "list": {
- "quick_view_enabled": true
}, - "edit": {
- "prices": {
- "click_to_edit_enabled": true
}
}
}
}, - "pos": {
- "views": {
- "finish_payment": {
- "buttons": {
- "email_receipt": {
- "visible": true,
- "enabled": true
}, - "email_quittance": {
- "visible": true,
- "enabled": true
}, - "print_quittance": {
- "visible": true,
- "enabled": true
}, - "email_invoice": {
- "visible": true,
- "enabled": true
}
}
}, - "history_details": {
- "buttons": {
- "email_receipt": {
- "visible": true,
- "enabled": true
}, - "email_quittance": {
- "visible": true,
- "enabled": true
}, - "email_invoice": {
- "visible": true,
- "enabled": true
}
}
}, - "cart": {
- "items": {
- "display_salesperson": false
}
}, - "carts": {
- "grouping": {
- "by": "none",
- "max": 50,
- "sorted_by": "none"
}
}, - "sync": {
- "enabled": false
}
}
}
}, - "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "warehub": {
- "product_match_required": false
}, - "tenant": { },
- "onboarding": { },
- "reports": { }
}
Update specific configuration fields.
The fields will be validated very strictly. The following fields are mutable, and with their type:
clientAccountID required | string Alphanumeric client ID of the user |
configurationID required | string Alphanumeric favourite ID |
Simple Configuration
{ }
Query a resource node configurations of a user.
clientAccountID required | string Alphanumeric client ID of the user |
resource required | string Configuration resource. e.g. account, branch or register |
owner required | string UUID of the owner resource or self |
tillhub.configurations.node.get((err, result) => {})
Get the revenue for days of week
Sunday = 0, Monday = 1, Tuesday = 2, Wednesday = 3, Thrusday = 4, Firday = 5, Saturday = 6
clientAccountID required | string Alphanumeric client ID of the user |
branch_number | string the branch number as filter |
start required | string Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
end required | string Example: end=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
tillhub.analytics.aggregates.revenues.day_of_week.get((err, result) => {})
Get the sum of today's revenues.
clientAccountID required | string Alphanumeric client ID of the user |
branch_number | string the branch number as filter |
start required | string Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
end required | string Example: end=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
tillhub.analytics.aggregates.revenues.day.get((err, result) => {})
Get a grouped revenue in a time range.
clientAccountID required | string Alphanumeric client ID of the user |
groupBy required | string model to group by, allowed are: product_group_number, product_number |
branch_number | string the branch number as filter |
precision | string the precision of the intervals: hour, day (default) |
start required | string Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
end required | string Example: end=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
filter | string Example: filter=filter=transactions
one or more filters, that will reduce data. e.g. filter=transactions. You can apply more than one e.g. filter=transactions&filter=transactions |
tillhub.analytics.aggregates.revenues.groups.get((err, result) => {})
Get a grouped revenue in a time range as sum.
clientAccountID required | string Alphanumeric client ID of the user |
groupBy required | string model to group by, allowed are: product_group_number, product_number |
branch_number | string the branch number as filter |
start required | string Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
end required | string Example: end=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
filter | string Example: filter=filter=transactions
one or more filters, that will reduce data. e.g. filter=transactions. You can apply more than one e.g. filter=transactions&filter=transactions |
tillhub.analytics.aggregates.revenues.groups.get((err, result) => {})
Get the revenue and qty for hours of day
clientAccountID required | string Alphanumeric client ID of the user |
branch_number | string the branch number as filter |
timezone | string IANA timzone |
start required | string Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
end required | string Example: end=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
context_locations | string The context locations id as filter |
tillhub.analytics.aggregates.revenues.hour_of_day.get((err, result) => {})
Get the revenue in a time range as sum.
clientAccountID required | string Alphanumeric client ID of the user |
branch_number | string the branch number as filter |
context_locations | string the context locations id as filter |
start required | string Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
end required | string Example: end=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
end required | string Example: end=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
tillhub.analytics.aggregates.revenues.get((err, result) => {})
Get the sales in a time range.
clientAccountID required | string Alphanumeric client ID of the user |
branch_number | string the branch number as filter |
precision | string the precision of the intervals: hour, day (default) |
voucher | string a list of of of product_numbers that will be extracted from revenue and counted separately, e.g. ?voucher=0107&voucher=0110 |
start required | string Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
end required | string Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
filter | string Example: filter=filter=transactions
one or more filters, that will reduce data. e.g. filter=transactions. You can apply more than one e.g. filter=transactions&filter=transactions |
tillhub.analytics.aggregates.sales.get((err, result) => {})
Get the sales in a time range as sum.
clientAccountID required | string Alphanumeric client ID of the user |
branch_number | string the branch number as filter |
voucher | string a list of of of product_numbers that will be extracted from revenue and counted separately, e.g. ?voucher=0107&voucher=0110 |
tip | string a list of of of product_numbers that will be extracted from revenue and counted separately, e.g. ?tip=0107&tip=0110 |
start required | string Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
end required | string Example: end=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
filter | string Example: filter=filter=transactions
one or more filters, that will reduce data. e.g. filter=transactions. You can apply more than one e.g. filter=transactions&filter=transactions |
tillhub.analytics.aggregates.sales.get((err, result) => {})
Soft delete a single analytics snapshot object.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric snapshots ID |
tillhub.snapshots.delete((err, result) => {})
{- "status": 200,
- "msg": "Deleted snapshots 96341e35-0fe1-4b72-89bc-6f62e9114ac6",
- "request": {
- "host": "staging-api.tillhub.com",
- "id": "UUID"
}
}
Query all analytics snapshots of a user.
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
deleted | string the string representation of boolean values as |
limit | integer the discrete limit, that will default to 500 |
tillhub.snapshots.get((err, result) => {})
Get all balances. This endpoint is paged on 1000 objects
clientAccountID required | string Alphanumeric client ID of the user |
limit | integer the discrete limit, that will default to 1000 on the legacy route |
cursor_field | string which column to cursor on. Currently we support |
legacy | boolean flags to us legacy table fr_balance |
branch | string branch id |
branch_custom_id | string branch custom id e.g. the branch number |
register | string register id |
staff | string staff id |
q | string ILIKE query for columns |
format | string to get data in any other format then JSON straight away, you can set |
tillhub.balances.get((err, result) => {})
Get One balances.
clientAccountID required | string Alphanumeric client ID of the user |
balanceID required | string the uuid balance ID |
legacy | boolean flags to us legacy table fr_balance |
currency required | string specify which currency the item is in |
tillhub.balances.get((err, result) => {})
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "id": "860defb8-5598-421d-9da4-f0826e767536",
- "created_at": "2018-11-04T23:18:43.075Z",
- "channel": "api",
- "client_account": "061f91a3-eba2-40b8-9a76-115189d6741e",
- "date_opening": "2018-01-29T14:55:05.000Z",
- "date_closing": "2018-01-29T14:55:05.000Z",
- "client_id": null,
- "custom_id": null,
- "branch": "f2ac2cae-97ff-42a1-967b-0a35222ab6d1",
- "branch_custom_id": null,
- "register": "9d110eb2-2245-4e14-9574-49b502f3a9b3",
- "register_custom_id": null,
- "client": null,
- "client_custom_id": null,
- "staff": null,
- "cashier_staff": null,
- "device": null,
- "context": null,
- "balance_last": null,
- "balance_custom_id_last": null,
- "comments": null,
- "metadata": null,
- "receipts": "[\"07457072-8b94-4461-806d-baaf6eeea010\"]",
- "location": null,
- "totals": [
- {
- "client_id": null,
- "currency": "EUR",
- "amount_cash_begin": 0,
- "amount_cash_calculated": 0,
- "amount_cash_counted": 0,
- "amount_revenue_cash": 0,
- "amount_revenue_total": 0,
- "amount_tips_cash": 0,
- "amount_tips_total": 0,
- "amount_expenses": 0,
- "amount_taxes": 0
}
], - "revenues": [
- {
- "client_id": null,
- "account": null,
- "name": null,
- "currency": "EUR",
- "amount": "27633.02",
- "context": null,
- "metadata": null
}
], - "payments": [
- {
- "client_id": null,
- "payment_option": null,
- "account": null,
- "account_change": null,
- "cost_center": null,
- "name": null,
- "currency": "EUR",
- "type": "card",
- "grouped_by": null,
- "amount_calculated": "27633.02",
- "amount_tip": "921.45",
- "amount_counted": "27628.11",
- "amount_discrepancy": "-4.91",
- "amount_change": "49.98",
- "context": null,
- "metadata": null
}
], - "taxes": [
- {
- "client_id": null,
- "account": null,
- "vat_rate": "0.19",
- "name": null,
- "currency": "EUR",
- "amount": "633.41",
- "custom_id": null,
- "context": null,
- "metadata": null
}
], - "tips": [
- {
- "client_id": null,
- "staff": null,
- "account": null,
- "tax": null,
- "vat_rate": "0.19",
- "product": null,
- "currency": "EUR",
- "amount": "133.41",
- "custom_id": null,
- "branch": null,
- "register": null,
- "context": null,
- "metadata": null
}
], - "cash_units": [
- {
- "client_id": null,
- "currency": "EUR",
- "units": [
- {
- "type": "coin",
- "qty": null,
- "value": "0.10"
}
]
}
], - "timezone": { },
- "insert_id": "128",
- "hashes": {
- "sha512_v0": "stringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringst"
}, - "self": {
- "uri": "string",
- "block_balance": null
}, - "block": {
- "id": "string",
- "previous": "string",
- "balance": "string"
}, - "previous": "05321210-4546-400d-b70b-e059fef52fc4"
}
]
}
Get metadata of the balances model.
clientAccountID required | string Alphanumeric client ID of the user |
legacy | boolean flags to us legacy table fr_balance |
branch | string branch id |
branch_custom_id | string branch custom id e.g. the branch number |
register | string register id |
staff | string staff id |
q | string ILIKE query for columns |
currency required | string specify which currency the item is in |
tillhub.balances.meta.get((err, result) => {})
Get the cash book in a time range, per register.
Based on the timezone and date range we will split data by day. That will also be true, if the dates are not the start or end of day of that day, essentially resulting in a longer date range than you would have expected. The resulting metadata of that query will be returned.
clientAccountID required | string Alphanumeric client ID of the user |
start required | string Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z | ||||||
end required | string Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z | ||||||
format | string to get data in any other format then JSON straight away, you can set | ||||||
register_custom_id required | string Legacy: The register custom ID. | ||||||
register required | string The register ID | ||||||
branch_custom_id required | string Legacy: The branch custom ID. | ||||||
branch required | string The branch ID | ||||||
timezone | string IANA timezone | ||||||
type | string Enum: "default" "balance_to_balance" Specify the type of report you want to obtain.
|
tillhub.analytics.reports.dashBook.get((err, result) => {})
Get the cashier counting protocols in a time range.
Based on the timezone and date range we will split data by day. That will also be true, if the dates are not the start or end of day of that day, essentially resulting in a longer date range than you would have expected. The resulting metadata of that query will be returned.
clientAccountID required | string Alphanumeric client ID of the user |
date_start required | string Example: date_start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
date_end required | string Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
format | string to get data in any other format then JSON straight away, you can set |
register_custom_id required | string Legacy: The register custom ID. |
register required | string The register ID |
branch_custom_id required | string Legacy: The branch custom ID. |
branch required | string The branch ID |
cashier_staff | string The cashier staff ID |
has_discrepancy | boolean If true return results with discrepancy, if false return results without discrepancy |
counting_type | string Enum: "opening" "cashing_up" The counting type |
timezone | string IANA timezone |
context_locations | string Context locations id as a filter for transactions |
branch_group | string | string[] filter by branches within branch group. Not applied if branch_number parameter received. |
tillhub.analytics.reports.cashier_counting_protocols.get((err, result) => {})
report of customer and associated revenue, in order to quickly identify my most valuable customers and customer groups
clientAccountID required | string Alphanumeric client ID of the user |
format | string to get data in any other format then JSON straight away, you can set |
tillhub.analytics.reports.journal.get((err, result) => {})
report of customer and associated revenue, in order to quickly identify my most valuable customers and customer groups
clientAccountID required | string Alphanumeric client ID of the user |
currency | string ISO currency code |
customerId required | string customer ID |
tillhub.analytics.reports.journal.get((err, result) => {})
report of customer and associated revenue, in order to quickly identify my most valuable customers and customer groups
clientAccountID required | string Alphanumeric client ID of the user |
currency | string ISO currency code |
customerId required | string customer ID |
tillhub.analytics.reports.journal.get((err, result) => {})
report of customer and associated revenue, in order to quickly identify my most valuable customers and customer groups
clientAccountID required | string Alphanumeric client ID of the user |
format | string to get data in any other format then JSON straight away, you can set |
tillhub.analytics.reports.journal.get((err, result) => {})
Aggregated balance closing the period (month or year) after previous period with the same type is closed
clientAccountID required | string Example: d0d40841-b1a7-438a-9d1e-2bfec590d2e3 Alphanumeric client ID of the user |
registerID required | string Example: 5a656fa4-7189-419c-9e73-51f78a37c761 Alphanumeric register UUID |
type required | string Enum: "month" "year" Example: type=month The period type |
date required | string<date> Example: date=2021-01-03 The date of period (any date within the required period type) in Url safe ISO 8601 compliant format |
cashierNumber required | string Example: cashierNumber=7 The cashier number who created this balance |
{- "status": 200,
- "msg": "Aggregated balance calculated successfully",
- "request": {
- "host": "staging-api.tillhub.com",
- "id": "9d110eb2-2245-4e14-9574-49b502f3a9b3"
}, - "results": [
- {
- "begin_date": "2021-01-01T00:00:00.000Z",
- "end_date": "2021-01-31T23:59:59.000Z",
- "data": {
- "first_id": "279",
- "last_id": "384",
- "first_opening_date": "2021-01-03T08:27:12.843Z",
- "last_opening_date": "2021-01-30T17:48:52.114Z",
- "first_closing_date": "2021-01-03T17:56:20.351Z",
- "last_closing_date": "2021-01-30T18:24:04.742Z",
- "total_gross": 5034,
- "total_vat_amount_gross": 235,
- "total_vat_amount_net": 89,
- "currency_iso_code": "EUR"
}, - "hash": "0071:2,11,balance,,5a656fa4-7189-419c-9e73-51f78a37c761,N, ",
- "signature": "+hNYH6UgXUbUWH5p+vWkONtTD/XpEVycvouffmkzfQLLp2LRgnrtrRrjWiKMGrXXKSfVAziyYCj4v71r6LgfhQtiyg+tY4oOedFAgj+jUUf5Wp+D+HKifnpE9GmPA1tyixvYJPj4uAaJ1fjJxVKf8nzKwb1hKgLW1gBH0qqOBzbshiODBhYzEkdJ7hDkF9zdkMOGb6ARGII9OG4ouwFTsHVeOwsN4Bq4FR+NJkbNmM3o1QcHkm8zK0F6kgieTXMRnx9CZHlm+ibB4SewchAuHeIulNLcjm+xepodBGTj+i/8HCZDB06HzsnHeP+q4VWsa3aLdTrXlOUr3JDqBkzWg=="
}
]
}
Get Transaction Data Per Line Item Sold
clientAccountID required | string Alphanumeric client ID of the user |
start required | string Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
end required | string Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
format | string to get data in any other format then JSON straight away, you can set |
target | string to get goBD format, you can set |
time_zone | string this is required for when 'target=gobd'. And the time zone must be an reconized by postgres such as 'CET' see https://www.postgresql.org/docs/7.2/static/timezones.html for more. |
tillhub.analytics.reports.journal.get((err, result) => {})
Gets all payment options total amount and quantity for transactions
clientAccountID required | string Alphanumeric client ID of the user |
cursor_field | string which column to cursor on. To indicate the sorting order, add a |
legacy | boolean flags to us legacy table fr_transaction_payment |
format | string to get data in any other format then JSON straight away, you can set |
context_locations | string context locations id as a filter for transactions |
branch_number | string | integer <uuid | number> Example: branch_number=9d110eb2-2245-4e14-9574-49b502f3a9b3 Filter by branch number if legacy parameter set or filter by branch UUID otherwise. |
branch_group | string | string[] filter by branches within branch group. Not applied if branch_number parameter received. |
tillhub.balances.get((err, result) => {})
Get metadata of the Payment Options model.
clientAccountID required | string Alphanumeric client ID of the user |
legacy | boolean flags to us legacy table fr_balance |
branch_number | string branch number |
legacy | boolean flags to us legacy table fr_transaction_payment |
tillhub.balances.meta.get((err, result) => {})
Gets all payment options total amount and quantity for transactions
clientAccountID required | string Alphanumeric client ID of the user |
cursor_field | string which column to cursor on. To indicate the sorting order, add a |
legacy | boolean flags to us legacy table fr_transaction_payment |
format | string to get data in any other format then JSON straight away, you can set |
context_locations | string context locations id as a filter for transactions |
branch_number | string | integer <uuid | number> Example: branch_number=9d110eb2-2245-4e14-9574-49b502f3a9b3 Filter by branch number if legacy parameter set or filter by branch UUID otherwise. |
branch_group | string | string[] filter by branches within branch group. Not applied if branch_number parameter received. |
tillhub.balances.get((err, result) => {})
Get a simple list of sales in range.
clientAccountID required | string Alphanumeric client ID of the user |
start required | string Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
end required | string Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
format | string to get data in any other format then JSON straight away, you can set |
tillhub.analytics.aggregates.sales.get((err, result) => {})
Get a list of payments.
clientAccountID required | string Alphanumeric client ID of the user |
context_locations | string Context locations used to filter transactions |
tillhub.analytics.reports.payments.get((err, result) => {})
Get top payments data.
clientAccountID required | string Alphanumeric client ID of the user |
branch_number | string Branch number as string as a filter on transactions |
context_locations | string Context locations id as a filter for transactions |
start | string <date-time> Filter for inclusive start date |
end | string <date-time> Filter for exclusive end date |
Get a list of payments.
clientAccountID required | string Alphanumeric client ID of the user |
context_locations | string Context locations used to filter transactions |
branch_custom_id | integer | integer[] Example: branch_custom_id=234 Filter by branch number |
branch_group | string | array filter by branches within branch group. Not applied if branch parameter received. |
tillhub.analytics.reports.payments.get((err, result) => {})
gets the list from the table to use for search filter options
clientAccountID required | string Alphanumeric client ID of the user |
column required | string column name |
type | string Specifies the kind of filter to be returned can be "list" or "range" |
tillhub.analytics.reportss.product_groups.filters.get((err, result) => {})
Get Transaction Data Per Products Group
clientAccountID required | string Alphanumeric client ID of the user |
product_group_id | string the product group id as filter |
start | string Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
end | string Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
description | string the description/name as filter |
qty | object range (from, to) for quantity |
revenue | object range (from, to) for revenue |
net_revenue | object range (from, to) for net revenue |
discount | object range (from, to) for discount |
sort_direction | string direction of sort "desc" or "asc" |
q | string this will search like terms in Voucher Number, Redeemed in, issuer, and comment |
branch_group | string | string[] filter by branches within branch group. Not applied if branch_number parameter received. |
tillhub.analytics.reports.product_groups.get((err, result) => {})
Get Transaction Data Per Products
clientAccountID required | string Alphanumeric client ID of the user |
start | string Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
end | string Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
branch_number | number the branch id as filter |
register_number | number the register number as filter |
staff_number | string the staff number as filter |
sort_column | string specified column that will be sorted |
sort_direction | string direction of sort "desc" or "asc" |
q | string this will search like terms in Voucher Number, Redeemed in, issuer, and comment |
tillhub.analytics.reports.journal.get((err, result) => {})
Get Transaction Data Per Products
clientAccountID required | string Alphanumeric client ID of the user |
productNumber required | string Product number |
start | string Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
end | string Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
branch_number | number the branch id as filter |
register_number | number the register number as filter |
staff_number | string the staff number as filter |
sort_column | string specified column that will be sorted |
sort_direction | string direction of sort "desc" or "asc" |
q | string this will search like terms in Voucher Number, Redeemed in, issuer, and comment |
tillhub.analytics.reports.journal.get((err, result) => {})
Get top products data.
clientAccountID required | string Alphanumeric client ID of the user |
branch_number | string Branch number as string as a filter on transactions |
start | string <date-time> Filter for inclusive start date |
end | string <date-time> Filter for exclusive end date |
Get Transaction Data Per Products
clientAccountID required | string Alphanumeric client ID of the user |
start | string Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
end | string Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
branch_number | number the branch id as filter |
register_number | number the register number as filter |
staff_number | string the staff number as filter |
sort_column | string specified column that will be sorted |
sort_direction | string direction of sort "desc" or "asc" |
q | string this will search like terms in Voucher Number, Redeemed in, issuer, and comment |
tillhub.analytics.reports.journal.get((err, result) => {})
Get Transaction Data Per Products
clientAccountID required | string Alphanumeric client ID of the user |
start | string Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
end | string Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
branch_number | number the branch id as filter |
branch_group | string | string[] filter by branches within branch group. Not applied if branch_number parameter received. |
register_number | number the register number as filter |
staff_number | string the staff number as filter |
sort_column | string specified column that will be sorted |
sort_direction | string direction of sort "desc" or "asc" |
q | string this will search like terms in Voucher Number, Redeemed in, issuer, and comment |
size | number sets the page size when exporting to a file |
tillhub.analytics.reports.journal.get((err, result) => {})
Query Transaction Data Grouped By Product Groups Per All Staff
clientAccountID required | string Alphanumeric client ID of the user |
context_locations | string The context locations id used to filter transactions |
tillhub.analytics.reports.staff.get((err, result) => {})
Query Transaction Data Grouped By Product Groups Per One Staff Member
clientAccountID required | string Alphanumeric client ID of the user |
staffID required | string Alphanumeric staff ID |
tillhub.analytics.reports.staff.product_groups.get((err, result) => {})
Query Transaction Data Grouped By Products Per All Staff
clientAccountID required | string Alphanumeric client ID of the user |
context_locations | string The context locations id used to filter transactions |
tillhub.analytics.reports.staff.get((err, result) => {})
Query Transaction Data Grouped By Products Per One Staff Member
clientAccountID required | string Alphanumeric client ID of the user |
staffID required | string Alphanumeric staff ID |
tillhub.analytics.reports.staff.products.get((err, result) => {})
Query Refunds Data Grouped By Payment Method for One Staff Member
clientAccountID required | string Alphanumeric client ID of the user |
staffID required | string Alphanumeric staff ID |
tillhub.analytics.reports.staff.refunds.get((err, result) => {})
Query Sales within a product group per staff and branch
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
end | string <date-time> Example: end=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
branch | string branch filter |
branch_group | string | string[] filter by branches within branch group. Not applied if branch parameter received. |
staff_number | string the staff number as filter |
format | string to get data in any other format then JSON straight away, you can set |
curl 'https://api.tillhub.com/api/v1/analytics/58b4ff3f-73dd-4712-a732-388127a52217/reports/staff/sales' \ -H 'authorization: Bearer ***' \
Query Stocks Data
clientAccountID required | string Alphanumeric client ID of the user |
branch_group | string | string[] filter by branches within branch group. Not applied if branch_number parameter received. |
tillhub.analytics.reports.stocks.get((err, result) => {})
Returns transactions report providing detailed information over particular period of time.
clientAccountID required | string Alphanumeric client ID of the user |
date_start | string <date-time> Example: date_start=2022-03-10T15:42:39.740Z Filter by date - return only transactions created after (in ISO 8601 format) |
date_end | string <date-time> Example: date_end=2022-03-10T15:42:39.740Z Filter by date - return only transactions created before (in ISO 8601 format) |
branch | string | string[] <uuid> Example: branch=9d110eb2-2245-4e14-9574-49b502f3a9b3 Filter by branch UUID |
register | string <uuid> Example: register=9d110eb2-2245-4e14-9574-49b502f3a9b3 Filter by register UUID |
branch_custom_id | integer | integer[] Example: branch_custom_id=234 Filter by branch number |
branch_group | string | array filter by branches within branch group. Not applied if branch parameter received. |
register_custom_id | integer Example: register_custom_id=567 Filter by register number |
customer_custom_id | string Example: customer_custom_id=DE445493 Filter by customer custom id |
balance_custom_id | integer Example: balance_custom_id=454302 Filter by balance number |
custom_id | integer Example: custom_id=454302 Filter by transaction number |
customer | string <uuid> Example: customer=9d110eb2-2245-4e14-9574-49b502f3a9b3 Filter by customer UUID |
type | string[] Example: type=sale Filter by type |
payment_option | string[] Example: payment_option=cash Filter by payment option |
currency | string Example: currency=EUR Filter by currency ISO code |
staff | string <uuid> Example: staff=9d110eb2-2245-4e14-9574-49b502f3a9b3 Filter by staff UUID |
barcode | string Example: barcode=A1234567 Filter by barcode |
external_reference_id | string Example: external_reference_id=U000123 Filter by external reference id |
import * as tillhub from '@tillhub/javascript-sdk' const { data: report } = await tillhub.analyticsHandlersV3().analytics.reports.AnalyticsReportsTransactions.getAll({ date_start: '2022-03-10T15:42:39.740Z' })
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "created_at": {
- "iso": "2021-06-03T11:18:47.725Z",
- "unix": 1622719127725
}, - "metric": {
- "user": "936835f7-2d75-41d2-9001-38ed6e458328",
- "job": "reports_transactions_v2_overview_summary",
- "type": "summary"
}, - "count": 67,
- "values": [
- {
- "absolute_average_transaction_cancellation_items_total": 2,
- "absolute_average_transaction_items_total": 2.01,
- "absolute_average_transaction_revenue_items_total": 2.01,
- "absolute_average_transaction_sale_items_total": 2.01,
- "average_transaction_total": 2.01,
- "change": 2.01,
- "currency": "EUR",
- "total": 2.01,
- "total_cancellation_items_count": 3,
- "total_count": 245,
- "total_revenue_items_count": 67,
- "total_sale_items_count": 31
}
]
}
]
}
Query VAT Data
clientAccountID required | string Alphanumeric client ID of the user |
format | string this will generate csv file from the queried data. |
context_locations | string Context locations used to filter transactions |
branch_custom_id | integer Example: branch_custom_id=123 Filter by branch number |
branch_group | string | string[] filter by branches within branch group. Not applied if branch_custom_id parameter received. |
tillhub.analytics.reports.vat.get((err, result) => {})
Query VAT Data
clientAccountID required | string Alphanumeric client ID of the user |
format | string this will generate csv file from the queried data. |
context_locations | string Context locations used to filter transactions |
branch_custom_id | integer Example: branch_custom_id=123 Filter by branch number |
branch_group | string | string[] filter by branches within branch group. Not applied if branch_custom_id parameter received. |
tillhub.analytics.reports.vat.get((err, result) => {})
Get vouchers data
clientAccountID required | string Alphanumeric client ID of the user |
voucher_number | string the voucher number as filter |
redeemed_id | string the redeemed in as filter |
redeemed_branch | string the redeemed in as filter |
branch_group | string filter redeemed vouchers by branch group |
redeemed_email | string the redeemed in as filter |
redeemed_external_custom_id | string the redeemed in as filter |
issuer | string the redeemed in as filter |
redeemed_at | string Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
issued_at | string Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
valid_until | string Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
q | string this will search like terms in Voucher Number, Redeemed in, issuer, and comment (by comma or space separated words with minimal length of 2 chars) |
tillhub.analytics.reports.vouchers.get((err, result) => {})
Get vouchers data
clientAccountID required | string Alphanumeric client ID of the user |
voucher_number | string the voucher number as filter |
redeemed_id | string the redeemed in as filter |
redeemed_branch | string the redeemed in as filter |
branch_group | string filter redeemed vouchers by branch group |
redeemed_email | string the redeemed in as filter |
redeemed_external_custom_id | string the redeemed in as filter |
issuer | string the redeemed in as filter |
redeemed_at | string Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
issued_at | string Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
valid_until | string Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
q | string this will search like terms in Voucher Number, Redeemed in, issuer, and comment (by comma or space separated words with minimal length of 2 chars) |
tillhub.analytics.reports.vouchers.get((err, result) => {})
Query all audit actions with optional filter for audit action type and embedding of more information
clientAccountID required | string Alphanumeric client ID of the user |
limit | integer the discrete limit, that will default to 1000 on the legacy route |
cursor_field | string which column to cursor on. Currently we only support |
type | string Type of the action to filter for, e.g. "transactions_cancel" or "carts.item.add". It can be passed as a string or array of strings |
embed | string The information of other resources to be embedded. It can be passed as a string or array of strings. The options are currently limited to "user.branch", "user.register", "user.staff". |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
end required | string Example: end=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
branch | string branch id |
register | string register id |
staff | string staff id |
tillhub.audit_actions.get((err, result) => {})
Get a single audit action object.
clientAccountID required | string Alphanumeric client ID of the user |
actionId required | string Alphanumeric configuration ID |
tillhub.audit_actions.get((err, result) => {})
{ }
Get metadata of the Audits model.
clientAccountID required | string Alphanumeric client ID of the user |
type | string Type of the action to filter for, e.g. "transactions_cancel" or "carts.item.add". It can be passed as a string or array of strings |
embed | string The information of other resources to be embedded. It can be passed as a string or array of strings. The options are currently limited to "user.branch", "user.register", "user.staff". |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
end required | string Example: end=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
branch | string branch id |
register | string register id |
staff | string staff id |
tillhub.audits.actions.meta.get((err, result) => {})
Store auditable user actions in bulk.
Implementers should be consistent in type naming and data enrichment, as those are paramount for their analytics side.
Here are examples we implement in the POS System
clientAccountID required | string Alphanumeric client ID of the user |
a list of user actions.
required | Array of objects |
{- "actions": [
- {
- "date": "string",
- "type": "string",
- "data": { }
}
]
}
Query all audit logs with optional filter for audit log type and embedding of more information
clientAccountID required | string Alphanumeric client ID of the user |
limit | integer the discrete limit, that will default to 1000 on the legacy route |
cursor_field | string which column to cursor on. Currently we only support |
type | string Type of the log to filter for, e.g. "product.update" or "product.update". It can be passed as a string or array of strings |
embed | string The information of other resources to be embedded. It can be passed as a string or array of strings. The options are currently limited to "user.branch", "user.register", "user.staff". |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
end required | string Example: end=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
format | string to get data in any other format then JSON straight away, you can set |
tillhub.audit_logs.get((err, result) => {})
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 10,
- "results": [
- {
- "insert_id": 16259,
- "type": "product.update",
- "old": { },
- "new": {
- "id": "0f91b67b-b1eb-4aba-827a-3a83ff967c5e",
- "name": "Foo bar"
}, - "change": [
- {
- "op": "add",
- "path": "images.0.url",
- "value": "This is it"
}
], - "description": "Login attempt from service account",
- "issuer": {
- "sub_user": "8ddb94bf-98cf-4832-9833-c118ebf04675"
}, - "metadata": {
- "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36"
}
}
], - "cursor": {
}
}
Get a single audit log object.
clientAccountID required | string Alphanumeric client ID of the user |
logId required | string Alphanumeric configuration ID |
tillhub.audit_logs.get((err, result) => {})
{ }
Get metadata of the Audits model.
clientAccountID required | string Alphanumeric client ID of the user |
type | string Type of the log to filter for, e.g. "product.update" or "product.update". It can be passed as a string or array of strings |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
end required | string Example: end=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
tillhub.audits.logs.meta.get((err, result) => {})
Query all audit logs with optional filter for audit log type and embedding of more information
clientAccountID required | string Alphanumeric client ID of the user |
limit | integer the discrete limit, that will default to 1000 on the legacy route |
cursor_field | string which column to cursor on. Currently we only support |
type | string Type of the log to filter for, e.g. "product.update" or "product.update". It can be passed as a string or array of strings |
embed | string The information of other resources to be embedded. It can be passed as a string or array of strings. The options are currently limited to "user.branch", "user.register", "user.staff". |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
end required | string Example: end=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
format | string to get data in any other format then JSON straight away, you can set |
tillhub.audit_logs.get((err, result) => {})
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 10,
- "results": [
- {
- "insert_id": 16259,
- "type": "product.update",
- "old": { },
- "new": {
- "id": "0f91b67b-b1eb-4aba-827a-3a83ff967c5e",
- "name": "Foo bar"
}, - "change": [
- {
- "op": "add",
- "path": "images.0.url",
- "value": "This is it"
}
], - "description": "Login attempt from service account",
- "issuer": {
- "sub_user": "8ddb94bf-98cf-4832-9833-c118ebf04675"
}, - "metadata": {
- "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36"
}
}
], - "cursor": {
}
}
Get GOBD report with the transaction data (csv) and the accompanying description (xml) in one zip file
clientAccountID required | string Alphanumeric client ID of the user |
the client name that is supposed to appear in the xml description file
"string"
Exports GOBD report with the transaction data (csv) and the accompanying description (xml) in one zip file
clientAccountID required | string Alphanumeric client ID of the user |
Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z. The daterange for the GOBD report are max 2 years.
"string"
Uploads an Epson TSE export TAR file
clientAccountID required | string Alphanumeric client account ID |
exportID required | string Alphanumeric export ID |
TSE export TAR file binary at form field named 'file'
null
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "created_at": "2021-06-09T07:12:32.075Z",
- "updated_at": "2021-06-09T07:19:08.036Z",
- "client_id": "string",
- "balance_client_id": "string",
- "balance_number": 5,
- "branch_custom_id": 7,
- "register_custom_id": 11,
- "register": "9d110eb2-2245-4e14-9574-49b502f3a9b3",
- "branch": "9d110eb2-2245-4e14-9574-49b502f3a9b3",
- "export_date": "2019-03-17T21:12:04.849Z",
- "tse_serial_number": "t/Fjqab/VJY0Yq3as9gAfEe2zjj3YnrjKFw4IgdU7Ls=",
- "export": {
- "date_start": "2020-10-17T08:12:04.849Z",
- "date_end": "2020-10-17T21:12:04.849Z",
- "type": "archive"
}
}
]
}
clientAccountID required | string Alphanumeric client account ID |
start required | string Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
end required | string Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
register_custom_id required | string Legacy: The register custom ID. |
register required | string The register ID |
branch_custom_id required | string Legacy: The branch custom ID. |
branch required | string The branch ID |
tillhub.tse_exports.get((err, result) => {})
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "created_at": "2021-06-09T07:12:32.075Z",
- "updated_at": "2021-06-09T07:19:08.036Z",
- "client_id": "string",
- "balance_client_id": "string",
- "balance_number": 5,
- "branch_custom_id": 7,
- "register_custom_id": 11,
- "register": "9d110eb2-2245-4e14-9574-49b502f3a9b3",
- "branch": "9d110eb2-2245-4e14-9574-49b502f3a9b3",
- "export_date": "2019-03-17T21:12:04.849Z",
- "tse_serial_number": "t/Fjqab/VJY0Yq3as9gAfEe2zjj3YnrjKFw4IgdU7Ls=",
- "export": {
- "date_start": "2020-10-17T08:12:04.849Z",
- "date_end": "2020-10-17T21:12:04.849Z",
- "type": "archive"
}
}
]
}
Creates an Epson TSE export data entry
clientAccountID required | string Alphanumeric client account ID |
TSE export
client_id | string <= 128 characters An identifier used locally on POS for their own reference. Guaranteed to be there |
string or (any or null) | |
integer or (any or null) | |
integer or (any or null) | |
integer or (any or null) | |
register | string <uuid> The Tillhub register location ID. |
branch | string <uuid> The Tillhub branch location ID. |
export_date | string <date-time> Date when the TSE export was stored. |
tse_serial_number required | string TSE serial number. |
required | object |
{- "client_id": "string",
- "balance_client_id": "string",
- "balance_number": 5,
- "branch_custom_id": 7,
- "register_custom_id": 11,
- "register": "9d110eb2-2245-4e14-9574-49b502f3a9b3",
- "branch": "9d110eb2-2245-4e14-9574-49b502f3a9b3",
- "export_date": "2019-03-17T21:12:04.849Z",
- "tse_serial_number": "t/Fjqab/VJY0Yq3as9gAfEe2zjj3YnrjKFw4IgdU7Ls=",
- "export": {
- "date_start": "2020-10-17T08:12:04.849Z",
- "date_end": "2020-10-17T21:12:04.849Z",
- "type": "archive"
}
}
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "created_at": "2021-06-09T07:12:32.075Z",
- "updated_at": "2021-06-09T07:19:08.036Z",
- "client_id": "string",
- "balance_client_id": "string",
- "balance_number": 5,
- "branch_custom_id": 7,
- "register_custom_id": 11,
- "register": "9d110eb2-2245-4e14-9574-49b502f3a9b3",
- "branch": "9d110eb2-2245-4e14-9574-49b502f3a9b3",
- "export_date": "2019-03-17T21:12:04.849Z",
- "tse_serial_number": "t/Fjqab/VJY0Yq3as9gAfEe2zjj3YnrjKFw4IgdU7Ls=",
- "export": {
- "date_start": "2020-10-17T08:12:04.849Z",
- "date_end": "2020-10-17T21:12:04.849Z",
- "type": "archive"
}
}
]
}
Get the latest tse state from a specific register and TSE.
clientAccountID required | string Alphanumeric client ID of the user |
registerId required | string Alphanumeric register uuid |
tse_serial_number | string Alphanumeric tse serial number |
tillhub.tse_states.get((err, result) => {})
Create a new tse state of a user.
clientAccountID required | string Alphanumeric client ID of the user |
registerID required | string Alphanumeric register |
Simple tse state
string or (any or null) An identifier used locally on POS for their own reference. | |
raw_data required | object Raw data from the POS. |
string or (any or null) Date when the TSE state was stored. | |
context | string Default: "automatic" Enum: "manual" "automatic" context in which is automatically or triggered by user. |
tse_serial_number required | string TSE serial number. |
{- "client_id": "string",
- "raw_data": { },
- "date": "2019-03-17T21:12:04.849Z",
- "context": "manual",
- "tse_serial_number": "string"
}
Information about a new customer
webhook_id | string <uuid> The webhook UUID |
event_id | string <uuid> The event UUID |
event_entity | string The entity name the event refers to |
event_type | string The event type (e.g. create, update, delete) |
event_version | number The event payload version |
entity_instance_id | string <uuid> The entity instance UUID |
timestamp | string <date-time> The date and time event was received by webhooks service |
object |
{- "webhook_id": "ff30cfdf-5167-4f72-b4fc-c1d72db3c07e",
- "event_id": "c6fe918a-7bdc-4ccd-af36-95c03853233d",
- "event_entity": "customer",
- "event_type": "create",
- "event_version": 0,
- "entity_instance_id": "10b06f38-031d-4e0c-8706-0474c8c5b61c",
- "timestamp": "2024-12-02T18:25:23.894Z",
- "payload": {
- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "active": "true",
- "deleted": false,
- "firstname": "Boba",
- "lastname": "Fett",
- "middlename": "Alpha",
- "displayname": "Boba F.",
- "phonenumbers": {
- "main": "+49-555-123-4567"
}, - "customer_number": "fett-002",
- "company": {
- "name": "Bounty Hunter's Guild"
}, - "description": "Bounty hunter",
- "is_b2b": true,
- "date_of_birth": "2019-08-24T14:15:22Z",
- "images": {
}, - "contacts": {
- "email": {
- "enabled": true
}, - "newsletter": {
- "enabled": true
}, - "phone": {
- "enabled": true
}, - "post": {
- "enabled": true
}
}, - "metadata": { },
- "addresses": [
- {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
], - "custom": { },
- "comment": "Don't mess with",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percentage",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "client_id": "string",
- "external_reference": "string",
- "customer_since": "2019-08-24T14:15:22Z",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "gender": "male",
- "vat_id": "string",
- "source": "N/A, DASHBOARD, APPOINTMENT_CALENDAR, WEB_RESERVATION, POS",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc",
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "reminder_notification_enabled": "true",
- "insert_id": 0,
- "customer_group": "string",
- "price_list": { },
- "delegated_to": [
- "string"
], - "owner": "string"
}
}
Information about updated customer
webhook_id | string <uuid> The webhook UUID |
event_id | string <uuid> The event UUID |
event_entity | string The entity name the event refers to |
event_type | string The event type (e.g. create, update, delete) |
event_version | number The event payload version |
entity_instance_id | string <uuid> The entity instance UUID |
timestamp | string <date-time> The date and time event was received by webhooks service |
object |
{- "webhook_id": "ff30cfdf-5167-4f72-b4fc-c1d72db3c07e",
- "event_id": "c6fe918a-7bdc-4ccd-af36-95c03853233d",
- "event_entity": "customer",
- "event_type": "update",
- "event_version": 0,
- "entity_instance_id": "10b06f38-031d-4e0c-8706-0474c8c5b61c",
- "timestamp": "2024-12-02T18:25:23.895Z",
- "payload": {
- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "active": "true",
- "deleted": false,
- "firstname": "Boba",
- "lastname": "Fett",
- "middlename": "Alpha",
- "displayname": "Boba F.",
- "phonenumbers": {
- "main": "+49-555-123-4567"
}, - "customer_number": "fett-002",
- "company": {
- "name": "Bounty Hunter's Guild"
}, - "description": "Bounty hunter",
- "is_b2b": true,
- "date_of_birth": "2019-08-24T14:15:22Z",
- "images": {
}, - "contacts": {
- "email": {
- "enabled": true
}, - "newsletter": {
- "enabled": true
}, - "phone": {
- "enabled": true
}, - "post": {
- "enabled": true
}
}, - "metadata": { },
- "addresses": [
- {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
], - "custom": { },
- "comment": "Don't mess with",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percentage",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "client_id": "string",
- "external_reference": "string",
- "customer_since": "2019-08-24T14:15:22Z",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "gender": "male",
- "vat_id": "string",
- "source": "N/A, DASHBOARD, APPOINTMENT_CALENDAR, WEB_RESERVATION, POS",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc",
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "reminder_notification_enabled": "true",
- "insert_id": 0,
- "customer_group": "string",
- "price_list": { },
- "delegated_to": [
- "string"
], - "owner": "string"
}
}
Information about deleted customer
webhook_id | string <uuid> The webhook UUID |
event_id | string <uuid> The event UUID |
event_entity | string The entity name the event refers to |
event_type | string The event type (e.g. create, update, delete) |
event_version | number The event payload version |
entity_instance_id | string <uuid> The entity instance UUID |
timestamp | string <date-time> The date and time event was received by webhooks service |
object |
{- "webhook_id": "ff30cfdf-5167-4f72-b4fc-c1d72db3c07e",
- "event_id": "c6fe918a-7bdc-4ccd-af36-95c03853233d",
- "event_entity": "customer",
- "event_type": "delete",
- "event_version": 0,
- "entity_instance_id": "10b06f38-031d-4e0c-8706-0474c8c5b61c",
- "timestamp": "2024-12-02T18:25:23.895Z",
- "payload": {
- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "active": "true",
- "deleted": false,
- "firstname": "Boba",
- "lastname": "Fett",
- "middlename": "Alpha",
- "displayname": "Boba F.",
- "phonenumbers": {
- "main": "+49-555-123-4567"
}, - "customer_number": "fett-002",
- "company": {
- "name": "Bounty Hunter's Guild"
}, - "description": "Bounty hunter",
- "is_b2b": true,
- "date_of_birth": "2019-08-24T14:15:22Z",
- "images": {
}, - "contacts": {
- "email": {
- "enabled": true
}, - "newsletter": {
- "enabled": true
}, - "phone": {
- "enabled": true
}, - "post": {
- "enabled": true
}
}, - "metadata": { },
- "addresses": [
- {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
], - "custom": { },
- "comment": "Don't mess with",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percentage",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "client_id": "string",
- "external_reference": "string",
- "customer_since": "2019-08-24T14:15:22Z",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "gender": "male",
- "vat_id": "string",
- "source": "N/A, DASHBOARD, APPOINTMENT_CALENDAR, WEB_RESERVATION, POS",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc",
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "reminder_notification_enabled": "true",
- "insert_id": 0,
- "customer_group": "string",
- "price_list": { },
- "delegated_to": [
- "string"
], - "owner": "string"
}
}
Create many new customer of a user.
Customer numbers can be set directly. However implementers can choose to send a customer_number_template
the API
is supporting based on the below logic
Name | RegExp | Description | Required Parameters | Example (plain) | Example (encoded) | Result |
---|---|---|---|---|---|---|
{country}{franchise}{branch,3,0}{PLACEHOLDER,3,0}{SEQUENCE} | /{country}{franchise}{branch,3,0}{PLACEHOLDER,3,0}{SEQUENCE}/ | Generate a customer number based on country, franchise, branch (3 letters) and use the database sequence as suffix | country, branch, franchise | ? customer_number_template={country}{franchise}{branch,3,0}{PLACEHOLDER,3,0}{SEQUENCE}& country=DE&branch=000&franchise=000 |
? customer_number_template=%7Bcountry%7D%7Bfranchise%7D%7Bbranch %2C3%2C0%7D%7BPLACEHOLDER%2C3%2C0%7D%7BSEQUENCE%7D& country=DE&branch=000&franchise=000 |
DE0000000005812 |
clientAccountID required | string Alphanumeric client ID of the user |
customer_number_template | string the template which will be used to generate a customer number. This is stored as object inside the configuration |
Array of Simple Customers
active | boolean Default: true Customer active |
deleted | boolean Default: false Customer deleted |
required | string or (any or null) First name |
string or (any or null) Last name | |
string or (any or null) Middle name | |
string or (any or null) Display name | |
(object or object or object or object) or (any or null) Phone numbers | |
string or (any or null) Default: null Email address | |
string or (any or null) Unique customer number | |
object or (any or null) Company name | |
string or (any or null) Description | |
boolean or (any or null) Is B2B customer | |
string or (any or null) Birth date | |
object or (any or null) Images object with URLs of various types of images | |
object or (any or null) DEPRECATED. Omit or set null. | |
object or (any or null) Contact info | |
metadata | object Additional metadata |
Array of objects or (any or null) Addresses | |
object or (any or null) Custom data | |
string or (any or null) Comment | |
(Array of objects or objects) or (any or null) Available discounts | |
string or (any or null) Client ID | |
string or (any or null) External reference | |
string or (any or null) Customer since | |
Array of strings or (any or null) Locations customer belongs to | |
Array of strings or (any or null) Branch groups customer belongs to | |
string or (any or null) Gender | |
string or (any or null) Customer VAT ID | |
string or (any or null) Customer source of creation | |
string or (any or null) in cases where the customer is created via the POS, the branch_id is required | |
string or (any or null) in cases where the customer is going to have personal pricebook (like for discounts in pharmacy by personal insurance number), price_book is required | |
reminder_notification_enabled | boolean Default: true The flag indicate whether the customer can receive reminder notification |
[- {
- "active": "true",
- "deleted": false,
- "firstname": "Boba",
- "lastname": "Fett",
- "middlename": "Alpha",
- "displayname": "Boba F.",
- "phonenumbers": {
- "main": "+49-555-123-4567"
}, - "customer_number": "fett-002",
- "company": {
- "name": "Bounty Hunter's Guild"
}, - "description": "Bounty hunter",
- "is_b2b": true,
- "date_of_birth": "2019-08-24T14:15:22Z",
- "images": {
}, - "contacts": {
- "email": {
- "enabled": true
}, - "newsletter": {
- "enabled": true
}, - "phone": {
- "enabled": true
}, - "post": {
- "enabled": true
}
}, - "metadata": { },
- "addresses": [
- {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
], - "custom": { },
- "comment": "Don't mess with",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percentage",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "client_id": "string",
- "external_reference": "string",
- "customer_since": "2019-08-24T14:15:22Z",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "gender": "male",
- "vat_id": "string",
- "source": "N/A, DASHBOARD, APPOINTMENT_CALENDAR, WEB_RESERVATION, POS",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc",
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "reminder_notification_enabled": "true"
}
]
{- "status": 200,
- "msg": "string",
- "count": 1,
- "created_customers": [
- {
- "active": "true",
- "deleted": false,
- "firstname": "Boba",
- "lastname": "Fett",
- "middlename": "Alpha",
- "displayname": "Boba F.",
- "phonenumbers": {
- "main": "+49-555-123-4567"
}, - "customer_number": "fett-002",
- "company": {
- "name": "Bounty Hunter's Guild"
}, - "description": "Bounty hunter",
- "is_b2b": true,
- "date_of_birth": "2019-08-24T14:15:22Z",
- "images": {
}, - "contacts": {
- "email": {
- "enabled": true
}, - "newsletter": {
- "enabled": true
}, - "phone": {
- "enabled": true
}, - "post": {
- "enabled": true
}
}, - "metadata": { },
- "addresses": [
- {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
], - "custom": { },
- "comment": "Don't mess with",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percentage",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "client_id": "string",
- "external_reference": "string",
- "customer_since": "2019-08-24T14:15:22Z",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "gender": "male",
- "vat_id": "string",
- "source": "N/A, DASHBOARD, APPOINTMENT_CALENDAR, WEB_RESERVATION, POS",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc",
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "reminder_notification_enabled": "true"
}
], - "updated_customers": [
- {
- "active": "true",
- "deleted": false,
- "firstname": "Boba",
- "lastname": "Fett",
- "middlename": "Alpha",
- "displayname": "Boba F.",
- "phonenumbers": {
- "main": "+49-555-123-4567"
}, - "customer_number": "fett-002",
- "company": {
- "name": "Bounty Hunter's Guild"
}, - "description": "Bounty hunter",
- "is_b2b": true,
- "date_of_birth": "2019-08-24T14:15:22Z",
- "images": {
}, - "contacts": {
- "email": {
- "enabled": true
}, - "newsletter": {
- "enabled": true
}, - "phone": {
- "enabled": true
}, - "post": {
- "enabled": true
}
}, - "metadata": { },
- "addresses": [
- {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
], - "custom": { },
- "comment": "Don't mess with",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percentage",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "client_id": "string",
- "external_reference": "string",
- "customer_since": "2019-08-24T14:15:22Z",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "gender": "male",
- "vat_id": "string",
- "source": "N/A, DASHBOARD, APPOINTMENT_CALENDAR, WEB_RESERVATION, POS",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc",
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "reminder_notification_enabled": "true"
}
], - "invalid_customers": [
- {
- "active": "true",
- "deleted": false,
- "firstname": "Boba",
- "lastname": "Fett",
- "middlename": "Alpha",
- "displayname": "Boba F.",
- "phonenumbers": {
- "main": "+49-555-123-4567"
}, - "customer_number": "fett-002",
- "company": {
- "name": "Bounty Hunter's Guild"
}, - "description": "Bounty hunter",
- "is_b2b": true,
- "date_of_birth": "2019-08-24T14:15:22Z",
- "images": {
}, - "contacts": {
- "email": {
- "enabled": true
}, - "newsletter": {
- "enabled": true
}, - "phone": {
- "enabled": true
}, - "post": {
- "enabled": true
}
}, - "metadata": { },
- "addresses": [
- {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
], - "custom": { },
- "comment": "Don't mess with",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percentage",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "client_id": "string",
- "external_reference": "string",
- "customer_since": "2019-08-24T14:15:22Z",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "gender": "male",
- "vat_id": "string",
- "source": "N/A, DASHBOARD, APPOINTMENT_CALENDAR, WEB_RESERVATION, POS",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc",
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "reminder_notification_enabled": "true"
}
]
}
Create a new customer of a user.
Customer numbers can be set directly. However implementers can choose to send a customer_number_template
the API
is supporting based on the below logic
Name | RegExp | Description | Required Parameters | Example (plain) | Example (encoded) | Result |
---|---|---|---|---|---|---|
{country}{franchise}{branch,3,0}{PLACEHOLDER,3,0}{SEQUENCE} | /{country}{franchise}{branch,3,0}{PLACEHOLDER,3,0}{SEQUENCE}/ | Generate a customer number based on country, franchise, branch (3 letters) and use the database sequence as suffix | country, branch, franchise | ? customer_number_template={country}{franchise}{branch,3,0}{PLACEHOLDER,3,0}{SEQUENCE}& country=DE&branch=000&franchise=000 |
? customer_number_template=%7Bcountry%7D%7Bfranchise%7D%7Bbranch %2C3%2C0%7D%7BPLACEHOLDER%2C3%2C0%7D%7BSEQUENCE%7D& country=DE&branch=000&franchise=000 |
DE0000000005812 |
clientAccountID required | string Alphanumeric client ID of the user |
customer_number_template | string the template which will be used to generate a customer number. This is stored as object inside the configuration |
Simple Customer
active | boolean Default: true Customer active |
deleted | boolean Default: false Customer deleted |
string or (any or null) First name | |
string or (any or null) Last name | |
string or (any or null) Middle name | |
string or (any or null) Display name | |
(object or object or object or object) or (any or null) Phone numbers | |
string or (any or null) Default: null Email address | |
string or (any or null) Unique customer number | |
object or (any or null) Company name | |
string or (any or null) Description | |
boolean or (any or null) Is B2B customer | |
string or (any or null) Birth date | |
object or (any or null) Images object with URLs of various types of images | |
object or (any or null) DEPRECATED. Omit or set null. | |
object or (any or null) Contact info | |
metadata | object Additional metadata |
Array of objects or (any or null) Addresses | |
object or (any or null) Custom data | |
string or (any or null) Comment | |
(Array of objects or objects) or (any or null) Available discounts | |
string or (any or null) Client ID | |
string or (any or null) External reference | |
string or (any or null) Customer since | |
Array of strings or (any or null) Locations customer belongs to | |
Array of strings or (any or null) Branch groups customer belongs to | |
string or (any or null) Gender | |
string or (any or null) Customer VAT ID | |
string or (any or null) Customer source of creation | |
string or (any or null) in cases where the customer is created via the POS, the branch_id is required | |
string or (any or null) in cases where the customer is going to have personal pricebook (like for discounts in pharmacy by personal insurance number), price_book is required | |
reminder_notification_enabled | boolean Default: true The flag indicate whether the customer can receive reminder notification |
{- "active": "true",
- "deleted": false,
- "firstname": "Boba",
- "lastname": "Fett",
- "middlename": "Alpha",
- "displayname": "Boba F.",
- "phonenumbers": {
- "main": "+49-555-123-4567"
}, - "customer_number": "fett-002",
- "company": {
- "name": "Bounty Hunter's Guild"
}, - "description": "Bounty hunter",
- "is_b2b": true,
- "date_of_birth": "2019-08-24T14:15:22Z",
- "images": {
}, - "contacts": {
- "email": {
- "enabled": true
}, - "newsletter": {
- "enabled": true
}, - "phone": {
- "enabled": true
}, - "post": {
- "enabled": true
}
}, - "metadata": { },
- "addresses": [
- {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
], - "custom": { },
- "comment": "Don't mess with",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percentage",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "client_id": "string",
- "external_reference": "string",
- "customer_since": "2019-08-24T14:15:22Z",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "gender": "male",
- "vat_id": "string",
- "source": "N/A, DASHBOARD, APPOINTMENT_CALENDAR, WEB_RESERVATION, POS",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc",
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "reminder_notification_enabled": "true"
}
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "active": "true",
- "deleted": false,
- "firstname": "Boba",
- "lastname": "Fett",
- "middlename": "Alpha",
- "displayname": "Boba F.",
- "phonenumbers": {
- "main": "+49-555-123-4567"
}, - "customer_number": "fett-002",
- "company": {
- "name": "Bounty Hunter's Guild"
}, - "description": "Bounty hunter",
- "is_b2b": true,
- "date_of_birth": "2019-08-24T14:15:22Z",
- "images": {
}, - "contacts": {
- "email": {
- "enabled": true
}, - "newsletter": {
- "enabled": true
}, - "phone": {
- "enabled": true
}, - "post": {
- "enabled": true
}
}, - "metadata": { },
- "addresses": [
- {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
], - "custom": { },
- "comment": "Don't mess with",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percentage",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "client_id": "string",
- "external_reference": "string",
- "customer_since": "2019-08-24T14:15:22Z",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "gender": "male",
- "vat_id": "string",
- "source": "N/A, DASHBOARD, APPOINTMENT_CALENDAR, WEB_RESERVATION, POS",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc",
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "reminder_notification_enabled": "true"
}
]
}
Query all customers
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2022-02-01T00:00:00.000Z The start date to filter customers by "updated_at" field value |
created_at_start | string <date-time> Example: created_at_start=2022-02-01T00:00:00.000Z The start date to filter customers by "created_at" field value |
created_at_end | string <date-time> Example: created_at_end=2022-02-28T23:59:59.999Z The end date to filter customers by "created_at" field value |
limit | integer >= 1 Example: limit=50 The maximum amount of entries on page (for paginated output)' |
active | string Enum: "true" "false" Filter customers by "active" field value |
deleted | string Enum: "true" "false" Filter customers which are deleted or not |
customer_number | string Note: in this version of the API call customer number is a special flag. It ignores all other flags and is an exact match. |
location | string One or more ids of locations (branches, registers, clients) to filter customers for. |
owner | string An id of owner (branch, register, client) to filter customers for. |
firstname | string First name substring to filter customers for. |
lastname | string Last name substring to filter customers for. |
string Email address substring to filter customers for. | |
company | string Company name substring to filter customers for. |
phonenumbers | string Phone number substring to filter customers for. |
postal_code | string Postal code to filter customers for. |
address | string Street name to filter customers for. |
q | string this will text search by first name / last name / email / company name/ number, with a partial match (by comma or space separated words with minimal length of 2 chars) |
limit | integer the discrete limit, that will default to 1000 on the legacy route |
cursor | string the alphanumeric cursor field |
cursor_field | string which column to cursor on. Currently we only support |
format | string Enum: "csv" "csv_custom" To get data in any other format then JSON straight away, you can set |
import * as tillhub from '@tillhub/javascript-sdk' const { data: customers } = await tillhub.customers().getAll({ deleted: false, limit: 50 })
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 10,
- "results": [
- {
- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "active": "true",
- "deleted": false,
- "firstname": "Boba",
- "lastname": "Fett",
- "middlename": "Alpha",
- "displayname": "Boba F.",
- "phonenumbers": {
- "main": "+49-555-123-4567"
}, - "customer_number": "fett-002",
- "company": {
- "name": "Bounty Hunter's Guild"
}, - "description": "Bounty hunter",
- "is_b2b": true,
- "date_of_birth": "2019-08-24T14:15:22Z",
- "images": {
}, - "contacts": {
- "email": {
- "enabled": true
}, - "newsletter": {
- "enabled": true
}, - "phone": {
- "enabled": true
}, - "post": {
- "enabled": true
}
}, - "metadata": { },
- "addresses": [
- {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
], - "custom": { },
- "comment": "Don't mess with",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percentage",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "client_id": "string",
- "external_reference": "string",
- "customer_since": "2019-08-24T14:15:22Z",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "gender": "male",
- "vat_id": "string",
- "source": "N/A, DASHBOARD, APPOINTMENT_CALENDAR, WEB_RESERVATION, POS",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc",
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "reminder_notification_enabled": "true",
- "insert_id": 0,
- "customer_group": "string",
- "price_list": { },
- "delegated_to": [
- "string"
], - "owner": "string"
}
], - "cursor": {
}
}
Delete a single customer object. This is a soft delete, that will leave the object with IDs it has gained throughout it's lifetime intact, but will null all other fields.
clientAccountID required | string Alphanumeric client ID of the user |
customerID required | string Alphanumeric customer ID |
import * as tillhub from '@tillhub/javascript-sdk' const { msg } = await tillhub.customers().delete('09ba6f6c-ecc4-4cdb-9cfa-0e1fdb3979a4')
Get a single customer object.
clientAccountID required | string Alphanumeric client ID of the user |
customerID required | string Alphanumeric customer ID |
extended | boolean embed extended fields |
import * as tillhub from '@tillhub/javascript-sdk' const { data: customer } = await tillhub.customers().get('09ba6f6c-ecc4-4cdb-9cfa-0e1fdb3979a4')
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 10,
- "results": [
- {
- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "active": "true",
- "deleted": false,
- "firstname": "Boba",
- "lastname": "Fett",
- "middlename": "Alpha",
- "displayname": "Boba F.",
- "phonenumbers": {
- "main": "+49-555-123-4567"
}, - "customer_number": "fett-002",
- "company": {
- "name": "Bounty Hunter's Guild"
}, - "description": "Bounty hunter",
- "is_b2b": true,
- "date_of_birth": "2019-08-24T14:15:22Z",
- "images": {
}, - "contacts": {
- "email": {
- "enabled": true
}, - "newsletter": {
- "enabled": true
}, - "phone": {
- "enabled": true
}, - "post": {
- "enabled": true
}
}, - "metadata": { },
- "addresses": [
- {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
], - "custom": { },
- "comment": "Don't mess with",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percentage",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "client_id": "string",
- "external_reference": "string",
- "customer_since": "2019-08-24T14:15:22Z",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "gender": "male",
- "vat_id": "string",
- "source": "N/A, DASHBOARD, APPOINTMENT_CALENDAR, WEB_RESERVATION, POS",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc",
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "reminder_notification_enabled": "true",
- "insert_id": 0,
- "customer_group": "string",
- "price_list": { },
- "delegated_to": [
- "string"
], - "owner": "string",
- "analytics": {
- "summary": {
- "top_seller": [
- {
- "gross": "27633.02",
- "net": "27633.02",
- "currency": "str",
- "salesman_staff": "60aa716a-e92b-4c7a-a991-84c21829042f"
}
], - "top_branch": [
- {
- "gross": "27633.02",
- "net": "27633.02",
- "currency": "str",
- "branch_number": 0,
- "branch": "7c628a07-d557-4cd4-9105-51f9aade2c65"
}
], - "average_items_per_transaction": 0,
- "total_quantity_returns": 0,
- "total_quantity_cartitems": 0,
- "total_amount_returns": [
- {
- "gross": "27633.02",
- "net": "27633.02",
- "currency": "str"
}
], - "total_transactions": 0,
- "total_amount_items_sold": [
- {
- "gross": "27633.02",
- "net": "27633.02",
- "currency": "str"
}
], - "average_purchase_value": [
- {
- "gross": "27633.02",
- "net": "27633.02",
- "currency": "str"
}
], - "last_seen": "2019-08-24T14:15:22Z"
}, - "last_transactions_v0": [
- { }
]
}, - "notes": [
- {
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "type": "text",
- "payload": "string",
- "client_id": "string",
- "date": "2019-08-24T14:15:22Z"
}
]
}
], - "cursor": {
}
}
Replace an entire customer object.
clientAccountID required | string Alphanumeric client ID of the user |
customerID required | string Alphanumeric customer ID |
Simple Customer
active | boolean Default: true Customer active |
deleted | boolean Default: false Customer deleted |
string or (any or null) First name | |
string or (any or null) Last name | |
string or (any or null) Middle name | |
string or (any or null) Display name | |
(object or object or object or object) or (any or null) Phone numbers | |
string or (any or null) Default: null Email address | |
string or (any or null) Unique customer number | |
object or (any or null) Company name | |
string or (any or null) Description | |
boolean or (any or null) Is B2B customer | |
string or (any or null) Birth date | |
object or (any or null) Images object with URLs of various types of images | |
object or (any or null) DEPRECATED. Omit or set null. | |
object or (any or null) Contact info | |
metadata | object Additional metadata |
Array of objects or (any or null) Addresses | |
object or (any or null) Custom data | |
string or (any or null) Comment | |
(Array of objects or objects) or (any or null) Available discounts | |
string or (any or null) Client ID | |
string or (any or null) External reference | |
string or (any or null) Customer since | |
Array of strings or (any or null) Locations customer belongs to | |
Array of strings or (any or null) Branch groups customer belongs to | |
string or (any or null) Gender | |
string or (any or null) Customer VAT ID | |
string or (any or null) Customer source of creation | |
string or (any or null) in cases where the customer is created via the POS, the branch_id is required | |
string or (any or null) in cases where the customer is going to have personal pricebook (like for discounts in pharmacy by personal insurance number), price_book is required | |
reminder_notification_enabled | boolean Default: true The flag indicate whether the customer can receive reminder notification |
{- "active": "true",
- "deleted": false,
- "firstname": "Boba",
- "lastname": "Fett",
- "middlename": "Alpha",
- "displayname": "Boba F.",
- "phonenumbers": {
- "main": "+49-555-123-4567"
}, - "customer_number": "fett-002",
- "company": {
- "name": "Bounty Hunter's Guild"
}, - "description": "Bounty hunter",
- "is_b2b": true,
- "date_of_birth": "2019-08-24T14:15:22Z",
- "images": {
}, - "contacts": {
- "email": {
- "enabled": true
}, - "newsletter": {
- "enabled": true
}, - "phone": {
- "enabled": true
}, - "post": {
- "enabled": true
}
}, - "metadata": { },
- "addresses": [
- {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
], - "custom": { },
- "comment": "Don't mess with",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percentage",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "client_id": "string",
- "external_reference": "string",
- "customer_since": "2019-08-24T14:15:22Z",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "gender": "male",
- "vat_id": "string",
- "source": "N/A, DASHBOARD, APPOINTMENT_CALENDAR, WEB_RESERVATION, POS",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc",
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "reminder_notification_enabled": "true"
}
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "active": "true",
- "deleted": false,
- "firstname": "Boba",
- "lastname": "Fett",
- "middlename": "Alpha",
- "displayname": "Boba F.",
- "phonenumbers": {
- "main": "+49-555-123-4567"
}, - "customer_number": "fett-002",
- "company": {
- "name": "Bounty Hunter's Guild"
}, - "description": "Bounty hunter",
- "is_b2b": true,
- "date_of_birth": "2019-08-24T14:15:22Z",
- "images": {
}, - "contacts": {
- "email": {
- "enabled": true
}, - "newsletter": {
- "enabled": true
}, - "phone": {
- "enabled": true
}, - "post": {
- "enabled": true
}
}, - "metadata": { },
- "addresses": [
- {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
], - "custom": { },
- "comment": "Don't mess with",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percentage",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "client_id": "string",
- "external_reference": "string",
- "customer_since": "2019-08-24T14:15:22Z",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "gender": "male",
- "vat_id": "string",
- "source": "N/A, DASHBOARD, APPOINTMENT_CALENDAR, WEB_RESERVATION, POS",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc",
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "reminder_notification_enabled": "true"
}
]
}
Checks if a customer number is unique based on exsiting customer numbers
clientAccountID required | string Alphanumeric client ID of the user |
customer_number required | string the customer number to be checked |
tillhub.customers.get((err, result) => {})
Query all legacy customers
clientAccountID required | string Alphanumeric client ID of the user |
limit | integer the discrete limit, that will default to 1000 on the legacy route |
cursor | string the alphanumeric cursor field |
cursor_field | string which column to cursor on. Currently we only support |
tillhub.customers.legacy.get((err, result) => {})
Create a new customer note.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric customer ID |
Simple Note
type required | string Value: "text" |
payload required | string <= 16384 characters |
string or (any or null) | |
string or (any or null) |
{- "type": "text",
- "payload": "string",
- "client_id": "string",
- "date": "2019-08-24T14:15:22Z"
}
{ }
Make a fuzzy search query for costomers on the name, description and ID fields as a string. This will return max. 20 results, with their score and some metadata. Also it will treat the input as incomplete string and make a suggestion for correction.
NOTE: if the index does not exist yet, we will try to create it on the fly. On a customers database with millions of costomers, that will take up to 7 minutes.
clientAccountID required | string Alphanumeric client ID of the user |
q required | string the search string |
tillhub.customers.search.get((err, result) => {})
If an index exists, replace all existing documents in the index with new ones from the database table. If no index exists yet, it will be created.
clientAccountID required | string Alphanumeric client ID of the user |
tillhub.customers.search.get((err, result) => {})
Create index for customers on the name, email, addresses, customer_number, locations, and ID fields as a string. If an index already exists, an error will be returned.
clientAccountID required | string Alphanumeric client ID of the user |
tillhub.customers.search.get((err, result) => {})
Create a new customer of a user.
Customer numbers can be set directly. However implementers can choose to send a customer_number_template
the API
is supporting based on the below logic
Name | RegExp | Description | Required Parameters | Example (plain) | Example (encoded) | Result |
---|---|---|---|---|---|---|
{country}{franchise}{branch,3,0}{PLACEHOLDER,3,0}{SEQUENCE} | /{country}{franchise}{branch,3,0}{PLACEHOLDER,3,0}{SEQUENCE}/ | Generate a customer number based on country, franchise, branch (3 letters) and use the database sequence as suffix | country, branch, franchise | ? customer_number_template={country}{franchise}{branch,3,0}{PLACEHOLDER,3,0}{SEQUENCE}& country=DE&branch=000&franchise=000 |
? customer_number_template=%7Bcountry%7D%7Bfranchise%7D%7Bbranch %2C3%2C0%7D%7BPLACEHOLDER%2C3%2C0%7D%7BSEQUENCE%7D& country=DE&branch=000&franchise=000 |
DE0000000005812 |
clientAccountID required | string Alphanumeric client ID of the user |
customer_number_template | string the template which will be used to generate a customer number. This is stored as object inside the configuration |
Simple Customer
active | boolean Default: true Customer active |
deleted | boolean Default: false Customer deleted |
string or (any or null) First name | |
string or (any or null) Last name | |
string or (any or null) Middle name | |
string or (any or null) Display name | |
(object or object or object or object) or (any or null) Phone numbers | |
string or (any or null) Default: null Email address | |
string or (any or null) Unique customer number | |
object or (any or null) Company name | |
string or (any or null) Description | |
boolean or (any or null) Is B2B customer | |
string or (any or null) Birth date | |
object or (any or null) Images object with URLs of various types of images | |
object or (any or null) DEPRECATED. Omit or set null. | |
object or (any or null) Contact info | |
metadata | object Additional metadata |
Array of objects or (any or null) Addresses | |
object or (any or null) Custom data | |
string or (any or null) Comment | |
(Array of objects or objects) or (any or null) Available discounts | |
string or (any or null) Client ID | |
string or (any or null) External reference | |
string or (any or null) Customer since | |
Array of strings or (any or null) Locations customer belongs to | |
Array of strings or (any or null) Branch groups customer belongs to | |
string or (any or null) Gender | |
string or (any or null) Customer VAT ID | |
string or (any or null) Customer source of creation | |
string or (any or null) in cases where the customer is created via the POS, the branch_id is required | |
string or (any or null) in cases where the customer is going to have personal pricebook (like for discounts in pharmacy by personal insurance number), price_book is required | |
reminder_notification_enabled | boolean Default: true The flag indicate whether the customer can receive reminder notification |
{- "active": "true",
- "deleted": false,
- "firstname": "Boba",
- "lastname": "Fett",
- "middlename": "Alpha",
- "displayname": "Boba F.",
- "phonenumbers": {
- "main": "+49-555-123-4567"
}, - "customer_number": "fett-002",
- "company": {
- "name": "Bounty Hunter's Guild"
}, - "description": "Bounty hunter",
- "is_b2b": true,
- "date_of_birth": "2019-08-24T14:15:22Z",
- "images": {
}, - "contacts": {
- "email": {
- "enabled": true
}, - "newsletter": {
- "enabled": true
}, - "phone": {
- "enabled": true
}, - "post": {
- "enabled": true
}
}, - "metadata": { },
- "addresses": [
- {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
], - "custom": { },
- "comment": "Don't mess with",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percentage",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "client_id": "string",
- "external_reference": "string",
- "customer_since": "2019-08-24T14:15:22Z",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "gender": "male",
- "vat_id": "string",
- "source": "N/A, DASHBOARD, APPOINTMENT_CALENDAR, WEB_RESERVATION, POS",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc",
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "reminder_notification_enabled": "true"
}
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "active": "true",
- "deleted": false,
- "firstname": "Boba",
- "lastname": "Fett",
- "middlename": "Alpha",
- "displayname": "Boba F.",
- "phonenumbers": {
- "main": "+49-555-123-4567"
}, - "customer_number": "fett-002",
- "company": {
- "name": "Bounty Hunter's Guild"
}, - "description": "Bounty hunter",
- "is_b2b": true,
- "date_of_birth": "2019-08-24T14:15:22Z",
- "images": {
}, - "contacts": {
- "email": {
- "enabled": true
}, - "newsletter": {
- "enabled": true
}, - "phone": {
- "enabled": true
}, - "post": {
- "enabled": true
}
}, - "metadata": { },
- "addresses": [
- {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
], - "custom": { },
- "comment": "Don't mess with",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percentage",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "client_id": "string",
- "external_reference": "string",
- "customer_since": "2019-08-24T14:15:22Z",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "gender": "male",
- "vat_id": "string",
- "source": "N/A, DASHBOARD, APPOINTMENT_CALENDAR, WEB_RESERVATION, POS",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc",
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "reminder_notification_enabled": "true"
}
]
}
Query all customers
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2022-02-01T00:00:00.000Z The start date to filter customers by "updated_at" field value |
created_at_start | string <date-time> Example: created_at_start=2022-02-01T00:00:00.000Z The start date to filter customers by "created_at" field value |
created_at_end | string <date-time> Example: created_at_end=2022-02-28T23:59:59.999Z The end date to filter customers by "created_at" field value |
limit | integer >= 1 Example: limit=50 The maximum amount of entries on page (for paginated output)' |
active | string Enum: "true" "false" Filter customers by "active" field value |
deleted | string Enum: "true" "false" Filter customers which are deleted or not |
customer_number | string Note: in this version of the API call customer number is a special flag. It ignores all other flags and is an exact match. |
owner | string An id of owner (branch, register, client) to filter customers for. |
firstname | string First name substring to filter customers for. |
lastname | string Last name substring to filter customers for. |
string Email address substring to filter customers for. | |
company | string Company name substring to filter customers for. |
phonenumbers | string Phone number substring to filter customers for. |
postal_code | string Postal code to filter customers for. |
address | string Street name to filter customers for. |
q | string this will text search by first name / last name / email / company name / number, with a partial match (by comma or space separated words with minimal length of 2 chars) |
limit | integer the discrete limit, that will default to 1000 on the legacy route |
locations | string One or more ids of locations (branches, registers, clients) to filter customers for. |
format | string Value: "csv" To get data in any other format then JSON straight away, you can set |
import * as tillhub from '@tillhub/javascript-sdk' const { data: customers } = await tillhub.customersV1().getAll({ deleted: false, limit: 50 })
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "active": "true",
- "deleted": false,
- "firstname": "Boba",
- "lastname": "Fett",
- "middlename": "Alpha",
- "displayname": "Boba F.",
- "phonenumbers": {
- "main": "+49-555-123-4567"
}, - "customer_number": "fett-002",
- "company": {
- "name": "Bounty Hunter's Guild"
}, - "description": "Bounty hunter",
- "is_b2b": true,
- "date_of_birth": "2019-08-24T14:15:22Z",
- "images": {
}, - "contacts": {
- "email": {
- "enabled": true
}, - "newsletter": {
- "enabled": true
}, - "phone": {
- "enabled": true
}, - "post": {
- "enabled": true
}
}, - "metadata": { },
- "addresses": [
- {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
], - "custom": { },
- "comment": "Don't mess with",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percentage",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "client_id": "string",
- "external_reference": "string",
- "customer_since": "2019-08-24T14:15:22Z",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "gender": "male",
- "vat_id": "string",
- "source": "N/A, DASHBOARD, APPOINTMENT_CALENDAR, WEB_RESERVATION, POS",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc",
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "reminder_notification_enabled": "true",
- "insert_id": 0,
- "customer_group": "string",
- "price_list": { },
- "delegated_to": [
- "string"
], - "owner": "string"
}
],
}
Delete a single customer object. This is a soft delete, that will leave the object with IDs it has gained throughout it's lifetime intact, but will null all other fields.
clientAccountID required | string Alphanumeric client ID of the user |
customerID required | string Alphanumeric customer ID |
import * as tillhub from '@tillhub/javascript-sdk' const { msg } = await tillhub.customersV1().delete('09ba6f6c-ecc4-4cdb-9cfa-0e1fdb3979a4')
Get a single customer object.
clientAccountID required | string Alphanumeric client ID of the user |
customerID required | string Alphanumeric customer ID |
extended | boolean embed extended fields |
import * as tillhub from '@tillhub/javascript-sdk' const { data: customer } = await tillhub.customersV1().get('09ba6f6c-ecc4-4cdb-9cfa-0e1fdb3979a4')
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 10,
- "results": [
- {
- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "active": "true",
- "deleted": false,
- "firstname": "Boba",
- "lastname": "Fett",
- "middlename": "Alpha",
- "displayname": "Boba F.",
- "phonenumbers": {
- "main": "+49-555-123-4567"
}, - "customer_number": "fett-002",
- "company": {
- "name": "Bounty Hunter's Guild"
}, - "description": "Bounty hunter",
- "is_b2b": true,
- "date_of_birth": "2019-08-24T14:15:22Z",
- "images": {
}, - "contacts": {
- "email": {
- "enabled": true
}, - "newsletter": {
- "enabled": true
}, - "phone": {
- "enabled": true
}, - "post": {
- "enabled": true
}
}, - "metadata": { },
- "addresses": [
- {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
], - "custom": { },
- "comment": "Don't mess with",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percentage",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "client_id": "string",
- "external_reference": "string",
- "customer_since": "2019-08-24T14:15:22Z",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "gender": "male",
- "vat_id": "string",
- "source": "N/A, DASHBOARD, APPOINTMENT_CALENDAR, WEB_RESERVATION, POS",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc",
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "reminder_notification_enabled": "true",
- "insert_id": 0,
- "customer_group": "string",
- "price_list": { },
- "delegated_to": [
- "string"
], - "owner": "string",
- "analytics": {
- "summary": {
- "top_seller": [
- {
- "gross": "27633.02",
- "net": "27633.02",
- "currency": "str",
- "salesman_staff": "60aa716a-e92b-4c7a-a991-84c21829042f"
}
], - "top_branch": [
- {
- "gross": "27633.02",
- "net": "27633.02",
- "currency": "str",
- "branch_number": 0,
- "branch": "7c628a07-d557-4cd4-9105-51f9aade2c65"
}
], - "average_items_per_transaction": 0,
- "total_quantity_returns": 0,
- "total_quantity_cartitems": 0,
- "total_amount_returns": [
- {
- "gross": "27633.02",
- "net": "27633.02",
- "currency": "str"
}
], - "total_transactions": 0,
- "total_amount_items_sold": [
- {
- "gross": "27633.02",
- "net": "27633.02",
- "currency": "str"
}
], - "average_purchase_value": [
- {
- "gross": "27633.02",
- "net": "27633.02",
- "currency": "str"
}
], - "last_seen": "2019-08-24T14:15:22Z"
}, - "last_transactions_v0": [
- { }
]
}, - "notes": [
- {
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "type": "text",
- "payload": "string",
- "client_id": "string",
- "date": "2019-08-24T14:15:22Z"
}
]
}
], - "cursor": {
}
}
Replace an entire customer object.
clientAccountID required | string Alphanumeric client ID of the user |
customerID required | string Alphanumeric customer ID |
Simple Customer
active | boolean Default: true Customer active |
deleted | boolean Default: false Customer deleted |
string or (any or null) First name | |
string or (any or null) Last name | |
string or (any or null) Middle name | |
string or (any or null) Display name | |
(object or object or object or object) or (any or null) Phone numbers | |
string or (any or null) Default: null Email address | |
string or (any or null) Unique customer number | |
object or (any or null) Company name | |
string or (any or null) Description | |
boolean or (any or null) Is B2B customer | |
string or (any or null) Birth date | |
object or (any or null) Images object with URLs of various types of images | |
object or (any or null) DEPRECATED. Omit or set null. | |
object or (any or null) Contact info | |
metadata | object Additional metadata |
Array of objects or (any or null) Addresses | |
object or (any or null) Custom data | |
string or (any or null) Comment | |
(Array of objects or objects) or (any or null) Available discounts | |
string or (any or null) Client ID | |
string or (any or null) External reference | |
string or (any or null) Customer since | |
Array of strings or (any or null) Locations customer belongs to | |
Array of strings or (any or null) Branch groups customer belongs to | |
string or (any or null) Gender | |
string or (any or null) Customer VAT ID | |
string or (any or null) Customer source of creation | |
string or (any or null) in cases where the customer is created via the POS, the branch_id is required | |
string or (any or null) in cases where the customer is going to have personal pricebook (like for discounts in pharmacy by personal insurance number), price_book is required | |
reminder_notification_enabled | boolean Default: true The flag indicate whether the customer can receive reminder notification |
{- "active": "true",
- "deleted": false,
- "firstname": "Boba",
- "lastname": "Fett",
- "middlename": "Alpha",
- "displayname": "Boba F.",
- "phonenumbers": {
- "main": "+49-555-123-4567"
}, - "customer_number": "fett-002",
- "company": {
- "name": "Bounty Hunter's Guild"
}, - "description": "Bounty hunter",
- "is_b2b": true,
- "date_of_birth": "2019-08-24T14:15:22Z",
- "images": {
}, - "contacts": {
- "email": {
- "enabled": true
}, - "newsletter": {
- "enabled": true
}, - "phone": {
- "enabled": true
}, - "post": {
- "enabled": true
}
}, - "metadata": { },
- "addresses": [
- {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
], - "custom": { },
- "comment": "Don't mess with",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percentage",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "client_id": "string",
- "external_reference": "string",
- "customer_since": "2019-08-24T14:15:22Z",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "gender": "male",
- "vat_id": "string",
- "source": "N/A, DASHBOARD, APPOINTMENT_CALENDAR, WEB_RESERVATION, POS",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc",
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "reminder_notification_enabled": "true"
}
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "active": "true",
- "deleted": false,
- "firstname": "Boba",
- "lastname": "Fett",
- "middlename": "Alpha",
- "displayname": "Boba F.",
- "phonenumbers": {
- "main": "+49-555-123-4567"
}, - "customer_number": "fett-002",
- "company": {
- "name": "Bounty Hunter's Guild"
}, - "description": "Bounty hunter",
- "is_b2b": true,
- "date_of_birth": "2019-08-24T14:15:22Z",
- "images": {
}, - "contacts": {
- "email": {
- "enabled": true
}, - "newsletter": {
- "enabled": true
}, - "phone": {
- "enabled": true
}, - "post": {
- "enabled": true
}
}, - "metadata": { },
- "addresses": [
- {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
], - "custom": { },
- "comment": "Don't mess with",
- "discounts": [
- {
- "id": "string",
- "amount": 0,
- "type": "percentage",
- "account": "string",
- "name": "string",
- "group": "cart"
}
], - "client_id": "string",
- "external_reference": "string",
- "customer_since": "2019-08-24T14:15:22Z",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "gender": "male",
- "vat_id": "string",
- "source": "N/A, DASHBOARD, APPOINTMENT_CALENDAR, WEB_RESERVATION, POS",
- "branch_id": "7a4e8e99-89f2-4a0f-b66c-fc595dda2dbc",
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "reminder_notification_enabled": "true"
}
]
}
Checks if a customer number is unique based on existing customer numbers
clientAccountID required | string Alphanumeric client ID of the user |
customer_number required | string the customer number to be checked |
tillhub.customers.get((err, result) => {})
Get metadata of the vouchers bounded to customer model.
clientAccountID required | string Alphanumeric client ID of the user |
customerID required | string Alphanumeric customer ID |
tillhub.customers.vouchers.meta.get((err, result) => {})
Query all vouchers bounded to customer
clientAccountID required | string Alphanumeric client ID of the user |
customerID required | string Alphanumeric customer ID |
limit | integer the discrete limit, that will default to 1000 on the legacy route |
cursor | string the alphanumeric cursor field |
cursor_field | string which column to cursor on. Currently we only support |
tillhub.customers.vouchers.get((err, result) => {})
Make a fuzzy search query for customers on the name, description, email fields as a string. This will return max. 100 results, with their score and some metadata. Also it will treat the input as incomplete string and make a suggestion for correction.
clientAccountID required | string Alphanumeric client ID of the user |
q required | string the search string |
type | string the product type to filter |
branch | string the location to filter |
limit | string the results limit |
offset | string the results offset |
tillhub.customers.search.get((err, result) => {})
Soft delete a single Region object.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric Region ID |
tillhub.regions.delete((err, result) => {})
{- "status": 200,
- "msg": "Deleted region 96341e35-0fe1-4b72-89bc-6f62e9114ac6",
- "request": {
- "host": "staging-api.tillhub.com",
- "id": "UUID"
}
}
Update an entire region object.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric region ID |
Simple region
name | string <= 64 characters |
string or (any or null) | |
Array of strings or (any or null) | |
Array of strings or (any or null) | |
Array of strings or (any or null) | |
Array of strings or (any or null) | |
Array of strings or (any or null) | |
string or (any or null) An identifier used locally on POS for their own reference. | |
active | boolean Default: true Soft disable or enable this Region. |
deleted | boolean Default: false Soft delete this Region. |
{- "name": "string",
- "description": "string",
- "countries": [
- "string"
], - "states": [
- "string"
], - "zipcodes": [
- "string"
], - "nielsen": [
- "string"
], - "nielsen_micro": [
- "string"
], - "client_id": "string",
- "active": true,
- "deleted": false
}
Query all regions of a user.
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
deleted | string the string representation of boolean values as |
tillhub.regions.get((err, result) => {})
Create a new region of a user.
clientAccountID required | string Alphanumeric client ID of the user |
Simple region
name required | string <= 64 characters |
string or (any or null) | |
Array of strings or (any or null) | |
Array of strings or (any or null) | |
Array of strings or (any or null) | |
Array of strings or (any or null) | |
Array of strings or (any or null) | |
string or (any or null) An identifier used locally on POS for their own reference. | |
active | boolean Default: true Soft disable or enable this Region. |
deleted | boolean Default: false Soft delete this Region. |
{- "name": "string",
- "description": "string",
- "countries": [
- "string"
], - "states": [
- "string"
], - "zipcodes": [
- "string"
], - "nielsen": [
- "string"
], - "nielsen_micro": [
- "string"
], - "client_id": "string",
- "active": true,
- "deleted": false
}
Query all correspondences of a user.
clientAccountID required | string Alphanumeric client ID of the user |
limit | integer the discrete limit, that will default to 1000 on the legacy route |
cursor | string the alphanumeric cursor field |
cursor_field | string which column to cursor on. Currently we only support |
start | string <date-time> decide the starting updated_at date in this call. This can be used for syncing our keeping up to date with latest changes |
resource | string <uuid> returns the correspondences happened with the provided resource id |
tillhub.correspondences.get((err, result) => {})
Create a new correspondence of a user.
clientAccountID required | string Alphanumeric client ID of the user |
Simple correspondence
object or (any or null) Arbitrary user defined data. | |
string or (any or null) | |
object or (any or null) | |
object or (any or null) | |
string or (any or null) | |
object or (any or null) | |
object or (any or null) | |
customer | string <uuid> |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
object or (any or null) | |
string or (any or null) |
{- "metadata": { },
- "channel": "string",
- "recipient": { },
- "sender": { },
- "payload_type": "string",
- "payload": { },
- "channel_message": { },
- "customer": "0ac6320b-fa4d-4235-8d23-413a2b863bad",
- "resource_type": "string",
- "resource": "d008879e-b5d9-47da-af4e-3c8f40b7c9ee",
- "resource_client_id": "string",
- "sent_at": "2019-08-24T14:15:22Z",
- "delivered_at": "2019-08-24T14:15:22Z",
- "status": "no_send",
- "status_details": { },
- "type": "string"
}
Update an entire correspondence object.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric correspondence ID |
Simple correspondence
object or (any or null) Arbitrary user defined data. | |
string or (any or null) | |
object or (any or null) | |
object or (any or null) | |
string or (any or null) | |
object or (any or null) | |
object or (any or null) | |
customer | string <uuid> |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
object or (any or null) | |
string or (any or null) |
{- "metadata": { },
- "channel": "string",
- "recipient": { },
- "sender": { },
- "payload_type": "string",
- "payload": { },
- "channel_message": { },
- "customer": "0ac6320b-fa4d-4235-8d23-413a2b863bad",
- "resource_type": "string",
- "resource": "d008879e-b5d9-47da-af4e-3c8f40b7c9ee",
- "resource_client_id": "string",
- "sent_at": "2019-08-24T14:15:22Z",
- "delivered_at": "2019-08-24T14:15:22Z",
- "status": "no_send",
- "status_details": { },
- "type": "string"
}
Information about a new product
webhook_id | string <uuid> The webhook UUID |
event_id | string <uuid> The event UUID |
event_entity | string The entity name the event refers to |
event_type | string The event type (e.g. create, update, delete) |
event_version | number The event payload version |
entity_instance_id | string <uuid> The entity instance UUID |
timestamp | string <date-time> The date and time event was received by webhooks service |
object |
{- "webhook_id": "ff30cfdf-5167-4f72-b4fc-c1d72db3c07e",
- "event_id": "c6fe918a-7bdc-4ccd-af36-95c03853233d",
- "event_entity": "product",
- "event_type": "create",
- "event_version": 0,
- "entity_instance_id": "10b06f38-031d-4e0c-8706-0474c8c5b61c",
- "timestamp": "2024-12-02T18:25:24.053Z",
- "payload": {
- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "request": null,
- "response": null
}
}
Information about a new product
webhook_id | string <uuid> The webhook UUID |
event_id | string <uuid> The event UUID |
event_entity | string The entity name the event refers to |
event_type | string The event type (e.g. create, update, delete) |
event_version | number The event payload version |
entity_instance_id | string <uuid> The entity instance UUID |
timestamp | string <date-time> The date and time event was received by webhooks service |
object |
{- "webhook_id": "ff30cfdf-5167-4f72-b4fc-c1d72db3c07e",
- "event_id": "c6fe918a-7bdc-4ccd-af36-95c03853233d",
- "event_entity": "product",
- "event_type": "create",
- "event_version": 0,
- "entity_instance_id": "10b06f38-031d-4e0c-8706-0474c8c5b61c",
- "timestamp": "2024-12-02T18:25:24.053Z",
- "payload": {
- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "request": null,
- "response": null
}
}
Book stock for product of a user at a specific location.
clientAccountID required | string Alphanumeric client ID of the user |
productID required | string Alphanumeric configuration ID |
qty required | number |
location required | string <uuid> |
{- "qty": 0,
- "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5"
}
{ }
Update a branch customization for product
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric ID of customization |
Customization details
product | string <uuid> The reference to the actual product |
string or (any or null) | |
Array of strings or (any or null) | |
Array of strings or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
active | boolean Default: true |
deleted | boolean Default: false |
{- "product": "e0588024-d851-42d5-ab9f-1b664ef352d4",
- "name": "string",
- "branches": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "description": "string",
- "summary": "string",
- "default_tile_color": "string",
- "active": true,
- "deleted": false
}
{ }
Get list of customizations for product
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric ID of customization |
product | string uuid of product |
active | string the string representation of boolean values as |
deleted | string the string representation of boolean values as |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z decide the starting updated_at date in this call. This can be used for syncing our keeping up to date with latest changes |
end | string Example: end=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
Create a branch customization for product
clientAccountID required | string Alphanumeric client ID of the user |
Customization details
product required | string <uuid> The reference to the actual product |
string or (any or null) | |
Array of strings or (any or null) | |
Array of strings or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
active | boolean Default: true |
deleted | boolean Default: false |
{- "product": "e0588024-d851-42d5-ab9f-1b664ef352d4",
- "name": "string",
- "branches": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "description": "string",
- "summary": "string",
- "default_tile_color": "string",
- "active": true,
- "deleted": false
}
{ }
Creates multiple product objects.
clientAccountID required | string Alphanumeric client ID of the user |
prefer_update | string Enum: "true" "false" If product with given 'custom_id' already exists update it instead of creating new one |
Array of Products
name required | string <= 512 characters Product name |
string or (any or null) Short summary of the product | |
string or (any or null) Long description of a product | |
object or (any or null) Arbitrary attributes a product has, that will be displayed in e.g. a sale | |
string or (any or null) Only valid for child products (variant and linked) | |
Array of objects or (any or null) | |
Array of objects or (any or null) | |
Array of strings or (any or null) | |
Array of any or (any or null) Used to store linked_products (existing (can be any type, including | |
object or (any or null) | |
Array of strings or (any or null) Product barcodes | |
string or (any or null) Deprecated Deprecated, use 'barcodes' instead | |
string or (any or null) | |
number or (any or null) | |
number or (any or null) The maximum resulting qty a location should have after a reorder | |
number or (any or null) The stock level that triggers a reorder | |
number or (any or null) The default qty on any reorder | |
Array of objects or (any or null) The minimum stock | |
sellable | boolean Default: true Define whether a product should be sellable (appears in use cases which assume sale) |
purchasable | boolean Default: true Define whether a product should be purchasable (appears in use cases which assume purchase) |
boolean or (any or null) Define whether to keep track of stock of this product. | |
boolean or (any or null) Define whether this product can receive a discount during a sale. | |
linkable | boolean Default: false Define whether a product should be linkable. NOTE: this will replace the type "linked" |
object or (any or null) | |
Array of any or (any or null) | |
Array of any or (any or null) | |
Array of any or (any or null) Defines a list of "Tillhub" categories, which is list of uuids. The category trees will then determine where it is placed. | |
object or (any or null) DEPRECATED | |
Array of any or (any or null) | |
Array of any or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) The product number | |
required | string or (any or null) |
Array of any or object or (any or null) | |
string or (any or null) | |
object or (any or null) | |
required | string or (any or null) |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
active | boolean Default: true |
deleted | boolean Default: false |
type required | string Enum: "product" "composed_product" "voucher" "linked" "linked_product" "variant" "variant_product" "tip_owner" "tip_employee" variant of a product (product|voucher) or a parent (variant_product|linked_product|composed_product) or a child (variant|linked) where child has "parent" property containing the ID of a parent product or a special product for tipping (tip_owner|tip_employee) |
object or (any or null) | |
object or (any or null) | |
Array of strings or (any or null) | |
Array of strings or (any or null) | |
string or (any or null) | |
object or (any or null) | |
insert_id | integer |
string or (any or null) | |
Array of strings or (any or null) | |
string or (any or null) A client definable ID for the purpose of syncing to a client or used in analytics for e.g. transactions that created a product offline and done transactions offline before they received a backend ID. | |
string or (any or null) A caller defined custom ID for the purpose of syncing from external resources, or to use in analytics. | |
string or (any or null) Color to be displayed when no image is set. | |
(Array of objects or objects or objects or objects or objects or objects) or (any or null) Default: null | |
string or (any or null) | |
Array of objects or (any or null) | |
is_service | boolean |
Array of strings or (any or null) | |
Array of strings or (any or null) | |
Array of strings or (any or null) | |
object or (any or null) Default: {"allow_zero_prices":true,"pricing":{"allow_is_free":false}} Defines various product behaviours. | |
Array of objects or (any or null) | |
Array of strings or (any or null) | |
Array of objects An array of components for composed product (the type is "composed_product") | |
boolean or (any or null) Define whether the product can be delegated to other users at all. | |
boolean or (any or null) Default: false Define whether this product and it's children (if not specified otherwise) are available online. | |
boolean or (any or null) Default: false | |
boolean or (any or null) Default: true Define whether this item requires shipping. This usually the case except for digital goods. Tax and tax splits may apply based on region. | |
Array of objects or (any or null) | |
object or (any or null) | |
string or (any or null) Warranty notice for the customer | |
string or (any or null) Refund policy for the customer | |
string or (any or null) Any disclaimer for the customer | |
object or (any or null) ACL / permissions for this product | |
Array of objects or (any or null) | |
(any or null) or object |
[- {
- "name": "string",
- "summary": "string",
- "description": "string",
- "attributes": {
- "property1": "string",
- "property2": "string"
}, - "parent": "string",
- "options": [
- {
- "Color": [
- "blue",
- "green",
- "red"
]
}, - {
- "Size": [
- "L",
- "M",
- "S"
]
}
], - "children": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Shirt S rot",
- "custom_id": "P0000001046TEST280824-1",
- "attributes": {
- "Color": "blue",
- "Size": "S"
}, - "images": {
- "original": null,
- "1x": null,
- "2x": null,
- "3x": null,
- "lia_1x": null,
- "lia_2x": null,
- "lia_3x": null,
- "square_1x": null,
- "square_2x": null,
- "square_3x": null,
}, - "barcodes": [
- "ABC-abc-1234"
]
}
], - "tags": [
- "860defb8-5598-421d-9da4-f0826e767536"
], - "linked_products": [
- null
], - "prices": {
- "branch_prices": [
- {
- "branch": "7c628a07-d557-4cd4-9105-51f9aade2c65",
- "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "scaled_prices": [
- {
- "qty": 0,
- "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "time_based_prices": [
- {
- "time_range": {
- "start": "2019-08-24T14:15:22Z",
- "end": "2019-08-24T14:15:22Z"
}, - "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "default_prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}, - "barcodes": [
- "ABC-abc-1234"
], - "barcode": "string",
- "sku": "string",
- "stock_minimum": 0,
- "stock_maximum": 0,
- "reorder_point": 0,
- "reorder_qty": 0,
- "min_stock": [
- {
- "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5",
- "qty": 0
}
], - "sellable": true,
- "purchasable": true,
- "stockable": true,
- "discountable": true,
- "linkable": false,
- "metadata": { },
- "audiences": [
- null
], - "keywords": [
- null
], - "categories": [
- null
], - "custom_ids": { },
- "related_to": [
- null
], - "similar_to": [
- null
], - "released_at": "2019-08-24T14:15:22Z",
- "purchased_at": "2019-08-24T14:15:22Z",
- "produced_at": "2019-08-24T14:15:22Z",
- "custom_id": "0000000028-000008",
- "tax": "2b46be7d-65ac-4a23-a5dd-524b80fe8e49",
- "taxes_options": [
- null
], - "season": "string",
- "seasons": { },
- "account": "f5b54a51-a98c-44cf-bb68-a676332e7d12",
- "vat_class": "string",
- "category": "string",
- "brand": "string",
- "takeaway_tax": "4936a0c4-d266-4950-9c4d-03c5207ccf96",
- "takeaway_account": "921ec83d-c08b-411a-96d8-355f354d790d",
- "active": true,
- "deleted": false,
- "type": "product",
- "manufacturer": {
- "iln": ""
}, - "supplier": {
- "sku": ""
}, - "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "condition": "string",
- "images": {
- "original": null,
- "1x": null,
- "2x": null,
- "3x": null,
- "lia_1x": null,
- "lia_2x": null,
- "lia_3x": null,
- "square_1x": null,
- "square_2x": null,
- "square_3x": null,
}, - "insert_id": 0,
- "product_group": "string",
- "delegated_to": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "client_id": "string",
- "external_reference_id": "string",
- "default_tile_color": "string",
- "codes": null,
- "stock_mode": "simple",
- "stock_configuration_location": [
- {
- "location": "string",
- "stockable": true,
- "stock_minimum": 0,
- "reorder_qty": 0,
- "reorder_point": 0,
- "location_type": "client",
- "qty": 0
}
], - "is_service": true,
- "service_questions": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "service_question_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "addon_groups": [
- "66c3a88d-1825-4eb6-a1ad-1691140cf140"
], - "configuration": {
- "allow_zero_prices": true,
- "pricing": {
- "allow_is_free": false
}
}, - "loyalty_values": [
- {
- "unit": "miles",
- "amount": 1000000
}
], - "manufacturers": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "components": [
- {
- "product": "e0588024-d851-42d5-ab9f-1b664ef352d4",
- "quantity": 0
}
], - "delegatable": true,
- "online": false,
- "serial_number_input_required": false,
- "shipping_required": true,
- "delegatable_to": [
- {
- "type": "client_account",
- "value": "a860a344-d7b2-406e-828e-8d442f23f344"
}
], - "delegated_from": {
- "owner": {
- "type": "client_account",
- "value": "a860a344-d7b2-406e-828e-8d442f23f344"
}, - "product": "e0588024-d851-42d5-ab9f-1b664ef352d4"
}, - "warranty_notice": "string",
- "refund_policy": "string",
- "disclaimer": "string",
- "policy": {
- "version": "v0",
- "statements": [
- {
- "effect": "allow",
- "resource_type": "register",
- "resource": "stringstringstri"
}
]
}, - "external_ids": [
- {
- "store_front": "string",
- "product_id": "string"
}
], - "custom_properties": { }
}
]
Replace multiple product objects. Its always override unless its specifically supported.
clientAccountID required | string Alphanumeric client ID of the user |
halt_on_error required | boolean Default: false Flag that determines if the request should stop on error or not. |
Array of Simple or Extended Products. We specifically support [prices.default_prices[0].amount.gross, prices.default_prices[0].purchase_price, discountable, configuration.pricing.request_input, configuration.pricing.zero_input_allowed, locations, branch_groups]. If an not supported object is passed, it will replace the whole object instead of merging the values.
id required | string <uuid> |
name | string <= 512 characters Product name |
string or (any or null) Short summary of the product | |
string or (any or null) Long description of a product | |
object or (any or null) Arbitrary attributes a product has, that will be displayed in e.g. a sale | |
string or (any or null) Only valid for child products (variant and linked) | |
Array of objects or (any or null) | |
Array of objects or (any or null) | |
Array of strings or (any or null) | |
Array of any or (any or null) Used to store linked_products (existing (can be any type, including | |
object or (any or null) | |
Array of strings or (any or null) Product barcodes | |
string or (any or null) Deprecated Deprecated, use 'barcodes' instead | |
string or (any or null) | |
number or (any or null) | |
number or (any or null) The maximum resulting qty a location should have after a reorder | |
number or (any or null) The stock level that triggers a reorder | |
number or (any or null) The default qty on any reorder | |
Array of objects or (any or null) The minimum stock | |
sellable | boolean Default: true Define whether a product should be sellable (appears in use cases which assume sale) |
purchasable | boolean Default: true Define whether a product should be purchasable (appears in use cases which assume purchase) |
boolean or (any or null) Define whether to keep track of stock of this product. | |
boolean or (any or null) Define whether this product can receive a discount during a sale. | |
linkable | boolean Default: false Define whether a product should be linkable. NOTE: this will replace the type "linked" |
object or (any or null) | |
Array of any or (any or null) | |
Array of any or (any or null) | |
Array of any or (any or null) Defines a list of "Tillhub" categories, which is list of uuids. The category trees will then determine where it is placed. | |
object or (any or null) DEPRECATED | |
Array of any or (any or null) | |
Array of any or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) The product number | |
string or (any or null) | |
Array of any or object or (any or null) | |
string or (any or null) | |
object or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
active | boolean Default: true |
deleted | boolean Default: false |
type | string Enum: "product" "composed_product" "voucher" "linked" "linked_product" "variant" "variant_product" "tip_owner" "tip_employee" variant of a product (product|voucher) or a parent (variant_product|linked_product|composed_product) or a child (variant|linked) where child has "parent" property containing the ID of a parent product or a special product for tipping (tip_owner|tip_employee) |
object or (any or null) | |
object or (any or null) | |
Array of strings or (any or null) | |
Array of strings or (any or null) | |
string or (any or null) | |
object or (any or null) | |
insert_id | integer |
string or (any or null) | |
Array of strings or (any or null) | |
string or (any or null) A client definable ID for the purpose of syncing to a client or used in analytics for e.g. transactions that created a product offline and done transactions offline before they received a backend ID. | |
string or (any or null) A caller defined custom ID for the purpose of syncing from external resources, or to use in analytics. | |
string or (any or null) Color to be displayed when no image is set. | |
(Array of objects or objects or objects or objects or objects or objects) or (any or null) Default: null | |
string or (any or null) | |
Array of objects or (any or null) | |
is_service | boolean |
Array of strings or (any or null) | |
Array of strings or (any or null) | |
Array of objects or (any or null) | |
object or (any or null) Default: {"allow_zero_prices":true,"pricing":{"allow_is_free":false}} Defines various product behaviours. | |
Array of objects or (any or null) | |
Array of strings or (any or null) | |
Array of objects An array of components for composed product (the type is "composed_product") | |
boolean or (any or null) Define whether the product can be delegated to other users at all. | |
boolean or (any or null) Default: false Define whether this product and it's children (if not specified otherwise) are available online. | |
boolean or (any or null) Default: false | |
boolean or (any or null) Default: true Define whether this item requires shipping. This usually the case except for digital goods. Tax and tax splits may apply based on region. | |
Array of objects or (any or null) | |
object or (any or null) | |
string or (any or null) Warranty notice for the customer | |
string or (any or null) Refund policy for the customer | |
string or (any or null) Any disclaimer for the customer | |
object or (any or null) ACL / permissions for this product | |
Array of objects or (any or null) | |
(any or null) or object | |
Array of objects or (any or null) | |
object READONLY: summary of stock accross accounts. This potentially is not real-time. After a stock change. | |
object or (any or null) |
[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "summary": "string",
- "description": "string",
- "attributes": {
- "property1": "string",
- "property2": "string"
}, - "parent": "string",
- "options": [
- {
- "Color": [
- "blue",
- "green",
- "red"
]
}, - {
- "Size": [
- "L",
- "M",
- "S"
]
}
], - "children": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Shirt S rot",
- "custom_id": "P0000001046TEST280824-1",
- "attributes": {
- "Color": "blue",
- "Size": "S"
}, - "images": {
- "original": null,
- "1x": null,
- "2x": null,
- "3x": null,
- "lia_1x": null,
- "lia_2x": null,
- "lia_3x": null,
- "square_1x": null,
- "square_2x": null,
- "square_3x": null,
}, - "barcodes": [
- "ABC-abc-1234"
]
}
], - "tags": [
- "860defb8-5598-421d-9da4-f0826e767536"
], - "linked_products": [
- null
], - "prices": {
- "branch_prices": [
- {
- "branch": "7c628a07-d557-4cd4-9105-51f9aade2c65",
- "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "scaled_prices": [
- {
- "qty": 0,
- "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "time_based_prices": [
- {
- "time_range": {
- "start": "2019-08-24T14:15:22Z",
- "end": "2019-08-24T14:15:22Z"
}, - "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "default_prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}, - "barcodes": [
- "ABC-abc-1234"
], - "barcode": "string",
- "sku": "string",
- "stock_minimum": 0,
- "stock_maximum": 0,
- "reorder_point": 0,
- "reorder_qty": 0,
- "min_stock": [
- {
- "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5",
- "qty": 0
}
], - "sellable": true,
- "purchasable": true,
- "stockable": true,
- "discountable": true,
- "linkable": false,
- "metadata": { },
- "audiences": [
- null
], - "keywords": [
- null
], - "categories": [
- null
], - "custom_ids": { },
- "related_to": [
- null
], - "similar_to": [
- null
], - "released_at": "2019-08-24T14:15:22Z",
- "purchased_at": "2019-08-24T14:15:22Z",
- "produced_at": "2019-08-24T14:15:22Z",
- "custom_id": "0000000028-000008",
- "tax": "2b46be7d-65ac-4a23-a5dd-524b80fe8e49",
- "taxes_options": [
- null
], - "season": "string",
- "seasons": { },
- "account": "f5b54a51-a98c-44cf-bb68-a676332e7d12",
- "vat_class": "string",
- "category": "string",
- "brand": "string",
- "takeaway_tax": "4936a0c4-d266-4950-9c4d-03c5207ccf96",
- "takeaway_account": "921ec83d-c08b-411a-96d8-355f354d790d",
- "active": true,
- "deleted": false,
- "type": "product",
- "manufacturer": {
- "iln": ""
}, - "supplier": {
- "sku": ""
}, - "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "condition": "string",
- "images": {
- "original": null,
- "1x": null,
- "2x": null,
- "3x": null,
- "lia_1x": null,
- "lia_2x": null,
- "lia_3x": null,
- "square_1x": null,
- "square_2x": null,
- "square_3x": null,
}, - "insert_id": 0,
- "product_group": "string",
- "delegated_to": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "client_id": "string",
- "external_reference_id": "string",
- "default_tile_color": "string",
- "codes": null,
- "stock_mode": "simple",
- "stock_configuration_location": [
- {
- "location": "string",
- "stockable": true,
- "stock_minimum": 0,
- "reorder_qty": 0,
- "reorder_point": 0,
- "location_type": "client",
- "qty": 0
}
], - "is_service": true,
- "service_questions": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "service_question_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "addon_groups": [
- {
- "name": "string"
}
], - "configuration": {
- "allow_zero_prices": true,
- "pricing": {
- "allow_is_free": false
}
}, - "loyalty_values": [
- {
- "unit": "miles",
- "amount": 1000000
}
], - "manufacturers": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "components": [
- {
- "product": "e0588024-d851-42d5-ab9f-1b664ef352d4",
- "quantity": 0
}
], - "delegatable": true,
- "online": false,
- "serial_number_input_required": false,
- "shipping_required": true,
- "delegatable_to": [
- {
- "type": "client_account",
- "value": "a860a344-d7b2-406e-828e-8d442f23f344"
}
], - "delegated_from": {
- "owner": {
- "type": "client_account",
- "value": "a860a344-d7b2-406e-828e-8d442f23f344"
}, - "product": "e0588024-d851-42d5-ab9f-1b664ef352d4"
}, - "warranty_notice": "string",
- "refund_policy": "string",
- "disclaimer": "string",
- "policy": {
- "version": "v0",
- "statements": [
- {
- "effect": "allow",
- "resource_type": "register",
- "resource": "stringstringstri"
}
]
}, - "external_ids": [
- {
- "store_front": "string",
- "product_id": "string"
}
], - "custom_properties": { },
- "price_book_entries": [
- {
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "summary": "string",
- "active": true,
- "deleted": false,
- "clients": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "external_reference_id": "string",
- "value_type": "rate",
- "amount_net": "27633.02",
- "amount_gross": "27633.02",
- "rate": 0,
- "discounted_by": 1,
- "metadata": { },
- "currency": "EUR",
- "tax": "2b46be7d-65ac-4a23-a5dd-524b80fe8e49"
}
], - "stock_info": {
- "additionalProperties": null,
- "summary": {
- "total": {
- "qty": 0
}, - "locations": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "qty": 0
}
]
}
}, - "i18n": {
- "locales": [
- {
- "code": "de_DE",
- "translations": {
- "format": "i18next",
- "payload": [
- null
]
}
}
]
}
}
]
Copy a product. Note that if the original product has children then its children will also be copied as children of the new product.
clientAccountID required | string Alphanumeric client ID of the user |
productID required | string Alphanumeric ID of the product to be copied |
Product properties to be override e.g. custom_id
name required | string <= 512 characters Product name |
string or (any or null) Short summary of the product | |
string or (any or null) Long description of a product | |
object or (any or null) Arbitrary attributes a product has, that will be displayed in e.g. a sale | |
string or (any or null) Only valid for child products (variant and linked) | |
Array of objects or (any or null) | |
Array of objects or (any or null) | |
Array of strings or (any or null) | |
Array of any or (any or null) Used to store linked_products (existing (can be any type, including | |
object or (any or null) | |
Array of strings or (any or null) Product barcodes | |
string or (any or null) Deprecated Deprecated, use 'barcodes' instead | |
string or (any or null) | |
number or (any or null) | |
number or (any or null) The maximum resulting qty a location should have after a reorder | |
number or (any or null) The stock level that triggers a reorder | |
number or (any or null) The default qty on any reorder | |
Array of objects or (any or null) The minimum stock | |
sellable | boolean Default: true Define whether a product should be sellable (appears in use cases which assume sale) |
purchasable | boolean Default: true Define whether a product should be purchasable (appears in use cases which assume purchase) |
boolean or (any or null) Define whether to keep track of stock of this product. | |
boolean or (any or null) Define whether this product can receive a discount during a sale. | |
linkable | boolean Default: false Define whether a product should be linkable. NOTE: this will replace the type "linked" |
object or (any or null) | |
Array of any or (any or null) | |
Array of any or (any or null) | |
Array of any or (any or null) Defines a list of "Tillhub" categories, which is list of uuids. The category trees will then determine where it is placed. | |
object or (any or null) DEPRECATED | |
Array of any or (any or null) | |
Array of any or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) The product number | |
required | string or (any or null) |
Array of any or object or (any or null) | |
string or (any or null) | |
object or (any or null) | |
required | string or (any or null) |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
active | boolean Default: true |
deleted | boolean Default: false |
type required | string Enum: "product" "composed_product" "voucher" "linked" "linked_product" "variant" "variant_product" "tip_owner" "tip_employee" variant of a product (product|voucher) or a parent (variant_product|linked_product|composed_product) or a child (variant|linked) where child has "parent" property containing the ID of a parent product or a special product for tipping (tip_owner|tip_employee) |
object or (any or null) | |
object or (any or null) | |
Array of strings or (any or null) | |
Array of strings or (any or null) | |
string or (any or null) | |
object or (any or null) | |
insert_id | integer |
string or (any or null) | |
Array of strings or (any or null) | |
string or (any or null) A client definable ID for the purpose of syncing to a client or used in analytics for e.g. transactions that created a product offline and done transactions offline before they received a backend ID. | |
string or (any or null) A caller defined custom ID for the purpose of syncing from external resources, or to use in analytics. | |
string or (any or null) Color to be displayed when no image is set. | |
(Array of objects or objects or objects or objects or objects or objects) or (any or null) Default: null | |
string or (any or null) | |
Array of objects or (any or null) | |
is_service | boolean |
Array of strings or (any or null) | |
Array of strings or (any or null) | |
Array of strings or (any or null) | |
object or (any or null) Default: {"allow_zero_prices":true,"pricing":{"allow_is_free":false}} Defines various product behaviours. | |
Array of objects or (any or null) | |
Array of strings or (any or null) | |
Array of objects An array of components for composed product (the type is "composed_product") | |
boolean or (any or null) Define whether the product can be delegated to other users at all. | |
boolean or (any or null) Default: false Define whether this product and it's children (if not specified otherwise) are available online. | |
boolean or (any or null) Default: false | |
boolean or (any or null) Default: true Define whether this item requires shipping. This usually the case except for digital goods. Tax and tax splits may apply based on region. | |
Array of objects or (any or null) | |
object or (any or null) | |
string or (any or null) Warranty notice for the customer | |
string or (any or null) Refund policy for the customer | |
string or (any or null) Any disclaimer for the customer | |
object or (any or null) ACL / permissions for this product | |
Array of objects or (any or null) | |
(any or null) or object |
{- "name": "string",
- "summary": "string",
- "description": "string",
- "attributes": {
- "property1": "string",
- "property2": "string"
}, - "parent": "string",
- "options": [
- {
- "Color": [
- "blue",
- "green",
- "red"
]
}, - {
- "Size": [
- "L",
- "M",
- "S"
]
}
], - "children": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Shirt S rot",
- "custom_id": "P0000001046TEST280824-1",
- "attributes": {
- "Color": "blue",
- "Size": "S"
}, - "images": {
- "original": null,
- "1x": null,
- "2x": null,
- "3x": null,
- "lia_1x": null,
- "lia_2x": null,
- "lia_3x": null,
- "square_1x": null,
- "square_2x": null,
- "square_3x": null,
}, - "barcodes": [
- "ABC-abc-1234"
]
}
], - "tags": [
- "860defb8-5598-421d-9da4-f0826e767536"
], - "linked_products": [
- null
], - "prices": {
- "branch_prices": [
- {
- "branch": "7c628a07-d557-4cd4-9105-51f9aade2c65",
- "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "scaled_prices": [
- {
- "qty": 0,
- "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "time_based_prices": [
- {
- "time_range": {
- "start": "2019-08-24T14:15:22Z",
- "end": "2019-08-24T14:15:22Z"
}, - "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "default_prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}, - "barcodes": [
- "ABC-abc-1234"
], - "barcode": "string",
- "sku": "string",
- "stock_minimum": 0,
- "stock_maximum": 0,
- "reorder_point": 0,
- "reorder_qty": 0,
- "min_stock": [
- {
- "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5",
- "qty": 0
}
], - "sellable": true,
- "purchasable": true,
- "stockable": true,
- "discountable": true,
- "linkable": false,
- "metadata": { },
- "audiences": [
- null
], - "keywords": [
- null
], - "categories": [
- null
], - "custom_ids": { },
- "related_to": [
- null
], - "similar_to": [
- null
], - "released_at": "2019-08-24T14:15:22Z",
- "purchased_at": "2019-08-24T14:15:22Z",
- "produced_at": "2019-08-24T14:15:22Z",
- "custom_id": "0000000028-000008",
- "tax": "2b46be7d-65ac-4a23-a5dd-524b80fe8e49",
- "taxes_options": [
- null
], - "season": "string",
- "seasons": { },
- "account": "f5b54a51-a98c-44cf-bb68-a676332e7d12",
- "vat_class": "string",
- "category": "string",
- "brand": "string",
- "takeaway_tax": "4936a0c4-d266-4950-9c4d-03c5207ccf96",
- "takeaway_account": "921ec83d-c08b-411a-96d8-355f354d790d",
- "active": true,
- "deleted": false,
- "type": "product",
- "manufacturer": {
- "iln": ""
}, - "supplier": {
- "sku": ""
}, - "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "condition": "string",
- "images": {
- "original": null,
- "1x": null,
- "2x": null,
- "3x": null,
- "lia_1x": null,
- "lia_2x": null,
- "lia_3x": null,
- "square_1x": null,
- "square_2x": null,
- "square_3x": null,
}, - "insert_id": 0,
- "product_group": "string",
- "delegated_to": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "client_id": "string",
- "external_reference_id": "string",
- "default_tile_color": "string",
- "codes": null,
- "stock_mode": "simple",
- "stock_configuration_location": [
- {
- "location": "string",
- "stockable": true,
- "stock_minimum": 0,
- "reorder_qty": 0,
- "reorder_point": 0,
- "location_type": "client",
- "qty": 0
}
], - "is_service": true,
- "service_questions": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "service_question_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "addon_groups": [
- "66c3a88d-1825-4eb6-a1ad-1691140cf140"
], - "configuration": {
- "allow_zero_prices": true,
- "pricing": {
- "allow_is_free": false
}
}, - "loyalty_values": [
- {
- "unit": "miles",
- "amount": 1000000
}
], - "manufacturers": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "components": [
- {
- "product": "e0588024-d851-42d5-ab9f-1b664ef352d4",
- "quantity": 0
}
], - "delegatable": true,
- "online": false,
- "serial_number_input_required": false,
- "shipping_required": true,
- "delegatable_to": [
- {
- "type": "client_account",
- "value": "a860a344-d7b2-406e-828e-8d442f23f344"
}
], - "delegated_from": {
- "owner": {
- "type": "client_account",
- "value": "a860a344-d7b2-406e-828e-8d442f23f344"
}, - "product": "e0588024-d851-42d5-ab9f-1b664ef352d4"
}, - "warranty_notice": "string",
- "refund_policy": "string",
- "disclaimer": "string",
- "policy": {
- "version": "v0",
- "statements": [
- {
- "effect": "allow",
- "resource_type": "register",
- "resource": "stringstringstri"
}
]
}, - "external_ids": [
- {
- "store_front": "string",
- "product_id": "string"
}
], - "custom_properties": { },
- "stock_info": {
- "additionalProperties": null,
- "summary": {
- "total": {
- "qty": 0
}, - "locations": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "qty": 0
}
]
}
}, - "i18n": {
- "locales": [
- {
- "code": "de_DE",
- "translations": {
- "format": "i18next",
- "payload": [
- null
]
}
}
]
}
}
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "name": "string",
- "summary": "string",
- "description": "string",
- "attributes": {
- "property1": "string",
- "property2": "string"
}, - "parent": "string",
- "options": [
- {
- "Color": [
- "blue",
- "green",
- "red"
]
}, - {
- "Size": [
- "L",
- "M",
- "S"
]
}
], - "children": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Shirt S rot",
- "custom_id": "P0000001046TEST280824-1",
- "attributes": {
- "Color": "blue",
- "Size": "S"
}, - "images": {
- "original": null,
- "1x": null,
- "2x": null,
- "3x": null,
- "lia_1x": null,
- "lia_2x": null,
- "lia_3x": null,
- "square_1x": null,
- "square_2x": null,
- "square_3x": null,
}, - "barcodes": [
- "ABC-abc-1234"
]
}
], - "tags": [
- "860defb8-5598-421d-9da4-f0826e767536"
], - "linked_products": [
- null
], - "prices": {
- "branch_prices": [
- {
- "branch": "7c628a07-d557-4cd4-9105-51f9aade2c65",
- "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "scaled_prices": [
- {
- "qty": 0,
- "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "time_based_prices": [
- {
- "time_range": {
- "start": "2019-08-24T14:15:22Z",
- "end": "2019-08-24T14:15:22Z"
}, - "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "default_prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}, - "barcodes": [
- "ABC-abc-1234"
], - "barcode": "string",
- "sku": "string",
- "stock_minimum": 0,
- "stock_maximum": 0,
- "reorder_point": 0,
- "reorder_qty": 0,
- "min_stock": [
- {
- "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5",
- "qty": 0
}
], - "sellable": true,
- "purchasable": true,
- "stockable": true,
- "discountable": true,
- "linkable": false,
- "metadata": { },
- "audiences": [
- null
], - "keywords": [
- null
], - "categories": [
- null
], - "custom_ids": { },
- "related_to": [
- null
], - "similar_to": [
- null
], - "released_at": "2019-08-24T14:15:22Z",
- "purchased_at": "2019-08-24T14:15:22Z",
- "produced_at": "2019-08-24T14:15:22Z",
- "custom_id": "0000000028-000008",
- "tax": "2b46be7d-65ac-4a23-a5dd-524b80fe8e49",
- "taxes_options": [
- null
], - "season": "string",
- "seasons": { },
- "account": "f5b54a51-a98c-44cf-bb68-a676332e7d12",
- "vat_class": "string",
- "category": "string",
- "brand": "string",
- "takeaway_tax": "4936a0c4-d266-4950-9c4d-03c5207ccf96",
- "takeaway_account": "921ec83d-c08b-411a-96d8-355f354d790d",
- "active": true,
- "deleted": false,
- "type": "product",
- "manufacturer": {
- "iln": ""
}, - "supplier": {
- "sku": ""
}, - "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "condition": "string",
- "images": {
- "original": null,
- "1x": null,
- "2x": null,
- "3x": null,
- "lia_1x": null,
- "lia_2x": null,
- "lia_3x": null,
- "square_1x": null,
- "square_2x": null,
- "square_3x": null,
}, - "insert_id": 0,
- "product_group": "string",
- "delegated_to": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "client_id": "string",
- "external_reference_id": "string",
- "default_tile_color": "string",
- "codes": null,
- "stock_mode": "simple",
- "stock_configuration_location": [
- {
- "location": "string",
- "stockable": true,
- "stock_minimum": 0,
- "reorder_qty": 0,
- "reorder_point": 0,
- "location_type": "client",
- "qty": 0
}
], - "is_service": true,
- "service_questions": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "service_question_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "addon_groups": [
- {
- "name": "string"
}
], - "configuration": {
- "allow_zero_prices": true,
- "pricing": {
- "allow_is_free": false
}
}, - "loyalty_values": [
- {
- "unit": "miles",
- "amount": 1000000
}
], - "manufacturers": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "components": [
- {
- "product": "e0588024-d851-42d5-ab9f-1b664ef352d4",
- "quantity": 0
}
], - "delegatable": true,
- "online": false,
- "serial_number_input_required": false,
- "shipping_required": true,
- "delegatable_to": [
- {
- "type": "client_account",
- "value": "a860a344-d7b2-406e-828e-8d442f23f344"
}
], - "delegated_from": {
- "owner": {
- "type": "client_account",
- "value": "a860a344-d7b2-406e-828e-8d442f23f344"
}, - "product": "e0588024-d851-42d5-ab9f-1b664ef352d4"
}, - "warranty_notice": "string",
- "refund_policy": "string",
- "disclaimer": "string",
- "policy": {
- "version": "v0",
- "statements": [
- {
- "effect": "allow",
- "resource_type": "register",
- "resource": "stringstringstri"
}
]
}, - "external_ids": [
- {
- "store_front": "string",
- "product_id": "string"
}
], - "custom_properties": { },
- "price_book_entries": [
- {
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "summary": "string",
- "active": true,
- "deleted": false,
- "clients": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "external_reference_id": "string",
- "value_type": "rate",
- "amount_net": "27633.02",
- "amount_gross": "27633.02",
- "rate": 0,
- "discounted_by": 1,
- "metadata": { },
- "currency": "EUR",
- "tax": "2b46be7d-65ac-4a23-a5dd-524b80fe8e49"
}
], - "stock_info": {
- "additionalProperties": null,
- "summary": {
- "total": {
- "qty": 0
}, - "locations": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "qty": 0
}
]
}
}, - "i18n": {
- "locales": [
- {
- "code": "de_DE",
- "translations": {
- "format": "i18next",
- "payload": [
- null
]
}
}
]
}
}
]
}
Create a new product of a user.
clientAccountID required | string Alphanumeric client ID of the user |
Simple or Extended Product
name required | string <= 512 characters Product name |
string or (any or null) Short summary of the product | |
string or (any or null) Long description of a product | |
object or (any or null) Arbitrary attributes a product has, that will be displayed in e.g. a sale | |
string or (any or null) Only valid for child products (variant and linked) | |
Array of objects or (any or null) | |
Array of objects or (any or null) | |
Array of strings or (any or null) | |
Array of any or (any or null) Used to store linked_products (existing (can be any type, including | |
object or (any or null) | |
Array of strings or (any or null) Product barcodes | |
string or (any or null) Deprecated Deprecated, use 'barcodes' instead | |
string or (any or null) | |
number or (any or null) | |
number or (any or null) The maximum resulting qty a location should have after a reorder | |
number or (any or null) The stock level that triggers a reorder | |
number or (any or null) The default qty on any reorder | |
Array of objects or (any or null) The minimum stock | |
sellable | boolean Default: true Define whether a product should be sellable (appears in use cases which assume sale) |
purchasable | boolean Default: true Define whether a product should be purchasable (appears in use cases which assume purchase) |
boolean or (any or null) Define whether to keep track of stock of this product. | |
boolean or (any or null) Define whether this product can receive a discount during a sale. | |
linkable | boolean Default: false Define whether a product should be linkable. NOTE: this will replace the type "linked" |
object or (any or null) | |
Array of any or (any or null) | |
Array of any or (any or null) | |
Array of any or (any or null) Defines a list of "Tillhub" categories, which is list of uuids. The category trees will then determine where it is placed. | |
object or (any or null) DEPRECATED | |
Array of any or (any or null) | |
Array of any or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) The product number | |
required | string or (any or null) |
Array of any or object or (any or null) | |
string or (any or null) | |
object or (any or null) | |
required | string or (any or null) |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
active | boolean Default: true |
deleted | boolean Default: false |
type required | string Enum: "product" "composed_product" "voucher" "linked" "linked_product" "variant" "variant_product" "tip_owner" "tip_employee" variant of a product (product|voucher) or a parent (variant_product|linked_product|composed_product) or a child (variant|linked) where child has "parent" property containing the ID of a parent product or a special product for tipping (tip_owner|tip_employee) |
object or (any or null) | |
object or (any or null) | |
Array of strings or (any or null) | |
Array of strings or (any or null) | |
string or (any or null) | |
object or (any or null) | |
insert_id | integer |
string or (any or null) | |
Array of strings or (any or null) | |
string or (any or null) A client definable ID for the purpose of syncing to a client or used in analytics for e.g. transactions that created a product offline and done transactions offline before they received a backend ID. | |
string or (any or null) A caller defined custom ID for the purpose of syncing from external resources, or to use in analytics. | |
string or (any or null) Color to be displayed when no image is set. | |
(Array of objects or objects or objects or objects or objects or objects) or (any or null) Default: null | |
string or (any or null) | |
Array of objects or (any or null) | |
is_service | boolean |
Array of strings or (any or null) | |
Array of strings or (any or null) | |
Array of strings or (any or null) | |
object or (any or null) Default: {"allow_zero_prices":true,"pricing":{"allow_is_free":false}} Defines various product behaviours. | |
Array of objects or (any or null) | |
Array of strings or (any or null) | |
Array of objects An array of components for composed product (the type is "composed_product") | |
boolean or (any or null) Define whether the product can be delegated to other users at all. | |
boolean or (any or null) Default: false Define whether this product and it's children (if not specified otherwise) are available online. | |
boolean or (any or null) Default: false | |
boolean or (any or null) Default: true Define whether this item requires shipping. This usually the case except for digital goods. Tax and tax splits may apply based on region. | |
Array of objects or (any or null) | |
object or (any or null) | |
string or (any or null) Warranty notice for the customer | |
string or (any or null) Refund policy for the customer | |
string or (any or null) Any disclaimer for the customer | |
object or (any or null) ACL / permissions for this product | |
Array of objects or (any or null) | |
(any or null) or object |
{- "name": "string",
- "summary": "string",
- "description": "string",
- "attributes": {
- "property1": "string",
- "property2": "string"
}, - "parent": "string",
- "options": [
- {
- "Color": [
- "blue",
- "green",
- "red"
]
}, - {
- "Size": [
- "L",
- "M",
- "S"
]
}
], - "children": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Shirt S rot",
- "custom_id": "P0000001046TEST280824-1",
- "attributes": {
- "Color": "blue",
- "Size": "S"
}, - "images": {
- "original": null,
- "1x": null,
- "2x": null,
- "3x": null,
- "lia_1x": null,
- "lia_2x": null,
- "lia_3x": null,
- "square_1x": null,
- "square_2x": null,
- "square_3x": null,
}, - "barcodes": [
- "ABC-abc-1234"
]
}
], - "tags": [
- "860defb8-5598-421d-9da4-f0826e767536"
], - "linked_products": [
- null
], - "prices": {
- "branch_prices": [
- {
- "branch": "7c628a07-d557-4cd4-9105-51f9aade2c65",
- "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "scaled_prices": [
- {
- "qty": 0,
- "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "time_based_prices": [
- {
- "time_range": {
- "start": "2019-08-24T14:15:22Z",
- "end": "2019-08-24T14:15:22Z"
}, - "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "default_prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}, - "barcodes": [
- "ABC-abc-1234"
], - "barcode": "string",
- "sku": "string",
- "stock_minimum": 0,
- "stock_maximum": 0,
- "reorder_point": 0,
- "reorder_qty": 0,
- "min_stock": [
- {
- "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5",
- "qty": 0
}
], - "sellable": true,
- "purchasable": true,
- "stockable": true,
- "discountable": true,
- "linkable": false,
- "metadata": { },
- "audiences": [
- null
], - "keywords": [
- null
], - "categories": [
- null
], - "custom_ids": { },
- "related_to": [
- null
], - "similar_to": [
- null
], - "released_at": "2019-08-24T14:15:22Z",
- "purchased_at": "2019-08-24T14:15:22Z",
- "produced_at": "2019-08-24T14:15:22Z",
- "custom_id": "0000000028-000008",
- "tax": "2b46be7d-65ac-4a23-a5dd-524b80fe8e49",
- "taxes_options": [
- null
], - "season": "string",
- "seasons": { },
- "account": "f5b54a51-a98c-44cf-bb68-a676332e7d12",
- "vat_class": "string",
- "category": "string",
- "brand": "string",
- "takeaway_tax": "4936a0c4-d266-4950-9c4d-03c5207ccf96",
- "takeaway_account": "921ec83d-c08b-411a-96d8-355f354d790d",
- "active": true,
- "deleted": false,
- "type": "product",
- "manufacturer": {
- "iln": ""
}, - "supplier": {
- "sku": ""
}, - "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "condition": "string",
- "images": {
- "original": null,
- "1x": null,
- "2x": null,
- "3x": null,
- "lia_1x": null,
- "lia_2x": null,
- "lia_3x": null,
- "square_1x": null,
- "square_2x": null,
- "square_3x": null,
}, - "insert_id": 0,
- "product_group": "string",
- "delegated_to": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "client_id": "string",
- "external_reference_id": "string",
- "default_tile_color": "string",
- "codes": null,
- "stock_mode": "simple",
- "stock_configuration_location": [
- {
- "location": "string",
- "stockable": true,
- "stock_minimum": 0,
- "reorder_qty": 0,
- "reorder_point": 0,
- "location_type": "client",
- "qty": 0
}
], - "is_service": true,
- "service_questions": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "service_question_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "addon_groups": [
- "66c3a88d-1825-4eb6-a1ad-1691140cf140"
], - "configuration": {
- "allow_zero_prices": true,
- "pricing": {
- "allow_is_free": false
}
}, - "loyalty_values": [
- {
- "unit": "miles",
- "amount": 1000000
}
], - "manufacturers": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "components": [
- {
- "product": "e0588024-d851-42d5-ab9f-1b664ef352d4",
- "quantity": 0
}
], - "delegatable": true,
- "online": false,
- "serial_number_input_required": false,
- "shipping_required": true,
- "delegatable_to": [
- {
- "type": "client_account",
- "value": "a860a344-d7b2-406e-828e-8d442f23f344"
}
], - "delegated_from": {
- "owner": {
- "type": "client_account",
- "value": "a860a344-d7b2-406e-828e-8d442f23f344"
}, - "product": "e0588024-d851-42d5-ab9f-1b664ef352d4"
}, - "warranty_notice": "string",
- "refund_policy": "string",
- "disclaimer": "string",
- "policy": {
- "version": "v0",
- "statements": [
- {
- "effect": "allow",
- "resource_type": "register",
- "resource": "stringstringstri"
}
]
}, - "external_ids": [
- {
- "store_front": "string",
- "product_id": "string"
}
], - "custom_properties": { },
- "stock_info": {
- "additionalProperties": null,
- "summary": {
- "total": {
- "qty": 0
}, - "locations": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "qty": 0
}
]
}
}, - "i18n": {
- "locales": [
- {
- "code": "de_DE",
- "translations": {
- "format": "i18next",
- "payload": [
- null
]
}
}
]
}
}
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "name": "string",
- "summary": "string",
- "description": "string",
- "attributes": {
- "property1": "string",
- "property2": "string"
}, - "parent": "string",
- "options": [
- {
- "Color": [
- "blue",
- "green",
- "red"
]
}, - {
- "Size": [
- "L",
- "M",
- "S"
]
}
], - "children": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Shirt S rot",
- "custom_id": "P0000001046TEST280824-1",
- "attributes": {
- "Color": "blue",
- "Size": "S"
}, - "images": {
- "original": null,
- "1x": null,
- "2x": null,
- "3x": null,
- "lia_1x": null,
- "lia_2x": null,
- "lia_3x": null,
- "square_1x": null,
- "square_2x": null,
- "square_3x": null,
}, - "barcodes": [
- "ABC-abc-1234"
]
}
], - "tags": [
- "860defb8-5598-421d-9da4-f0826e767536"
], - "linked_products": [
- null
], - "prices": {
- "branch_prices": [
- {
- "branch": "7c628a07-d557-4cd4-9105-51f9aade2c65",
- "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "scaled_prices": [
- {
- "qty": 0,
- "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "time_based_prices": [
- {
- "time_range": {
- "start": "2019-08-24T14:15:22Z",
- "end": "2019-08-24T14:15:22Z"
}, - "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "default_prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}, - "barcodes": [
- "ABC-abc-1234"
], - "barcode": "string",
- "sku": "string",
- "stock_minimum": 0,
- "stock_maximum": 0,
- "reorder_point": 0,
- "reorder_qty": 0,
- "min_stock": [
- {
- "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5",
- "qty": 0
}
], - "sellable": true,
- "purchasable": true,
- "stockable": true,
- "discountable": true,
- "linkable": false,
- "metadata": { },
- "audiences": [
- null
], - "keywords": [
- null
], - "categories": [
- null
], - "custom_ids": { },
- "related_to": [
- null
], - "similar_to": [
- null
], - "released_at": "2019-08-24T14:15:22Z",
- "purchased_at": "2019-08-24T14:15:22Z",
- "produced_at": "2019-08-24T14:15:22Z",
- "custom_id": "0000000028-000008",
- "tax": "2b46be7d-65ac-4a23-a5dd-524b80fe8e49",
- "taxes_options": [
- null
], - "season": "string",
- "seasons": { },
- "account": "f5b54a51-a98c-44cf-bb68-a676332e7d12",
- "vat_class": "string",
- "category": "string",
- "brand": "string",
- "takeaway_tax": "4936a0c4-d266-4950-9c4d-03c5207ccf96",
- "takeaway_account": "921ec83d-c08b-411a-96d8-355f354d790d",
- "active": true,
- "deleted": false,
- "type": "product",
- "manufacturer": {
- "iln": ""
}, - "supplier": {
- "sku": ""
}, - "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "condition": "string",
- "images": {
- "original": null,
- "1x": null,
- "2x": null,
- "3x": null,
- "lia_1x": null,
- "lia_2x": null,
- "lia_3x": null,
- "square_1x": null,
- "square_2x": null,
- "square_3x": null,
}, - "insert_id": 0,
- "product_group": "string",
- "delegated_to": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "client_id": "string",
- "external_reference_id": "string",
- "default_tile_color": "string",
- "codes": null,
- "stock_mode": "simple",
- "stock_configuration_location": [
- {
- "location": "string",
- "stockable": true,
- "stock_minimum": 0,
- "reorder_qty": 0,
- "reorder_point": 0,
- "location_type": "client",
- "qty": 0
}
], - "is_service": true,
- "service_questions": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "service_question_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "addon_groups": [
- {
- "name": "string"
}
], - "configuration": {
- "allow_zero_prices": true,
- "pricing": {
- "allow_is_free": false
}
}, - "loyalty_values": [
- {
- "unit": "miles",
- "amount": 1000000
}
], - "manufacturers": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "components": [
- {
- "product": "e0588024-d851-42d5-ab9f-1b664ef352d4",
- "quantity": 0
}
], - "delegatable": true,
- "online": false,
- "serial_number_input_required": false,
- "shipping_required": true,
- "delegatable_to": [
- {
- "type": "client_account",
- "value": "a860a344-d7b2-406e-828e-8d442f23f344"
}
], - "delegated_from": {
- "owner": {
- "type": "client_account",
- "value": "a860a344-d7b2-406e-828e-8d442f23f344"
}, - "product": "e0588024-d851-42d5-ab9f-1b664ef352d4"
}, - "warranty_notice": "string",
- "refund_policy": "string",
- "disclaimer": "string",
- "policy": {
- "version": "v0",
- "statements": [
- {
- "effect": "allow",
- "resource_type": "register",
- "resource": "stringstringstri"
}
]
}, - "external_ids": [
- {
- "store_front": "string",
- "product_id": "string"
}
], - "custom_properties": { },
- "price_book_entries": [
- {
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "summary": "string",
- "active": true,
- "deleted": false,
- "clients": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "external_reference_id": "string",
- "value_type": "rate",
- "amount_net": "27633.02",
- "amount_gross": "27633.02",
- "rate": 0,
- "discounted_by": 1,
- "metadata": { },
- "currency": "EUR",
- "tax": "2b46be7d-65ac-4a23-a5dd-524b80fe8e49"
}
], - "stock_info": {
- "additionalProperties": null,
- "summary": {
- "total": {
- "qty": 0
}, - "locations": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "qty": 0
}
]
}
}, - "i18n": {
- "locales": [
- {
- "code": "de_DE",
- "translations": {
- "format": "i18next",
- "payload": [
- null
]
}
}
]
}
}
]
}
Query all products
NOTE: queries on barcode
and custom_id
will be optimised for O(1) lookups, but will opt out of all other API
features, such as embedding, exporting.
clientAccountID required | string Alphanumeric client ID of the user |
limit | integer the discrete limit, that will default to 1000 on the legacy route |
cursor | string the alphanumeric cursor field |
cursor_field | string which column to cursor on. Currently we only support |
start | string <date-time> decide the starting updated_at date in this call. This can be used for syncing our keeping up to date with latest changes |
deleted | boolean query products whether deleted ('true') or not deleted ('false') |
sellable | boolean query products whether suitable ('true') or not suitable ('false') for sale |
purchasable | boolean query products whether suitable ('true') or not suitable ('false') for purchase |
active | boolean query products whether active ('true') or inactive ('false') |
barcode | string query products by barcode. NOTE: this is a special API call. It will opt out of all other endpoint features, but will deliver an optimised search experience |
type | string Enum: "product" "voucher" "linked" "variant" "linked_product" "variant_product" "composed_product" query for one or more types |
tag | string query products by tag |
client | string query products by one or more clients |
custom_id | string query products by custom_id. NOTE: this is a special API call. It will opt out of all other endpoint features, but will deliver an optimised search experience |
strip_branch_prices | boolean enables filtering prices.branch_prices by branch |
branch | string filters prices.branch_prices by given branch, only available when sending a strip_branch_prices=true |
product_group | string query a product by product group |
linked_product_id | string query a product by linked product |
tax | string query a product by VAT object ID |
account | string query a product by revenue account ID |
q required | string the search string (by comma or space separated words with minimal length of 2 chars) |
location | string | array query products that belong to a location or array of location. Ignored if location_strict is not true. |
business_partner_id | string | array query products that belong to a business partner. |
location_strict | boolean activates location query parameter as part of the query. Location will not be taken into account if this is not equal true. |
branch_group | string | array query products that belong to a branch group or array of branch group and all branches within branch group. |
lookups | string one or more lookup locations for third party systems |
extended | boolean embed extended fields |
pretty | string pretty format JSON responses or not. Default is not pretty |
field | Array of strings filter any given property of this resource. Use "a.b" to select a field that is nested within field a. |
include | Array of strings specify which fields to include in the response. Use "a.b" to select a field that is nested within field a. |
exclude | Array of strings specify which fields to exclude from the response |
exclude_system_products | boolean exclude system-created products |
original_product | boolean Default: false If true, don't serve customization |
format | string to get data in any other format then JSON straight away, you can set |
size | number sets the page size when exporting to a csv |
stockable | string Enum: true false Filter products by stockable flag |
types | Array of any Alias for type filter for compatibilty reasons |
embed | string The information of other resources to be embedded. It can be passed as a string or array of strings. The options are currently limited to "_all_stock". |
attributes | string filter products by list of attributes. Can be passed as a string with attribute name. Used only in pair with attributes_value |
attributes_value | string filter products by list of attributes. Can be passed as a string with attribute value Used only in pair with attributes |
purchase_order_id | string uuid id of purchase order to filter by |
purchase_order_id_parents required | boolean add parent products to filter by purchase order id |
attribute | string alias for attributes for compatibilty reasons |
opt_out | string flag to change method behavior. Only value "performance" can be accepted, if set it disables most of filters and embeddings |
is_reservations_service | string Enum: true false Filter products by is_reservations_service flag |
tillhub.products.get((err, result) => {})
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "name": "string",
- "summary": "string",
- "description": "string",
- "attributes": {
- "property1": "string",
- "property2": "string"
}, - "parent": "string",
- "options": [
- {
- "Color": [
- "blue",
- "green",
- "red"
]
}, - {
- "Size": [
- "L",
- "M",
- "S"
]
}
], - "children": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Shirt S rot",
- "custom_id": "P0000001046TEST280824-1",
- "attributes": {
- "Color": "blue",
- "Size": "S"
}, - "images": {
- "original": null,
- "1x": null,
- "2x": null,
- "3x": null,
- "lia_1x": null,
- "lia_2x": null,
- "lia_3x": null,
- "square_1x": null,
- "square_2x": null,
- "square_3x": null,
}, - "barcodes": [
- "ABC-abc-1234"
]
}
], - "tags": [
- "860defb8-5598-421d-9da4-f0826e767536"
], - "linked_products": [
- null
], - "prices": {
- "branch_prices": [
- {
- "branch": "7c628a07-d557-4cd4-9105-51f9aade2c65",
- "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "scaled_prices": [
- {
- "qty": 0,
- "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "time_based_prices": [
- {
- "time_range": {
- "start": "2019-08-24T14:15:22Z",
- "end": "2019-08-24T14:15:22Z"
}, - "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "default_prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}, - "barcodes": [
- "ABC-abc-1234"
], - "barcode": "string",
- "sku": "string",
- "stock_minimum": 0,
- "stock_maximum": 0,
- "reorder_point": 0,
- "reorder_qty": 0,
- "min_stock": [
- {
- "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5",
- "qty": 0
}
], - "sellable": true,
- "purchasable": true,
- "stockable": true,
- "discountable": true,
- "linkable": false,
- "metadata": { },
- "audiences": [
- null
], - "keywords": [
- null
], - "categories": [
- null
], - "custom_ids": { },
- "related_to": [
- null
], - "similar_to": [
- null
], - "released_at": "2019-08-24T14:15:22Z",
- "purchased_at": "2019-08-24T14:15:22Z",
- "produced_at": "2019-08-24T14:15:22Z",
- "custom_id": "0000000028-000008",
- "tax": "2b46be7d-65ac-4a23-a5dd-524b80fe8e49",
- "taxes_options": [
- null
], - "season": "string",
- "seasons": { },
- "account": "f5b54a51-a98c-44cf-bb68-a676332e7d12",
- "vat_class": "string",
- "category": "string",
- "brand": "string",
- "takeaway_tax": "4936a0c4-d266-4950-9c4d-03c5207ccf96",
- "takeaway_account": "921ec83d-c08b-411a-96d8-355f354d790d",
- "active": true,
- "deleted": false,
- "type": "product",
- "manufacturer": {
- "iln": ""
}, - "supplier": {
- "sku": ""
}, - "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "condition": "string",
- "images": {
- "original": null,
- "1x": null,
- "2x": null,
- "3x": null,
- "lia_1x": null,
- "lia_2x": null,
- "lia_3x": null,
- "square_1x": null,
- "square_2x": null,
- "square_3x": null,
}, - "insert_id": 0,
- "product_group": "string",
- "delegated_to": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "client_id": "string",
- "external_reference_id": "string",
- "default_tile_color": "string",
- "codes": null,
- "stock_mode": "simple",
- "stock_configuration_location": [
- {
- "location": "string",
- "stockable": true,
- "stock_minimum": 0,
- "reorder_qty": 0,
- "reorder_point": 0,
- "location_type": "client",
- "qty": 0
}
], - "is_service": true,
- "service_questions": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "service_question_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "addon_groups": [
- {
- "name": "string"
}
], - "configuration": {
- "allow_zero_prices": true,
- "pricing": {
- "allow_is_free": false
}
}, - "loyalty_values": [
- {
- "unit": "miles",
- "amount": 1000000
}
], - "manufacturers": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "components": [
- {
- "product": "e0588024-d851-42d5-ab9f-1b664ef352d4",
- "quantity": 0
}
], - "delegatable": true,
- "online": false,
- "serial_number_input_required": false,
- "shipping_required": true,
- "delegatable_to": [
- {
- "type": "client_account",
- "value": "a860a344-d7b2-406e-828e-8d442f23f344"
}
], - "delegated_from": {
- "owner": {
- "type": "client_account",
- "value": "a860a344-d7b2-406e-828e-8d442f23f344"
}, - "product": "e0588024-d851-42d5-ab9f-1b664ef352d4"
}, - "warranty_notice": "string",
- "refund_policy": "string",
- "disclaimer": "string",
- "policy": {
- "version": "v0",
- "statements": [
- {
- "effect": "allow",
- "resource_type": "register",
- "resource": "stringstringstri"
}
]
}, - "external_ids": [
- {
- "store_front": "string",
- "product_id": "string"
}
], - "custom_properties": { },
- "price_book_entries": [
- {
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "summary": "string",
- "active": true,
- "deleted": false,
- "clients": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "external_reference_id": "string",
- "value_type": "rate",
- "amount_net": "27633.02",
- "amount_gross": "27633.02",
- "rate": 0,
- "discounted_by": 1,
- "metadata": { },
- "currency": "EUR",
- "tax": "2b46be7d-65ac-4a23-a5dd-524b80fe8e49"
}
], - "stock_info": {
- "additionalProperties": null,
- "summary": {
- "total": {
- "qty": 0
}, - "locations": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "qty": 0
}
]
}
}, - "i18n": {
- "locales": [
- {
- "code": "de_DE",
- "translations": {
- "format": "i18next",
- "payload": [
- null
]
}
}
]
}
}
]
}
Create a new product customization of a user.
clientAccountID required | string Alphanumeric client ID of the user |
Simple or Extended Product
product required | string <uuid> The reference to the actual product |
customer | string <uuid> The reference to customer this product might be customized for |
name | string <= 512 characters Product name |
string or (any or null) Short summary of the product | |
string or (any or null) Long description of a product | |
object or (any or null) Arbitrary attributes a product has, that will be displayed in e.g. a sale | |
object or (any or null) | |
object or (any or null) | |
string or (any or null) | |
active | boolean Default: true |
deleted | boolean Default: false |
object or (any or null) | |
Array of strings or (any or null) | |
string or (any or null) | |
object or (any or null) | |
string or (any or null) A client definable ID for the purpose of syncing to a client or used in analytics for e.g. transactions that created a product offline and done transactions offline before they received a backend ID. | |
string or (any or null) A caller defined custom ID for the purpose of syncing from external resources, or to use in analytics. | |
Array of objects or (any or null) | |
Array of objects or (any or null) |
{- "product": "e0588024-d851-42d5-ab9f-1b664ef352d4",
- "customer": "0ac6320b-fa4d-4235-8d23-413a2b863bad",
- "name": "string",
- "summary": "string",
- "description": "string",
- "attributes": { },
- "prices": {
- "branch_prices": [
- {
- "branch": "7c628a07-d557-4cd4-9105-51f9aade2c65",
- "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "scaled_prices": [
- {
- "qty": 0,
- "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "time_based_prices": [
- {
- "time_range": {
- "start": "2019-08-24T14:15:22Z",
- "end": "2019-08-24T14:15:22Z"
}, - "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "default_prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}, - "metadata": { },
- "brand": "string",
- "active": true,
- "deleted": false,
- "supplier": {
- "sku": ""
}, - "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "condition": "string",
- "images": {
- "original": null,
- "1x": null,
- "2x": null,
- "3x": null,
- "lia_1x": null,
- "lia_2x": null,
- "lia_3x": null,
- "square_1x": null,
- "square_2x": null,
- "square_3x": null,
}, - "client_id": "string",
- "external_reference_id": "string",
- "service_questions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "answer": { }
}
], - "loyalty_values": [
- {
- "unit": "miles",
- "amount": 1000000
}
]
}
{ }
Query all product customizations
clientAccountID required | string Alphanumeric client ID of the user |
limit | integer the discrete limit, that will default to 1000 on the legacy route |
cursor | string the alphanumeric cursor field |
cursor_field | string which column to cursor on. Currently we only support |
deleted | string the string representation of boolean values as |
active | string the string representation of boolean values as |
barcode | string query by barcode |
customer | string query by customer |
product | string query by product |
branch | string send the branch to get branch specific data like, stock information. Stock information is only available whn sending a barcode query paramter |
pretty | string pretty format JSON responses or not. Default is not pretty |
Get a single product customization object.
clientAccountID required | string Alphanumeric client ID of the user |
productCustomizationID required | string Alphanumeric configuration ID |
lookups | string one or more lookup locations for third party systems |
branch | string send the branch to get branch specific data like, stock information |
extended | boolean embed extended fields |
tillhub.products.get((err, result) => {})
Replace an entire product customization object.
clientAccountID required | string Alphanumeric client ID of the user |
productCustomiztionID required | string Alphanumeric product ID |
Simple Product Customization
product | string <uuid> The reference to the actual product |
customer | string <uuid> The reference to customer this product might be customized for |
name | string <= 512 characters Product name |
string or (any or null) Short summary of the product | |
string or (any or null) Long description of a product | |
object or (any or null) Arbitrary attributes a product has, that will be displayed in e.g. a sale | |
object or (any or null) | |
object or (any or null) | |
string or (any or null) | |
active | boolean Default: true |
deleted | boolean Default: false |
object or (any or null) | |
Array of strings or (any or null) | |
string or (any or null) | |
object or (any or null) | |
string or (any or null) A client definable ID for the purpose of syncing to a client or used in analytics for e.g. transactions that created a product offline and done transactions offline before they received a backend ID. | |
string or (any or null) A caller defined custom ID for the purpose of syncing from external resources, or to use in analytics. | |
Array of objects or (any or null) | |
Array of objects or (any or null) |
{- "product": "e0588024-d851-42d5-ab9f-1b664ef352d4",
- "customer": "0ac6320b-fa4d-4235-8d23-413a2b863bad",
- "name": "string",
- "summary": "string",
- "description": "string",
- "attributes": { },
- "prices": {
- "branch_prices": [
- {
- "branch": "7c628a07-d557-4cd4-9105-51f9aade2c65",
- "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "scaled_prices": [
- {
- "qty": 0,
- "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "time_based_prices": [
- {
- "time_range": {
- "start": "2019-08-24T14:15:22Z",
- "end": "2019-08-24T14:15:22Z"
}, - "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "default_prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}, - "metadata": { },
- "brand": "string",
- "active": true,
- "deleted": false,
- "supplier": {
- "sku": ""
}, - "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "condition": "string",
- "images": {
- "original": null,
- "1x": null,
- "2x": null,
- "3x": null,
- "lia_1x": null,
- "lia_2x": null,
- "lia_3x": null,
- "square_1x": null,
- "square_2x": null,
- "square_3x": null,
}, - "client_id": "string",
- "external_reference_id": "string",
- "service_questions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "answer": { }
}
], - "loyalty_values": [
- {
- "unit": "miles",
- "amount": 1000000
}
]
}
Delete a single product object.
clientAccountID required | string Alphanumeric client ID of the user |
productID required | string Alphanumeric product ID |
delete_dependencies | string Value: "true" Soft delete all products that have this product as parent |
tillhub.products.delete((err, result) => {})
Get a single product object.
clientAccountID required | string Alphanumeric client ID of the user |
productID required | string Alphanumeric configuration ID |
lookups | string one or more lookup locations for third party systems |
branch | string send the branch to get branch specific data like, stock information |
extended | boolean embed extended fields |
original_product | boolean Default: false If true, don't serve customization |
tillhub.products.get((err, result) => {})
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "name": "string",
- "summary": "string",
- "description": "string",
- "attributes": {
- "property1": "string",
- "property2": "string"
}, - "parent": "string",
- "options": [
- {
- "Color": [
- "blue",
- "green",
- "red"
]
}, - {
- "Size": [
- "L",
- "M",
- "S"
]
}
], - "children": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Shirt S rot",
- "custom_id": "P0000001046TEST280824-1",
- "attributes": {
- "Color": "blue",
- "Size": "S"
}, - "images": {
- "original": null,
- "1x": null,
- "2x": null,
- "3x": null,
- "lia_1x": null,
- "lia_2x": null,
- "lia_3x": null,
- "square_1x": null,
- "square_2x": null,
- "square_3x": null,
}, - "barcodes": [
- "ABC-abc-1234"
]
}
], - "tags": [
- "860defb8-5598-421d-9da4-f0826e767536"
], - "linked_products": [
- null
], - "prices": {
- "branch_prices": [
- {
- "branch": "7c628a07-d557-4cd4-9105-51f9aade2c65",
- "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "scaled_prices": [
- {
- "qty": 0,
- "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "time_based_prices": [
- {
- "time_range": {
- "start": "2019-08-24T14:15:22Z",
- "end": "2019-08-24T14:15:22Z"
}, - "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "default_prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}, - "barcodes": [
- "ABC-abc-1234"
], - "barcode": "string",
- "sku": "string",
- "stock_minimum": 0,
- "stock_maximum": 0,
- "reorder_point": 0,
- "reorder_qty": 0,
- "min_stock": [
- {
- "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5",
- "qty": 0
}
], - "sellable": true,
- "purchasable": true,
- "stockable": true,
- "discountable": true,
- "linkable": false,
- "metadata": { },
- "audiences": [
- null
], - "keywords": [
- null
], - "categories": [
- null
], - "custom_ids": { },
- "related_to": [
- null
], - "similar_to": [
- null
], - "released_at": "2019-08-24T14:15:22Z",
- "purchased_at": "2019-08-24T14:15:22Z",
- "produced_at": "2019-08-24T14:15:22Z",
- "custom_id": "0000000028-000008",
- "tax": "2b46be7d-65ac-4a23-a5dd-524b80fe8e49",
- "taxes_options": [
- null
], - "season": "string",
- "seasons": { },
- "account": "f5b54a51-a98c-44cf-bb68-a676332e7d12",
- "vat_class": "string",
- "category": "string",
- "brand": "string",
- "takeaway_tax": "4936a0c4-d266-4950-9c4d-03c5207ccf96",
- "takeaway_account": "921ec83d-c08b-411a-96d8-355f354d790d",
- "active": true,
- "deleted": false,
- "type": "product",
- "manufacturer": {
- "iln": ""
}, - "supplier": {
- "sku": ""
}, - "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "condition": "string",
- "images": {
- "original": null,
- "1x": null,
- "2x": null,
- "3x": null,
- "lia_1x": null,
- "lia_2x": null,
- "lia_3x": null,
- "square_1x": null,
- "square_2x": null,
- "square_3x": null,
}, - "insert_id": 0,
- "product_group": "string",
- "delegated_to": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "client_id": "string",
- "external_reference_id": "string",
- "default_tile_color": "string",
- "codes": null,
- "stock_mode": "simple",
- "stock_configuration_location": [
- {
- "location": "string",
- "stockable": true,
- "stock_minimum": 0,
- "reorder_qty": 0,
- "reorder_point": 0,
- "location_type": "client",
- "qty": 0
}
], - "is_service": true,
- "service_questions": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "service_question_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "addon_groups": [
- {
- "name": "string"
}
], - "configuration": {
- "allow_zero_prices": true,
- "pricing": {
- "allow_is_free": false
}
}, - "loyalty_values": [
- {
- "unit": "miles",
- "amount": 1000000
}
], - "manufacturers": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "components": [
- {
- "product": "e0588024-d851-42d5-ab9f-1b664ef352d4",
- "quantity": 0
}
], - "delegatable": true,
- "online": false,
- "serial_number_input_required": false,
- "shipping_required": true,
- "delegatable_to": [
- {
- "type": "client_account",
- "value": "a860a344-d7b2-406e-828e-8d442f23f344"
}
], - "delegated_from": {
- "owner": {
- "type": "client_account",
- "value": "a860a344-d7b2-406e-828e-8d442f23f344"
}, - "product": "e0588024-d851-42d5-ab9f-1b664ef352d4"
}, - "warranty_notice": "string",
- "refund_policy": "string",
- "disclaimer": "string",
- "policy": {
- "version": "v0",
- "statements": [
- {
- "effect": "allow",
- "resource_type": "register",
- "resource": "stringstringstri"
}
]
}, - "external_ids": [
- {
- "store_front": "string",
- "product_id": "string"
}
], - "custom_properties": { },
- "price_book_entries": [
- {
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "summary": "string",
- "active": true,
- "deleted": false,
- "clients": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "external_reference_id": "string",
- "value_type": "rate",
- "amount_net": "27633.02",
- "amount_gross": "27633.02",
- "rate": 0,
- "discounted_by": 1,
- "metadata": { },
- "currency": "EUR",
- "tax": "2b46be7d-65ac-4a23-a5dd-524b80fe8e49"
}
], - "stock_info": {
- "additionalProperties": null,
- "summary": {
- "total": {
- "qty": 0
}, - "locations": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "qty": 0
}
]
}
}, - "i18n": {
- "locales": [
- {
- "code": "de_DE",
- "translations": {
- "format": "i18next",
- "payload": [
- null
]
}
}
]
}
}
]
}
Replace an entire product object.
clientAccountID required | string Alphanumeric client ID of the user |
productID required | string Alphanumeric product ID |
Simple or Extended Product
name | string <= 512 characters Product name |
string or (any or null) Short summary of the product | |
string or (any or null) Long description of a product | |
object or (any or null) Arbitrary attributes a product has, that will be displayed in e.g. a sale | |
string or (any or null) Only valid for child products (variant and linked) | |
Array of objects or (any or null) | |
Array of objects or (any or null) | |
Array of strings or (any or null) | |
Array of any or (any or null) Used to store linked_products (existing (can be any type, including | |
object or (any or null) | |
Array of strings or (any or null) Product barcodes | |
string or (any or null) Deprecated Deprecated, use 'barcodes' instead | |
string or (any or null) | |
number or (any or null) | |
number or (any or null) The maximum resulting qty a location should have after a reorder | |
number or (any or null) The stock level that triggers a reorder | |
number or (any or null) The default qty on any reorder | |
Array of objects or (any or null) The minimum stock | |
sellable | boolean Default: true Define whether a product should be sellable (appears in use cases which assume sale) |
purchasable | boolean Default: true Define whether a product should be purchasable (appears in use cases which assume purchase) |
boolean or (any or null) Define whether to keep track of stock of this product. | |
boolean or (any or null) Define whether this product can receive a discount during a sale. | |
linkable | boolean Default: false Define whether a product should be linkable. NOTE: this will replace the type "linked" |
object or (any or null) | |
Array of any or (any or null) | |
Array of any or (any or null) | |
Array of any or (any or null) Defines a list of "Tillhub" categories, which is list of uuids. The category trees will then determine where it is placed. | |
object or (any or null) DEPRECATED | |
Array of any or (any or null) | |
Array of any or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) The product number | |
string or (any or null) | |
Array of any or object or (any or null) | |
string or (any or null) | |
object or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
active | boolean Default: true |
deleted | boolean Default: false |
type | string Enum: "product" "composed_product" "voucher" "linked" "linked_product" "variant" "variant_product" "tip_owner" "tip_employee" variant of a product (product|voucher) or a parent (variant_product|linked_product|composed_product) or a child (variant|linked) where child has "parent" property containing the ID of a parent product or a special product for tipping (tip_owner|tip_employee) |
object or (any or null) | |
object or (any or null) | |
Array of strings or (any or null) | |
Array of strings or (any or null) | |
string or (any or null) | |
object or (any or null) | |
insert_id | integer |
string or (any or null) | |
Array of strings or (any or null) | |
string or (any or null) A client definable ID for the purpose of syncing to a client or used in analytics for e.g. transactions that created a product offline and done transactions offline before they received a backend ID. | |
string or (any or null) A caller defined custom ID for the purpose of syncing from external resources, or to use in analytics. | |
string or (any or null) Color to be displayed when no image is set. | |
(Array of objects or objects or objects or objects or objects or objects) or (any or null) Default: null | |
string or (any or null) | |
Array of objects or (any or null) | |
is_service | boolean |
Array of strings or (any or null) | |
Array of strings or (any or null) | |
Array of strings or (any or null) | |
object or (any or null) Default: {"allow_zero_prices":true,"pricing":{"allow_is_free":false}} Defines various product behaviours. | |
Array of objects or (any or null) | |
Array of strings or (any or null) | |
Array of objects An array of components for composed product (the type is "composed_product") | |
boolean or (any or null) Define whether the product can be delegated to other users at all. | |
boolean or (any or null) Default: false Define whether this product and it's children (if not specified otherwise) are available online. | |
boolean or (any or null) Default: false | |
boolean or (any or null) Default: true Define whether this item requires shipping. This usually the case except for digital goods. Tax and tax splits may apply based on region. | |
Array of objects or (any or null) | |
object or (any or null) | |
string or (any or null) Warranty notice for the customer | |
string or (any or null) Refund policy for the customer | |
string or (any or null) Any disclaimer for the customer | |
object or (any or null) ACL / permissions for this product | |
Array of objects or (any or null) | |
(any or null) or object |
{- "name": "string",
- "summary": "string",
- "description": "string",
- "attributes": {
- "property1": "string",
- "property2": "string"
}, - "parent": "string",
- "options": [
- {
- "Color": [
- "blue",
- "green",
- "red"
]
}, - {
- "Size": [
- "L",
- "M",
- "S"
]
}
], - "children": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Shirt S rot",
- "custom_id": "P0000001046TEST280824-1",
- "attributes": {
- "Color": "blue",
- "Size": "S"
}, - "images": {
- "original": null,
- "1x": null,
- "2x": null,
- "3x": null,
- "lia_1x": null,
- "lia_2x": null,
- "lia_3x": null,
- "square_1x": null,
- "square_2x": null,
- "square_3x": null,
}, - "barcodes": [
- "ABC-abc-1234"
]
}
], - "tags": [
- "860defb8-5598-421d-9da4-f0826e767536"
], - "linked_products": [
- null
], - "prices": {
- "branch_prices": [
- {
- "branch": "7c628a07-d557-4cd4-9105-51f9aade2c65",
- "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "scaled_prices": [
- {
- "qty": 0,
- "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "time_based_prices": [
- {
- "time_range": {
- "start": "2019-08-24T14:15:22Z",
- "end": "2019-08-24T14:15:22Z"
}, - "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "default_prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}, - "barcodes": [
- "ABC-abc-1234"
], - "barcode": "string",
- "sku": "string",
- "stock_minimum": 0,
- "stock_maximum": 0,
- "reorder_point": 0,
- "reorder_qty": 0,
- "min_stock": [
- {
- "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5",
- "qty": 0
}
], - "sellable": true,
- "purchasable": true,
- "stockable": true,
- "discountable": true,
- "linkable": false,
- "metadata": { },
- "audiences": [
- null
], - "keywords": [
- null
], - "categories": [
- null
], - "custom_ids": { },
- "related_to": [
- null
], - "similar_to": [
- null
], - "released_at": "2019-08-24T14:15:22Z",
- "purchased_at": "2019-08-24T14:15:22Z",
- "produced_at": "2019-08-24T14:15:22Z",
- "custom_id": "0000000028-000008",
- "tax": "2b46be7d-65ac-4a23-a5dd-524b80fe8e49",
- "taxes_options": [
- null
], - "season": "string",
- "seasons": { },
- "account": "f5b54a51-a98c-44cf-bb68-a676332e7d12",
- "vat_class": "string",
- "category": "string",
- "brand": "string",
- "takeaway_tax": "4936a0c4-d266-4950-9c4d-03c5207ccf96",
- "takeaway_account": "921ec83d-c08b-411a-96d8-355f354d790d",
- "active": true,
- "deleted": false,
- "type": "product",
- "manufacturer": {
- "iln": ""
}, - "supplier": {
- "sku": ""
}, - "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "condition": "string",
- "images": {
- "original": null,
- "1x": null,
- "2x": null,
- "3x": null,
- "lia_1x": null,
- "lia_2x": null,
- "lia_3x": null,
- "square_1x": null,
- "square_2x": null,
- "square_3x": null,
}, - "insert_id": 0,
- "product_group": "string",
- "delegated_to": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "client_id": "string",
- "external_reference_id": "string",
- "default_tile_color": "string",
- "codes": null,
- "stock_mode": "simple",
- "stock_configuration_location": [
- {
- "location": "string",
- "stockable": true,
- "stock_minimum": 0,
- "reorder_qty": 0,
- "reorder_point": 0,
- "location_type": "client",
- "qty": 0
}
], - "is_service": true,
- "service_questions": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "service_question_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "addon_groups": [
- "66c3a88d-1825-4eb6-a1ad-1691140cf140"
], - "configuration": {
- "allow_zero_prices": true,
- "pricing": {
- "allow_is_free": false
}
}, - "loyalty_values": [
- {
- "unit": "miles",
- "amount": 1000000
}
], - "manufacturers": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "components": [
- {
- "product": "e0588024-d851-42d5-ab9f-1b664ef352d4",
- "quantity": 0
}
], - "delegatable": true,
- "online": false,
- "serial_number_input_required": false,
- "shipping_required": true,
- "delegatable_to": [
- {
- "type": "client_account",
- "value": "a860a344-d7b2-406e-828e-8d442f23f344"
}
], - "delegated_from": {
- "owner": {
- "type": "client_account",
- "value": "a860a344-d7b2-406e-828e-8d442f23f344"
}, - "product": "e0588024-d851-42d5-ab9f-1b664ef352d4"
}, - "warranty_notice": "string",
- "refund_policy": "string",
- "disclaimer": "string",
- "policy": {
- "version": "v0",
- "statements": [
- {
- "effect": "allow",
- "resource_type": "register",
- "resource": "stringstringstri"
}
]
}, - "external_ids": [
- {
- "store_front": "string",
- "product_id": "string"
}
], - "custom_properties": { },
- "stock_info": {
- "additionalProperties": null,
- "summary": {
- "total": {
- "qty": 0
}, - "locations": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "qty": 0
}
]
}
}, - "i18n": {
- "locales": [
- {
- "code": "de_DE",
- "translations": {
- "format": "i18next",
- "payload": [
- null
]
}
}
]
}
}
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "name": "string",
- "summary": "string",
- "description": "string",
- "attributes": {
- "property1": "string",
- "property2": "string"
}, - "parent": "string",
- "options": [
- {
- "Color": [
- "blue",
- "green",
- "red"
]
}, - {
- "Size": [
- "L",
- "M",
- "S"
]
}
], - "children": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Shirt S rot",
- "custom_id": "P0000001046TEST280824-1",
- "attributes": {
- "Color": "blue",
- "Size": "S"
}, - "images": {
- "original": null,
- "1x": null,
- "2x": null,
- "3x": null,
- "lia_1x": null,
- "lia_2x": null,
- "lia_3x": null,
- "square_1x": null,
- "square_2x": null,
- "square_3x": null,
}, - "barcodes": [
- "ABC-abc-1234"
]
}
], - "tags": [
- "860defb8-5598-421d-9da4-f0826e767536"
], - "linked_products": [
- null
], - "prices": {
- "branch_prices": [
- {
- "branch": "7c628a07-d557-4cd4-9105-51f9aade2c65",
- "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "scaled_prices": [
- {
- "qty": 0,
- "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "time_based_prices": [
- {
- "time_range": {
- "start": "2019-08-24T14:15:22Z",
- "end": "2019-08-24T14:15:22Z"
}, - "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "default_prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}, - "barcodes": [
- "ABC-abc-1234"
], - "barcode": "string",
- "sku": "string",
- "stock_minimum": 0,
- "stock_maximum": 0,
- "reorder_point": 0,
- "reorder_qty": 0,
- "min_stock": [
- {
- "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5",
- "qty": 0
}
], - "sellable": true,
- "purchasable": true,
- "stockable": true,
- "discountable": true,
- "linkable": false,
- "metadata": { },
- "audiences": [
- null
], - "keywords": [
- null
], - "categories": [
- null
], - "custom_ids": { },
- "related_to": [
- null
], - "similar_to": [
- null
], - "released_at": "2019-08-24T14:15:22Z",
- "purchased_at": "2019-08-24T14:15:22Z",
- "produced_at": "2019-08-24T14:15:22Z",
- "custom_id": "0000000028-000008",
- "tax": "2b46be7d-65ac-4a23-a5dd-524b80fe8e49",
- "taxes_options": [
- null
], - "season": "string",
- "seasons": { },
- "account": "f5b54a51-a98c-44cf-bb68-a676332e7d12",
- "vat_class": "string",
- "category": "string",
- "brand": "string",
- "takeaway_tax": "4936a0c4-d266-4950-9c4d-03c5207ccf96",
- "takeaway_account": "921ec83d-c08b-411a-96d8-355f354d790d",
- "active": true,
- "deleted": false,
- "type": "product",
- "manufacturer": {
- "iln": ""
}, - "supplier": {
- "sku": ""
}, - "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "condition": "string",
- "images": {
- "original": null,
- "1x": null,
- "2x": null,
- "3x": null,
- "lia_1x": null,
- "lia_2x": null,
- "lia_3x": null,
- "square_1x": null,
- "square_2x": null,
- "square_3x": null,
}, - "insert_id": 0,
- "product_group": "string",
- "delegated_to": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "client_id": "string",
- "external_reference_id": "string",
- "default_tile_color": "string",
- "codes": null,
- "stock_mode": "simple",
- "stock_configuration_location": [
- {
- "location": "string",
- "stockable": true,
- "stock_minimum": 0,
- "reorder_qty": 0,
- "reorder_point": 0,
- "location_type": "client",
- "qty": 0
}
], - "is_service": true,
- "service_questions": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "service_question_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "addon_groups": [
- {
- "name": "string"
}
], - "configuration": {
- "allow_zero_prices": true,
- "pricing": {
- "allow_is_free": false
}
}, - "loyalty_values": [
- {
- "unit": "miles",
- "amount": 1000000
}
], - "manufacturers": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "components": [
- {
- "product": "e0588024-d851-42d5-ab9f-1b664ef352d4",
- "quantity": 0
}
], - "delegatable": true,
- "online": false,
- "serial_number_input_required": false,
- "shipping_required": true,
- "delegatable_to": [
- {
- "type": "client_account",
- "value": "a860a344-d7b2-406e-828e-8d442f23f344"
}
], - "delegated_from": {
- "owner": {
- "type": "client_account",
- "value": "a860a344-d7b2-406e-828e-8d442f23f344"
}, - "product": "e0588024-d851-42d5-ab9f-1b664ef352d4"
}, - "warranty_notice": "string",
- "refund_policy": "string",
- "disclaimer": "string",
- "policy": {
- "version": "v0",
- "statements": [
- {
- "effect": "allow",
- "resource_type": "register",
- "resource": "stringstringstri"
}
]
}, - "external_ids": [
- {
- "store_front": "string",
- "product_id": "string"
}
], - "custom_properties": { },
- "price_book_entries": [
- {
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "summary": "string",
- "active": true,
- "deleted": false,
- "clients": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "external_reference_id": "string",
- "value_type": "rate",
- "amount_net": "27633.02",
- "amount_gross": "27633.02",
- "rate": 0,
- "discounted_by": 1,
- "metadata": { },
- "currency": "EUR",
- "tax": "2b46be7d-65ac-4a23-a5dd-524b80fe8e49"
}
], - "stock_info": {
- "additionalProperties": null,
- "summary": {
- "total": {
- "qty": 0
}, - "locations": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "qty": 0
}
]
}
}, - "i18n": {
- "locales": [
- {
- "code": "de_DE",
- "translations": {
- "format": "i18next",
- "payload": [
- null
]
}
}
]
}
}
]
}
Duplicate products of a user.
clientAccountID required | string Alphanumeric client ID of the user |
Product IDs
productIds required | Array of strings <uuid> non-empty |
{- "productIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "name": "string",
- "summary": "string",
- "description": "string",
- "attributes": {
- "property1": "string",
- "property2": "string"
}, - "parent": "string",
- "options": [
- {
- "Color": [
- "blue",
- "green",
- "red"
]
}, - {
- "Size": [
- "L",
- "M",
- "S"
]
}
], - "children": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Shirt S rot",
- "custom_id": "P0000001046TEST280824-1",
- "attributes": {
- "Color": "blue",
- "Size": "S"
}, - "images": {
- "original": null,
- "1x": null,
- "2x": null,
- "3x": null,
- "lia_1x": null,
- "lia_2x": null,
- "lia_3x": null,
- "square_1x": null,
- "square_2x": null,
- "square_3x": null,
}, - "barcodes": [
- "ABC-abc-1234"
]
}
], - "tags": [
- "860defb8-5598-421d-9da4-f0826e767536"
], - "linked_products": [
- null
], - "prices": {
- "branch_prices": [
- {
- "branch": "7c628a07-d557-4cd4-9105-51f9aade2c65",
- "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "scaled_prices": [
- {
- "qty": 0,
- "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "time_based_prices": [
- {
- "time_range": {
- "start": "2019-08-24T14:15:22Z",
- "end": "2019-08-24T14:15:22Z"
}, - "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "default_prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}, - "barcodes": [
- "ABC-abc-1234"
], - "barcode": "string",
- "sku": "string",
- "stock_minimum": 0,
- "stock_maximum": 0,
- "reorder_point": 0,
- "reorder_qty": 0,
- "min_stock": [
- {
- "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5",
- "qty": 0
}
], - "sellable": true,
- "purchasable": true,
- "stockable": true,
- "discountable": true,
- "linkable": false,
- "metadata": { },
- "audiences": [
- null
], - "keywords": [
- null
], - "categories": [
- null
], - "custom_ids": { },
- "related_to": [
- null
], - "similar_to": [
- null
], - "released_at": "2019-08-24T14:15:22Z",
- "purchased_at": "2019-08-24T14:15:22Z",
- "produced_at": "2019-08-24T14:15:22Z",
- "custom_id": "0000000028-000008",
- "tax": "2b46be7d-65ac-4a23-a5dd-524b80fe8e49",
- "taxes_options": [
- null
], - "season": "string",
- "seasons": { },
- "account": "f5b54a51-a98c-44cf-bb68-a676332e7d12",
- "vat_class": "string",
- "category": "string",
- "brand": "string",
- "takeaway_tax": "4936a0c4-d266-4950-9c4d-03c5207ccf96",
- "takeaway_account": "921ec83d-c08b-411a-96d8-355f354d790d",
- "active": true,
- "deleted": false,
- "type": "product",
- "manufacturer": {
- "iln": ""
}, - "supplier": {
- "sku": ""
}, - "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "condition": "string",
- "images": {
- "original": null,
- "1x": null,
- "2x": null,
- "3x": null,
- "lia_1x": null,
- "lia_2x": null,
- "lia_3x": null,
- "square_1x": null,
- "square_2x": null,
- "square_3x": null,
}, - "insert_id": 0,
- "product_group": "string",
- "delegated_to": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "client_id": "string",
- "external_reference_id": "string",
- "default_tile_color": "string",
- "codes": null,
- "stock_mode": "simple",
- "stock_configuration_location": [
- {
- "location": "string",
- "stockable": true,
- "stock_minimum": 0,
- "reorder_qty": 0,
- "reorder_point": 0,
- "location_type": "client",
- "qty": 0
}
], - "is_service": true,
- "service_questions": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "service_question_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "addon_groups": [
- {
- "name": "string"
}
], - "configuration": {
- "allow_zero_prices": true,
- "pricing": {
- "allow_is_free": false
}
}, - "loyalty_values": [
- {
- "unit": "miles",
- "amount": 1000000
}
], - "manufacturers": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "components": [
- {
- "product": "e0588024-d851-42d5-ab9f-1b664ef352d4",
- "quantity": 0
}
], - "delegatable": true,
- "online": false,
- "serial_number_input_required": false,
- "shipping_required": true,
- "delegatable_to": [
- {
- "type": "client_account",
- "value": "a860a344-d7b2-406e-828e-8d442f23f344"
}
], - "delegated_from": {
- "owner": {
- "type": "client_account",
- "value": "a860a344-d7b2-406e-828e-8d442f23f344"
}, - "product": "e0588024-d851-42d5-ab9f-1b664ef352d4"
}, - "warranty_notice": "string",
- "refund_policy": "string",
- "disclaimer": "string",
- "policy": {
- "version": "v0",
- "statements": [
- {
- "effect": "allow",
- "resource_type": "register",
- "resource": "stringstringstri"
}
]
}, - "external_ids": [
- {
- "store_front": "string",
- "product_id": "string"
}
], - "custom_properties": { },
- "price_book_entries": [
- {
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "summary": "string",
- "active": true,
- "deleted": false,
- "clients": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "external_reference_id": "string",
- "value_type": "rate",
- "amount_net": "27633.02",
- "amount_gross": "27633.02",
- "rate": 0,
- "discounted_by": 1,
- "metadata": { },
- "currency": "EUR",
- "tax": "2b46be7d-65ac-4a23-a5dd-524b80fe8e49"
}
]
}
]
}
Query all products (light)
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
name | string search for substring in name |
deleted | boolean query only deleted (true) or non-deleted (false) products |
active | boolean query only active (true) or non-active (false) products |
fields | Array specify which product properties to return |
tillhub.products.light.get((err, result) => {})
Query all products (light)
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
fields | Array specify which product properties to return |
tillhub.products.light.get((err, result) => {})
Get details of a single product object.
clientAccountID required | string Alphanumeric client ID of the user |
productID required | string Alphanumeric configuration ID |
stock | string Default: "true" Enum: "true" "false" Include stock information |
branch | string |
original_product | boolean Default: false If true, don't serve customization |
tillhub.products.get((err, result) => {})
Get the details of all children of a product
clientAccountID required | string Alphanumeric client ID of the user |
productID required | string Alphanumeric configuration ID |
stock | string Default: "true" Enum: "true" "false" Include stock information |
branch | string |
original_product | boolean Default: false If true, don't serve customization |
tillhub.products.get((err, result) => {})
Get metadata of the products model.
clientAccountID required | string Alphanumeric client ID of the user |
deleted | boolean query products whether deleted ('true') or not deleted ('false') |
sellable | boolean query products whether suitable ('true') or not suitable ('false') for sale |
purchasable | boolean query products whether suitable ('true') or not suitable ('false') for purchase |
active | boolean query products whether active ('true') or inactive ('false') |
business_partner_id | string | array query products that belong to a business partner. |
barcode | string query products by barcode. NOTE: this is a special API call. It will opt out of all other endpoint features, but will deliver an optimised search experience |
type | string Enum: "product" "voucher" "linked" "variant" "linked_product" "variant_product" "composed_product" query for one or more types |
tag | string query products by tag |
client | string query products by one or more clients |
custom_id | string query products by custom_id. NOTE: this is a special API call. It will opt out of all other endpoint features, but will deliver an optimised search experience |
branch | string filters prices.branch_prices by given branch, only available when sending a strip_branch_prices=true |
product_group | string query a product by product group |
tax | string query a product by VAT object ID |
account | string query a product by revenue account ID |
q required | string the search string (by comma or space separated words with minimal length of 2 chars) |
location | string | array query products that belong to a location or array of location. Ignored if location_strict is not true. |
location_strict | boolean activates location query parameter as part of the query. Location will not be taken into account if this is not equal true. |
branch_group | string | array query products that belong to a branch group or array of branch group and all branches within branch group. |
lookups | string one or more lookup locations for third party systems |
field | Array of strings filter any given property of this resource. Use "a.b" to select a field that is nested within field a. |
exclude_system_products | boolean exclude system-created products |
stockable | string Enum: true false Filter products by stockable flag |
types | Array of any Alias for type filter for compatibilty reasons |
attributes | string filter products by list of attributes. Can be passed as a string with attribute name. Used only in pair with attributes_value |
attributes_value | string filter products by list of attributes. Can be passed as a string with attribute value Used only in pair with attributes |
attribute | string alias for attributes for compatibilty reasons |
opt_out | string flag to change method behavior. Only value "performance" can be accepted, if set it disables most of filters and embeddings |
purchase_order_id | string uuid id of purchase order to filter by |
purchase_order_id_parents required | boolean add parent products to filter by purchase order id |
tillhub.products.meta.get((err, result) => {})
Query all products and receive limited information
clientAccountID required | string Alphanumeric client ID of the user |
limit | integer the discrete limit, that will default to 1000 on the legacy route |
cursor | string the alphanumeric cursor field |
cursor_field | string which column to cursor on. Currently we only support |
deleted | string the string representation of boolean values as |
active | string the string representation of boolean values as |
barcode | string query by barcode |
branch | string send the branch to get branch specific data like, stock information. Stock information is only available whn sending a barcode query paramter |
product_group | string query a product by product group |
pretty | string pretty format JSON responses or not. Default is not pretty |
tillhub.products.get((err, result) => {})
Check if a barcode is unique by checking if it's mentioned in any of the codes data in the products.
clientAccountID required | string Alphanumeric client ID of the user |
code required | string new barcode from the user |
tillhub.branches.barcode.get((err, result) => {})
Checks if a custom id is unique based on exsiting product custom ids
clientAccountID required | string Alphanumeric client ID of the user |
custom_id required | string the product custom id to be checked |
tillhub.products.get((err, result) => {})
Get metadata for price and stock by location of a single Product
clientAccountID required | string Alphanumeric client ID of the user |
productID required | string Alphanumeric configuration ID |
currency | string Default: "EUR" Return prices in selected currency |
exclude_negative_qty | string Default: "false" Enum: "true" "false" Exclude locations with negative quantity in stock |
total | string the string representation of boolean values as |
Get price and stock by location of a single Product
clientAccountID required | string Alphanumeric client ID of the user |
productID required | string Alphanumeric configuration ID |
currency | string Default: "EUR" Return prices in selected currency |
exclude_negative_qty | string Default: "false" Enum: "true" "false" Exclude locations with negative quantity in stock |
cursor_field | string which column to cursor on. Valid values are |
limit | integer the discrete limit, that will default to 1000 on the legacy route |
Update specific product fields.
clientAccountID required | string Alphanumeric client ID of the user |
productId required | string Alphanumeric product ID |
Simple Product
name | string <= 512 characters Product name |
string or (any or null) Short summary of the product | |
string or (any or null) Long description of a product | |
object or (any or null) Arbitrary attributes a product has, that will be displayed in e.g. a sale | |
string or (any or null) Only valid for child products (variant and linked) | |
Array of objects or (any or null) | |
Array of objects or (any or null) | |
Array of strings or (any or null) | |
Array of any or (any or null) Used to store linked_products (existing (can be any type, including | |
object or (any or null) | |
Array of strings or (any or null) Product barcodes | |
string or (any or null) Deprecated Deprecated, use 'barcodes' instead | |
string or (any or null) | |
number or (any or null) | |
number or (any or null) The maximum resulting qty a location should have after a reorder | |
number or (any or null) The stock level that triggers a reorder | |
number or (any or null) The default qty on any reorder | |
Array of objects or (any or null) The minimum stock | |
sellable | boolean Default: true Define whether a product should be sellable (appears in use cases which assume sale) |
purchasable | boolean Default: true Define whether a product should be purchasable (appears in use cases which assume purchase) |
boolean or (any or null) Define whether to keep track of stock of this product. | |
boolean or (any or null) Define whether this product can receive a discount during a sale. | |
linkable | boolean Default: false Define whether a product should be linkable. NOTE: this will replace the type "linked" |
object or (any or null) | |
Array of any or (any or null) | |
Array of any or (any or null) | |
Array of any or (any or null) Defines a list of "Tillhub" categories, which is list of uuids. The category trees will then determine where it is placed. | |
object or (any or null) DEPRECATED | |
Array of any or (any or null) | |
Array of any or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) The product number | |
string or (any or null) | |
Array of any or object or (any or null) | |
string or (any or null) | |
object or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
active | boolean Default: true |
deleted | boolean Default: false |
type | string Enum: "product" "composed_product" "voucher" "linked" "linked_product" "variant" "variant_product" "tip_owner" "tip_employee" variant of a product (product|voucher) or a parent (variant_product|linked_product|composed_product) or a child (variant|linked) where child has "parent" property containing the ID of a parent product or a special product for tipping (tip_owner|tip_employee) |
object or (any or null) | |
object or (any or null) | |
Array of strings or (any or null) | |
Array of strings or (any or null) | |
string or (any or null) | |
object or (any or null) | |
insert_id | integer |
string or (any or null) | |
Array of strings or (any or null) | |
string or (any or null) A client definable ID for the purpose of syncing to a client or used in analytics for e.g. transactions that created a product offline and done transactions offline before they received a backend ID. | |
string or (any or null) A caller defined custom ID for the purpose of syncing from external resources, or to use in analytics. | |
string or (any or null) Color to be displayed when no image is set. | |
(Array of objects or objects or objects or objects or objects or objects) or (any or null) Default: null | |
string or (any or null) | |
Array of objects or (any or null) | |
is_service | boolean |
Array of strings or (any or null) | |
Array of strings or (any or null) | |
Array of strings or (any or null) | |
object or (any or null) Default: {"allow_zero_prices":true,"pricing":{"allow_is_free":false}} Defines various product behaviours. | |
Array of objects or (any or null) | |
Array of strings or (any or null) | |
Array of objects An array of components for composed product (the type is "composed_product") | |
boolean or (any or null) Define whether the product can be delegated to other users at all. | |
boolean or (any or null) Default: false Define whether this product and it's children (if not specified otherwise) are available online. | |
boolean or (any or null) Default: false | |
boolean or (any or null) Default: true Define whether this item requires shipping. This usually the case except for digital goods. Tax and tax splits may apply based on region. | |
Array of objects or (any or null) | |
object or (any or null) | |
string or (any or null) Warranty notice for the customer | |
string or (any or null) Refund policy for the customer | |
string or (any or null) Any disclaimer for the customer | |
object or (any or null) ACL / permissions for this product | |
Array of objects or (any or null) | |
(any or null) or object |
{- "name": "string",
- "summary": "string",
- "description": "string",
- "attributes": {
- "property1": "string",
- "property2": "string"
}, - "parent": "string",
- "options": [
- {
- "Color": [
- "blue",
- "green",
- "red"
]
}, - {
- "Size": [
- "L",
- "M",
- "S"
]
}
], - "children": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Shirt S rot",
- "custom_id": "P0000001046TEST280824-1",
- "attributes": {
- "Color": "blue",
- "Size": "S"
}, - "images": {
- "original": null,
- "1x": null,
- "2x": null,
- "3x": null,
- "lia_1x": null,
- "lia_2x": null,
- "lia_3x": null,
- "square_1x": null,
- "square_2x": null,
- "square_3x": null,
}, - "barcodes": [
- "ABC-abc-1234"
]
}
], - "tags": [
- "860defb8-5598-421d-9da4-f0826e767536"
], - "linked_products": [
- null
], - "prices": {
- "branch_prices": [
- {
- "branch": "7c628a07-d557-4cd4-9105-51f9aade2c65",
- "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "scaled_prices": [
- {
- "qty": 0,
- "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "time_based_prices": [
- {
- "time_range": {
- "start": "2019-08-24T14:15:22Z",
- "end": "2019-08-24T14:15:22Z"
}, - "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "default_prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}, - "barcodes": [
- "ABC-abc-1234"
], - "barcode": "string",
- "sku": "string",
- "stock_minimum": 0,
- "stock_maximum": 0,
- "reorder_point": 0,
- "reorder_qty": 0,
- "min_stock": [
- {
- "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5",
- "qty": 0
}
], - "sellable": true,
- "purchasable": true,
- "stockable": true,
- "discountable": true,
- "linkable": false,
- "metadata": { },
- "audiences": [
- null
], - "keywords": [
- null
], - "categories": [
- null
], - "custom_ids": { },
- "related_to": [
- null
], - "similar_to": [
- null
], - "released_at": "2019-08-24T14:15:22Z",
- "purchased_at": "2019-08-24T14:15:22Z",
- "produced_at": "2019-08-24T14:15:22Z",
- "custom_id": "0000000028-000008",
- "tax": "2b46be7d-65ac-4a23-a5dd-524b80fe8e49",
- "taxes_options": [
- null
], - "season": "string",
- "seasons": { },
- "account": "f5b54a51-a98c-44cf-bb68-a676332e7d12",
- "vat_class": "string",
- "category": "string",
- "brand": "string",
- "takeaway_tax": "4936a0c4-d266-4950-9c4d-03c5207ccf96",
- "takeaway_account": "921ec83d-c08b-411a-96d8-355f354d790d",
- "active": true,
- "deleted": false,
- "type": "product",
- "manufacturer": {
- "iln": ""
}, - "supplier": {
- "sku": ""
}, - "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "condition": "string",
- "images": {
- "original": null,
- "1x": null,
- "2x": null,
- "3x": null,
- "lia_1x": null,
- "lia_2x": null,
- "lia_3x": null,
- "square_1x": null,
- "square_2x": null,
- "square_3x": null,
}, - "insert_id": 0,
- "product_group": "string",
- "delegated_to": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "client_id": "string",
- "external_reference_id": "string",
- "default_tile_color": "string",
- "codes": null,
- "stock_mode": "simple",
- "stock_configuration_location": [
- {
- "location": "string",
- "stockable": true,
- "stock_minimum": 0,
- "reorder_qty": 0,
- "reorder_point": 0,
- "location_type": "client",
- "qty": 0
}
], - "is_service": true,
- "service_questions": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "service_question_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "addon_groups": [
- "66c3a88d-1825-4eb6-a1ad-1691140cf140"
], - "configuration": {
- "allow_zero_prices": true,
- "pricing": {
- "allow_is_free": false
}
}, - "loyalty_values": [
- {
- "unit": "miles",
- "amount": 1000000
}
], - "manufacturers": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "components": [
- {
- "product": "e0588024-d851-42d5-ab9f-1b664ef352d4",
- "quantity": 0
}
], - "delegatable": true,
- "online": false,
- "serial_number_input_required": false,
- "shipping_required": true,
- "delegatable_to": [
- {
- "type": "client_account",
- "value": "a860a344-d7b2-406e-828e-8d442f23f344"
}
], - "delegated_from": {
- "owner": {
- "type": "client_account",
- "value": "a860a344-d7b2-406e-828e-8d442f23f344"
}, - "product": "e0588024-d851-42d5-ab9f-1b664ef352d4"
}, - "warranty_notice": "string",
- "refund_policy": "string",
- "disclaimer": "string",
- "policy": {
- "version": "v0",
- "statements": [
- {
- "effect": "allow",
- "resource_type": "register",
- "resource": "stringstringstri"
}
]
}, - "external_ids": [
- {
- "store_front": "string",
- "product_id": "string"
}
], - "custom_properties": { }
}
Gets an actual price of a product based on location and following sources in priority:
clientAccountID required | string Alphanumeric client ID of the user |
query required | string The query search params |
tillhub.products.prices.actual.get((err, result) => {})
{- "amount_net": "27633.02",
- "amount_gross": "27633.02",
- "rate": 0,
- "currency": "EUR"
}
Update an entire price book object.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric price book ID |
Simple price book
custom_id | string <= 128 characters The Price Book custom id |
string or (any or null) | |
object or (any or null) | |
Array of strings or (any or null) | |
Array of strings or (any or null) | |
active | boolean Default: true |
deleted | boolean Default: false |
string or (any or null) |
{- "custom_id": "string",
- "name": "string",
- "constraints": {
- "time": { }
}, - "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "active": true,
- "deleted": false,
- "type": "customer"
}
Update an entire price book entry object.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric price book entry ID |
Simple price book entry
price_book | string <uuid> The reference to the price book |
string or (any or null) | |
Array of strings or (any or null) | |
Array of strings or (any or null) | |
string or (any or null) Short summary of the price book item | |
active | boolean Default: true |
deleted | boolean Default: false |
Array of strings or (any or null) | |
string or (any or null) A caller defined custom ID for the purpose of syncing from external resources, or to use in analytics. | |
value_type | string Enum: "rate" "value" Value types restrict the pricing to the value fields (amount_net & amount_gross or rate). If all of those are set the value_type counts. If there is no value_type, amount fields take precedence. |
number or (any or null) | |
number or (any or null) | |
number or (any or null) Relative value of this product based on any other applicable price. | |
number or (any or null) The discounting applied in the price book item. Positive number means discount, negative means markup. Maximum of 1 means that you can not make a discount higher than the price. | |
object or (any or null) | |
string or (any or null) | |
string or (any or null) |
{- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "product": "e0588024-d851-42d5-ab9f-1b664ef352d4",
- "products": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "product_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "summary": "string",
- "active": true,
- "deleted": false,
- "clients": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "external_reference_id": "string",
- "value_type": "rate",
- "amount_net": "27633.02",
- "amount_gross": "27633.02",
- "rate": 0,
- "discounted_by": 1,
- "metadata": { },
- "currency": "EUR",
- "tax": "2b46be7d-65ac-4a23-a5dd-524b80fe8e49"
}
Query all Price Book Entries of a user.
clientAccountID required | string Alphanumeric client ID of the user |
price_book | string the uuid of a price_book |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
deleted | string the string representation of boolean values as |
branch | string the UUID representation of a location |
q required | string the search string |
limit | integer >= 1 Example: limit=50 The maximum amount of entries on page (for paginated output)' |
Create a new price book entry. The reason for not creating it:
clientAccountID required | string Alphanumeric client ID of the user |
Simple price book entry
price_book required | string <uuid> The reference to the price book |
string or (any or null) | |
Array of strings or (any or null) | |
Array of strings or (any or null) | |
string or (any or null) Short summary of the price book item | |
active | boolean Default: true |
deleted | boolean Default: false |
Array of strings or (any or null) | |
string or (any or null) A caller defined custom ID for the purpose of syncing from external resources, or to use in analytics. | |
value_type | string Enum: "rate" "value" Value types restrict the pricing to the value fields (amount_net & amount_gross or rate). If all of those are set the value_type counts. If there is no value_type, amount fields take precedence. |
number or (any or null) | |
number or (any or null) | |
number or (any or null) Relative value of this product based on any other applicable price. | |
number or (any or null) The discounting applied in the price book item. Positive number means discount, negative means markup. Maximum of 1 means that you can not make a discount higher than the price. | |
object or (any or null) | |
string or (any or null) | |
string or (any or null) |
{- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "product": "e0588024-d851-42d5-ab9f-1b664ef352d4",
- "products": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "product_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "summary": "string",
- "active": true,
- "deleted": false,
- "clients": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "external_reference_id": "string",
- "value_type": "rate",
- "amount_net": "27633.02",
- "amount_gross": "27633.02",
- "rate": 0,
- "discounted_by": 1,
- "metadata": { },
- "currency": "EUR",
- "tax": "2b46be7d-65ac-4a23-a5dd-524b80fe8e49"
}
Get Metadata of all Price Book Entries.
clientAccountID required | string Alphanumeric client ID of the user |
price_book | string the uuid of a price_book |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
deleted | string the string representation of boolean values as |
branch | string the UUID representation of a location |
q required | string the search string |
Query all product price book items
clientAccountID required | string Alphanumeric client ID of the user |
limit | integer the discrete limit, that will default to 1000 on the legacy route |
cursor | string the alphanumeric cursor field |
cursor_field | string which column to cursor on. Currently we only support |
start | string <date-time> decide the starting updated_at date in this call. This can be used for syncing our keeping up to date with latest changes |
deleted | string the string representation of boolean values as |
active | string the string representation of boolean values as |
client | string query product price book items by one or more clients |
branch | string send the branch to get branch specific data like, stock information. Stock information is only available when sending a barcode query paramter |
location | string send the UUID representing the location |
product | string send the UUID representing the product to get back the pricebook entries for this product in any price book |
pretty | string pretty format JSON responses or not. Default is not pretty |
Create a new price book of a user.
clientAccountID required | string Alphanumeric client ID of the user |
Simple price book
custom_id | string <= 128 characters The Price Book custom id |
string or (any or null) | |
object or (any or null) | |
Array of strings or (any or null) | |
Array of strings or (any or null) | |
active | boolean Default: true |
deleted | boolean Default: false |
string or (any or null) |
{- "custom_id": "string",
- "name": "string",
- "constraints": {
- "time": { }
}, - "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "active": true,
- "deleted": false,
- "type": "customer"
}
Get a single branch price object.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric product ID |
branchId required | string Alphanumeric branch ID |
tillhub.products.prices.get((err, result) => {})
Add an product branch prices object.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric product ID |
Simple prices
null
Returns price list the specified branch for the product using following sources:
clientAccountID required | string Alphanumeric client ID of the user |
branch required | string Returns prices in this branch |
product required | string Returns prices for this product |
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 10,
- "results": [
- {
- "product": "e0588024-d851-42d5-ab9f-1b664ef352d4",
- "type": "scaled",
- "branch": "f2ac2cae-97ff-42a1-967b-0a35222ab6d1",
- "price_book_type": "general",
- "created_at": "2018-11-04T23:18:43.075Z",
- "updated_at": "2018-11-04T23:18:43.075Z",
- "deleted": false,
- "net": "27633.02",
- "gross": "27633.02",
- "currency": "EUR",
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "quantity": 0,
- "date_range": { },
- "day_of_week": {
- "enabled": true,
- "monday": {
- "slots": [
- {
- "enabled": true,
- "start": "08:30",
- "end": "09:15"
}
]
}, - "tuesday": {
- "slots": [
- {
- "enabled": true,
- "start": "08:30",
- "end": "09:15"
}
]
}, - "wednesday": {
- "slots": [
- {
- "enabled": true,
- "start": "08:30",
- "end": "09:15"
}
]
}, - "thursday": {
- "slots": [
- {
- "enabled": true,
- "start": "08:30",
- "end": "09:15"
}
]
}, - "friday": {
- "slots": [
- {
- "enabled": true,
- "start": "08:30",
- "end": "09:15"
}
]
}, - "saturday": {
- "slots": [
- {
- "enabled": true,
- "start": "08:30",
- "end": "09:15"
}
]
}, - "sunday": {
- "slots": [
- {
- "enabled": true,
- "start": "08:30",
- "end": "09:15"
}
]
}
}
}
], - "cursor": {
}
}
Make a fuzzy search query for products on the name, description and ID fields as a string. This will return max. configured limit or 100 results, with their score and some metadata. Also it will treat the input as incomplete string and make a suggestion for correction.
NOTE: if the index does not exist yet, we will try to create it on the fly. On a products database with millions of products, that will take up to 7 minutes.
clientAccountID required | string Alphanumeric client ID of the user |
q required | string the search string |
types | Array of any The product types to filter |
branch | string The location to filter |
stockable | string Enum: true false Filter products by stockable flag |
sellable | string Enum: true false Filter products by sellable flag |
purchasable | string Enum: true false Filter products by purchasable flag |
tillhub.products.search.get((err, result) => {})
If an index exists, replace all existing documents in the index with new ones from the database table. If no index exists yet, it will be created.
clientAccountID required | string Alphanumeric client ID of the user |
tillhub.products.search.get((err, result) => {})
Create index for products on the name, custom_id, description, type, locations and ID fields as a string. If an index already exists, an error will be returned.
clientAccountID required | string Alphanumeric client ID of the user |
tillhub.products.search.get((err, result) => {})
Select Products by providing a list of ids or custom ids.
clientAccountID required | string Alphanumeric client ID of the user |
deleted | boolean query products whether deleted ('true') or not deleted ('false') |
type | string Enum: "product" "voucher" "linked" "variant" "linked_product" "variant_product" "composed_product" query for one or more types |
exclude_system_products | boolean query products whether to exclude the entries with system_type or not |
List of Product ids
null
Manually trigger products Sysnc from external systems.
clientAccountID required | string Alphanumeric client ID of the user |
systems | string Example: systems=?systems=thirdpart&systems=mysap one or more external systems. |
tillhub.products.post((err, result) => {})
{- "status": 200,
- "msg": "string",
- "count": 1,
- "results": [
- {
- "name": "string",
- "summary": "string",
- "description": "string",
- "attributes": {
- "property1": "string",
- "property2": "string"
}, - "parent": "string",
- "options": [
- {
- "Color": [
- "blue",
- "green",
- "red"
]
}, - {
- "Size": [
- "L",
- "M",
- "S"
]
}
], - "children": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Shirt S rot",
- "custom_id": "P0000001046TEST280824-1",
- "attributes": {
- "Color": "blue",
- "Size": "S"
}, - "images": {
- "original": null,
- "1x": null,
- "2x": null,
- "3x": null,
- "lia_1x": null,
- "lia_2x": null,
- "lia_3x": null,
- "square_1x": null,
- "square_2x": null,
- "square_3x": null,
}, - "barcodes": [
- "ABC-abc-1234"
]
}
], - "tags": [
- "860defb8-5598-421d-9da4-f0826e767536"
], - "linked_products": [
- null
], - "prices": {
- "branch_prices": [
- {
- "branch": "7c628a07-d557-4cd4-9105-51f9aade2c65",
- "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "scaled_prices": [
- {
- "qty": 0,
- "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "time_based_prices": [
- {
- "time_range": {
- "start": "2019-08-24T14:15:22Z",
- "end": "2019-08-24T14:15:22Z"
}, - "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "default_prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}, - "barcodes": [
- "ABC-abc-1234"
], - "barcode": "string",
- "sku": "string",
- "stock_minimum": 0,
- "stock_maximum": 0,
- "reorder_point": 0,
- "reorder_qty": 0,
- "min_stock": [
- {
- "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5",
- "qty": 0
}
], - "sellable": true,
- "purchasable": true,
- "stockable": true,
- "discountable": true,
- "linkable": false,
- "metadata": { },
- "audiences": [
- null
], - "keywords": [
- null
], - "categories": [
- null
], - "custom_ids": { },
- "related_to": [
- null
], - "similar_to": [
- null
], - "released_at": "2019-08-24T14:15:22Z",
- "purchased_at": "2019-08-24T14:15:22Z",
- "produced_at": "2019-08-24T14:15:22Z",
- "custom_id": "0000000028-000008",
- "tax": "2b46be7d-65ac-4a23-a5dd-524b80fe8e49",
- "taxes_options": [
- null
], - "season": "string",
- "seasons": { },
- "account": "f5b54a51-a98c-44cf-bb68-a676332e7d12",
- "vat_class": "string",
- "category": "string",
- "brand": "string",
- "takeaway_tax": "4936a0c4-d266-4950-9c4d-03c5207ccf96",
- "takeaway_account": "921ec83d-c08b-411a-96d8-355f354d790d",
- "active": true,
- "deleted": false,
- "type": "product",
- "manufacturer": {
- "iln": ""
}, - "supplier": {
- "sku": ""
}, - "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "condition": "string",
- "images": {
- "original": null,
- "1x": null,
- "2x": null,
- "3x": null,
- "lia_1x": null,
- "lia_2x": null,
- "lia_3x": null,
- "square_1x": null,
- "square_2x": null,
- "square_3x": null,
}, - "insert_id": 0,
- "product_group": "string",
- "delegated_to": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "client_id": "string",
- "external_reference_id": "string",
- "default_tile_color": "string",
- "codes": null,
- "stock_mode": "simple",
- "stock_configuration_location": [
- {
- "location": "string",
- "stockable": true,
- "stock_minimum": 0,
- "reorder_qty": 0,
- "reorder_point": 0,
- "location_type": "client",
- "qty": 0
}
], - "is_service": true,
- "service_questions": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "service_question_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "addon_groups": [
- "66c3a88d-1825-4eb6-a1ad-1691140cf140"
], - "configuration": {
- "allow_zero_prices": true,
- "pricing": {
- "allow_is_free": false
}
}, - "loyalty_values": [
- {
- "unit": "miles",
- "amount": 1000000
}
], - "manufacturers": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "components": [
- {
- "product": "e0588024-d851-42d5-ab9f-1b664ef352d4",
- "quantity": 0
}
], - "delegatable": true,
- "online": false,
- "serial_number_input_required": false,
- "shipping_required": true,
- "delegatable_to": [
- {
- "type": "client_account",
- "value": "a860a344-d7b2-406e-828e-8d442f23f344"
}
], - "delegated_from": {
- "owner": {
- "type": "client_account",
- "value": "a860a344-d7b2-406e-828e-8d442f23f344"
}, - "product": "e0588024-d851-42d5-ab9f-1b664ef352d4"
}, - "warranty_notice": "string",
- "refund_policy": "string",
- "disclaimer": "string",
- "policy": {
- "version": "v0",
- "statements": [
- {
- "effect": "allow",
- "resource_type": "register",
- "resource": "stringstringstri"
}
]
}, - "external_ids": [
- {
- "store_front": "string",
- "product_id": "string"
}
], - "custom_properties": { }
}
]
}
Make a fuzzy search query for products on the name and description fields as a string. This will return max. 20 results, with their score and some metadata. Also it will treat the input as incomplete string and make a suggestion for correction.
clientAccountID required | string Alphanumeric client ID of the user |
q required | string the search string |
types | Array of any the product types to filter |
stockable | string Enum: true false Filter products by stockable flag |
sellable | string Enum: true false Filter products by sellable flag |
purchasable | string Enum: true false Filter products by purchasable flag |
limit | string Enum: true false the results limit |
offset | string the results offset |
offset | string the results offset |
tillhub.products.search.get((err, result) => {})
{- "msg": "Product search and suggestion successful.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 10,
- "results": {
- "0": {
- "name": "string",
- "summary": "string",
- "description": "string",
- "attributes": {
- "property1": "string",
- "property2": "string"
}, - "parent": "string",
- "options": [
- {
- "Color": [
- "blue",
- "green",
- "red"
]
}, - {
- "Size": [
- "L",
- "M",
- "S"
]
}
], - "children": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Shirt S rot",
- "custom_id": "P0000001046TEST280824-1",
- "attributes": {
- "Color": "blue",
- "Size": "S"
}, - "images": {
- "original": null,
- "1x": null,
- "2x": null,
- "3x": null,
- "lia_1x": null,
- "lia_2x": null,
- "lia_3x": null,
- "square_1x": null,
- "square_2x": null,
- "square_3x": null,
}, - "barcodes": [
- "ABC-abc-1234"
]
}
], - "tags": [
- "860defb8-5598-421d-9da4-f0826e767536"
], - "linked_products": [
- null
], - "prices": {
- "branch_prices": [
- {
- "branch": "7c628a07-d557-4cd4-9105-51f9aade2c65",
- "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "scaled_prices": [
- {
- "qty": 0,
- "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "time_based_prices": [
- {
- "time_range": {
- "start": "2019-08-24T14:15:22Z",
- "end": "2019-08-24T14:15:22Z"
}, - "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "default_prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}, - "barcodes": [
- "ABC-abc-1234"
], - "barcode": "string",
- "sku": "string",
- "stock_minimum": 0,
- "stock_maximum": 0,
- "reorder_point": 0,
- "reorder_qty": 0,
- "min_stock": [
- {
- "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5",
- "qty": 0
}
], - "sellable": true,
- "purchasable": true,
- "stockable": true,
- "discountable": true,
- "linkable": false,
- "metadata": { },
- "audiences": [
- null
], - "keywords": [
- null
], - "categories": [
- null
], - "custom_ids": { },
- "related_to": [
- null
], - "similar_to": [
- null
], - "released_at": "2019-08-24T14:15:22Z",
- "purchased_at": "2019-08-24T14:15:22Z",
- "produced_at": "2019-08-24T14:15:22Z",
- "custom_id": "0000000028-000008",
- "tax": "2b46be7d-65ac-4a23-a5dd-524b80fe8e49",
- "taxes_options": [
- null
], - "season": "string",
- "seasons": { },
- "account": "f5b54a51-a98c-44cf-bb68-a676332e7d12",
- "vat_class": "string",
- "category": "string",
- "brand": "string",
- "takeaway_tax": "4936a0c4-d266-4950-9c4d-03c5207ccf96",
- "takeaway_account": "921ec83d-c08b-411a-96d8-355f354d790d",
- "active": true,
- "deleted": false,
- "type": "product",
- "manufacturer": {
- "iln": ""
}, - "supplier": {
- "sku": ""
}, - "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "condition": "string",
- "images": {
- "original": null,
- "1x": null,
- "2x": null,
- "3x": null,
- "lia_1x": null,
- "lia_2x": null,
- "lia_3x": null,
- "square_1x": null,
- "square_2x": null,
- "square_3x": null,
}, - "insert_id": 0,
- "product_group": "string",
- "delegated_to": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "client_id": "string",
- "external_reference_id": "string",
- "default_tile_color": "string",
- "codes": null,
- "stock_mode": "simple",
- "stock_configuration_location": [
- {
- "location": "string",
- "stockable": true,
- "stock_minimum": 0,
- "reorder_qty": 0,
- "reorder_point": 0,
- "location_type": "client",
- "qty": 0
}
], - "is_service": true,
- "service_questions": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "service_question_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "addon_groups": [
- {
- "name": "string"
}
], - "configuration": {
- "allow_zero_prices": true,
- "pricing": {
- "allow_is_free": false
}
}, - "loyalty_values": [
- {
- "unit": "miles",
- "amount": 1000000
}
], - "manufacturers": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "components": [
- {
- "product": "e0588024-d851-42d5-ab9f-1b664ef352d4",
- "quantity": 0
}
], - "delegatable": true,
- "online": false,
- "serial_number_input_required": false,
- "shipping_required": true,
- "delegatable_to": [
- {
- "type": "client_account",
- "value": "a860a344-d7b2-406e-828e-8d442f23f344"
}
], - "delegated_from": {
- "owner": {
- "type": "client_account",
- "value": "a860a344-d7b2-406e-828e-8d442f23f344"
}, - "product": "e0588024-d851-42d5-ab9f-1b664ef352d4"
}, - "warranty_notice": "string",
- "refund_policy": "string",
- "disclaimer": "string",
- "policy": {
- "version": "v0",
- "statements": [
- {
- "effect": "allow",
- "resource_type": "register",
- "resource": "stringstringstri"
}
]
}, - "external_ids": [
- {
- "store_front": "string",
- "product_id": "string"
}
], - "custom_properties": { },
- "price_book_entries": [
- {
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "summary": "string",
- "active": true,
- "deleted": false,
- "clients": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "external_reference_id": "string",
- "value_type": "rate",
- "amount_net": "27633.02",
- "amount_gross": "27633.02",
- "rate": 0,
- "discounted_by": 1,
- "metadata": { },
- "currency": "EUR",
- "tax": "2b46be7d-65ac-4a23-a5dd-524b80fe8e49"
}
], - "stock_info": {
- "additionalProperties": null,
- "summary": {
- "total": {
- "qty": 0
}, - "locations": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "qty": 0
}
]
}
}, - "i18n": {
- "locales": [
- {
- "code": "de_DE",
- "translations": {
- "format": "i18next",
- "payload": [
- null
]
}
}
]
}
}, - "search": [
- {
- "score": 6.7483287,
- "doc": {
- "id": "fabdcfc9-27d9-4a69-be85-3a32f5e0a2b2",
- "name": "PS 4 Controller",
- "custom_id": "060919-667100",
- "description": "The DualShock 4 Wireless Controller features familiar controls, and incorporates several innovative features to usher in a new era of interactive experiences. Its definitive analog sticks and trigger buttons have been improved for greater feel and sensitivity. A multi-touch, clickable touch pad expands gameplay possibilities, while the incorporated light bar in conjunction with the PlayStation Camera allows for easy player identification and screen adjustment when playing with friends in the same room. The addition of the Share button makes utilizing the social capabilities of the PlayStation 4 as easy as the push of a button. The DualShock 4 Wireless Controller is more than a controller; it's your physical connection to a new era of gaming. PLAYSTATION DUALSHOCK 4 CONTROLLER",
- "type": "product",
- "locations": [ ]
}, - "highlight": {
- "description": [
- "A multi-touch, clickable touch <em>pad</em> expands gameplay possibilities, while the incorporated light bar in"
]
}
}
]
}, - "status": 200
}
Create a new prodcut group of a user.
clientAccountID required | string Alphanumeric client ID of the user |
Simple Product Group
required | string or (any or null) |
product_group_id required | string Product group ID |
required | string or (any or null) |
active | boolean Default: true Product group is active |
required | string or (any or null) |
string or (any or null) | |
string or (any or null) | |
object or (any or null) | |
string or (any or null) |
{- "name": "Beverages",
- "product_group_id": "42",
- "tax": "f5cf4198-ae26-463f-aa2b-014bd2fed8e5",
- "active": true,
- "account": "6ad04406-683c-4255-822a-3acd694d2ad1",
- "takeaway_tax": "4936a0c4-d266-4950-9c4d-03c5207ccf96",
- "takeaway_account": "921ec83d-c08b-411a-96d8-355f354d790d",
- "images": {
}, - "color": "string"
}
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "id": "05297f58-3408-44d0-8bf4-125d4e86c08a",
- "name": "Beverages",
- "product_group_id": "42",
- "tax": "f5cf4198-ae26-463f-aa2b-014bd2fed8e5",
- "active": true,
- "account": "6ad04406-683c-4255-822a-3acd694d2ad1",
- "takeaway_tax": "4936a0c4-d266-4950-9c4d-03c5207ccf96",
- "takeaway_account": "921ec83d-c08b-411a-96d8-355f354d790d",
- "images": {
}, - "color": "string"
}
]
}
Query all product_groups of a user.
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
deleted | string the string representation of boolean values as |
active | string the string representation of boolean values as |
is_service_category | string the string representation of boolean values as |
tillhub.product_groups.get((err, result) => {})
Get a single product group object.
clientAccountID required | string Alphanumeric client ID of the user |
productGroupID required | string Alphanumeric product group ID |
tillhub.product_groups.get((err, result) => {})
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "id": "05297f58-3408-44d0-8bf4-125d4e86c08a",
- "name": "Beverages",
- "product_group_id": "42",
- "tax": "f5cf4198-ae26-463f-aa2b-014bd2fed8e5",
- "active": true,
- "account": "6ad04406-683c-4255-822a-3acd694d2ad1",
- "takeaway_tax": "4936a0c4-d266-4950-9c4d-03c5207ccf96",
- "takeaway_account": "921ec83d-c08b-411a-96d8-355f354d790d",
- "images": {
}, - "color": "string"
}
]
}
Replace an entire product group object.
clientAccountID required | string Alphanumeric client ID of the user |
productGroupID required | string Alphanumeric product group ID |
Simple Product Group
required | string or (any or null) |
product_group_id required | string Product group ID |
required | string or (any or null) |
active | boolean Default: true Product group is active |
required | string or (any or null) |
string or (any or null) | |
string or (any or null) | |
object or (any or null) | |
string or (any or null) |
{- "name": "Beverages",
- "product_group_id": "42",
- "tax": "f5cf4198-ae26-463f-aa2b-014bd2fed8e5",
- "active": true,
- "account": "6ad04406-683c-4255-822a-3acd694d2ad1",
- "takeaway_tax": "4936a0c4-d266-4950-9c4d-03c5207ccf96",
- "takeaway_account": "921ec83d-c08b-411a-96d8-355f354d790d",
- "images": {
}, - "color": "string"
}
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "id": "05297f58-3408-44d0-8bf4-125d4e86c08a",
- "name": "Beverages",
- "product_group_id": "42",
- "tax": "f5cf4198-ae26-463f-aa2b-014bd2fed8e5",
- "active": true,
- "account": "6ad04406-683c-4255-822a-3acd694d2ad1",
- "takeaway_tax": "4936a0c4-d266-4950-9c4d-03c5207ccf96",
- "takeaway_account": "921ec83d-c08b-411a-96d8-355f354d790d",
- "images": {
}, - "color": "string"
}
]
}
Checks if a product group id is unique based on exsiting product group ids
clientAccountID required | string Alphanumeric client ID of the user |
product_group_id required | string the product group id to be checked |
tillhub.product_groups.get((err, result) => {})
Make a generic search query for product groups on the name field as a string.
clientAccountID required | string Alphanumeric client ID of the user |
q required | string the search string |
fields | string[] array of fields to search by, e.g. 'name' (if no field is specified then it will search all available fields). |
tillhub.product_groups.search.get((err, result) => {})
Creates an Product Addon Group data entry
clientAccountID required | string Alphanumeric client account ID |
Product Addon Group
name required | string [ 1 .. 64 ] characters any arbitrary name for an addon group that can be displayed in applications. |
boolean or (any or null) | |
integer or integer or (any or null) | |
boolean or (any or null) | |
active | boolean Default: true Soft disable or enabled this product addon group. |
deleted | boolean Default: false Soft delete this product addon group. |
{- "name": "string",
- "multiselect": true,
- "max_selected": 1,
- "skippable": true,
- "active": true,
- "deleted": false
}
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "name": "string",
- "multiselect": true,
- "max_selected": 1,
- "skippable": true,
- "active": true,
- "deleted": false
}
]
}
Query all product addon groups.
clientAccountID required | string Alphanumeric client ID of the user |
q | string any of the search fields that follows |
name | string the name or part of the name of the addon group |
addon_name | string the name or part of the name of the addon assigned to the addon group |
addon | string the uuid of the addon assigned to the addon group |
multiselect | string the string representation of boolean values as |
skippable | string the string representation of boolean values as |
deleted | string the string representation of boolean values as |
active | string the string representation of boolean values as |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z decide the starting updated_at date in this call. This can be used for syncing our keeping up to date with latest changes |
end | string Example: end=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
Updates a Product Addon Group
clientAccountID required | string Alphanumeric client account ID |
productAddonGroup required | string Alphanumeric product addon group ID |
Product Addon Group
null
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "name": "string",
- "multiselect": true,
- "max_selected": 1,
- "skippable": true,
- "active": true,
- "deleted": false
}
]
}
Get metadata of the Product Addon Groups model.
clientAccountID required | string Alphanumeric client ID of the user |
q | string any of the search fields that follows |
name | string the name or part of the name of the addon group |
addon_name | string the name or part of the name of the addon assigned to the addon group |
addon | string the uuid of the addon assigned to the addon group |
multiselect | string the string representation of boolean values as |
skippable | string the string representation of boolean values as |
deleted | string the string representation of boolean values as |
active | string the string representation of boolean values as |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z decide the starting updated_at date in this call. This can be used for syncing our keeping up to date with latest changes |
end | string Example: end=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
Create a new product template of a user.
clientAccountID required | string Alphanumeric client ID of the user |
Simple product template
required | string or (any or null) any arbitrary name for a product template that can be displayed in applications. |
object or (any or null) An arbitray option template, that holds attributes with aattribute value lists. | |
active | boolean Default: true Soft disable or enabled this item. |
deleted | boolean Default: false Soft delete this item. |
object or (any or null) |
{- "name": "string",
- "option_template": {
- "/": null
}, - "active": true,
- "deleted": false,
- "metadata": { }
}
{- "name": "string",
- "option_template": {
- "/": null
}, - "active": true,
- "deleted": false,
- "metadata": { },
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
Query all product templates of a user.
clientAccountID required | string Alphanumeric client ID of the user |
q | string text search by name, with a partial match (by comma or space separated words with minimal length of 2 chars) |
tillhub.productTemplates.get((err, result) => {})
Replace an entire product template object.
clientAccountID required | string Alphanumeric client ID of the user |
productTemplateID required | string Alphanumeric product template ID |
Simple product template
string or (any or null) any arbitrary name for a product template that can be displayed in applications. | |
object or (any or null) An arbitray option template, that holds attributes with aattribute value lists. | |
active | boolean Default: true Soft disable or enabled this item. |
deleted | boolean Default: false Soft delete this item. |
object or (any or null) |
{- "name": "string",
- "option_template": {
- "/": null
}, - "active": true,
- "deleted": false,
- "metadata": { }
}
Query all product_service_questions
clientAccountID required | string Alphanumeric client ID of the user |
deleted | string the string representation of boolean values as |
active | string the string representation of boolean values as |
start | string Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
end | string Example: end=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
q | string this will text search by checkout question name, with a partial match (by comma or space separated words with minimal length of 2 chars) |
tillhub.product_service_questions.get((err, result) => {})
Create a new product service question.
clientAccountID required | string Alphanumeric client ID of the user |
Simple Product Service Question
name required | string [ 1 .. 128 ] characters |
string or (any or null) | |
content required | string [ 1 .. 4096 ] characters The question itself that is going to displayed to the user |
deleted | boolean Default: false |
active | boolean Default: true |
required | boolean Flag on the service for mandatory input request |
object or (any or null) JSON schema that is applied to the user's answer to the product question; it is useful for UI development because it gives information on how to construct the answer form fields, i.e. the field type (select, input, checkbox) and values for unit options |
{- "name": "Customer satisfaction",
- "description": "string",
- "content": "Was the service performed without any problems?",
- "deleted": false,
- "active": true,
- "required": true,
- "answer_validation": {
- "type": "object",
- "title": "checkbox",
- "description": "Checkbox or toggle for a true/false answer",
- "required": [
- "content"
], - "properties": {
- "content": {
- "type": "boolean",
- "default": false
}
}
}
}
{- "name": "Customer satisfaction",
- "description": "string",
- "content": "Was the service performed without any problems?",
- "deleted": false,
- "active": true,
- "required": true,
- "answer_validation": {
- "type": "object",
- "title": "checkbox",
- "description": "Checkbox or toggle for a true/false answer",
- "required": [
- "content"
], - "properties": {
- "content": {
- "type": "boolean",
- "default": false
}
}
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
Get a single product service question object.
clientAccountID required | string Alphanumeric client ID of the user |
productQuestionId required | string Alphanumeric configuration ID |
tillhub.product_service_questions.get((err, result) => {})
{- "name": "Customer satisfaction",
- "description": "string",
- "content": "Was the service performed without any problems?",
- "deleted": false,
- "active": true,
- "required": true,
- "answer_validation": {
- "type": "object",
- "title": "checkbox",
- "description": "Checkbox or toggle for a true/false answer",
- "required": [
- "content"
], - "properties": {
- "content": {
- "type": "boolean",
- "default": false
}
}
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
Update parts of a product service question object.
clientAccountID required | string Alphanumeric client ID of the user |
reasonId required | string Alphanumeric product service question ID |
Simple Product Service Question
name | string [ 1 .. 128 ] characters |
string or (any or null) | |
content | string [ 1 .. 4096 ] characters The question itself that is going to displayed to the user |
deleted | boolean Default: false |
active | boolean Default: true |
required | boolean Flag on the service for mandatory input request |
object or (any or null) JSON schema that is applied to the user's answer to the product question; it is useful for UI development because it gives information on how to construct the answer form fields, i.e. the field type (select, input, checkbox) and values for unit options |
{- "name": "Customer satisfaction",
- "description": "string",
- "content": "Was the service performed without any problems?",
- "deleted": false,
- "active": true,
- "required": true,
- "answer_validation": {
- "type": "object",
- "title": "checkbox",
- "description": "Checkbox or toggle for a true/false answer",
- "required": [
- "content"
], - "properties": {
- "content": {
- "type": "boolean",
- "default": false
}
}
}
}
{- "name": "Customer satisfaction",
- "description": "string",
- "content": "Was the service performed without any problems?",
- "deleted": false,
- "active": true,
- "required": true,
- "answer_validation": {
- "type": "object",
- "title": "checkbox",
- "description": "Checkbox or toggle for a true/false answer",
- "required": [
- "content"
], - "properties": {
- "content": {
- "type": "boolean",
- "default": false
}
}
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
Create a new product_service_qproduct service question group.
clientAccountID required | string Alphanumeric client ID of the user |
Simple Product Service Question Group
name required | string [ 1 .. 128 ] characters |
string or (any or null) | |
string or (any or null) | |
Array of strings or (any or null) | |
deleted | boolean Default: false |
active | boolean Default: true |
{- "name": "Hair treatment questions",
- "description": "string",
- "custom_id": "string",
- "service_questions": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "deleted": false,
- "active": true
}
{- "name": "Hair treatment questions",
- "description": "string",
- "custom_id": "string",
- "service_questions": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "deleted": false,
- "active": true,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
Get a single product service question group object.
clientAccountID required | string Alphanumeric client ID of the user |
productQuestionGroupId required | string Alphanumeric configuration ID |
tillhub.product_service_question_groups.get((err, result) => {})
{- "name": "Hair treatment questions",
- "description": "string",
- "custom_id": "string",
- "service_questions": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "deleted": false,
- "active": true,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
Update parts of a product service question group object.
clientAccountID required | string Alphanumeric client ID of the user |
groupId required | string Alphanumeric product service question group ID |
Simple Product Service Question Group
name | string [ 1 .. 128 ] characters |
string or (any or null) | |
string or (any or null) | |
Array of strings or (any or null) | |
deleted | boolean Default: false |
active | boolean Default: true |
{- "name": "Hair treatment questions",
- "description": "string",
- "custom_id": "string",
- "service_questions": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "deleted": false,
- "active": true
}
{- "name": "Hair treatment questions",
- "description": "string",
- "custom_id": "string",
- "service_questions": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "deleted": false,
- "active": true,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
Create a new product addon of a user.
clientAccountID required | string Alphanumeric client ID of the user |
Simple Product Addon
name required | string <= 512 characters Product Addon name |
string or (any or null) | |
string or (any or null) | |
Array of objects or (any or null) | |
stock_quantity | number Default: 1 How much of the product stock will be moved (defaults to 1 - only important if it affects stock). This value can be negative number! |
add_to_cart | boolean Default: false Only applicable if the price and {{product}}is set. It will instruct the POS to add the product as a separate cart item - upsell rather than an addon. |
allow_quantity_edit | boolean Default: false Can the cashier edit the quantity of the addon selected (only important if it affects stock) |
max_quantity | number Default: 1 Maximum count the product stock will be moved. Related to the allow_quantity_edit - only if it set to true |
order_index | number Default: 1 Display the Addon in a specific order |
active | boolean Default: true |
deleted | boolean Default: false |
{- "name": "string",
- "addon_group": "6ad6fefd-0dc7-4522-9320-b0b336144930",
- "product": "e0588024-d851-42d5-ab9f-1b664ef352d4",
- "price_change": [
- {
- "currency": "str",
- "amount": "27633.02"
}
], - "stock_quantity": 1,
- "add_to_cart": false,
- "allow_quantity_edit": false,
- "max_quantity": 1,
- "order_index": 1,
- "active": true,
- "deleted": false
}
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "name": "string",
- "addon_group": "6ad6fefd-0dc7-4522-9320-b0b336144930",
- "product": "e0588024-d851-42d5-ab9f-1b664ef352d4",
- "price_change": [
- {
- "currency": "str",
- "amount": "27633.02"
}
], - "stock_quantity": 1,
- "add_to_cart": false,
- "allow_quantity_edit": false,
- "max_quantity": 1,
- "order_index": 1,
- "active": true,
- "deleted": false
}
]
}
Query all product addons.
clientAccountID required | string Alphanumeric client ID of the user |
q | string any of the search fields that follows |
name | string the name or part of the name of the addon |
product_name | string the name or part of the name of the product assigned to the addon |
addon_group_name | string the name or part of the name of the addon group assigned to the addon |
product | string the uuid of the product assigned to the addon |
addon_group | string the uuid of the addon group assigned to the addon |
deleted | string the string representation of boolean values as |
active | string the string representation of boolean values as |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z decide the starting updated_at date in this call. This can be used for syncing our keeping up to date with latest changes |
end | string Example: end=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
Replace an entire product addon object.
clientAccountID required | string Alphanumeric client ID of the user |
productAddonID required | string Alphanumeric product addon ID |
Simple Product Addon
name | string <= 512 characters Product Addon name |
string or (any or null) | |
string or (any or null) | |
Array of objects or (any or null) | |
stock_quantity | number Default: 1 How much of the product stock will be moved (defaults to 1 - only important if it affects stock). This value can be negative number! |
add_to_cart | boolean Default: false Only applicable if the price and {{product}}is set. It will instruct the POS to add the product as a separate cart item - upsell rather than an addon. |
allow_quantity_edit | boolean Default: false Can the cashier edit the quantity of the addon selected (only important if it affects stock) |
max_quantity | number Default: 1 Maximum count the product stock will be moved. Related to the allow_quantity_edit - only if it set to true |
order_index | number Default: 1 Display the Addon in a specific order |
active | boolean Default: true |
deleted | boolean Default: false |
{- "name": "string",
- "addon_group": "6ad6fefd-0dc7-4522-9320-b0b336144930",
- "product": "e0588024-d851-42d5-ab9f-1b664ef352d4",
- "price_change": [
- {
- "currency": "str",
- "amount": "27633.02"
}
], - "stock_quantity": 1,
- "add_to_cart": false,
- "allow_quantity_edit": false,
- "max_quantity": 1,
- "order_index": 1,
- "active": true,
- "deleted": false
}
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "name": "string",
- "addon_group": "6ad6fefd-0dc7-4522-9320-b0b336144930",
- "product": "e0588024-d851-42d5-ab9f-1b664ef352d4",
- "price_change": [
- {
- "currency": "str",
- "amount": "27633.02"
}
], - "stock_quantity": 1,
- "add_to_cart": false,
- "allow_quantity_edit": false,
- "max_quantity": 1,
- "order_index": 1,
- "active": true,
- "deleted": false
}
]
}
Get metadata of the Product Addons model.
clientAccountID required | string Alphanumeric client ID of the user |
q | string any of the search fields that follows |
name | string the name or part of the name of the addon |
product_name | string the name or part of the name of the product assigned to the addon |
addon_group_name | string the name or part of the name of the addon group assigned to the addon |
product | string the uuid of the product assigned to the addon |
addon_group | string the uuid of the addon group assigned to the addon |
deleted | string the string representation of boolean values as |
active | string the string representation of boolean values as |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z decide the starting updated_at date in this call. This can be used for syncing our keeping up to date with latest changes |
end | string Example: end=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
Soft delete a single promotion object.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric promotions ID |
tillhub.promotions.delete((err, result) => {})
{- "status": 200,
- "msg": "Deleted promotion 96341e35-0fe1-4b72-89bc-6f62e9114ac6",
- "request": {
- "host": "staging-api.tillhub.com",
- "id": "UUID"
}
}
Update an entire promotion object.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric promotions ID |
Simple promotions
string or (any or null) | |
string or (any or null) | |
payload | string [ 1 .. 65536 ] characters Javascript function text |
type | string Value: "cart_map_function" The type of the promotion function |
object or (any or null) | |
Array of strings or (any or null) | |
Array of strings or (any or null) | |
string or (any or null) A identifier used locally on POS for their own reference. | |
deleted | boolean Default: false |
active | boolean Default: true |
(object or object) or (any or null) | |
object or (any or null) | |
Array of strings or (any or null) | |
integer or (any or null) | |
string or (any or null) The barcode used to trigger the promotion |
{- "name": "string",
- "description": "string",
- "payload": "string",
- "type": "cart_map_function",
- "metadata": { },
- "arguments": [
- "string"
], - "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "client_id": "string",
- "deleted": false,
- "active": true,
- "template": {
- "type": "product_property:and_or_concat:output_properties",
- "inputs": { }
}, - "constraints": {
- "time": { }
}, - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "version": 2,
- "barcode": "0E9761310XF"
}
Query all promotions of a user.
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
deleted | string the string representation of boolean values as |
name | string used to filter by name, results will be included if a substring of their name matches (case insensitive) |
version | number used to support version on promotions, default is v1 |
description | string used to filter by description, results will be included if a substring of their description matches (case insensitive) |
branch | string the UUID representation of a location |
locations | Array and array of UUID representing a location |
q | string used to filter by name and description, results will be included if a substring of their name or description matches (case insensitive) |
tillhub.promotions.get((err, result) => {})
Create a new promotions of a user.
clientAccountID required | string Alphanumeric client ID of the user |
Simple promotions
string or (any or null) | |
string or (any or null) | |
payload required | string [ 1 .. 65536 ] characters Javascript function text |
type required | string Value: "cart_map_function" The type of the promotion function |
object or (any or null) | |
Array of strings or (any or null) | |
Array of strings or (any or null) | |
string or (any or null) A identifier used locally on POS for their own reference. | |
deleted | boolean Default: false |
active | boolean Default: true |
(object or object) or (any or null) | |
object or (any or null) | |
Array of strings or (any or null) | |
integer or (any or null) | |
string or (any or null) The barcode used to trigger the promotion |
{- "name": "string",
- "description": "string",
- "payload": "string",
- "type": "cart_map_function",
- "metadata": { },
- "arguments": [
- "string"
], - "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "client_id": "string",
- "deleted": false,
- "active": true,
- "template": {
- "type": "product_property:and_or_concat:output_properties",
- "inputs": { }
}, - "constraints": {
- "time": { }
}, - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "version": 2,
- "barcode": "0E9761310XF"
}
Create a new promotions of a user.
clientAccountID required | string Alphanumeric client ID of the user |
Simple promotions
required | string or (any or null) |
string or (any or null) | |
type required | string Value: "cart_map_function" The type of the promotion function |
object or (any or null) | |
Array of strings or (any or null) | |
Array of strings or (any or null) | |
string or (any or null) A identifier used locally on POS for their own reference. | |
deleted | boolean Default: false |
active | boolean Default: true |
required | object or object or object |
object or (any or null) | |
Array of strings or (any or null) | |
integer or (any or null) | |
string or (any or null) The barcode used to trigger the promotion |
{- "name": "string",
- "description": "string",
- "type": "cart_map_function",
- "metadata": { },
- "arguments": [
- "string"
], - "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "client_id": "string",
- "deleted": false,
- "active": true,
- "template": {
- "type": "product_property:and_or_concat:output_properties",
- "inputs": {
- "repeatable_promotable": true,
- "promotable_product": {
- "property": "string",
- "value": "string",
- "qty": 0
}, - "promotable_product_group": {
- "property": "string",
- "value": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
], - "qty": 0
}, - "bundle_junctions": [
- {
- "property": "string",
- "value": [
- null
], - "qty": 0,
- "type": "product"
}, - {
- "property": "string",
- "value": [
- null
], - "qty": 0,
- "type": "product"
}
], - "output": {
- "property": "percentage_discount",
- "value": 1
}
}
}, - "constraints": {
- "time": { }
}, - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "version": 2,
- "barcode": "0E9761310XF"
}
Update an entire promotion object.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric promotions ID |
Simple promotions
string or (any or null) | |
string or (any or null) | |
type | string Value: "cart_map_function" The type of the promotion function |
object or (any or null) | |
Array of strings or (any or null) | |
Array of strings or (any or null) | |
string or (any or null) A identifier used locally on POS for their own reference. | |
deleted | boolean Default: false |
active | boolean Default: true |
object or object or object | |
object or (any or null) | |
Array of strings or (any or null) | |
integer or (any or null) | |
string or (any or null) The barcode used to trigger the promotion |
{- "name": "string",
- "description": "string",
- "type": "cart_map_function",
- "metadata": { },
- "arguments": [
- "string"
], - "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "client_id": "string",
- "deleted": false,
- "active": true,
- "template": {
- "type": "product_property:and_or_concat:output_properties",
- "inputs": {
- "repeatable_promotable": true,
- "promotable_product": {
- "property": "string",
- "value": "string",
- "qty": 0
}, - "promotable_product_group": {
- "property": "string",
- "value": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
], - "qty": 0
}, - "bundle_junctions": [
- {
- "property": "string",
- "value": [
- null
], - "qty": 0,
- "type": "product"
}, - {
- "property": "string",
- "value": [
- null
], - "qty": 0,
- "type": "product"
}
], - "output": {
- "property": "percentage_discount",
- "value": 1
}
}
}, - "constraints": {
- "time": { }
}, - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "version": 2,
- "barcode": "0E9761310XF"
}
Soft delete a single seasons object.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric seasons ID |
tillhub.seasons.delete((err, result) => {})
{- "status": 200,
- "msg": "Deleted seasons 96341e35-0fe1-4b72-89bc-6f62e9114ac6",
- "request": {
- "host": "staging-api.tillhub.com",
- "id": "UUID"
}
}
Update an entire seasons object.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric seasons ID |
Simple seasons
name | string <= 64 characters |
string or (any or null) | |
from | string <date-time> |
to | string <date-time> |
string or (any or null) An identifier used locally on POS for their own reference. | |
active | boolean Default: true Soft disable or enable this season. |
deleted | boolean Default: false Soft delete this season. |
{- "name": "string",
- "description": "string",
- "from": "2019-08-24T14:15:22Z",
- "to": "2019-08-24T14:15:22Z",
- "client_id": "string",
- "active": true,
- "deleted": false
}
Query all seasons of a user.
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
deleted | string the string representation of boolean values as |
tillhub.seasons.get((err, result) => {})
Create a new seasons of a user.
clientAccountID required | string Alphanumeric client ID of the user |
Simple seasons
name required | string <= 64 characters |
string or (any or null) | |
from required | string <date-time> |
to required | string <date-time> |
string or (any or null) An identifier used locally on POS for their own reference. | |
active | boolean Default: true Soft disable or enable this season. |
deleted | boolean Default: false Soft delete this season. |
{- "name": "string",
- "description": "string",
- "from": "2019-08-24T14:15:22Z",
- "to": "2019-08-24T14:15:22Z",
- "client_id": "string",
- "active": true,
- "deleted": false
}
Soft delete a single category tree object.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric category tree ID |
tillhub.category_trees.delete((err, result) => {})
{- "status": 200,
- "msg": "Deleted category tree 96341e35-0fe1-4b72-89bc-6f62e9114ac6",
- "request": {
- "host": "staging-api.tillhub.com",
- "id": "UUID"
}
}
Update an entire category tree object.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric category tree ID |
Simple category tree
name | string [ 1 .. 64 ] characters |
(any or null) or string | |
(any or null) or string | |
(any or null) or Array of objects This recursive category ID + children combination represents a displayable tree. | |
string or (any or null) | |
active | boolean Default: true Soft disable or enable this category_trees. |
deleted | boolean Default: false Soft delete this category_trees. |
(any or null) or object |
{- "name": "string",
- "summary": { },
- "description": { },
- "children": { },
- "comments": "string",
- "active": true,
- "deleted": false,
- "metadata": { }
}
Query all category trees of a user.
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
deleted | string the string representation of boolean values as |
tillhub.category_trees.get((err, result) => {})
Create a new category tree of a user.
clientAccountID required | string Alphanumeric client ID of the user |
Simple category tree
name required | string [ 1 .. 64 ] characters |
(any or null) or string | |
(any or null) or string | |
(any or null) or Array of objects This recursive category ID + children combination represents a displayable tree. | |
string or (any or null) | |
active | boolean Default: true Soft disable or enable this category_trees. |
deleted | boolean Default: false Soft delete this category_trees. |
(any or null) or object |
{- "name": "string",
- "summary": { },
- "description": { },
- "children": { },
- "comments": "string",
- "active": true,
- "deleted": false,
- "metadata": { }
}
Soft delete a single category object.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric category ID |
tillhub.categories.delete((err, result) => {})
{- "status": 200,
- "msg": "Deleted category 96341e35-0fe1-4b72-89bc-6f62e9114ac6",
- "request": {
- "host": "staging-api.tillhub.com",
- "id": "UUID"
}
}
Update an entire category object.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric category ID |
Simple category
name | string [ 1 .. 64 ] characters |
(any or null) or string | |
(any or null) or string | |
string or (any or null) | |
string or (any or null) Color to be displayed in UIs. | |
object or (any or null) A Tillhub image object with URLs to display images this for this category. | |
active | boolean Default: true Soft disable or enable this categories. |
deleted | boolean Default: false Soft delete this categories. |
Array of objects or (any or null) |
{- "name": "string",
- "summary": { },
- "description": { },
- "comments": "string",
- "color": "string",
- "images": {
}, - "active": true,
- "deleted": false,
- "external_ids": [
- {
- "store_front": "865b5b5f-33e7-4291-a487-c9f967336f35",
- "category_id": "string"
}
]
}
Query all categories of a user.
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
deleted | string the string representation of boolean values as |
tillhub.categories.get((err, result) => {})
Create a new category of a user.
clientAccountID required | string Alphanumeric client ID of the user |
Simple category
name required | string [ 1 .. 64 ] characters |
(any or null) or string | |
(any or null) or string | |
string or (any or null) | |
string or (any or null) Color to be displayed in UIs. | |
object or (any or null) A Tillhub image object with URLs to display images this for this category. | |
active | boolean Default: true Soft disable or enable this categories. |
deleted | boolean Default: false Soft delete this categories. |
Array of objects or (any or null) |
{- "name": "string",
- "summary": { },
- "description": { },
- "comments": "string",
- "color": "string",
- "images": {
}, - "active": true,
- "deleted": false,
- "external_ids": [
- {
- "store_front": "865b5b5f-33e7-4291-a487-c9f967336f35",
- "category_id": "string"
}
]
}
Information about a new stocks booking
webhook_id | string <uuid> The webhook UUID |
event_id | string <uuid> The event UUID |
event_entity | string The entity name the event refers to |
event_type | string The event type (e.g. create, update, delete) |
event_version | number The event payload version |
entity_instance_id | string <uuid> The entity instance UUID |
timestamp | string <date-time> The date and time event was received by webhooks service |
object |
{- "webhook_id": "ff30cfdf-5167-4f72-b4fc-c1d72db3c07e",
- "event_id": "c6fe918a-7bdc-4ccd-af36-95c03853233d",
- "event_entity": "stocks-book",
- "event_type": "create",
- "event_version": 0,
- "entity_instance_id": "10b06f38-031d-4e0c-8706-0474c8c5b61c",
- "timestamp": "2024-12-02T18:25:23.938Z",
- "payload": {
- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": "2019-03-17T21:12:04.849Z",
- "qty_change": -2,
- "type": "transfer",
- "qty": 11,
- "product": {
- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "name": "string",
- "client_id": "string",
- "custom_id": "0000000028-000008",
- "custom_properties": { }
}, - "location": {
- "name": "Head office",
- "custom_id": "dd3234of",
- "branch_number": 107,
- "metadata": { }
}, - "reason": "Not arbitrary reason",
- "stock_id": "f0a52a37-df58-465d-9121-b8180fc95133",
- "transaction_id": "f0a52a37-df58-465d-9121-b8180fc95133"
}
}
Query all stock book entries of a user.
clientAccountID required | string Alphanumeric client ID of the user |
embed | string The information of other resources to be embedded. It can be passed as a string or array of strings. The options are currently limited to "product" and "location". |
limit | integer the discrete limit, that will default to 1000 |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
end | string <date-time> Example: end=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
location | string Example: location=ef415a47-af2a-49a5-a411-1053ff0ea2b2 Alphanumeric location ID |
product | string Example: product=ef415a47-af2a-49a5-a411-1053ff0ea2b2 Alphanumeric product ID |
format | string to get data in any other format then JSON straight away, you can set |
cursor_field | string which column to cursor on. Currently we only support |
q | string this will search ILIKE terms in product name, product barcode, product group name and location name |
product_group | string Alphanumeric product group ID as filter |
from | string Alphanumeric uuid of the source location, e.g. branch uuid or warehouse uuid |
to | string Alphanumeric uuid of the destination location, e.g. branch uuid or warehouse uuid |
type | string[] Example: type=goods_in Filter by type |
import * as tillhub from '@tillhub/javascript-sdk' const { data: stocksBook } = await tillhub.stocksBook().getAll({ type: 'relocation', limit: 50 })
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 10,
- "results": [
- {
- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "metadata": { },
- "qty": 11,
- "qty_change": -2,
- "product": "b98992bf-52b8-49e5-a44c-9e20eb921422",
- "branch": "3f7d26f4-96ff-45b2-8fce-a5c0ca6040b2",
- "status": "available",
- "location": "5b26131d-95e8-49a0-a9b4-58397569bba8",
- "location_type": "client",
- "from": "75941a1a-01b0-47b8-806b-83bfa68f3bea",
- "to": "7b8806e7d-810f-4e18-b049-8e2cc6134a41",
- "channel": "transfer",
- "purchase": { },
- "reason": "a1c1d0c6-f38b-4d89-ae26-7f1aea34985c",
- "comments": "Actualized due to inventarisation",
- "images": [
- "string"
], - "type": "add"
}
], - "cursor": {
}
}
Get a single stock book entry object.
clientAccountID required | string Alphanumeric client ID of the user |
stockID required | string Alphanumeric stock book ID |
embed | string The information of other resources to be embedded. It can be passed as a string or array of strings. The options are currently limited to "product" and "location". |
tillhub.stock.get((err, result) => {})
Query all stock book entries of a user.
clientAccountID required | string Alphanumeric client ID of the user |
embed | string The information of other resources to be embedded. It can be passed as a string or array of strings. The options are currently limited to "product" and "location". |
limit | integer the discrete limit, that will default to 1000 |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
end | string <date-time> Example: end=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
location | string Example: location=ef415a47-af2a-49a5-a411-1053ff0ea2b2 Alphanumeric location ID |
product | string Example: product=ef415a47-af2a-49a5-a411-1053ff0ea2b2 Alphanumeric product ID |
format | string to get data in any other format then JSON straight away, you can set |
cursor_field | string which column to cursor on. Currently we only support |
q | string this will search ILIKE terms in product name, product barcode, product group name and location name |
product_group | string Alphanumeric product group ID as filter |
from | string Alphanumeric uuid of the source location, e.g. branch uuid or warehouse uuid |
to | string Alphanumeric uuid of the destination location, e.g. branch uuid or warehouse uuid |
type | string[] Example: type=goods_in Filter by type |
import * as tillhub from '@tillhub/javascript-sdk' const { data: stocksBook } = await tillhub.stocksBookV1().getAll({ type: 'relocation', limit: 50 })
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 10,
- "results": [
- {
- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "metadata": { },
- "qty": 11,
- "qty_change": -2,
- "product": "b98992bf-52b8-49e5-a44c-9e20eb921422",
- "branch": "3f7d26f4-96ff-45b2-8fce-a5c0ca6040b2",
- "status": "available",
- "location": "5b26131d-95e8-49a0-a9b4-58397569bba8",
- "location_type": "client",
- "from": "75941a1a-01b0-47b8-806b-83bfa68f3bea",
- "to": "7b8806e7d-810f-4e18-b049-8e2cc6134a41",
- "channel": "transfer",
- "purchase": { },
- "reason": "a1c1d0c6-f38b-4d89-ae26-7f1aea34985c",
- "comments": "Actualized due to inventarisation",
- "images": [
- "string"
], - "type": "add"
}
], - "cursor": {
}
}
Get Stock Book meta data of a user.
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
end | string <date-time> Example: end=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
location | string Example: location=ef415a47-af2a-49a5-a411-1053ff0ea2b2 Alphanumeric location ID |
product | string Example: product=ef415a47-af2a-49a5-a411-1053ff0ea2b2 Alphanumeric product ID |
q | string this will search ILIKE terms in product name, product barcode, product group name and location name |
product_group | string Alphanumeric product group ID as filter |
from | string Alphanumeric uuid of the source location, e.g. branch uuid or warehouse uuid |
to | string Alphanumeric uuid of the destination location, e.g. branch uuid or warehouse uuid |
type | string[] Example: type=goods_in Filter by type |
Create a new stock of a user.
Several Tillhub location
s can have stock, such as branches, warehouses, warehouse shelves and (e.g. in-store) clients.
clientAccountID required | string Alphanumeric client ID of the user |
Simple Stock
number or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
object or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
id required | string <uuid> |
created_at | string <date-time> |
updated_at | string <date-time> |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
property name* additional property | any |
{- "qty": 0,
- "product": "string",
- "location": "string",
- "location_type": "client",
- "status": "available",
- "metadata": { },
- "reasons": "fcdfc2e4-ca9c-4559-89b2-01143f5c8517",
- "reason": "82923651-ad20-41d1-9334-85fd9df8e817",
- "comments": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "article": "6f0608c1-1c2e-48ce-b31c-84f47b71a2a7",
- "branch": "7c628a07-d557-4cd4-9105-51f9aade2c65",
- "type": "goods_in"
}
{ }
Query all stock of a user.
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
location | string Example: location=ef415a47-af2a-49a5-a411-1053ff0ea2b2 Alphanumeric location ID |
product | string Example: product=ef415a47-af2a-49a5-a411-1053ff0ea2b2 Alphanumeric product ID |
tillhub.stock.get((err, result) => {})
Replace an entire stock object.
clientAccountID required | string Alphanumeric client ID of the user |
stockID required | string Alphanumeric stock ID |
Simple Stock
qty required | number |
object or (any or null) | |
string or (any or null) |
{- "qty": 0,
- "metadata": { },
- "reason": "82923651-ad20-41d1-9334-85fd9df8e817"
}
Query all locations of a user.
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
deleted | string the string representation of boolean values as |
tillhub.stock.get((err, result) => {})
Transfer stock from one location to another
clientAccountID required | string Alphanumeric client ID of the user |
Simple Stock Transfer
productId required | string <uuid> The product which stock will be affected |
locationId required | string <uuid> The location the stock will be booked at |
reasonId | string <uuid> Reason id to retrieve reason name that will be used |
{- "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
- "locationId": "1a5515a3-ba81-4a42-aee7-ad9ffc090a54",
- "reasonId": "c577cf67-9268-488b-9f16-1c6585ec43bf"
}
{- "status": 200,
- "msg": "Stock transferred.",
- "request": {
- "host": "staging-api.tillhub.com",
- "id": "UUID"
}, - "count": 1,
- "results": {
- "qty": 0,
- "product": "string",
- "location": "string",
- "location_type": "client",
- "status": "available",
- "metadata": { },
- "reasons": "fcdfc2e4-ca9c-4559-89b2-01143f5c8517",
- "reason": "82923651-ad20-41d1-9334-85fd9df8e817",
- "comments": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "article": "6f0608c1-1c2e-48ce-b31c-84f47b71a2a7",
- "branch": "7c628a07-d557-4cd4-9105-51f9aade2c65",
- "type": "goods_in"
}, - "reason": "uuid"
}
The Warehouses API. See Locations for more information.
Create a new warehouse of a user.
Warehouses are any physical stock holding unit, that can be attached to any other stock holding unit and can have shelves, that are in turn stock holding units. Stock can be transfered from and to warehouses, e.g. also from shelve to warehouse and vice versa
clientAccountID required | string Alphanumeric warehouse ID of the user |
Simple Warehouse
{ }
Query all warehouses of a user.
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
deleted | string the string representation of boolean values as |
active | string the string representation of boolean values as |
q | string this will text search by warehouse name or custom_id, with a partial match (by comma or space separated words with minimal length of 2 chars) |
tillhub.warehouses.get((err, result) => {})
Replace an entire warehouse object.
clientAccountID required | string Alphanumeric client ID of the user |
warehouseId required | string Alphanumeric warehouse ID |
Simple Warehouse
{ }
Make a generic search query for warehouses on the name field as a string.
clientAccountID required | string Alphanumeric client ID of the user |
q required | string the search string |
fields | string[] array of fields to search by, e.g. 'name' (if no field is specified then it will search all available fields). |
tillhub.warehouses.search.get((err, result) => {})
Create a new warehouse shelve of a user.
Shelves are stock holding units that belong to a warehouse
clientAccountID required | string Alphanumeric warehouse ID of the user |
Simple Warehouse Shelve
{ }
Query all warehouse shelves of a user.
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
deleted | string the string representation of boolean values as |
active | string the string representation of boolean values as |
tillhub.warehouses.shelves.get((err, result) => {})
Delete a single warehouse shelve object.
clientAccountID required | string Alphanumeric client ID of the user |
warehouseId required | string Alphanumeric warehouse ID |
shelveId required | string Alphanumeric shelve ID |
tillhub.warehouses.shelves.delete((err, result) => {})
Get a single warehouse shelve object.
clientAccountID required | string Alphanumeric client ID of the user |
warehouseId required | string Alphanumeric warehouse ID |
warehouseId required | string Alphanumeric shelve ID |
tillhub.warehouses.shelves.get((err, result) => {})
Replace an entire order object.
clientAccountID required | string Alphanumeric client ID of the user |
orderID required | string Alphanumeric order ID |
Simple Order
string or (any or null) Alphanumeric client ID of the product | |
boolean or (any or null) the string representation of boolean values as | |
deleted | boolean Default: false the string representation of boolean values as |
string or (any or null) ISO string (UTC) with timezone | |
string or (any or null) ISO string (UTC) with timezone | |
string or (any or null) from which Tillhub resource, that is able to handle stock, a delivery is coming from. E.g. branch, warehouse, shelve, client | |
string or (any or null) from which Tillhub resource, that is able to handle stock, a delivery is going to. E.g. branch, warehouse, shelve, client | |
object | |
object | |
string or (any or null) | |
Array of objects non-empty | |
issuer | object <= 10 properties |
(any or null) or string Default: "open" |
{- "id": "string",
- "open": true,
- "deleted": false,
- "ordered_at": "2018-07-11T09:30:43.382Z",
- "finalized_at": "2018-07-11T09:30:43.382Z",
- "from": "dee192b0-275e-44a2-9c77-32b75da2f26f",
- "to": "4a3e8739-e3a9-4b51-9b6f-406b6818a828",
- "recipient": {
- "address": {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
}, - "sender": {
- "address": {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
}, - "direction": "incoming",
- "order_items": [
- {
- "added_at": "2018-07-11T10:43:46.888Z",
- "issuer": {
- "name": "Mr. Smith"
}, - "order_qty": 1,
- "auto": true,
- "suggestion": true,
- "deleted": false,
- "order": "5cc4d431-0ee0-4d1f-8857-7f3f0cfdf528",
- "product": "e7f0bff9-2285-49d3-bfae-3cba4fbabbd5",
- "stock": "603e723a-5484-4b86-9469-09025f773345",
- "branch": "f5225fe4-29bd-479b-be70-a174e1cf1854"
}
], - "issuer": { },
- "status": "open"
}
{- "status": 200,
- "msg": "string",
- "count": 1,
- "results": [
- {
- "id": "string",
- "open": true,
- "deleted": false,
- "ordered_at": "2018-07-11T09:30:43.382Z",
- "finalized_at": "2018-07-11T09:30:43.382Z",
- "from": "dee192b0-275e-44a2-9c77-32b75da2f26f",
- "to": "4a3e8739-e3a9-4b51-9b6f-406b6818a828",
- "recipient": {
- "address": {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
}, - "sender": {
- "address": {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
}, - "direction": "incoming",
- "order_items": [
- {
- "added_at": "2018-07-11T10:43:46.888Z",
- "issuer": {
- "name": "Mr. Smith"
}, - "order_qty": 1,
- "auto": true,
- "suggestion": true,
- "deleted": false,
- "order": "5cc4d431-0ee0-4d1f-8857-7f3f0cfdf528",
- "product": "e7f0bff9-2285-49d3-bfae-3cba4fbabbd5",
- "stock": "603e723a-5484-4b86-9469-09025f773345",
- "branch": "f5225fe4-29bd-479b-be70-a174e1cf1854"
}
], - "issuer": { },
- "status": "open"
}
]
}
Query all orders
clientAccountID required | string Alphanumeric client ID of the user |
limit | integer the discrete limit, that will default to 1000 on the legacy route |
cursor | string the alphanumeric cursor field |
cursor_field | string which column to cursor on. Currently we only support |
deleted | string the string representation of boolean values as |
direction | string the string representation of a direction as |
tillhub.orders.get((err, result) => {})
{- "status": 200
}
Create a new order
clientAccountID required | string Alphanumeric client ID of the user |
Simple Order
string or (any or null) Alphanumeric client ID of the product | |
boolean or (any or null) the string representation of boolean values as | |
deleted | boolean Default: false the string representation of boolean values as |
string or (any or null) ISO string (UTC) with timezone | |
string or (any or null) ISO string (UTC) with timezone | |
string or (any or null) from which Tillhub resource, that is able to handle stock, a delivery is coming from. E.g. branch, warehouse, shelve, client | |
string or (any or null) from which Tillhub resource, that is able to handle stock, a delivery is going to. E.g. branch, warehouse, shelve, client | |
object | |
object | |
string or (any or null) | |
Array of objects non-empty | |
issuer | object <= 10 properties |
(any or null) or string Default: "open" |
{- "id": "string",
- "open": true,
- "deleted": false,
- "ordered_at": "2018-07-11T09:30:43.382Z",
- "finalized_at": "2018-07-11T09:30:43.382Z",
- "from": "dee192b0-275e-44a2-9c77-32b75da2f26f",
- "to": "4a3e8739-e3a9-4b51-9b6f-406b6818a828",
- "recipient": {
- "address": {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
}, - "sender": {
- "address": {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
}, - "direction": "incoming",
- "order_items": [
- {
- "added_at": "2018-07-11T10:43:46.888Z",
- "issuer": {
- "name": "Mr. Smith"
}, - "order_qty": 1,
- "auto": true,
- "suggestion": true,
- "deleted": false,
- "order": "5cc4d431-0ee0-4d1f-8857-7f3f0cfdf528",
- "product": "e7f0bff9-2285-49d3-bfae-3cba4fbabbd5",
- "stock": "603e723a-5484-4b86-9469-09025f773345",
- "branch": "f5225fe4-29bd-479b-be70-a174e1cf1854"
}
], - "issuer": { },
- "status": "open"
}
{- "status": 200,
- "msg": "string",
- "count": 1,
- "results": [
- {
- "id": "string",
- "open": true,
- "deleted": false,
- "ordered_at": "2018-07-11T09:30:43.382Z",
- "finalized_at": "2018-07-11T09:30:43.382Z",
- "from": "dee192b0-275e-44a2-9c77-32b75da2f26f",
- "to": "4a3e8739-e3a9-4b51-9b6f-406b6818a828",
- "recipient": {
- "address": {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
}, - "sender": {
- "address": {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
}, - "direction": "incoming",
- "order_items": [
- {
- "added_at": "2018-07-11T10:43:46.888Z",
- "issuer": {
- "name": "Mr. Smith"
}, - "order_qty": 1,
- "auto": true,
- "suggestion": true,
- "deleted": false,
- "order": "5cc4d431-0ee0-4d1f-8857-7f3f0cfdf528",
- "product": "e7f0bff9-2285-49d3-bfae-3cba4fbabbd5",
- "stock": "603e723a-5484-4b86-9469-09025f773345",
- "branch": "f5225fe4-29bd-479b-be70-a174e1cf1854"
}
], - "issuer": { },
- "status": "open"
}
]
}
Get a single order object.
clientAccountID required | string Alphanumeric client ID of the user |
orderID required | string Alphanumeric configuration ID |
tillhub.orders.get((err, result) => {})
{- "status": 200,
- "msg": "string",
- "count": 1,
- "results": [
- {
- "id": "string",
- "open": true,
- "deleted": false,
- "ordered_at": "2018-07-11T09:30:43.382Z",
- "finalized_at": "2018-07-11T09:30:43.382Z",
- "from": "dee192b0-275e-44a2-9c77-32b75da2f26f",
- "to": "4a3e8739-e3a9-4b51-9b6f-406b6818a828",
- "recipient": {
- "address": {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
}, - "sender": {
- "address": {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
}, - "direction": "incoming",
- "order_items": [
- {
- "added_at": "2018-07-11T10:43:46.888Z",
- "issuer": {
- "name": "Mr. Smith"
}, - "order_qty": 1,
- "auto": true,
- "suggestion": true,
- "deleted": false,
- "order": "5cc4d431-0ee0-4d1f-8857-7f3f0cfdf528",
- "product": "e7f0bff9-2285-49d3-bfae-3cba4fbabbd5",
- "stock": "603e723a-5484-4b86-9469-09025f773345",
- "branch": "f5225fe4-29bd-479b-be70-a174e1cf1854"
}
], - "issuer": { },
- "status": "open"
}
]
}
Get the last outgoing order that is open and was last modified. Open means that it is still in editing mode.
clientAccountID required | string Alphanumeric client ID of the user |
tillhub.orders.open.get((err, result) => {})
{- "status": 200,
- "msg": "string",
- "count": 1,
- "results": [
- {
- "id": "string",
- "open": true,
- "deleted": false,
- "ordered_at": "2018-07-11T09:30:43.382Z",
- "finalized_at": "2018-07-11T09:30:43.382Z",
- "from": "dee192b0-275e-44a2-9c77-32b75da2f26f",
- "to": "4a3e8739-e3a9-4b51-9b6f-406b6818a828",
- "recipient": {
- "address": {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
}, - "sender": {
- "address": {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
}, - "direction": "incoming",
- "order_items": [
- {
- "added_at": "2018-07-11T10:43:46.888Z",
- "issuer": {
- "name": "Mr. Smith"
}, - "order_qty": 1,
- "auto": true,
- "suggestion": true,
- "deleted": false,
- "order": "5cc4d431-0ee0-4d1f-8857-7f3f0cfdf528",
- "product": "e7f0bff9-2285-49d3-bfae-3cba4fbabbd5",
- "stock": "603e723a-5484-4b86-9469-09025f773345",
- "branch": "f5225fe4-29bd-479b-be70-a174e1cf1854"
}
], - "issuer": { },
- "status": "open"
}
]
}
Get metadata of the orders model.
clientAccountID required | string Alphanumeric client ID of the user |
deleted | string the string representation of boolean values as |
direction | string the string representation of a direction as |
tillhub.orders.meta.get((err, result) => {})
Get order suggestions based on actual stock and product min requirements
clientAccountID required | string Alphanumeric client ID of the user |
tillhub.orders.suggestions.get((err, result) => {})
{- "id": "string",
- "open": true,
- "deleted": false,
- "ordered_at": "2018-07-11T09:30:43.382Z",
- "finalized_at": "2018-07-11T09:30:43.382Z",
- "from": "dee192b0-275e-44a2-9c77-32b75da2f26f",
- "to": "4a3e8739-e3a9-4b51-9b6f-406b6818a828",
- "recipient": {
- "address": {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
}, - "sender": {
- "address": {
- "lines": "Penthouse",
- "street": "Genthiner Str.",
- "street_number": "34",
- "locality": "Berlin",
- "region": "Branderburg",
- "postal_code": "10785",
- "country": "Germany",
- "type": "delivery"
}
}, - "direction": "incoming",
- "order_items": [
- {
- "added_at": "2018-07-11T10:43:46.888Z",
- "issuer": {
- "name": "Mr. Smith"
}, - "order_qty": 1,
- "auto": true,
- "suggestion": true,
- "deleted": false,
- "order": "5cc4d431-0ee0-4d1f-8857-7f3f0cfdf528",
- "product": "e7f0bff9-2285-49d3-bfae-3cba4fbabbd5",
- "stock": "603e723a-5484-4b86-9469-09025f773345",
- "branch": "f5225fe4-29bd-479b-be70-a174e1cf1854"
}
], - "issuer": { },
- "status": "open"
}
Update stock quantity and delivered quantity for one single order item
clientAccountID required | string Alphanumeric client ID of the user |
orderItemID required | string Alphanumeric ID of the order item |
tillhub.orders.get((err, result) => {})
{- "status": 200,
- "msg": "string",
- "results": [
- {
- "order_items": [
- {
- "added_at": "2018-07-11T10:43:46.888Z",
- "issuer": {
- "name": "Mr. Smith"
}, - "order_qty": 0,
- "auto": true,
- "suggestion": true,
- "deleted": true,
- "order": "5cc4d431-0ee0-4d1f-8857-7f3f0cfdf528",
- "product": "e7f0bff9-2285-49d3-bfae-3cba4fbabbd5",
- "stock": "603e723a-5484-4b86-9469-09025f773345",
- "location": "f5225fe4-29bd-479b-be70-a174e1cf1854"
}
]
}
]
}
Create order items belonging to an order
clientAccountID required | string Alphanumeric client ID of the user |
simple order items
required | Array of objects non-empty |
{- "order_items": [
- {
- "added_at": "2018-07-11T10:43:46.888Z",
- "issuer": {
- "name": "Mr. Smith"
}, - "order_qty": 0,
- "auto": true,
- "suggestion": true,
- "deleted": true,
- "order": "5cc4d431-0ee0-4d1f-8857-7f3f0cfdf528",
- "product": "e7f0bff9-2285-49d3-bfae-3cba4fbabbd5",
- "stock": "603e723a-5484-4b86-9469-09025f773345",
- "location": "f5225fe4-29bd-479b-be70-a174e1cf1854"
}
]
}
{- "status": 200,
- "msg": "Order items added.",
- "count": 1,
- "results": [
- {
- "order_items": [
- {
- "added_at": "2018-07-11T10:43:46.888Z",
- "issuer": {
- "name": "Mr. Smith"
}, - "order_qty": 0,
- "auto": true,
- "suggestion": true,
- "deleted": true,
- "order": "5cc4d431-0ee0-4d1f-8857-7f3f0cfdf528",
- "product": "e7f0bff9-2285-49d3-bfae-3cba4fbabbd5",
- "stock": "603e723a-5484-4b86-9469-09025f773345",
- "location": "f5225fe4-29bd-479b-be70-a174e1cf1854"
}
]
}
]
}
Delete specific order items filtered based on query parameters
clientAccountID required | string Alphanumeric client ID of the user |
order_id | string Alphanumeric order ID |
auto | string the string representation of boolean values as |
suggestion | string the string representation of boolean values as |
order_qty | number |
tillhub.orders.delete((err, result) => {})
Replace multiple order items
clientAccountID required | string Alphanumeric client ID of the user |
Array of order items
required | Array of objects non-empty |
{- "order_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
]
}
{- "status": 200,
- "msg": "string",
- "results": [
- {
- "order_items": [
- {
- "added_at": "2018-07-11T10:43:46.888Z",
- "issuer": {
- "name": "Mr. Smith"
}, - "order_qty": 0,
- "auto": true,
- "suggestion": true,
- "deleted": true,
- "order": "5cc4d431-0ee0-4d1f-8857-7f3f0cfdf528",
- "product": "e7f0bff9-2285-49d3-bfae-3cba4fbabbd5",
- "stock": "603e723a-5484-4b86-9469-09025f773345",
- "location": "f5225fe4-29bd-479b-be70-a174e1cf1854"
}
]
}
]
}
Get a single order item object.
clientAccountID required | string Alphanumeric client ID of the user |
orderItemID required | string Alphanumeric order item ID |
tillhub.orders.get((err, result) => {})
{- "status": 200,
- "msg": "string",
- "results": [
- {
- "order_items": [
- {
- "added_at": "2018-07-11T10:43:46.888Z",
- "issuer": {
- "name": "Mr. Smith"
}, - "order_qty": 0,
- "auto": true,
- "suggestion": true,
- "deleted": true,
- "order": "5cc4d431-0ee0-4d1f-8857-7f3f0cfdf528",
- "product": "e7f0bff9-2285-49d3-bfae-3cba4fbabbd5",
- "stock": "603e723a-5484-4b86-9469-09025f773345",
- "location": "f5225fe4-29bd-479b-be70-a174e1cf1854"
}
]
}
]
}
Replace an entire order item object
clientAccountID required | string Alphanumeric client ID of the user |
orderItemID required | string Alphanumeric order item ID |
Simple Order Item
string or (any or null) | |
object or (any or null) | |
number or (any or null) | |
boolean or (any or null) | |
suggestion | boolean |
boolean or (any or null) | |
order | string |
string or (any or null) | |
string or (any or null) | |
string or (any or null) |
{- "added_at": "string",
- "issuer": { },
- "order_qty": 0,
- "auto": true,
- "suggestion": true,
- "deleted": true,
- "order": "string",
- "product": "string",
- "stock": "string",
- "location": "string"
}
{- "status": 200,
- "msg": "string",
- "results": [
- {
- "order_items": [
- {
- "added_at": "2018-07-11T10:43:46.888Z",
- "issuer": {
- "name": "Mr. Smith"
}, - "order_qty": 0,
- "auto": true,
- "suggestion": true,
- "deleted": true,
- "order": "5cc4d431-0ee0-4d1f-8857-7f3f0cfdf528",
- "product": "e7f0bff9-2285-49d3-bfae-3cba4fbabbd5",
- "stock": "603e723a-5484-4b86-9469-09025f773345",
- "location": "f5225fe4-29bd-479b-be70-a174e1cf1854"
}
]
}
]
}
Get all order items belonging to one specific order
clientAccountID required | string Alphanumeric client ID of the user |
orderID required | string Alphanumeric ID of the (parent) order |
tillhub.orders.get((err, result) => {})
{- "status": 200,
- "msg": "string",
- "results": [
- {
- "order_items": [
- {
- "added_at": "2018-07-11T10:43:46.888Z",
- "issuer": {
- "name": "Mr. Smith"
}, - "order_qty": 0,
- "auto": true,
- "suggestion": true,
- "deleted": true,
- "order": "5cc4d431-0ee0-4d1f-8857-7f3f0cfdf528",
- "product": "e7f0bff9-2285-49d3-bfae-3cba4fbabbd5",
- "stock": "603e723a-5484-4b86-9469-09025f773345",
- "location": "f5225fe4-29bd-479b-be70-a174e1cf1854"
}
]
}
]
}
Replace an entire delivery object.
clientAccountID required | string Alphanumeric client ID of the user |
deliveryID required | string Alphanumeric delivery ID |
Simple Delivery
{ }
{ }
Query all deliveries
clientAccountID required | string Alphanumeric client ID of the user |
limit | integer the discrete limit, that will default to 1000 on the legacy route |
cursor | string the alphanumeric cursor field |
cursor_field | string which column to cursor on. Currently we only support |
deleted | string the string representation of boolean values as |
active | string the string representation of boolean values as |
tillhub.deliveries.get((err, result) => {})
{ }
Create new delivery items
clientAccountID required | string Alphanumeric client ID of the user |
Simple Delivery Items
{ }
{ }
Get a single delivery object.
clientAccountID required | string Alphanumeric client ID of the user |
deliveryID required | string Alphanumeric configuration ID |
tillhub.deliveries.get((err, result) => {})
{ }
Get all delivery items of a delivery.
clientAccountID required | string Alphanumeric client ID of the user |
deliveryID required | string Alphanumeric configuration ID |
embed | string Value: "product" let the API embed a specified object |
tillhub.deliveries.get((err, result) => {})
{ }
Get a single delivery item object.
clientAccountID required | string Alphanumeric client ID of the user |
deliveryID required | string Alphanumeric configuration ID |
itemID required | string Alphanumeric configuration ID |
embed | string Value: "product" let the API embed a specified object |
tillhub.deliveries.get((err, result) => {})
{ }
Dsipatch a delivery
clientAccountID required | string Alphanumeric client ID of the user |
deliveryId required | string Alphanumeric delivery ID |
Simple Delivery
{ }
{ }
Set a delivery in progress state
clientAccountID required | string Alphanumeric client ID of the user |
deliveryId required | string Alphanumeric delivery ID |
Simple Delivery
{ }
{ }
Generate a PDF Delivery Sheet
clientAccountID required | string Alphanumeric client ID of the user |
deliveryId required | string Alphanumeric delivery ID |
Simple Delivery
{ }
Replace an entire delivery item object.
clientAccountID required | string Alphanumeric client ID of the user |
deliveryID required | string Alphanumeric delivery ID |
deliveryID required | string Alphanumeric delivery item ID |
Simple Delivery
{ }
{ }
Query all processes
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url process ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
q | string search for substring in name |
location | string or array the UUID representation of one or more locations |
assigned_staff | string the UUID representation of a staff member |
started_at | object object with filter options for started_at field. Should contain "start" date, "end" date, or both. |
finished_at | object object with filter options for finished_at field. Should contain "start" date, "end" date, or both. |
fields | Array specify which process properties to return |
tillhub.processes.get((err, result) => {})
Query all processes
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url process ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
q | string search for substring in name |
location | string or array the UUID representation of one or more locations |
assigned_staff | string the UUID representation of a staff member |
started_at | object object with filter options for started_at field. Should contain "start" date, "end" date, or both. |
finished_at | object object with filter options for finished_at field. Should contain "start" date, "end" date, or both. |
fields | Array specify which process properties to return |
tillhub.processes.get((err, result) => {})
Get a single process object.
clientAccountID required | string Alphanumeric client ID of the user |
processId required | string Alphanumeric configuration ID |
fields | Array specify which process properties to return |
tillhub.processes.get((err, result) => {})
Update parts of a process object.
clientAccountID required | string Alphanumeric client ID of the user |
processId required | string Alphanumeric process ID |
Simple Process
null
Get a single process' items array.
clientAccountID required | string Alphanumeric client ID of the user |
processId required | string Alphanumeric configuration ID |
format required | string Example: csv |
tillhub.processes.get((err, result) => {})
It utilizes the same logic as '/api/v1/products/{clientAccountID}' does but adds additional filter to get only not whitelisted products
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric storefront ID |
limit | integer the discrete limit, that will default to 1000 on the legacy route |
cursor | string the alphanumeric cursor field |
cursor_field | string which column to cursor on. Currently we only support |
start | string <date-time> decide the starting updated_at date in this call. This can be used for syncing our keeping up to date with latest changes |
deleted | string the string representation of boolean values as |
active | string the string representation of boolean values as |
type | string query for one or more types |
tag | string query products by tag |
client | string query products by one or more clients |
branch | string send the branch to get branch specific data like, stock information. Stock information is only available whn sending a barcode query paramter |
product_group | string query a product by product group |
tax | string query a product by VAT object ID |
account | string query a product by revenue account ID |
lookups | string one or more lookup locations for third party systems |
extended | boolean embed extended fields |
pretty | string pretty format JSON responses or not. Default is not pretty |
field | Array of strings filter any given property of this resource. Use "a.b" to select a field that is nested within field a. |
q | string search for substring in product name and description |
include | Array of strings specify which fields to include in the response. Use "a.b" to select a field that is nested within field a. |
exclude | Array of strings specify which fields to exclude from the response |
tillhub.storefronts.productslist.get((err, result) => {})
Soft delete a single storefront object.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric storefront ID |
tillhub.storefronts.delete((err, result) => {})
{- "status": 200,
- "msg": "Deleted storefront 96341e35-0fe1-4b72-89bc-6f62e9114ac6",
- "request": {
- "host": "staging-api.tillhub.com",
- "id": "UUID"
}
}
Update an entire storefront object.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric storefront ID |
Simple storefront
name | string [ 1 .. 64 ] characters |
(any or null) or string | |
type | string Value: "online" |
external_system_type | string Enum: "tillhub_shop" "localsearch_shop" "ecwid" "shopify" |
resource_syncs_outbound | Array of strings Items Enum: "customers" "products" "categories" "transactions" "orders" |
resource_syncs_inbound | Array of strings Items Enum: "customers" "products" "categories" "transactions" "orders" |
(any or null) or string | |
(any or null) or string | |
(any or null) or string | |
(any or null) or object | |
(any or null) or string | |
(any or null) or string | |
active | boolean Default: true Soft disable or enable this storefronts. |
deleted | boolean Default: false Soft delete this storefronts. |
(any or null) or object | |
(any or null) or object | |
auto_sync | boolean Default: false Sets wether the storefront's resources should be automatically sync. |
whitelisted | boolean Default: false Sets wether the storefront's products are whitelisted. |
{- "name": "string",
- "description": { },
- "type": "online",
- "external_system_type": "tillhub_shop",
- "resource_syncs_outbound": [
- "customers"
], - "resource_syncs_inbound": [
- "customers"
], - "link": { },
- "external_reference_id": { },
- "external_api_base": { },
- "auth": { },
- "default_category_tree": { },
- "default_location": { },
- "active": true,
- "deleted": false,
- "metadata": { },
- "profile": { },
- "auto_sync": false,
- "whitelisted": false
}
Query all storefronts of a user.
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
deleted | string the string representation of boolean values as |
tillhub.storefronts.get((err, result) => {})
Create a new storefront, set default profile and sync categories in the external partner system
clientAccountID required | string Alphanumeric client ID of the user |
Simple storefront
name required | string [ 1 .. 64 ] characters |
(any or null) or string | |
type required | string Value: "online" |
external_system_type required | string Enum: "ecwid" "tillhub_shop" "localsearch_shop" "shopify" |
resource_syncs_outbound | Array of strings Items Enum: "customers" "products" "categories" "transactions" "orders" |
resource_syncs_inbound | Array of strings Items Enum: "customers" "products" "categories" "transactions" "orders" |
(any or null) or string | |
(any or null) or string | |
(any or null) or string | |
required | (any or null) or object |
(any or null) or string | |
(any or null) or string | |
active | boolean Default: true Soft disable or enable this storefronts. |
deleted | boolean Default: false Soft delete this storefronts. |
(any or null) or object | |
(any or null) or object | |
auto_sync | boolean Default: false Sets wether the storefront's resources should be automatically sync. |
whitelisted | boolean Default: false Sets wether the storefront's products are whitelisted. |
{- "name": "string",
- "description": { },
- "type": "online",
- "external_system_type": "ecwid",
- "resource_syncs_outbound": [
- "customers"
], - "resource_syncs_inbound": [
- "customers"
], - "link": { },
- "external_reference_id": { },
- "external_api_base": { },
- "auth": { },
- "default_category_tree": { },
- "default_location": { },
- "active": true,
- "deleted": false,
- "metadata": { },
- "profile": { },
- "auto_sync": false,
- "whitelisted": false
}
Update an entire storefront profile object.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric storefront ID |
Simple storefront profile
object | |
object | |
object | |
object |
{- "company": {
- "companyName": "string",
- "email": "string",
- "street": "string",
- "city": "string",
- "countryCode": "st",
- "postalCode": "string",
- "stateOrProvinceCode": "string",
- "phone": "string"
}, - "formatsAndUnits": {
- "currency": "str",
- "currencyPrefix": "string",
- "currencySuffix": "string",
- "currencyPrecision": 0,
- "currencyGroupSeparator": "string",
- "currencyDecimalSeparator": "string",
- "currencyTruncateZeroFractional": true,
- "currencyRate": 0,
- "weightUnit": "CARAT",
- "weightPrecision": 0,
- "weightGroupSeparator": "string",
- "weightDecimalSeparator": "string",
- "weightTruncateZeroFractional": true,
- "dateFormat": "string",
- "timeFormat": "string",
- "timezone": "string",
- "dimensionsUnit": "string",
- "orderNumberPrefix": "string",
- "orderNumberSuffix": "string"
}, - "languages": {
- "enabledLanguages": [
- "string"
], - "facebookPreferredLocale": "string"
}, - "taxSettings": {
- "automaticTaxEnabled": true,
- "taxes": [
- {
- "id": 0,
- "name": "string",
- "enabled": true,
- "includeInPrice": true,
- "useShippingAddress": true,
- "taxShipping": true,
- "appliedByDefault": true,
- "defaultTax": 19,
- "rules": [
- {
- "zoneId": "string",
- "tax": 0
}
]
}
]
}
}
Sync category trees and categories of a user with storefront from the scratch.
clientAccountID required | string Alphanumeric client ID of the user |
storefrontID required | string Alphanumeric storefront ID |
tillhub.storefronts.categories.sync((err, result) => {})
Get the latest sync status of a storefront.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric storefront ID of the user |
tillhub.storefronts.sync.status.get((err, result) => {})
Get all whitelisted products from a storefront.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric storefront ID |
tillhub.storefronts.whitelist.get((err, result) => {})
Create a products whitelist for the storefront
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric storefront ID |
Products IDs
null
Get metadata of whitelisted products from a storefront.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric storefront ID |
tillhub.storefronts.whitelist.meta.get((err, result) => {})
The transactions API is the core of the application, stays stable in regards to API compatibility, but is undergoing constant maintenance and refactoring, we will to land in higher version APIs.
Please stay up to date to changes, as they touch legalities.
The model is currently divided into sub models that also drive client behavior
Common tasks of transactions are
In various tax regions governments require all transactions to be signed. Singing system providers offer technical solutions for that, which in our contexts are usually cloud offerings.
We are abstracting those APIs implicitly in our transaction APIs. The breadth and depth of those APIs is usually higher than what we abstract. E.g. some vendor's offering substitute the need of a full POS system, by having their systems as primary resources for transactions. Our implementation always uses those systems as secondary push API, where we will store the data they returned.
Our current offerings are:
Country | Currency | Provider | API Features | Levels | Comment |
---|---|---|---|---|---|
Austria (at) | EUR | Fiskaltrust | Storing sales, refunds and cancellations | branches, registers |
The systems can be used on various level. E.g. an austrian Fiskaltrust product can be purchased for every branch or register. Vendors and tax authorities often do not require the level of entity in any form, so decision usually is based on the business need. By a product for a branch is of course more cost effective, since it covers the transactions of all its registers.
The systems we offer usually need to be purchased at the vendor or reseller. After that the following flow applies
Secondary actions you can or must take or we will cover.
signing_requested
and be queued for reconciliation. The reconciliation we be attempted after every following transaction.The API currently relies on v0 transactions and is going to be transitioned to v1 in the near future. While the v1 routes already exist, business still mainly relies on the v0 model.
The v0 model can be accessed from two routes:
In order to transition from the v0 to v1 model, the v0 model contains all additional v1 fields (hybrid model). The v1 fields are prefixed with an underscore. E.g. the property "context" is from v0, while "_context" belongs to v1. All the properties from the v0 model are marked with a "deprecated" flag to signify that they are going to be outphased. However, all the API routes dedicated to v0 (as stated above) still depend on all v0 fields to be sent. Please regard v1 as additional data, that is not necessary but highly recommended to sent.
Information about a new transaction
webhook_id | string <uuid> The webhook UUID |
event_id | string <uuid> The event UUID |
event_entity | string The entity name the event refers to |
event_type | string The event type (e.g. create, update, delete) |
event_version | number The event payload version |
entity_instance_id | string <uuid> The entity instance UUID |
timestamp | string <date-time> The date and time event was received by webhooks service |
object |
{- "webhook_id": "ff30cfdf-5167-4f72-b4fc-c1d72db3c07e",
- "event_id": "c6fe918a-7bdc-4ccd-af36-95c03853233d",
- "event_entity": "transaction",
- "event_type": "create",
- "event_version": 0,
- "entity_instance_id": "10b06f38-031d-4e0c-8706-0474c8c5b61c",
- "timestamp": "2024-12-02T18:25:24.072Z",
- "payload": {
- "id": "860defb8-5598-421d-9da4-f0826e767536",
- "update_id": 0,
- "created_at": {
- "iso": "2021-06-03T11:18:47.725Z",
- "unix": 1622719127725
}, - "updated_at": {
- "iso": "2021-06-03T11:18:47.725Z",
- "unix": 1622719127725
}, - "temporary_id": "string",
- "_id": "97074aa7-ed27-464c-890e-0b47ab153b8a",
- "fr_transaction_id": 0,
- "dev_uuid": "886eef646bc1c4d79eb8495321bbd472",
- "transaction_number": 34,
- "balance_number": 5,
- "branch_number": 7,
- "register_number": 11,
- "guid": "00020002000120190123175129150",
- "date": "2019-01-23 16:51:29.143+00",
- "cashier_staff_number": "0018",
- "branch_fa_ident": { },
- "geo_data": { },
- "currency_iso_code": "EUR",
- "total": 3500,
- "change": 500,
- "type_name": "sale",
- "customer_number": "0000000000171088",
- "customer_receipt": "string",
- "merchant_receipt": "string",
- "barcode": "RTC078DFCE",
- "customer_description": "Tamás Constantin Regie",
- "payback_number": "string",
- "metadata": {
- "signing_error_counter": 13,
- "previous_tx_client_id": "5ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "authorizer_staff_uuid": "5ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "origin": {
- "cart": "ff8d037b-c502-4473-a8fa-65b8186361a6",
- "external_reference_id": "string"
}, - "device": {
- "identifier_for_vendor": "A2700DA6-CE09-4041-9724-1313DEF295E2",
- "keychain_counting_numbers": "sale: 3, expense: 0, balance: 0, deliveryNote: 0, savedCart: 0, order: 1",
- "app_info": "de.tillhub.tillhubstage.dev 1.0:0",
- "os_info": "iPadOS 17.4",
- "model_info": "Simulator iPad (10th generation)"
}, - "order": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "ros_id": "a0f5d53b-b79c-4346-aba9-21eb5c8776fd",
- "number": 34,
- "table_number": 34,
- "delta_number": 34,
- "started_at": "2019-01-23 16:51:29.143+00",
- "origin": {
- "table": "ead2351d-ea67-45f9-ad4f-0abcbefa9037",
- "table_name": "Table 23",
- "room": "00d2351d-ea67-05f9-ad4f-0abcbefa903a",
- "room_name": "Garden"
}
}
}, - "client_id": "string",
- "cashier_staff": "5ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "expense": {
- "expense_account": "09a9a469-c16b-4b54-835d-692d05d218f9",
- "expense_account_name": "2 Testausgabe",
- "expense_account_type": "expense",
- "expense_fa_account": "1338",
- "balance_client_id": "c1265a62-62e9-46de-9df7-4d3009c46068",
- "safe_id": "09a9a469-c16b-4b54-835d-692d05d218f9",
- "context": [
- {
- "name": "reason",
- "value": "string"
}
]
}, - "temp_staff": "5ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "client": "5ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "customer": "5ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "context": [
- {
- "name": "name",
- "value": "string"
}
], - "timezone": { },
- "has_promotion": false,
- "applied_promotions": [
- {
- "id": "AB3847a66-97dc-4ac2-8e8a-c44920e1f22f",
- "name": "Summer Sale",
- "compiled": "IWZ1bmN0aW9uKHQpe2lmKCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmInVuZGVmaW5lZCIhPXR5cGVvZiBtb2R1bGUpbW9kdWxlLmV4cG9ydHM9dCgpO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClkZWZpbmUoW10sdCk7ZWxzZXsoInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp0aGlzKS5tYWluPXQoKX19KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIHQoZSxvLHIpe2Z1bmN0aW9uIG4odSxpKXtpZighb1t1XSl7aWYoIWVbdV0pe3ZhciBzPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFpJiZzKXJldHVybiBzKHUsITApO2lmKGYpcmV0dXJuIGYodSwhMCk7dmFyIGw9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrdSsiJyIpO3Rocm93IGwuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsbH12YXIgYT1vW3VdPXtleHBvcnRzOnt9fTtlW3VdWzBdLmNhbGwoYS5leHBvcnRzLGZ1bmN0aW9uKHQpe3JldHVybiBuKGVbdV1bMV1bdF18fHQpfSxhLGEuZXhwb3J0cyx0LGUsbyxyKX1yZXR1cm4gb1t1XS5leHBvcnRzfWZvcih2YXIgZj0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSx1PTA7dTxyLmxlbmd0aDt1KyspbihyW3VdKTtyZXR1cm4gbn19KCkoezE6W2Z1bmN0aW9uKHQsZSxvKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOntpdGVtczpbXX07Y29uc3QgZT1bXSxvPVtdO2xldCByPTAsbj0wO2lmKHQuaXRlbXMuZm9yRWFjaCh0PT57IjFlMjcwNTNmLWZmZDEtNDk3Mi05YjEzLTdlMTBlNWJjODkwYyI9PT10LnByb2R1Y3RfaWQmJihyKz10LnF0eSksIjFlMjcwNTNmLWZmZDEtNDk3Mi05YjEzLTdlMTBlNWJjODkwYyI9PT10LnByb2R1Y3RfaWQmJihuKz10LnF0eSxlLnB1c2goT2JqZWN0LmFzc2lnbih7fSx0KSkpfSksIWUubGVuZ3RoKXJldHVybiBvO2NvbnN0IGY9ZnVuY3Rpb24odCxlLG8scil7cmV0dXJuIHIuYW1vdW50X3RvdGFsX2dyb3NzLHIucXR5LDV9KDAsMCwwLGVbMF0pLHU9TWF0aC5mbG9vcihyLzEpLGk9TWF0aC5mbG9vcihuLzEpO2xldCBzPXU8PWk/dTppO2lmKCEocz1NYXRoLmZsb29yKG4vMikpKXJldHVybiBvO2xldCBsPTA7Zm9yKGxldCB0IG9mIGUpe2NvbnN0IGU9dC5xdHk7aWYoIShNYXRoLmNlaWwoKGwrdC5xdHkpLzEpPD1zKSl7aWYobHx8cyl7Y29uc3Qgcj0xKnMtbCxuPXIqZix1PShlLXIpKih0LmFtb3VudF90b3RhbF9ncm9zcy9lKTt0LnByb21vdGVkX3RvdGFsX2dyb3NzPWEobit1LDIpLHQucHJvbW90YWJsZV9xdHk9cixkZWxldGUgdC5hbW91bnRfdG90YWxfZ3Jvc3Msby5wdXNoKHQpLHM9MH1icmVha31zLT1NYXRoLmZsb29yKChsK2UpLzEpLGw9KGwrZSklMSx0LnByb21vdGVkX3RvdGFsX2dyb3NzPWEoZSpmLDIpLHQucHJvbW90YWJsZV9xdHk9ZSxkZWxldGUgdC5hbW91bnRfdG90YWxfZ3Jvc3Msby5wdXNoKHQpfXJldHVybiBvO2Z1bmN0aW9uIGEodCxlKXtyZXR1cm4gTnVtYmVyKE1hdGgucm91bmQodCsiZSIrZSkrImUtIitlKX19fSx7fV19LHt9LFsxXSkoMSl9KTs="
}
], - "branch": "7c628a07-d557-4cd4-9105-51f9aade2c65",
- "register": "4b794f4b-e370-4a63-80bf-1886f8318f00",
- "wallet": "7e04ca6f-1090-4fc4-bba5-96db96e0dd2b",
- "_type": "sale",
- "_custom_id": "Sale Nr. 5",
- "_balance_client_id": "c1265a62-62e9-46de-9df7-4d3009c46068",
- "_staff": "b3465a62-62e9-46de-9df7-4d3009c46068",
- "_temporary_staff": "b3465a62-62e9-46de-9df7-4d3009c46068",
- "_context": null,
- "_external_reference_id": "823742686434462376376376473647346",
- "_customer_external_reference_id": "135543344343",
- "_origins": [
- {
- "type": "checked_out_delivery_note",
- "id": null,
- "custom_id": null,
- "date": "2018-01-29T14:55:05.000Z"
}
], - "_depends_on": [
- {
- "type": "canceled_sale",
- "id": null,
- "custom_id": null,
- "client_id": null,
- "date": "2018-01-29T14:55:05.000Z"
}
], - "_related_to": [
- {
- "type": "invoice",
- "id": "f2ac2cae-97ff-42a1-967b-0a35222ab6d1"
}
], - "_location": "{ \"lat\": 52.5065133, \"lng\": 13.1445545}",
- "items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "update_id": 0,
- "temporary_id": "string",
- "created_at": {
- "iso": "2021-06-03T11:18:47.725Z",
- "unix": 1622719127725
}, - "updated_at": {
- "iso": "2021-06-03T11:18:47.725Z",
- "unix": 1622719127725
}, - "_id": "b3063bbe-d44d-42a6-8bbf-971f5d88f848",
- "fr_transaction_id": 0,
- "quantity": null,
- "article_number": null,
- "article_attr_desc": null,
- "article_price": 799,
- "selling_price": 612,
- "selling_price_total": 1671,
- "article_fa_account_number": "8400",
- "vat_percentage": 1900,
- "vat_fa_account_number": "1991",
- "vat_amount": 267,
- "salesman_staff_number": "00603",
- "product_number": "998877",
- "article_id": null,
- "vat_amount_euro": null,
- "discount_amount": 187,
- "product_name": "Soft Soothing Spray",
- "guid": null,
- "addons": [
- {
- "addon": "ac847a66-d7dc-4ac2-8e8a-c44920e1f220",
- "product": "ff847a44-07dc-4ac2-8e8a-c44920e1f220",
- "price": 0.99,
- "currency": "EUR",
- "quantity": 3.6,
- "stock_quantity": 3.6,
- "name": "Extra Mushrooms"
}
], - "product_group_number": "004",
- "product_group_id": null,
- "product_supplier_name": "string",
- "is_refund": 0,
- "related_transaction_number": 49,
- "related_transaction_date": "2018-01-29T14:55:05.000Z",
- "related_transaction_type": "sale",
- "article": "cf8eae54-79da-4ad1-ab3a-878db60d4743",
- "attributes_description": "red | big | 32",
- "attributes": {
- "color": "red"
}, - "is_tip": false,
- "is_owner": false,
- "reference_cartitem_client_id": "01331B44-130B-45D4-97A7-401247FD5B68",
- "is_service": false,
- "used_barcode": "0E9761310XF",
- "is_voucher": false,
- "discounts": [
- {
- "name": "Bonus",
- "group": "customer",
- "order_index": 0,
- "type_name": "percentage",
- "value": "25.137",
- "amount": 43,
- "amount_total": 312,
- "external_reference_id": "string",
- "source_id": "03063bbe-e44d-42f6-8bbf-971f5d88f848",
- "is_automatic": false,
- "order": "first"
}
], - "context": [
- {
- "name": "return_reason",
- "value": "string"
}
], - "_context": null,
- "type": "item",
- "client_id": "d0d40841-b1a7-438a-9d1e-2bfec590d2e3",
- "position": "1",
- "_qty": "100",
- "_unit": "kg",
- "_currency": "EUR",
- "_product": "43847a66-97dc-4ac2-8e8a-c44920e1f22f",
- "_product_custom_id": "AKI-1234566",
- "_custom_id": "AKI-1234566",
- "_tax": "9d110eb2-2245-4e14-9574-49b502f3a9b3",
- "_vat_rate": "0.19",
- "_vat_rate_class": "normal",
- "branch": "f2ac2cae-97ff-42a1-967b-0a35222ab6d1",
- "register": "9d110eb2-2245-4e14-9574-49b502f3a9b3",
- "salesman_staff": "b3465a62-62e9-46de-9df7-4d3009c46068",
- "_taxes": [
- {
- "tax": "a3be1e02-7983-4cba-b7b8-94453c0536ef",
- "position": "1",
- "rate": "0.21",
- "custom_id": null,
- "display": "Another tax"
}
], - "configuration": {
- "tax_switched": true,
- "action": {
- "tax": "2b46be7d-65ac-4a23-a5dd-524b80fe8e49",
- "default": true,
- "name": "string"
}
}, - "_account": "a5380b42-6025-49de-bb1d-c9357df96506",
- "_product_group": "897bac99-f98e-433a-bca0-19acc380fb12",
- "_tax_amount": -1000000,
- "_tax_amount_total": -1000000,
- "_discount_amount": 0,
- "_discount_amount_total": 0,
- "_promotion_amount": -1000000,
- "_promotion_amount_total": -1000000,
- "_discounts": [
- {
- "amount": -1000000,
- "amount_total": -1000000,
- "order_index": 100,
- "currency": "str",
- "value": -1000000,
- "rate": 1,
- "client_id": "string",
- "external_reference_id": "string",
- "group": "customer",
- "name": "string",
- "source_id": "ae50a35c-df42-4eff-ba26-f8bc28d2af81",
- "assignment_id": "string",
- "assignment_source": "cart",
- "is_automatic": false,
- "order": "first"
}
], - "_origins": [
- {
- "type": "checked_out_delivery_note",
- "id": null,
- "custom_id": null,
- "date": "2018-01-29T14:55:05.000Z"
}
], - "_depends_on": [
- {
- "type": "canceled_sale",
- "id": null,
- "custom_id": null,
- "client_id": null,
- "date": "2018-01-29T14:55:05.000Z"
}
], - "_related_to": [
- {
- "type": "invoice",
- "id": "f2ac2cae-97ff-42a1-967b-0a35222ab6d1"
}
], - "_product_service_answers": [
- {
- "id": "1d53f799-c24f-49e3-b68f-93ae5fc69921",
- "question": "Which colour is used?",
- "type": "checkbox",
- "content_type": "string",
- "required": null,
- "answer": null
}
], - "_comments": "I Did this sale. Went to the next one. But made a comment.",
- "_note": "Please follow this instruction that you can read here on a receipt.",
- "_external_reference_id": "823742686434462376376376473647346",
- "_amount_net": -1000000,
- "_amount_gross": -1000000,
- "_amount_total_net": -1000000,
- "_amount_total_gross": -1000000,
- "_amount_unit_net": -1000000,
- "_amount_unit_gross": -1000000,
- "_is_refund": true,
- "custom_properties": { },
- "account": "a5380b42-6025-49de-bb1d-c9357df96506",
- "product_group": "897bac99-f98e-433a-bca0-19acc380fb12"
}
], - "payments": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "update_id": 0,
- "temporary_id": "string",
- "created_at": {
- "iso": "2021-06-03T11:18:47.725Z",
- "unix": 1622719127725
}, - "updated_at": {
- "iso": "2021-06-03T11:18:47.725Z",
- "unix": 1622719127725
}, - "_id": "97074aa7-ed27-464c-890e-0b47ab153b8a",
- "fr_transaction_id": 0,
- "change": 800,
- "amount_final": 1200,
- "fa_account_number": "100575",
- "amount": 2000,
- "currency_iso_code": "EUR",
- "account": "55224036-e83f-4ece-8dbe-504e69d662c0",
- "exchange_rate": 2.315,
- "payment_option_name": "American Express",
- "payment_option_type_name": "undefined",
- "payment_option_id": "96b619a6-6189-4f03-a135-e1b307d664de",
- "guid": { },
- "date": "2018-01-29T14:55:05.000Z",
- "tip": 110,
- "terminal_journal": "<?xml version...",
- "terminal_response": "<?xml version...",
- "context": [
- {
- "name": "voucher_value",
- "value": "string"
}
], - "client_id": "d0d40841-b1a7-438a-9d1e-2bfec590d2e3",
- "_type": "card",
- "_context": {
- "title": null,
- "account": null,
- "terminal": {
- "device_id": "51098708",
- "transaction_id": "d0d40841-b1a7-438a-9d1e-2bfec590d2e3",
- "api": "adyen",
- "payment_provider": null,
- "card_circuit": null,
- "card_pay_id": null,
- "card_pan": null,
- "receipts": null,
- "raw_response": null,
- "is_connected": null
}, - "voucher": null,
- "buy_now_pay_later": null
}, - "payment_option": "bd7d8a90-83d1-4d53-8659-b205b409d6e1",
- "_position": 1,
- "_currency": "",
- "_amount_total": -1000000,
- "_tip_total": -1000000,
- "_amount_given": "50.00",
- "_amount_requested": "49.98",
- "_amount_change": "49.98",
- "branch": "f2ac2cae-97ff-42a1-967b-0a35222ab6d1",
- "register": "9d110eb2-2245-4e14-9574-49b502f3a9b3",
- "cost_center": "CORP-123",
- "_account": "a5380b42-6025-49de-bb1d-c9357df96506",
- "_comments": "I Did this sale. Went to the next one. But made a comment.",
- "_note": "Please follow this instruction that you can read here on a receipt.",
- "_origins": [
- {
- "type": "checked_out_delivery_note",
- "id": null,
- "custom_id": null,
- "date": "2018-01-29T14:55:05.000Z"
}
], - "_depends_on": [
- {
- "type": "canceled_sale",
- "id": null,
- "custom_id": null,
- "client_id": null,
- "date": "2018-01-29T14:55:05.000Z"
}
], - "_related_to": [
- {
- "type": "invoice",
- "id": "f2ac2cae-97ff-42a1-967b-0a35222ab6d1"
}
], - "_external_reference_id": "823742686434462376376376473647346"
}
], - "status": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "created_at": {
- "iso": "2021-06-03T11:18:47.725Z",
- "unix": 1622719127725
}, - "updated_at": {
- "iso": "2021-06-03T11:18:47.725Z",
- "unix": 1622719127725
}, - "signed_at": "2018-01-29T14:55:05.000Z",
- "signature": {
- "started_at": "2019-07-10T18:41:02.000Z",
- "data": "MEQCIAy4P9k+7x9saDO0uRZ4El8QwN+qTgYiv1DIaJIMWRiuAiAt+saFDGjK2Yi5Cxgy7PprXQ5O0seRgx4ltdpW9REvwA==",
- "caption": "NF525 Vente",
- "qr_code_data": "V0;955002-00;Kassenbeleg-V1;Beleg^0.00_2.55_0.00_0.00_0.00^2.55:Bar;18;112;2019-07-10T18:41:04.000Z;2019-07-10T18:41:04.000Z;ecdsa-plain-SHA256;unixTime;MEQCIAy4P9k+7x9saDO0uRZ4El8QwN+qTgYiv1DIaJIMWRiuAiAt+saFDGjK2Yi5Cxgy7PprXQ5O0seRgx4ltdpW9REvwA==;BHhWOeisRpPBTGQ1W4VUH95TXx2GARf8e2NYZXJoInjtGqnxJ8sZ3CQpYgjI+LYEmW5A37sLWHsyU7nSJUBemyU=",
- "format": "qr",
- "payload": null,
- "request_payload": null,
- "client_id": "TillhubPOS.0014.0001",
- "counter": 227,
- "unit": "soTFFH9xiZP9JYWCPRgvpw6xhZ3ttbWDjfS4ky4AMEk=",
- "public_key": "string",
- "algorithm": "ecdsa-plain-SHA256",
- "process_type": "Kassenbeleg-V1",
- "receipt_type": "Beleg",
- "process_data": "Beleg^0.00_2.55_0.00_0.00_0.00^2.55:Bar",
- "transactionNumber": 16,
- "transaction_id": "53451613-1a15-491f-bd01-033a427084b7",
- "error": "string",
- "error_counter": 0
}, - "metadata": { },
- "dispatched_at": "2018-11-04T23:18:43.075Z",
- "printed_at": "2018-11-04T23:18:43.075Z",
- "status": "signing_requested",
- "signature_type": "fiskaltrust",
- "source_type": "transaction",
- "canceled_at": "2018-01-29T14:55:05.000Z",
- "refunded_at": "2018-01-29T14:55:05.000Z"
}, - "external_rewards": {
- "payback_data": "MEQCIAy4P9k+7x9saDO0uRZ4El8QwN+qTgYiv1DIaJIMWRiuAiAt+saFDGjK2Yi5Cxgy7PprXQ5O0seRgx4ltdpW9REvwA=="
}
}
}
Write a Transaction to the database with the v0 model
clientAccountID required | string Alphanumeric client ID of the user |
The contents of a Transaction
id required | string |
{- "id": "string"
}
Get all transactions. This endpoint is paged on 1000 objects. If the "legacy" flag is set, the v1_legacy transactions will be returned in the format of v1_proper.
clientAccountID required | string Alphanumeric client ID of the user |
legacy | boolean query the v1_legacy transactions and return in the format of v1_proper |
date_start | string URL encoded ISO Date |
date_end | string URL encoded ISO Date |
register_custom_id | string register number of the register |
register | string the alphanumeric uuid of a register |
branch_custom_id | string branch number of the branch |
branch | string the alphanumeric uuid of a branch |
receipt_number | string custom_id in the new v1 model / transaction_number in the old model |
staff | string alphanumeric uuid of the cashier_staff |
customer | string alphanumeric uuid of the customer |
type | string type of the transaction, e.g. 'sale' or 'expense' |
context_locations | string context locations id to filter transactions by |
tillhub.transactions.get((err, result) => {})
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 10,
- "results": [
- {
- "id": "860defb8-5598-421d-9da4-f0826e767536",
- "created_at": "2018-11-04T23:18:43.075Z",
- "channel": "api",
- "client_account": "061f91a3-eba2-40b8-9a76-115189d6741e",
- "receipt": "06624521-f101-4e59-99d6-5ccfe284eade",
- "receipts": null,
- "date": "2018-01-29T14:55:05.000Z",
- "type": "sale",
- "client_id": null,
- "custom_id": null,
- "custom_id_last": null,
- "branch": null,
- "branch_custom_id": null,
- "register": null,
- "register_custom_id": null,
- "client": null,
- "client_custom_id": null,
- "staff": null,
- "cashier_staff": null,
- "device": null,
- "context": null,
- "balance_last": null,
- "balance_custom_id_last": null,
- "balance_custom_id_next": null,
- "external_reference_id": null,
- "external_reference": null,
- "customer": null,
- "customer_external_reference_id": null,
- "comments": null,
- "code": null,
- "metadata": null,
- "discounts_applied": [ ],
- "delegated": false,
- "origins": null,
- "depends_on": null,
- "related_to": null,
- "location": null,
- "summary_items": [
- {
- "currency": "",
- "amount_total_gross": -1000000,
- "amount_total_net": -1000000,
- "discount_amount_total": 0,
- "tip_amount_total": -1000000,
- "tax_amount_total": -1000000,
- "change_amount_total": -1000000,
- "sub_total": -1000000
}
], - "timezone": { },
- "insert_id": "128",
- "hashes": {
- "sha512_v0": "stringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringst"
}, - "self": {
- "uri": "string",
- "block_transaction": null
}, - "block": {
- "id": "string",
- "previous": "string",
- "transaction": "string"
}, - "previous": "05321210-4546-400d-b70b-e059fef52fc4",
- "exchange_rates": [
- { }
], - "items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "transaction": "6b91fbed-a61e-4512-a48d-a6c1ac2f90cb",
- "created_at": "2018-11-04T23:18:43.075Z",
- "amount": {
- "net": -1000000,
- "gross": -1000000
}, - "amount_total": {
- "net": -1000000,
- "gross": -1000000
}, - "revenue": {
- "net": -1000000,
- "gross": -1000000
}, - "additionalProperties": null,
- "client_id": null,
- "type": "item",
- "position": null,
- "qty": null,
- "unit": null,
- "date": "2018-01-29T14:55:05.000Z",
- "name": "Packaged beans, green",
- "currency": "",
- "product": null,
- "custom_id": null,
- "tax": null,
- "vat_rate": "0.19",
- "branch": null,
- "register": null,
- "salesman_staff": null,
- "taxes": [ ],
- "configuration": null,
- "account": null,
- "product_group": null,
- "tax_amount": -1000000,
- "tax_amount_total": -1000000,
- "discount_amount": 0,
- "discount_amount_total": 0,
- "discounts": [ ],
- "attributes": null,
- "stock_change_enabled": true,
- "origins": null,
- "depends_on": null,
- "related_to": null,
- "product_service_answers": null,
- "context": null,
- "comments": null,
- "external_reference_id": null,
- "external_reference": null,
- "amount_net": -1000000,
- "amount_gross": -1000000,
- "amount_total_net": -1000000,
- "amount_total_gross": -1000000,
- "amount_unit_net": -1000000,
- "amount_unit_gross": -1000000,
- "insert_id": "128",
- "client_account": "061f91a3-eba2-40b8-9a76-115189d6741e",
- "stock": null,
- "stock_change": null,
- "stock_book_item": null
}
], - "payments": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "transaction": "6b91fbed-a61e-4512-a48d-a6c1ac2f90cb",
- "created_at": "2018-11-04T23:18:43.075Z",
- "additionalProperties": null,
- "client_id": null,
- "type": "card",
- "payment_option": null,
- "position": null,
- "date": "2018-01-29T14:55:05.000Z",
- "name": "Packaged beans, green",
- "currency": "",
- "amount_total": -1000000,
- "tip_total": null,
- "amount_given": "50.00",
- "amount_requested": null,
- "amount_change": null,
- "custom_id": null,
- "branch": null,
- "register": null,
- "cost_center": null,
- "account": null,
- "account_change": null,
- "context": null,
- "comments": null,
- "origins": null,
- "depends_on": null,
- "related_to": null,
- "external_reference_id": null,
- "external_reference": null,
- "metadata": null,
- "insert_id": "128",
- "client_account": "061f91a3-eba2-40b8-9a76-115189d6741e"
}
], - "status": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "created_at": {
- "iso": "2021-06-03T11:18:47.725Z",
- "unix": 1622719127725
}, - "updated_at": {
- "iso": "2021-06-03T11:18:47.725Z",
- "unix": 1622719127725
}, - "signed_at": "2018-01-29T14:55:05.000Z",
- "signature": {
- "started_at": "2019-07-10T18:41:02.000Z",
- "data": "MEQCIAy4P9k+7x9saDO0uRZ4El8QwN+qTgYiv1DIaJIMWRiuAiAt+saFDGjK2Yi5Cxgy7PprXQ5O0seRgx4ltdpW9REvwA==",
- "caption": "NF525 Vente",
- "qr_code_data": "V0;955002-00;Kassenbeleg-V1;Beleg^0.00_2.55_0.00_0.00_0.00^2.55:Bar;18;112;2019-07-10T18:41:04.000Z;2019-07-10T18:41:04.000Z;ecdsa-plain-SHA256;unixTime;MEQCIAy4P9k+7x9saDO0uRZ4El8QwN+qTgYiv1DIaJIMWRiuAiAt+saFDGjK2Yi5Cxgy7PprXQ5O0seRgx4ltdpW9REvwA==;BHhWOeisRpPBTGQ1W4VUH95TXx2GARf8e2NYZXJoInjtGqnxJ8sZ3CQpYgjI+LYEmW5A37sLWHsyU7nSJUBemyU=",
- "format": "qr",
- "payload": null,
- "request_payload": null,
- "client_id": "TillhubPOS.0014.0001",
- "counter": 227,
- "unit": "soTFFH9xiZP9JYWCPRgvpw6xhZ3ttbWDjfS4ky4AMEk=",
- "public_key": "string",
- "algorithm": "ecdsa-plain-SHA256",
- "process_type": "Kassenbeleg-V1",
- "receipt_type": "Beleg",
- "process_data": "Beleg^0.00_2.55_0.00_0.00_0.00^2.55:Bar",
- "transactionNumber": 16,
- "transaction_id": "53451613-1a15-491f-bd01-033a427084b7",
- "error": "string",
- "error_counter": 0
}, - "metadata": { },
- "dispatched_at": "2018-11-04T23:18:43.075Z",
- "printed_at": "2018-11-04T23:18:43.075Z",
- "status": "signing_requested",
- "signature_type": "fiskaltrust",
- "source_type": "transaction",
- "canceled_at": "2018-01-29T14:55:05.000Z",
- "refunded_at": "2018-01-29T14:55:05.000Z"
}
}
], - "cursor": {
}
}
Write a Transaction to the database with the v1 model
clientAccountID required | string Alphanumeric client ID of the user |
The contents of a Transaction
date required | string <date-time> A user defined ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z. This is used to track local client time as oppsed to |
type required | string Enum: "sale" "sale_cancel" "invoice" "invoice_cancel" "expense" "expense_cancel" "deposit" "deposit_cancel" "bank_deposit" "bank_deposit_cancel" "bank_expense" "bank_expense_cancel" "safe_expense" "safe_expense_cancel" "safe_deposit" "safe_deposit_cancel" "tip_expense" "tip_expense_cancel" "tip_deposit" "tip_deposit_cancel" The supported transaction types |
string or (any or null) Default: null | |
string or (any or null) Default: null | |
string or (any or null) Default: null | |
string or (any or null) Default: null | |
string or (any or null) Default: null | |
string or (any or null) Default: null | |
string or (any or null) Default: null | |
string or (any or null) Default: null | |
string or (any or null) Default: null | |
string or (any or null) Default: null | |
string or (any or null) Default: null | |
string or (any or null) Default: null | |
object or (any or null) Default: null | |
string or (any or null) Default: null | |
string or (any or null) Default: null | |
string or (any or null) Default: null | |
string or (any or null) Default: null | |
object or (any or null) Default: null | |
string or (any or null) Default: null | |
string or (any or null) Default: null | |
string or (any or null) Default: null | |
object or (any or null) Default: null | |
object or (any or null) Default: null | |
Array of objects or (any or null) Default: [] | |
boolean or (any or null) Default: false | |
Array of objects or (any or null) Default: null | |
Array of objects or (any or null) Default: null | |
Array of objects or (any or null) Default: null | |
Array of objects or (any or null) Default: null | |
object or (any or null) Default: null | |
Array of objects or (any or null) | |
(any or null) or string | |
required | Array of objects non-empty |
required | Array of objects |
object |
{- "date": "2018-01-29T14:55:05.000Z",
- "type": "sale",
- "client_id": null,
- "custom_id": null,
- "custom_id_last": null,
- "branch": null,
- "branch_custom_id": null,
- "register": null,
- "register_custom_id": null,
- "client": null,
- "client_custom_id": null,
- "staff": null,
- "cashier_staff": null,
- "device": null,
- "context": null,
- "balance_last": null,
- "balance_custom_id_last": null,
- "balance_custom_id_next": null,
- "external_reference_id": null,
- "external_reference": null,
- "customer": null,
- "customer_external_reference_id": null,
- "comments": null,
- "code": null,
- "metadata": null,
- "discounts_applied": [ ],
- "delegated": false,
- "receipts": null,
- "origins": null,
- "depends_on": null,
- "related_to": null,
- "location": null,
- "summary_items": [
- {
- "currency": "",
- "amount_total_gross": -1000000,
- "amount_total_net": -1000000,
- "discount_amount_total": 0,
- "tip_amount_total": -1000000,
- "tax_amount_total": -1000000,
- "change_amount_total": -1000000,
- "sub_total": -1000000
}
], - "timezone": { },
- "items": [
- {
- "additionalProperties": null,
- "client_id": null,
- "type": "item",
- "position": null,
- "qty": null,
- "unit": null,
- "date": "2018-01-29T14:55:05.000Z",
- "name": "Packaged beans, green",
- "currency": "",
- "product": null,
- "custom_id": null,
- "tax": null,
- "vat_rate": "0.19",
- "branch": null,
- "register": null,
- "salesman_staff": null,
- "taxes": [ ],
- "configuration": null,
- "account": null,
- "product_group": null,
- "tax_amount": -1000000,
- "tax_amount_total": -1000000,
- "discount_amount": 0,
- "discount_amount_total": 0,
- "discounts": [ ],
- "attributes": null,
- "stock_change_enabled": true,
- "origins": null,
- "depends_on": null,
- "related_to": null,
- "product_service_answers": null,
- "context": null,
- "comments": null,
- "external_reference_id": null,
- "external_reference": null,
- "amount_net": -1000000,
- "amount_gross": -1000000,
- "amount_total_net": -1000000,
- "amount_total_gross": -1000000,
- "amount_unit_net": -1000000,
- "amount_unit_gross": -1000000
}
], - "payments": [
- {
- "additionalProperties": null,
- "client_id": null,
- "type": "card",
- "payment_option": null,
- "position": null,
- "date": "2018-01-29T14:55:05.000Z",
- "name": "Packaged beans, green",
- "currency": "",
- "amount_total": -1000000,
- "tip_total": null,
- "amount_given": "50.00",
- "amount_requested": null,
- "amount_change": null,
- "custom_id": null,
- "branch": null,
- "register": null,
- "cost_center": null,
- "account": null,
- "account_change": null,
- "context": null,
- "comments": null,
- "origins": null,
- "depends_on": null,
- "related_to": null,
- "external_reference_id": null,
- "external_reference": null,
- "metadata": null
}
], - "status": {
- "signed_at": "2018-01-29T14:55:05.000Z",
- "signature": {
- "started_at": "2019-07-10T18:41:02.000Z",
- "data": "MEQCIAy4P9k+7x9saDO0uRZ4El8QwN+qTgYiv1DIaJIMWRiuAiAt+saFDGjK2Yi5Cxgy7PprXQ5O0seRgx4ltdpW9REvwA==",
- "caption": "NF525 Vente",
- "qr_code_data": "V0;955002-00;Kassenbeleg-V1;Beleg^0.00_2.55_0.00_0.00_0.00^2.55:Bar;18;112;2019-07-10T18:41:04.000Z;2019-07-10T18:41:04.000Z;ecdsa-plain-SHA256;unixTime;MEQCIAy4P9k+7x9saDO0uRZ4El8QwN+qTgYiv1DIaJIMWRiuAiAt+saFDGjK2Yi5Cxgy7PprXQ5O0seRgx4ltdpW9REvwA==;BHhWOeisRpPBTGQ1W4VUH95TXx2GARf8e2NYZXJoInjtGqnxJ8sZ3CQpYgjI+LYEmW5A37sLWHsyU7nSJUBemyU=",
- "format": "qr",
- "payload": null,
- "request_payload": null,
- "client_id": "TillhubPOS.0014.0001",
- "counter": 227,
- "unit": "soTFFH9xiZP9JYWCPRgvpw6xhZ3ttbWDjfS4ky4AMEk=",
- "public_key": "string",
- "algorithm": "ecdsa-plain-SHA256",
- "process_type": "Kassenbeleg-V1",
- "receipt_type": "Beleg",
- "process_data": "Beleg^0.00_2.55_0.00_0.00_0.00^2.55:Bar",
- "transactionNumber": 16,
- "transaction_id": "53451613-1a15-491f-bd01-033a427084b7",
- "error": "string",
- "error_counter": 0
}, - "metadata": { },
- "dispatched_at": "2018-11-04T23:18:43.075Z",
- "printed_at": "2018-11-04T23:18:43.075Z",
- "status": "signing_requested",
- "signature_type": "fiskaltrust",
- "source_type": "transaction",
- "canceled_at": "2018-01-29T14:55:05.000Z",
- "refunded_at": "2018-01-29T14:55:05.000Z"
}
}
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "id": "860defb8-5598-421d-9da4-f0826e767536",
- "created_at": "2018-11-04T23:18:43.075Z",
- "channel": "api",
- "client_account": "061f91a3-eba2-40b8-9a76-115189d6741e",
- "receipt": "06624521-f101-4e59-99d6-5ccfe284eade",
- "receipts": null,
- "date": "2018-01-29T14:55:05.000Z",
- "type": "sale",
- "client_id": null,
- "custom_id": null,
- "custom_id_last": null,
- "branch": null,
- "branch_custom_id": null,
- "register": null,
- "register_custom_id": null,
- "client": null,
- "client_custom_id": null,
- "staff": null,
- "cashier_staff": null,
- "device": null,
- "context": null,
- "balance_last": null,
- "balance_custom_id_last": null,
- "balance_custom_id_next": null,
- "external_reference_id": null,
- "external_reference": null,
- "customer": null,
- "customer_external_reference_id": null,
- "comments": null,
- "code": null,
- "metadata": null,
- "discounts_applied": [ ],
- "delegated": false,
- "origins": null,
- "depends_on": null,
- "related_to": null,
- "location": null,
- "summary_items": [
- {
- "currency": "",
- "amount_total_gross": -1000000,
- "amount_total_net": -1000000,
- "discount_amount_total": 0,
- "tip_amount_total": -1000000,
- "tax_amount_total": -1000000,
- "change_amount_total": -1000000,
- "sub_total": -1000000
}
], - "timezone": { },
- "insert_id": "128",
- "hashes": {
- "sha512_v0": "stringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringst"
}, - "self": {
- "uri": "string",
- "block_transaction": null
}, - "block": {
- "id": "string",
- "previous": "string",
- "transaction": "string"
}, - "previous": "05321210-4546-400d-b70b-e059fef52fc4",
- "exchange_rates": [
- { }
], - "items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "transaction": "6b91fbed-a61e-4512-a48d-a6c1ac2f90cb",
- "created_at": "2018-11-04T23:18:43.075Z",
- "amount": {
- "net": -1000000,
- "gross": -1000000
}, - "amount_total": {
- "net": -1000000,
- "gross": -1000000
}, - "revenue": {
- "net": -1000000,
- "gross": -1000000
}, - "additionalProperties": null,
- "client_id": null,
- "type": "item",
- "position": null,
- "qty": null,
- "unit": null,
- "date": "2018-01-29T14:55:05.000Z",
- "name": "Packaged beans, green",
- "currency": "",
- "product": null,
- "custom_id": null,
- "tax": null,
- "vat_rate": "0.19",
- "branch": null,
- "register": null,
- "salesman_staff": null,
- "taxes": [ ],
- "configuration": null,
- "account": null,
- "product_group": null,
- "tax_amount": -1000000,
- "tax_amount_total": -1000000,
- "discount_amount": 0,
- "discount_amount_total": 0,
- "discounts": [ ],
- "attributes": null,
- "stock_change_enabled": true,
- "origins": null,
- "depends_on": null,
- "related_to": null,
- "product_service_answers": null,
- "context": null,
- "comments": null,
- "external_reference_id": null,
- "external_reference": null,
- "amount_net": -1000000,
- "amount_gross": -1000000,
- "amount_total_net": -1000000,
- "amount_total_gross": -1000000,
- "amount_unit_net": -1000000,
- "amount_unit_gross": -1000000,
- "insert_id": "128",
- "client_account": "061f91a3-eba2-40b8-9a76-115189d6741e",
- "stock": null,
- "stock_change": null,
- "stock_book_item": null
}
], - "payments": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "transaction": "6b91fbed-a61e-4512-a48d-a6c1ac2f90cb",
- "created_at": "2018-11-04T23:18:43.075Z",
- "additionalProperties": null,
- "client_id": null,
- "type": "card",
- "payment_option": null,
- "position": null,
- "date": "2018-01-29T14:55:05.000Z",
- "name": "Packaged beans, green",
- "currency": "",
- "amount_total": -1000000,
- "tip_total": null,
- "amount_given": "50.00",
- "amount_requested": null,
- "amount_change": null,
- "custom_id": null,
- "branch": null,
- "register": null,
- "cost_center": null,
- "account": null,
- "account_change": null,
- "context": null,
- "comments": null,
- "origins": null,
- "depends_on": null,
- "related_to": null,
- "external_reference_id": null,
- "external_reference": null,
- "metadata": null,
- "insert_id": "128",
- "client_account": "061f91a3-eba2-40b8-9a76-115189d6741e"
}
], - "status": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "created_at": {
- "iso": "2021-06-03T11:18:47.725Z",
- "unix": 1622719127725
}, - "updated_at": {
- "iso": "2021-06-03T11:18:47.725Z",
- "unix": 1622719127725
}, - "signed_at": "2018-01-29T14:55:05.000Z",
- "signature": {
- "started_at": "2019-07-10T18:41:02.000Z",
- "data": "MEQCIAy4P9k+7x9saDO0uRZ4El8QwN+qTgYiv1DIaJIMWRiuAiAt+saFDGjK2Yi5Cxgy7PprXQ5O0seRgx4ltdpW9REvwA==",
- "caption": "NF525 Vente",
- "qr_code_data": "V0;955002-00;Kassenbeleg-V1;Beleg^0.00_2.55_0.00_0.00_0.00^2.55:Bar;18;112;2019-07-10T18:41:04.000Z;2019-07-10T18:41:04.000Z;ecdsa-plain-SHA256;unixTime;MEQCIAy4P9k+7x9saDO0uRZ4El8QwN+qTgYiv1DIaJIMWRiuAiAt+saFDGjK2Yi5Cxgy7PprXQ5O0seRgx4ltdpW9REvwA==;BHhWOeisRpPBTGQ1W4VUH95TXx2GARf8e2NYZXJoInjtGqnxJ8sZ3CQpYgjI+LYEmW5A37sLWHsyU7nSJUBemyU=",
- "format": "qr",
- "payload": null,
- "request_payload": null,
- "client_id": "TillhubPOS.0014.0001",
- "counter": 227,
- "unit": "soTFFH9xiZP9JYWCPRgvpw6xhZ3ttbWDjfS4ky4AMEk=",
- "public_key": "string",
- "algorithm": "ecdsa-plain-SHA256",
- "process_type": "Kassenbeleg-V1",
- "receipt_type": "Beleg",
- "process_data": "Beleg^0.00_2.55_0.00_0.00_0.00^2.55:Bar",
- "transactionNumber": 16,
- "transaction_id": "53451613-1a15-491f-bd01-033a427084b7",
- "error": "string",
- "error_counter": 0
}, - "metadata": { },
- "dispatched_at": "2018-11-04T23:18:43.075Z",
- "printed_at": "2018-11-04T23:18:43.075Z",
- "status": "signing_requested",
- "signature_type": "fiskaltrust",
- "source_type": "transaction",
- "canceled_at": "2018-01-29T14:55:05.000Z",
- "refunded_at": "2018-01-29T14:55:05.000Z"
}
}
]
}
Get one transactions.
clientAccountID required | string Alphanumeric client ID of the user |
transactionID required | string the uuid transaction ID |
tillhub.transactions.get((err, result) => {})
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "id": "860defb8-5598-421d-9da4-f0826e767536",
- "created_at": "2018-11-04T23:18:43.075Z",
- "channel": "api",
- "client_account": "061f91a3-eba2-40b8-9a76-115189d6741e",
- "receipt": "06624521-f101-4e59-99d6-5ccfe284eade",
- "receipts": null,
- "date": "2018-01-29T14:55:05.000Z",
- "type": "sale",
- "client_id": null,
- "custom_id": null,
- "custom_id_last": null,
- "branch": null,
- "branch_custom_id": null,
- "register": null,
- "register_custom_id": null,
- "client": null,
- "client_custom_id": null,
- "staff": null,
- "cashier_staff": null,
- "device": null,
- "context": null,
- "balance_last": null,
- "balance_custom_id_last": null,
- "balance_custom_id_next": null,
- "external_reference_id": null,
- "external_reference": null,
- "customer": null,
- "customer_external_reference_id": null,
- "comments": null,
- "code": null,
- "metadata": null,
- "discounts_applied": [ ],
- "delegated": false,
- "origins": null,
- "depends_on": null,
- "related_to": null,
- "location": null,
- "summary_items": [
- {
- "currency": "",
- "amount_total_gross": -1000000,
- "amount_total_net": -1000000,
- "discount_amount_total": 0,
- "tip_amount_total": -1000000,
- "tax_amount_total": -1000000,
- "change_amount_total": -1000000,
- "sub_total": -1000000
}
], - "timezone": { },
- "insert_id": "128",
- "hashes": {
- "sha512_v0": "stringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringst"
}, - "self": {
- "uri": "string",
- "block_transaction": null
}, - "block": {
- "id": "string",
- "previous": "string",
- "transaction": "string"
}, - "previous": "05321210-4546-400d-b70b-e059fef52fc4",
- "exchange_rates": [
- { }
], - "items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "transaction": "6b91fbed-a61e-4512-a48d-a6c1ac2f90cb",
- "created_at": "2018-11-04T23:18:43.075Z",
- "amount": {
- "net": -1000000,
- "gross": -1000000
}, - "amount_total": {
- "net": -1000000,
- "gross": -1000000
}, - "revenue": {
- "net": -1000000,
- "gross": -1000000
}, - "additionalProperties": null,
- "client_id": null,
- "type": "item",
- "position": null,
- "qty": null,
- "unit": null,
- "date": "2018-01-29T14:55:05.000Z",
- "name": "Packaged beans, green",
- "currency": "",
- "product": null,
- "custom_id": null,
- "tax": null,
- "vat_rate": "0.19",
- "branch": null,
- "register": null,
- "salesman_staff": null,
- "taxes": [ ],
- "configuration": null,
- "account": null,
- "product_group": null,
- "tax_amount": -1000000,
- "tax_amount_total": -1000000,
- "discount_amount": 0,
- "discount_amount_total": 0,
- "discounts": [ ],
- "attributes": null,
- "stock_change_enabled": true,
- "origins": null,
- "depends_on": null,
- "related_to": null,
- "product_service_answers": null,
- "context": null,
- "comments": null,
- "external_reference_id": null,
- "external_reference": null,
- "amount_net": -1000000,
- "amount_gross": -1000000,
- "amount_total_net": -1000000,
- "amount_total_gross": -1000000,
- "amount_unit_net": -1000000,
- "amount_unit_gross": -1000000,
- "insert_id": "128",
- "client_account": "061f91a3-eba2-40b8-9a76-115189d6741e",
- "stock": null,
- "stock_change": null,
- "stock_book_item": null
}
], - "payments": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "transaction": "6b91fbed-a61e-4512-a48d-a6c1ac2f90cb",
- "created_at": "2018-11-04T23:18:43.075Z",
- "additionalProperties": null,
- "client_id": null,
- "type": "card",
- "payment_option": null,
- "position": null,
- "date": "2018-01-29T14:55:05.000Z",
- "name": "Packaged beans, green",
- "currency": "",
- "amount_total": -1000000,
- "tip_total": null,
- "amount_given": "50.00",
- "amount_requested": null,
- "amount_change": null,
- "custom_id": null,
- "branch": null,
- "register": null,
- "cost_center": null,
- "account": null,
- "account_change": null,
- "context": null,
- "comments": null,
- "origins": null,
- "depends_on": null,
- "related_to": null,
- "external_reference_id": null,
- "external_reference": null,
- "metadata": null,
- "insert_id": "128",
- "client_account": "061f91a3-eba2-40b8-9a76-115189d6741e"
}
], - "status": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "created_at": {
- "iso": "2021-06-03T11:18:47.725Z",
- "unix": 1622719127725
}, - "updated_at": {
- "iso": "2021-06-03T11:18:47.725Z",
- "unix": 1622719127725
}, - "signed_at": "2018-01-29T14:55:05.000Z",
- "signature": {
- "started_at": "2019-07-10T18:41:02.000Z",
- "data": "MEQCIAy4P9k+7x9saDO0uRZ4El8QwN+qTgYiv1DIaJIMWRiuAiAt+saFDGjK2Yi5Cxgy7PprXQ5O0seRgx4ltdpW9REvwA==",
- "caption": "NF525 Vente",
- "qr_code_data": "V0;955002-00;Kassenbeleg-V1;Beleg^0.00_2.55_0.00_0.00_0.00^2.55:Bar;18;112;2019-07-10T18:41:04.000Z;2019-07-10T18:41:04.000Z;ecdsa-plain-SHA256;unixTime;MEQCIAy4P9k+7x9saDO0uRZ4El8QwN+qTgYiv1DIaJIMWRiuAiAt+saFDGjK2Yi5Cxgy7PprXQ5O0seRgx4ltdpW9REvwA==;BHhWOeisRpPBTGQ1W4VUH95TXx2GARf8e2NYZXJoInjtGqnxJ8sZ3CQpYgjI+LYEmW5A37sLWHsyU7nSJUBemyU=",
- "format": "qr",
- "payload": null,
- "request_payload": null,
- "client_id": "TillhubPOS.0014.0001",
- "counter": 227,
- "unit": "soTFFH9xiZP9JYWCPRgvpw6xhZ3ttbWDjfS4ky4AMEk=",
- "public_key": "string",
- "algorithm": "ecdsa-plain-SHA256",
- "process_type": "Kassenbeleg-V1",
- "receipt_type": "Beleg",
- "process_data": "Beleg^0.00_2.55_0.00_0.00_0.00^2.55:Bar",
- "transactionNumber": 16,
- "transaction_id": "53451613-1a15-491f-bd01-033a427084b7",
- "error": "string",
- "error_counter": 0
}, - "metadata": { },
- "dispatched_at": "2018-11-04T23:18:43.075Z",
- "printed_at": "2018-11-04T23:18:43.075Z",
- "status": "signing_requested",
- "signature_type": "fiskaltrust",
- "source_type": "transaction",
- "canceled_at": "2018-01-29T14:55:05.000Z",
- "refunded_at": "2018-01-29T14:55:05.000Z"
}
}
]
}
Get metadata of the Transactions model.
clientAccountID required | string Alphanumeric client ID of the user |
legacy | boolean query the v1_legacy transactions |
type | string Type of the transaction to filter for, e.g. "sale". It can be passed as a string or array of strings |
register_custom_id | string register number of the register |
register | string the alphanumeric uuid of a register |
branch_custom_id | string branch number of the branch |
branch | string the alphanumeric uuid of a branch |
tillhub.transactions.meta.get((err, result) => {})
Set printed status for the invoice
clientAccountID required | string Alphanumeric client ID of the user |
transactionID required | string Alphanumeric transaction ID |
invoice user's preference
dispatched_at | string <date-time> |
{- "dispatched_at": "2019-08-24T14:15:22Z"
}
DEPRECATION WARNING: This endpoint will soon cease to exist in order to deprecate this rather internal model. All v1 (excluding legacy) endpoints descibe the new model, which is currently not used in production clients.
Query all legacy transactions
clientAccountID required | string Alphanumeric client ID of the user |
limit | integer the discrete limit, that will default to 1000 on the legacy route |
cursor | string the alphanumeric cursor field |
cursor_field | string which column to cursor on. Currently we only support |
date_start | string URL encoded ISO Date |
register_number | number Filter for register number |
register | string the alphanumeric uuid of a register |
branch_number | number Filter for branch number |
branch | string the alphanumeric uuid of a branch |
balance_number | number Filter for balance number |
barcode | string Filter for barcode |
type | string 1 or more types a client can request. Allowed are only
|
embed | string Enum: "customer" "payment_option" "correspondences" let the API embed a specified object; currently the options are "customer", "payment_option", "correspondences" |
tillhub.transactions.legacy.get((err, result) => {})
Write a Transaction to the database with the v0 model
clientAccountID required | string Alphanumeric client ID of the user |
loyalty_system | string Example: loyalty_system=20248594-3e1e-4a03-8b20-138e1a6b8058 Alphanumeric client ID of the loyalty system. If loyalty values should be booked, the query needs to include both loyalty_system and loyalty_card. |
loyalty_card | string Example: loyalty_card=123456789 Code of the loyalty card (not the uuid). If loyalty values should be booked, the query needs to include both loyalty_system and loyalty_card. |
The contents of a Transaction
string or (any or null) Deprecated | |
integer or (any or null) Deprecated | |
integer or (any or null) Deprecated | |
integer or (any or null) Deprecated | |
integer or (any or null) | |
string or (any or null) | |
date required | string <date-time> Deprecated Creation date of the transaction |
string or (any or null) Deprecated | |
any or (any or null) Deprecated | |
any or (any or null) Deprecated | |
string or (any or null) Deprecated | |
integer or (any or null) Deprecated | |
integer or (any or null) Deprecated | |
type_name required | string Deprecated Enum: "sale" "sale_cancel" "expense" "expense_cancel" Description of the transaction type |
string or (any or null) Deprecated | |
string or (any or null) Deprecated | |
string or (any or null) Deprecated | |
string or (any or null) Deprecated | |
string or (any or null) Deprecated | |
string or (any or null) | |
object or (any or null) | |
string or (any or null) | |
string or (any or null) Deprecated | |
object or (any or null) Deprecated | |
string or (any or null) Deprecated | |
string or (any or null) Deprecated | |
string or (any or null) Deprecated | |
Array of objects or (any or null) | |
(any or null) or string | |
boolean or (any or null) | |
Array of objects or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
object or (any or null) Default: null | |
string or (any or null) | |
string or (any or null) | |
Array of objects or (any or null) | |
Array of objects or (any or null) | |
Array of objects or (any or null) | |
object or (any or null) | |
required | Array of objects non-empty |
required | Array of objects |
object | |
object or (any or null) |
{- "dev_uuid": "886eef646bc1c4d79eb8495321bbd472",
- "transaction_number": 34,
- "balance_number": 5,
- "branch_number": 7,
- "register_number": 11,
- "guid": "00020002000120190123175129150",
- "date": "2019-01-23 16:51:29.143+00",
- "cashier_staff_number": "0018",
- "branch_fa_ident": { },
- "geo_data": { },
- "currency_iso_code": "EUR",
- "total": 3500,
- "change": 500,
- "type_name": "sale",
- "customer_number": "0000000000171088",
- "customer_receipt": "string",
- "merchant_receipt": "string",
- "barcode": "RTC078DFCE",
- "customer_description": "Tamás Constantin Regie",
- "payback_number": "string",
- "metadata": {
- "signing_error_counter": 13,
- "previous_tx_client_id": "5ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "authorizer_staff_uuid": "5ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "origin": {
- "cart": "ff8d037b-c502-4473-a8fa-65b8186361a6",
- "external_reference_id": "string"
}, - "device": {
- "identifier_for_vendor": "A2700DA6-CE09-4041-9724-1313DEF295E2",
- "keychain_counting_numbers": "sale: 3, expense: 0, balance: 0, deliveryNote: 0, savedCart: 0, order: 1",
- "app_info": "de.tillhub.tillhubstage.dev 1.0:0",
- "os_info": "iPadOS 17.4",
- "model_info": "Simulator iPad (10th generation)"
}, - "order": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "ros_id": "a0f5d53b-b79c-4346-aba9-21eb5c8776fd",
- "number": 34,
- "table_number": 34,
- "delta_number": 34,
- "started_at": "2019-01-23 16:51:29.143+00",
- "origin": {
- "table": "ead2351d-ea67-45f9-ad4f-0abcbefa9037",
- "table_name": "Table 23",
- "room": "00d2351d-ea67-05f9-ad4f-0abcbefa903a",
- "room_name": "Garden"
}
}
}, - "client_id": "string",
- "cashier_staff": "5ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "expense": {
- "expense_account": "09a9a469-c16b-4b54-835d-692d05d218f9",
- "expense_account_name": "2 Testausgabe",
- "expense_account_type": "expense",
- "expense_fa_account": "1338",
- "balance_client_id": "c1265a62-62e9-46de-9df7-4d3009c46068",
- "safe_id": "09a9a469-c16b-4b54-835d-692d05d218f9",
- "context": [
- {
- "name": "reason",
- "value": "string"
}
]
}, - "temp_staff": "5ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "client": "5ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "customer": "5ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "context": [
- {
- "name": "name",
- "value": "string"
}
], - "timezone": { },
- "has_promotion": false,
- "applied_promotions": [
- {
- "id": "AB3847a66-97dc-4ac2-8e8a-c44920e1f22f",
- "name": "Summer Sale",
- "compiled": "IWZ1bmN0aW9uKHQpe2lmKCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmInVuZGVmaW5lZCIhPXR5cGVvZiBtb2R1bGUpbW9kdWxlLmV4cG9ydHM9dCgpO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClkZWZpbmUoW10sdCk7ZWxzZXsoInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp0aGlzKS5tYWluPXQoKX19KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIHQoZSxvLHIpe2Z1bmN0aW9uIG4odSxpKXtpZighb1t1XSl7aWYoIWVbdV0pe3ZhciBzPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFpJiZzKXJldHVybiBzKHUsITApO2lmKGYpcmV0dXJuIGYodSwhMCk7dmFyIGw9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrdSsiJyIpO3Rocm93IGwuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsbH12YXIgYT1vW3VdPXtleHBvcnRzOnt9fTtlW3VdWzBdLmNhbGwoYS5leHBvcnRzLGZ1bmN0aW9uKHQpe3JldHVybiBuKGVbdV1bMV1bdF18fHQpfSxhLGEuZXhwb3J0cyx0LGUsbyxyKX1yZXR1cm4gb1t1XS5leHBvcnRzfWZvcih2YXIgZj0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSx1PTA7dTxyLmxlbmd0aDt1KyspbihyW3VdKTtyZXR1cm4gbn19KCkoezE6W2Z1bmN0aW9uKHQsZSxvKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOntpdGVtczpbXX07Y29uc3QgZT1bXSxvPVtdO2xldCByPTAsbj0wO2lmKHQuaXRlbXMuZm9yRWFjaCh0PT57IjFlMjcwNTNmLWZmZDEtNDk3Mi05YjEzLTdlMTBlNWJjODkwYyI9PT10LnByb2R1Y3RfaWQmJihyKz10LnF0eSksIjFlMjcwNTNmLWZmZDEtNDk3Mi05YjEzLTdlMTBlNWJjODkwYyI9PT10LnByb2R1Y3RfaWQmJihuKz10LnF0eSxlLnB1c2goT2JqZWN0LmFzc2lnbih7fSx0KSkpfSksIWUubGVuZ3RoKXJldHVybiBvO2NvbnN0IGY9ZnVuY3Rpb24odCxlLG8scil7cmV0dXJuIHIuYW1vdW50X3RvdGFsX2dyb3NzLHIucXR5LDV9KDAsMCwwLGVbMF0pLHU9TWF0aC5mbG9vcihyLzEpLGk9TWF0aC5mbG9vcihuLzEpO2xldCBzPXU8PWk/dTppO2lmKCEocz1NYXRoLmZsb29yKG4vMikpKXJldHVybiBvO2xldCBsPTA7Zm9yKGxldCB0IG9mIGUpe2NvbnN0IGU9dC5xdHk7aWYoIShNYXRoLmNlaWwoKGwrdC5xdHkpLzEpPD1zKSl7aWYobHx8cyl7Y29uc3Qgcj0xKnMtbCxuPXIqZix1PShlLXIpKih0LmFtb3VudF90b3RhbF9ncm9zcy9lKTt0LnByb21vdGVkX3RvdGFsX2dyb3NzPWEobit1LDIpLHQucHJvbW90YWJsZV9xdHk9cixkZWxldGUgdC5hbW91bnRfdG90YWxfZ3Jvc3Msby5wdXNoKHQpLHM9MH1icmVha31zLT1NYXRoLmZsb29yKChsK2UpLzEpLGw9KGwrZSklMSx0LnByb21vdGVkX3RvdGFsX2dyb3NzPWEoZSpmLDIpLHQucHJvbW90YWJsZV9xdHk9ZSxkZWxldGUgdC5hbW91bnRfdG90YWxfZ3Jvc3Msby5wdXNoKHQpfXJldHVybiBvO2Z1bmN0aW9uIGEodCxlKXtyZXR1cm4gTnVtYmVyKE1hdGgucm91bmQodCsiZSIrZSkrImUtIitlKX19fSx7fV19LHt9LFsxXSkoMSl9KTs="
}
], - "branch": "7c628a07-d557-4cd4-9105-51f9aade2c65",
- "register": "4b794f4b-e370-4a63-80bf-1886f8318f00",
- "wallet": "7e04ca6f-1090-4fc4-bba5-96db96e0dd2b",
- "_type": "sale",
- "_custom_id": "Sale Nr. 5",
- "_balance_client_id": "c1265a62-62e9-46de-9df7-4d3009c46068",
- "_staff": "b3465a62-62e9-46de-9df7-4d3009c46068",
- "_temporary_staff": "b3465a62-62e9-46de-9df7-4d3009c46068",
- "_context": null,
- "_external_reference_id": "823742686434462376376376473647346",
- "_customer_external_reference_id": "135543344343",
- "_origins": [
- {
- "type": "checked_out_delivery_note",
- "id": null,
- "custom_id": null,
- "date": "2018-01-29T14:55:05.000Z"
}
], - "_depends_on": [
- {
- "type": "canceled_sale",
- "id": null,
- "custom_id": null,
- "client_id": null,
- "date": "2018-01-29T14:55:05.000Z"
}
], - "_related_to": [
- {
- "type": "invoice",
- "id": "f2ac2cae-97ff-42a1-967b-0a35222ab6d1"
}
], - "_location": "{ \"lat\": 52.5065133, \"lng\": 13.1445545}",
- "cartitems": [
- {
- "quantity": null,
- "article_number": null,
- "article_attr_desc": null,
- "article_price": 799,
- "selling_price": 612,
- "selling_price_total": 1671,
- "article_fa_account_number": "8400",
- "vat_percentage": 1900,
- "vat_fa_account_number": "1991",
- "vat_amount": 267,
- "salesman_staff_number": "00603",
- "product_number": "998877",
- "article_id": null,
- "vat_amount_euro": null,
- "discount_amount": 187,
- "product_name": "Soft Soothing Spray",
- "guid": null,
- "addons": [
- {
- "addon": "ac847a66-d7dc-4ac2-8e8a-c44920e1f220",
- "product": "ff847a44-07dc-4ac2-8e8a-c44920e1f220",
- "price": 0.99,
- "currency": "EUR",
- "quantity": 3.6,
- "stock_quantity": 3.6,
- "name": "Extra Mushrooms"
}
], - "product_group_number": "004",
- "product_group_id": null,
- "product_supplier_name": "string",
- "is_refund": 0,
- "_id": "b3063bbe-d44d-42a6-8bbf-971f5d88f848",
- "related_transaction_number": 49,
- "related_transaction_date": "2018-01-29T14:55:05.000Z",
- "related_transaction_type": "sale",
- "article": "cf8eae54-79da-4ad1-ab3a-878db60d4743",
- "attributes_description": "red | big | 32",
- "attributes": {
- "color": "red"
}, - "is_tip": false,
- "is_owner": false,
- "reference_cartitem_client_id": "01331B44-130B-45D4-97A7-401247FD5B68",
- "is_service": false,
- "used_barcode": "0E9761310XF",
- "is_voucher": false,
- "discounts": [
- {
- "name": "Bonus",
- "group": "customer",
- "order_index": 0,
- "type_name": "percentage",
- "value": "25.137",
- "amount": 43,
- "amount_total": 312,
- "external_reference_id": "string",
- "source_id": "03063bbe-e44d-42f6-8bbf-971f5d88f848",
- "is_automatic": false,
- "order": "first"
}
], - "context": [
- {
- "name": "return_reason",
- "value": "string"
}
], - "_context": null,
- "type": "item",
- "client_id": "d0d40841-b1a7-438a-9d1e-2bfec590d2e3",
- "position": "1",
- "_qty": "100",
- "_unit": "kg",
- "_currency": "EUR",
- "_product": "43847a66-97dc-4ac2-8e8a-c44920e1f22f",
- "_product_custom_id": "AKI-1234566",
- "_custom_id": "AKI-1234566",
- "_tax": "9d110eb2-2245-4e14-9574-49b502f3a9b3",
- "_vat_rate": "0.19",
- "_vat_rate_class": "normal",
- "branch": "f2ac2cae-97ff-42a1-967b-0a35222ab6d1",
- "register": "9d110eb2-2245-4e14-9574-49b502f3a9b3",
- "salesman_staff": "b3465a62-62e9-46de-9df7-4d3009c46068",
- "_taxes": [
- {
- "tax": "a3be1e02-7983-4cba-b7b8-94453c0536ef",
- "position": "1",
- "rate": "0.21",
- "custom_id": null,
- "display": "Another tax"
}
], - "configuration": {
- "tax_switched": true,
- "action": {
- "tax": "2b46be7d-65ac-4a23-a5dd-524b80fe8e49",
- "default": true,
- "name": "string"
}
}, - "_account": "a5380b42-6025-49de-bb1d-c9357df96506",
- "_product_group": "897bac99-f98e-433a-bca0-19acc380fb12",
- "_tax_amount": -1000000,
- "_tax_amount_total": -1000000,
- "_discount_amount": 0,
- "_discount_amount_total": 0,
- "_promotion_amount": -1000000,
- "_promotion_amount_total": -1000000,
- "_discounts": [
- {
- "amount": -1000000,
- "amount_total": -1000000,
- "order_index": 100,
- "currency": "str",
- "value": -1000000,
- "rate": 1,
- "client_id": "string",
- "external_reference_id": "string",
- "group": "customer",
- "name": "string",
- "source_id": "ae50a35c-df42-4eff-ba26-f8bc28d2af81",
- "assignment_id": "string",
- "assignment_source": "cart",
- "is_automatic": false,
- "order": "first"
}
], - "_origins": [
- {
- "type": "checked_out_delivery_note",
- "id": null,
- "custom_id": null,
- "date": "2018-01-29T14:55:05.000Z"
}
], - "_depends_on": [
- {
- "type": "canceled_sale",
- "id": null,
- "custom_id": null,
- "client_id": null,
- "date": "2018-01-29T14:55:05.000Z"
}
], - "_related_to": [
- {
- "type": "invoice",
- "id": "f2ac2cae-97ff-42a1-967b-0a35222ab6d1"
}
], - "_product_service_answers": [
- {
- "id": "1d53f799-c24f-49e3-b68f-93ae5fc69921",
- "question": "Which colour is used?",
- "type": "checkbox",
- "content_type": "string",
- "required": null,
- "answer": null
}
], - "_comments": "I Did this sale. Went to the next one. But made a comment.",
- "_note": "Please follow this instruction that you can read here on a receipt.",
- "_external_reference_id": "823742686434462376376376473647346",
- "_amount_net": -1000000,
- "_amount_gross": -1000000,
- "_amount_total_net": -1000000,
- "_amount_total_gross": -1000000,
- "_amount_unit_net": -1000000,
- "_amount_unit_gross": -1000000,
- "_is_refund": true,
- "custom_properties": { }
}
], - "payments": [
- {
- "fa_account_number": "100575",
- "amount": 2000,
- "currency_iso_code": "EUR",
- "account": "55224036-e83f-4ece-8dbe-504e69d662c0",
- "exchange_rate": 2.315,
- "payment_option_name": "American Express",
- "payment_option_type_name": "undefined",
- "payment_option_id": "96b619a6-6189-4f03-a135-e1b307d664de",
- "guid": { },
- "date": "2018-01-29T14:55:05.000Z",
- "tip": 110,
- "terminal_journal": "<?xml version...",
- "terminal_response": "<?xml version...",
- "context": [
- {
- "name": "voucher_value",
- "value": "string"
}
], - "client_id": "d0d40841-b1a7-438a-9d1e-2bfec590d2e3",
- "_type": "card",
- "_context": {
- "title": null,
- "account": null,
- "terminal": {
- "device_id": "51098708",
- "transaction_id": "d0d40841-b1a7-438a-9d1e-2bfec590d2e3",
- "api": "adyen",
- "payment_provider": null,
- "card_circuit": null,
- "card_pay_id": null,
- "card_pan": null,
- "receipts": null,
- "raw_response": null,
- "is_connected": null
}, - "voucher": null,
- "buy_now_pay_later": null
}, - "payment_option": "bd7d8a90-83d1-4d53-8659-b205b409d6e1",
- "_position": 1,
- "_currency": "",
- "_amount_total": -1000000,
- "_tip_total": -1000000,
- "_amount_given": "50.00",
- "_amount_requested": "49.98",
- "_amount_change": "49.98",
- "branch": "f2ac2cae-97ff-42a1-967b-0a35222ab6d1",
- "register": "9d110eb2-2245-4e14-9574-49b502f3a9b3",
- "cost_center": "CORP-123",
- "_account": "a5380b42-6025-49de-bb1d-c9357df96506",
- "_comments": "I Did this sale. Went to the next one. But made a comment.",
- "_note": "Please follow this instruction that you can read here on a receipt.",
- "_origins": [
- {
- "type": "checked_out_delivery_note",
- "id": null,
- "custom_id": null,
- "date": "2018-01-29T14:55:05.000Z"
}
], - "_depends_on": [
- {
- "type": "canceled_sale",
- "id": null,
- "custom_id": null,
- "client_id": null,
- "date": "2018-01-29T14:55:05.000Z"
}
], - "_related_to": [
- {
- "type": "invoice",
- "id": "f2ac2cae-97ff-42a1-967b-0a35222ab6d1"
}
], - "_external_reference_id": "823742686434462376376376473647346"
}
], - "status": {
- "signed_at": "2018-01-29T14:55:05.000Z",
- "signature": {
- "started_at": "2019-07-10T18:41:02.000Z",
- "data": "MEQCIAy4P9k+7x9saDO0uRZ4El8QwN+qTgYiv1DIaJIMWRiuAiAt+saFDGjK2Yi5Cxgy7PprXQ5O0seRgx4ltdpW9REvwA==",
- "caption": "NF525 Vente",
- "qr_code_data": "V0;955002-00;Kassenbeleg-V1;Beleg^0.00_2.55_0.00_0.00_0.00^2.55:Bar;18;112;2019-07-10T18:41:04.000Z;2019-07-10T18:41:04.000Z;ecdsa-plain-SHA256;unixTime;MEQCIAy4P9k+7x9saDO0uRZ4El8QwN+qTgYiv1DIaJIMWRiuAiAt+saFDGjK2Yi5Cxgy7PprXQ5O0seRgx4ltdpW9REvwA==;BHhWOeisRpPBTGQ1W4VUH95TXx2GARf8e2NYZXJoInjtGqnxJ8sZ3CQpYgjI+LYEmW5A37sLWHsyU7nSJUBemyU=",
- "format": "qr",
- "payload": null,
- "request_payload": null,
- "client_id": "TillhubPOS.0014.0001",
- "counter": 227,
- "unit": "soTFFH9xiZP9JYWCPRgvpw6xhZ3ttbWDjfS4ky4AMEk=",
- "public_key": "string",
- "algorithm": "ecdsa-plain-SHA256",
- "process_type": "Kassenbeleg-V1",
- "receipt_type": "Beleg",
- "process_data": "Beleg^0.00_2.55_0.00_0.00_0.00^2.55:Bar",
- "transactionNumber": 16,
- "transaction_id": "53451613-1a15-491f-bd01-033a427084b7",
- "error": "string",
- "error_counter": 0
}, - "metadata": { },
- "dispatched_at": "2018-11-04T23:18:43.075Z",
- "printed_at": "2018-11-04T23:18:43.075Z",
- "status": "signing_requested",
- "signature_type": "fiskaltrust",
- "source_type": "transaction",
- "canceled_at": "2018-01-29T14:55:05.000Z",
- "refunded_at": "2018-01-29T14:55:05.000Z"
}, - "external_rewards": {
- "payback_data": "MEQCIAy4P9k+7x9saDO0uRZ4El8QwN+qTgYiv1DIaJIMWRiuAiAt+saFDGjK2Yi5Cxgy7PprXQ5O0seRgx4ltdpW9REvwA=="
}
}
DEPRECATION WARNING: This endpoint will soon cease to exist in order to deprecate this rather internal model. All v1 (excluding legacy) endpoints descibe the new model, which is currently not used in production clients.
Get the legacy transaction belonging to the latest balance
clientAccountID required | string Alphanumeric client ID of the user |
date_start | string URL encoded ISO Date |
register_number required | string The custom number of the register, e.g. 12 |
register | string the alphanumeric uuid of a register |
branch_number required | string The custom number of the branch, e.g. 25 |
branch | string the alphanumeric uuid of a branch |
balance_number | string the number of the balance |
tillhub.transactions.latest.legacy.get((err, result) => {})
DEPRECATION WARNING: This endpoint will soon cease to exist in order to deprecate this rather internal model. All v1 (excluding legacy) endpoints descibe the new model, which is currently not used in production clients.
Query metadata of legacy transactions
clientAccountID required | string Alphanumeric client ID of the user |
tillhub.transactions.meta.get((err, result) => {})
DEPRECATION WARNING: This endpoint will soon cease to exist in order to deprecate this rather internal model. All v1 (excluding legacy) endpoints descibe the new model, which is currently not used in production clients.
Get the latest transaction, filtered by type. A valid transaction type can be any of: 'sale', 'sale_cancel', 'delivery_note', 'delivery_note_return', 'selection', 'selection_return', 'downpayment', 'saved_cart', 'saved_cart_done', 'expense', 'expense_cancel', 'activeCart'
clientAccountID required | string Alphanumeric client ID of the user |
type required | string A valid transaction type, e.g. 'sale' |
register_number required | string The custom number of the register, e.g. 12 |
register | string the alphanumeric uuid of a register |
branch_number required | string The custom number of the branch, e.g. 25 |
branch | string the alphanumeric uuid of a branch |
tillhub.transactions.latest.legacy.get((err, result) => {})
Generate a PDF Invoice Sheet
clientAccountID required | string Alphanumeric client ID of the user |
transactionID required | string Alphanumeric transaction ID |
template required | string Template or type of the invoice to send the email e.g. invoice, full_receipt. |
embed | array of array of strings current option is "correspondence"; decides if the correspondence object is returned in the response or not |
tillhub.transactions.post.pdf((err, result) => {})
Send a PDF invoice via an email
clientAccountID required | string Alphanumeric client ID of the user |
transactionID required | string Alphanumeric transaction ID |
template required | string Template or type of the invoice to send the email e.g. invoice, full_receipt. |
embed | array of array of strings current option is "correspondence"; decides if the correspondence object is returned in the response or not |
User's email address
{ }
Our supported signing systems are:
Some signing systems require initialisation after the purchase of their products.
Those systems can operate on basis of registers, terminals, branches or even regions. The best practices for the respective vendors need be inquired with them.
We currently support signing on branch basis, which means every register in a branch will sign to the chain of transactions the branch denotes.
Fiskaltrust requires to post the authentication data of the purchased cloud cashbox. An example flow of purchase can be seen here(private).
{
"cashbox": "[UUID of cashbox]",
"cashbox_auth": "[auth token of cashbox]"
}
Once set the POS clients will attempt signing every transaction with that data through the transactions API automatically, that information is present.
Reconciliation of failed transactions (e.g. through Fiskaltrust downtime) will be automatically handled by the API and be updated later.
For your notice an example workflow looks like the following, but will be abstracted inside Tillhub Resources:
curl -X POST \
https://signaturcloud-sandbox.fiskaltrust.at/json/sign \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: application/json' \
-H 'accesstoken: {{TOKEN}}' \
-H 'cashboxid: a0751e18-963b-483e-a102-7597a03ac139' \
-d '{
"ftCashBoxID": "a0751e18-963b-483e-a102-7597a03ac139",
"cbTerminalID": "2",
"cbReceiptReference": "1",
"cbReceiptMoment": "2018-05-16T13:07:46.009Z",
"cbChargeItems": [ ],
"cbPayItems": [],
"ftReceiptCase": 4707387510509010947
}'
Response:
{
"ftCashBoxID": "a0751e18-963b-483e-a102-7597a03ac139",
"ftQueueID": "e36c18df-ab5a-4166-8b5e-ff6a0192821b",
"ftQueueItemID": "a1bebbae-449d-43e5-a8ac-ea69062c43aa",
"ftQueueRow": 5,
"cbTerminalID": "2",
"cbReceiptReference": "1",
"ftCashBoxIdentification": "fiskaltrust3",
"ftReceiptIdentification": "ft4#1",
"ftReceiptMoment": "2018-05-16T13:13:12.1779246Z",
"ftSignatures": [
{
"ftSignatureFormat": 1,
"ftSignatureType": 4707387510509010944,
"caption": "Zero-Receipt",
"data": "Sign: True Counter:True"
},
{
"ftSignatureFormat": 1,
"ftSignatureType": 4707387510509010944,
"caption": "Counter Add",
"data": "0"
},
{
"ftSignatureFormat": 1,
"ftSignatureType": 4707387510509010944,
"caption": "S A N D B O X",
"data": "e36c18df-ab5a-4166-8b5e-ff6a0192821b"
},
{
"ftSignatureFormat": 3,
"ftSignatureType": 4707387510509010945,
"caption": "www.fiskaltrust.at",
"data": "REDACTED"
},
{
"ftSignatureFormat": 1,
"ftSignatureType": 4707387510509010946,
"caption": "Startbeleg",
"data": "Startbeleg"
},
{
"ftSignatureFormat": 8,
"ftSignatureType": 4707387510509010947,
"caption": "Aktivierung (Inbetriebnahme) einer Sicherheitseinrichtung e36c18df-ab5a-4166-8b5e-ff6a0192821b nach RKSV. (Queue)",
"data": "REDACTED"
},
{
"ftSignatureFormat": 8,
"ftSignatureType": 4707387510509010947,
"caption": "Prüfen der Signatur REDACTED mittels FON.",
"data": "REDACTED"
}
],
"ftState": 4707387510509010944,
"ftStateData": "{\"Number\":-1,\"Exception\":\"\",\"Signing\":true,\"Counting\":true,\"ZeroReceipt\":true}"
}
curl -X POST \
https://signaturcloud-sandbox.fiskaltrust.at/json/sign \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: application/json' \
-H 'accesstoken: {{TOKEN}}' \
-H 'cashboxid: a0751e18-963b-483e-a102-7597a03ac139' \
-d '{
"ftCashBoxID": "a0751e18-963b-483e-a102-7597a03ac139",
"cbTerminalID": "2",
"cbReceiptReference": "17",
"cbReceiptMoment": "2018-05-16T13:17:37.664Z",
"cbChargeItems": [
{
"Quantity": 1,
"Description": "Artikel 1",
"Amount": 4.8,
"VATRate": 20,
"ftChargeItemCase": 4707387510509010944,
"ftChargeItemCaseData": "",
"AccountNumber": "",
"CostCenter": "",
"ProductGroup": "",
"ProductNumber": "1",
"ProductBarcode": "",
"Unit": ""
},
{
"Quantity": 1,
"Description": "Artikel 2",
"Amount": 3.6,
"VATRate": 20,
"ftChargeItemCase": 4707387510509010944,
"ftChargeItemCaseData": "",
"AccountNumber": "",
"CostCenter": "",
"ProductGroup": "",
"ProductNumber": "2",
"ProductBarcode": "",
"Unit": ""
}
],
"cbPayItems": [
{
"Quantity": 1,
"Description": "Bar",
"Amount": 8.4,
"ftPayItemCase": 4707387510509010944,
"ftPayItemCaseData": "",
"AccountNumber": "",
"CostCenter": "",
"MoneyGroup": "",
"MoneyNumber": ""
}
],
"ftReceiptCase": 4707387510509010944
}'
Response:
{
"ftCashBoxID": "a0751e18-963b-483e-a102-7597a03ac139",
"ftQueueID": "e36c18df-ab5a-4166-8b5e-ff6a0192821b",
"ftQueueItemID": "a377ac92-bd14-4096-ab38-a64c19f116e9",
"ftQueueRow": 6,
"cbTerminalID": "2",
"cbReceiptReference": "17",
"ftCashBoxIdentification": "fiskaltrust3",
"ftReceiptIdentification": "ft5#2",
"ftReceiptMoment": "2018-05-16T13:18:26.408962Z",
"ftSignatures": [
{
"ftSignatureFormat": 1,
"ftSignatureType": 4707387510509010944,
"caption": "Decision 37",
"data": "Sign: True Counter:True"
},
{
"ftSignatureFormat": 1,
"ftSignatureType": 4707387510509010944,
"caption": "Counter Add",
"data": "8.4"
},
{
"ftSignatureFormat": 1,
"ftSignatureType": 4707387510509010944,
"caption": "S A N D B O X",
"data": "e36c18df-ab5a-4166-8b5e-ff6a0192821b"
},
{
"ftSignatureFormat": 3,
"ftSignatureType": 4707387510509010945,
"caption": "www.fiskaltrust.at",
"data": "REDACTED"
}
],
"ftState": 4707387510509010944,
"ftStateData": "{\"Number\":37,\"Exception\":\"\",\"Signing\":true,\"Counting\":true,\"ZeroReceipt\":false}"
}
clientAccountID required | string Alphanumeric client ID of the user |
resource_type required | string e.g. branches |
resource required | string e.g. the alphanmeric branch ID |
signing_system required | string name of the signing system to use and that is supported |
Necessary Authentication Data for Signing System
{ }
Some signing systems allow de-commisioning their signing instances.
clientAccountID required | string Alphanumeric client ID of the user |
resource_type required | string e.g. branches |
resource required | string e.g. the alphanmeric branch ID |
signing_system required | string name of the signing system to use and that is supported |
Necessary Authentication Data for Signing System
{ }
Purge signign configuration from a resource
clientAccountID required | string Alphanumeric client ID of the user |
resource_type required | string e.g. branches |
resource required | string e.g. the alphanmeric branch ID |
signing_system required | string name of the signing system to use and that is supported |
Necessary Authentication Data for Signing System
{ }
Reconcile failed signing request
clientAccountID required | string Alphanumeric client ID of the user |
resource_type required | string e.g. branches |
resource required | string e.g. the alphanmeric branch ID |
signing_system required | string name of the signing system to use and that is supported |
Necessary Authentication Data for Signing System
{ }
Create a yearly receipt if the signing systems supports it.
clientAccountID required | string Alphanumeric client ID of the user |
resource_type required | string e.g. branches |
resource required | string e.g. the alphanmeric branch ID |
signing_system required | string name of the signing system to use and that is supported |
Necessary Authentication Data for Signing System
{ }
Create a monthly receipt if the signing systems supports it.
clientAccountID required | string Alphanumeric client ID of the user |
resource_type required | string e.g. branches |
resource required | string e.g. the alphanmeric branch ID |
signing_system required | string name of the signing system to use and that is supported |
Necessary Authentication Data for Signing System
{ }
Crate a generic Zero Receipt if a signing system allows it.
clientAccountID required | string Alphanumeric client ID of the user |
resource_type required | string e.g. branches |
resource required | string e.g. the alphanmeric branch ID |
signing_system required | string name of the signing system to use and that is supported |
Necessary Authentication Data for Signing System
{ }
Information about a new balances
webhook_id | string <uuid> The webhook UUID |
event_id | string <uuid> The event UUID |
event_entity | string The entity name the event refers to |
event_type | string The event type (e.g. create, update, delete) |
event_version | number The event payload version |
entity_instance_id | string <uuid> The entity instance UUID |
timestamp | string <date-time> The date and time event was received by webhooks service |
object |
{- "webhook_id": "ff30cfdf-5167-4f72-b4fc-c1d72db3c07e",
- "event_id": "c6fe918a-7bdc-4ccd-af36-95c03853233d",
- "event_entity": "balance",
- "event_type": "create",
- "event_version": 0,
- "entity_instance_id": "10b06f38-031d-4e0c-8706-0474c8c5b61c",
- "timestamp": "2024-12-02T18:25:24.024Z",
- "payload": {
- "id": "860defb8-5598-421d-9da4-f0826e767536",
- "update_id": 0,
- "created_at": "2018-11-04T23:18:43.075Z",
- "updated_at": "2018-11-04T23:18:43.075Z",
- "_id": "97074aa7-ed27-464c-890e-0b47ab153b8a",
- "status": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "created_at": {
- "iso": "2021-06-03T11:18:47.725Z",
- "unix": 1622719127725
}, - "updated_at": {
- "iso": "2021-06-03T11:18:47.725Z",
- "unix": 1622719127725
}, - "signed_at": "2018-01-29T14:55:05.000Z",
- "signature": {
- "started_at": "2019-07-10T18:41:02.000Z",
- "data": "MEQCIAy4P9k+7x9saDO0uRZ4El8QwN+qTgYiv1DIaJIMWRiuAiAt+saFDGjK2Yi5Cxgy7PprXQ5O0seRgx4ltdpW9REvwA==",
- "caption": "NF525 Vente",
- "qr_code_data": "V0;955002-00;Kassenbeleg-V1;Beleg^0.00_2.55_0.00_0.00_0.00^2.55:Bar;18;112;2019-07-10T18:41:04.000Z;2019-07-10T18:41:04.000Z;ecdsa-plain-SHA256;unixTime;MEQCIAy4P9k+7x9saDO0uRZ4El8QwN+qTgYiv1DIaJIMWRiuAiAt+saFDGjK2Yi5Cxgy7PprXQ5O0seRgx4ltdpW9REvwA==;BHhWOeisRpPBTGQ1W4VUH95TXx2GARf8e2NYZXJoInjtGqnxJ8sZ3CQpYgjI+LYEmW5A37sLWHsyU7nSJUBemyU=",
- "format": "qr",
- "payload": null,
- "request_payload": null,
- "client_id": "TillhubPOS.0014.0001",
- "counter": 227,
- "unit": "soTFFH9xiZP9JYWCPRgvpw6xhZ3ttbWDjfS4ky4AMEk=",
- "public_key": "string",
- "algorithm": "ecdsa-plain-SHA256",
- "process_type": "Kassenbeleg-V1",
- "receipt_type": "Beleg",
- "process_data": "Beleg^0.00_2.55_0.00_0.00_0.00^2.55:Bar",
- "transactionNumber": 16,
- "transaction_id": "53451613-1a15-491f-bd01-033a427084b7",
- "error": "string",
- "error_counter": 0
}, - "metadata": { },
- "dispatched_at": "2018-11-04T23:18:43.075Z",
- "printed_at": "2018-11-04T23:18:43.075Z",
- "status": "signing_requested",
- "signature_type": "fiskaltrust",
- "source_type": "transaction",
- "canceled_at": "2018-01-29T14:55:05.000Z",
- "refunded_at": "2018-01-29T14:55:05.000Z"
}, - "dev_uuid": "886eef646bc1c4d79eb8495321bbd472",
- "balance_number": 5,
- "branch": "7c628a07-d557-4cd4-9105-51f9aade2c65",
- "register": "4b794f4b-e370-4a63-80bf-1886f8318f00",
- "branch_number": 7,
- "register_number": 3,
- "client": "5ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "guid": "00110002000120190123175129150",
- "client_id": "string",
- "date": "2019-01-23 16:51:29.143+00",
- "date_begin": "2019-01-23 16:51:29.143+00",
- "cashier_staff": "5ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "cashier_staff_number": "0018",
- "temp_staff": "5ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "branch_fa_ident": { },
- "geo_data": { },
- "cash_begin": 50000,
- "cash_revenue": 230000,
- "total_revenue": 430000,
- "expenses_cash_total": 1200,
- "expenses_tips_total": 1850,
- "cash_total_calculated": 281000,
- "cash_total_counted": 280000,
- "cash_discrepancy": 1000,
- "tips_total": 3405,
- "tips_cash": 2850,
- "tips_begin": 560,
- "tips_balance": 2850,
- "sales_count": 26,
- "currency_iso_code": "EUR",
- "receipt_text": "string",
- "fr_receipt_id": 0,
- "revenues": [
- {
- "client_id": null,
- "fa_account": "1505",
- "amount": 1850
}
], - "vats": [
- {
- "client_id": null,
- "fa_account": "1505",
- "percentage": "1900",
- "amount": 18.5,
- "amount_gross": "{\"amount\": 666.7, \"currency\": \"CHF\"}",
- "amount_net": "{\"amount\": 634.96, \"currency\": \"CHF\"}"
}
], - "expenses": [
- {
- "client_id": null,
- "fa_account": "1505",
- "name": "Berlin cash deposit account",
- "amount": 1850
}
], - "payments": [
- {
- "client_id": null,
- "payment_option": "5ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "payment_option_id": 131,
- "payment_option_name": "American Express",
- "payment_option_type_name": "undefined",
- "fa_account": "1505",
- "cost_center": "0005",
- "currency_iso_code": "EUR",
- "amount": 1850,
- "amount_tip": 1850,
- "discrepancy": 1850,
- "exchangeRate": 1.403
}
], - "tips": [
- {
- "client_id": null,
- "staff": "b3465a62-62e9-46de-9df7-4d3009c46068",
- "fa_account": null,
- "amount": 1850,
- "template_number": null,
- "vat_fa_account_number": null,
- "vat_percentage": null
}
], - "cash_units": {
- "client_id": null,
- "currency_iso_code": "EUR",
- "units": [
- {
- "type": "coin",
- "qty": null,
- "value": "0.10"
}
]
}, - "extended": {
- "cancellation_amount": null,
- "cancellation_count": null,
- "transaction_stats": [
- {
- "start_date": "2018-01-29T14:55:05.000Z",
- "end_date": "2018-01-29T14:55:05.000Z",
- "count": 5000,
- "amount": {
- "currency": "EUR",
- "amount": "47.02"
}
}
], - "discount_stats": [
- {
- "source_id": "03063bbe-e44d-42f6-8bbf-971f5d88f848",
- "name": "Christmas Bonus",
- "count": 5000,
- "amount": {
- "currency": "EUR",
- "amount": "47.02"
}
}
], - "first_transaction_date": "2018-01-29T14:55:05.000Z",
- "last_transaction_date": "2018-01-29T14:55:05.000Z",
- "first_transaction_number": 221,
- "last_transaction_number": 234,
- "first_sale_transaction_number": 221,
- "last_sale_transaction_number": 234,
- "first_expense_transaction_number": 221,
- "last_expense_transaction_number": 234,
- "revenue_gross": {
- "currency": "EUR",
- "amount": "47.02"
}, - "revenue_net": {
- "currency": "EUR",
- "amount": "47.02"
}, - "average_amount_gross_per_cart": {
- "currency": "EUR",
- "amount": "47.02"
}, - "cart_items_count": 5000,
- "total_quantity": 245.73,
- "average_quantity_per_cart": 4.73,
- "average_cart_items_count_per_cart": 3.108,
- "discount_amount": {
- "currency": "EUR",
- "amount": "47.02"
}, - "voucher_amount": {
- "currency": "EUR",
- "amount": "47.02"
}, - "excluded_vouchers": {
- "average_cart_items_count_per_cart": 3.108,
- "average_quantity_per_cart": 4.73,
- "cart_items_count": 5000,
- "revenue_gross": {
- "currency": "EUR",
- "amount": "47.02"
}, - "revenue_net": {
- "currency": "EUR",
- "amount": "47.02"
}, - "sales_count": 26,
- "total_quantity": 245.73
}, - "cashier_name": "Baris Atamaer",
- "expense_amount_excluding_bank": {
- "currency": "EUR",
- "amount": "47.02"
}, - "deposit_amount_excluding_bank": {
- "currency": "EUR",
- "amount": "47.02"
}, - "refund_count": 4,
- "refund_net": {
- "currency": "EUR",
- "amount": "47.02"
}, - "refund_gross": {
- "currency": "EUR",
- "amount": "47.02"
}, - "cashier_stats": [
- {
- "staff": "d0d40841-b1a7-438a-9d1e-2bfec590d2e3",
- "staff_name": "John Smith",
- "staff_number": "0018",
- "sales": {
- "currency": "EUR",
- "amount": "47.02"
}, - "change": {
- "currency": "EUR",
- "amount": "47.02"
}, - "cash_payments": {
- "currency": "EUR",
- "amount": "47.02"
}, - "expenses": {
- "currency": "EUR",
- "amount": "47.02"
}, - "cash_balance": {
- "currency": "EUR",
- "amount": "47.02"
}, - "non_cash_payments": {
- "currency": "EUR",
- "amount": "47.02"
}, - "tips_total": {
- "currency": "EUR",
- "amount": "47.02"
}, - "tips_cash": {
- "currency": "EUR",
- "amount": "47.02"
}, - "tips_balance": {
- "currency": "EUR",
- "amount": "47.02"
}, - "payments": [
- {
- "payment_option": "5ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "payment_option_name": "American Express",
- "payment_option_type_name": "undefined",
- "amount_given": {
- "currency": "EUR",
- "amount": "47.02"
}, - "amount": {
- "currency": "EUR",
- "amount": "47.02"
}, - "amount_tip": {
- "currency": "EUR",
- "amount": "47.02"
}, - "fa_account": "1505",
- "cost_center": "0005"
}
]
}
]
}, - "_metadata": {
- "cancellation_amount": null,
- "total_count_transactions": 5000,
- "total_count_expenses": 5000,
- "first_transaction_timestamp": "2018-01-29T14:55:05.000Z",
- "last_transaction_timestamp": "2018-01-29T14:55:05.000Z",
- "first_transaction_client_uuid": "fd5bf507-e0e0-48f5-b322-619b6712b719",
- "last_transaction_client_uuid": "d0d40841-b1a7-438a-9d1e-2bfec590d2e3",
- "first_transaction_number": 221,
- "last_transaction_number": 234,
- "device": {
- "identifier_for_vendor": "A2700DA6-CE09-4041-9724-1313DEF295E2",
- "keychain_counting_numbers": "sale: 3, expense: 0, balance: 0, deliveryNote: 0, savedCart: 0, order: 1",
- "app_info": "de.tillhub.tillhubstage.dev 1.0:0",
- "os_info": "iPadOS 17.4",
- "model_info": "Simulator iPad (10th generation)"
}
}, - "wallet_data": {
- "outstanding_total": {
- "currency": "EUR",
- "amount": "47.02"
}, - "wallets": [
- {
- "id": "860defb8-5598-421d-9da4-f0826e767536",
- "outstanding": {
- "currency": "EUR",
- "amount": "47.02"
}
}
]
}
}
}
Query all legacy balances
clientAccountID required | string Alphanumeric client ID of the user |
date_start | string URL encoded ISO Date |
date_end | string URL encoded ISO Date |
register_number | number Filter for register number |
branch_number | number Filter for branch number |
balance_number | number Filter for balance number |
tillhub.balances.legacy.get((err, result) => {})
Write a balance to the database with the v0 legacy model
clientAccountID required | string Alphanumeric client ID of the user |
X-Client-Type | string client type |
X-Client-Version | string client version |
The contents of a balance
string or (any or null) | |
integer or (any or null) | |
string or (any or null) | |
string or (any or null) | |
integer or (any or null) Deprecated | |
integer or (any or null) Deprecated | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
date required | string <date-time> Closing date of the balance |
date_begin | string <date-time> Opening date of the balance |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
any or (any or null) Deprecated | |
any or (any or null) Deprecated | |
integer or (any or null) | |
integer or (any or null) | |
integer or (any or null) | |
integer or (any or null) Deprecated | |
integer or (any or null) | |
integer or (any or null) | |
integer or (any or null) | |
integer or (any or null) | |
integer or (any or null) | |
integer or (any or null) | |
integer or (any or null) | |
integer or (any or null) | |
integer or (any or null) | |
string or (any or null) | |
string or (any or null) | |
integer or (any or null) Deprecated | |
Array of objects or (any or null) | |
Array of objects or (any or null) | |
Array of objects or (any or null) | |
Array of objects or (any or null) | |
Array of objects or (any or null) | |
object or (any or null) | |
object or (any or null) | |
object or (any or null) | |
object or (any or null) | |
object or (any or null) |
{- "dev_uuid": "886eef646bc1c4d79eb8495321bbd472",
- "balance_number": 5,
- "branch": "7c628a07-d557-4cd4-9105-51f9aade2c65",
- "register": "4b794f4b-e370-4a63-80bf-1886f8318f00",
- "branch_number": 7,
- "register_number": 3,
- "client": "5ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "guid": "00110002000120190123175129150",
- "client_id": "string",
- "date": "2019-01-23 16:51:29.143+00",
- "date_begin": "2019-01-23 16:51:29.143+00",
- "cashier_staff": "5ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "cashier_staff_number": "0018",
- "temp_staff": "5ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "branch_fa_ident": { },
- "geo_data": { },
- "cash_begin": 50000,
- "cash_revenue": 230000,
- "total_revenue": 430000,
- "expenses_cash_total": 1200,
- "expenses_tips_total": 1850,
- "cash_total_calculated": 281000,
- "cash_total_counted": 280000,
- "cash_discrepancy": 1000,
- "tips_total": 3405,
- "tips_cash": 2850,
- "tips_begin": 560,
- "tips_balance": 2850,
- "sales_count": 26,
- "currency_iso_code": "EUR",
- "receipt_text": "string",
- "fr_receipt_id": 0,
- "revenues": [
- {
- "client_id": null,
- "fa_account": "1505",
- "amount": 1850
}
], - "vats": [
- {
- "client_id": null,
- "fa_account": "1505",
- "percentage": "1900",
- "amount": 18.5,
- "amount_gross": "{\"amount\": 666.7, \"currency\": \"CHF\"}",
- "amount_net": "{\"amount\": 634.96, \"currency\": \"CHF\"}"
}
], - "expenses": [
- {
- "client_id": null,
- "fa_account": "1505",
- "name": "Berlin cash deposit account",
- "amount": 1850
}
], - "payments": [
- {
- "client_id": null,
- "payment_option": "5ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "payment_option_id": 131,
- "payment_option_name": "American Express",
- "payment_option_type_name": "undefined",
- "fa_account": "1505",
- "cost_center": "0005",
- "currency_iso_code": "EUR",
- "amount": 1850,
- "amount_tip": 1850,
- "discrepancy": 1850,
- "exchangeRate": 1.403
}
], - "tips": [
- {
- "client_id": null,
- "staff": "b3465a62-62e9-46de-9df7-4d3009c46068",
- "fa_account": null,
- "amount": 1850,
- "template_number": null,
- "vat_fa_account_number": null,
- "vat_percentage": null
}
], - "cash_units": {
- "client_id": null,
- "currency_iso_code": "EUR",
- "units": [
- {
- "type": "coin",
- "qty": null,
- "value": "0.10"
}
]
}, - "extended": {
- "cancellation_amount": null,
- "cancellation_count": null,
- "transaction_stats": [
- {
- "start_date": "2018-01-29T14:55:05.000Z",
- "end_date": "2018-01-29T14:55:05.000Z",
- "count": 5000,
- "amount": {
- "currency": "EUR",
- "amount": "47.02"
}
}
], - "discount_stats": [
- {
- "source_id": "03063bbe-e44d-42f6-8bbf-971f5d88f848",
- "name": "Christmas Bonus",
- "count": 5000,
- "amount": {
- "currency": "EUR",
- "amount": "47.02"
}
}
], - "first_transaction_date": "2018-01-29T14:55:05.000Z",
- "last_transaction_date": "2018-01-29T14:55:05.000Z",
- "first_transaction_number": 221,
- "last_transaction_number": 234,
- "first_sale_transaction_number": 221,
- "last_sale_transaction_number": 234,
- "first_expense_transaction_number": 221,
- "last_expense_transaction_number": 234,
- "revenue_gross": {
- "currency": "EUR",
- "amount": "47.02"
}, - "revenue_net": {
- "currency": "EUR",
- "amount": "47.02"
}, - "average_amount_gross_per_cart": {
- "currency": "EUR",
- "amount": "47.02"
}, - "cart_items_count": 5000,
- "total_quantity": 245.73,
- "average_quantity_per_cart": 4.73,
- "average_cart_items_count_per_cart": 3.108,
- "discount_amount": {
- "currency": "EUR",
- "amount": "47.02"
}, - "voucher_amount": {
- "currency": "EUR",
- "amount": "47.02"
}, - "excluded_vouchers": {
- "average_cart_items_count_per_cart": 3.108,
- "average_quantity_per_cart": 4.73,
- "cart_items_count": 5000,
- "revenue_gross": {
- "currency": "EUR",
- "amount": "47.02"
}, - "revenue_net": {
- "currency": "EUR",
- "amount": "47.02"
}, - "sales_count": 26,
- "total_quantity": 245.73
}, - "cashier_name": "Baris Atamaer",
- "expense_amount_excluding_bank": {
- "currency": "EUR",
- "amount": "47.02"
}, - "deposit_amount_excluding_bank": {
- "currency": "EUR",
- "amount": "47.02"
}, - "refund_count": 4,
- "refund_net": {
- "currency": "EUR",
- "amount": "47.02"
}, - "refund_gross": {
- "currency": "EUR",
- "amount": "47.02"
}, - "cashier_stats": [
- {
- "staff": "d0d40841-b1a7-438a-9d1e-2bfec590d2e3",
- "staff_name": "John Smith",
- "staff_number": "0018",
- "sales": {
- "currency": "EUR",
- "amount": "47.02"
}, - "change": {
- "currency": "EUR",
- "amount": "47.02"
}, - "cash_payments": {
- "currency": "EUR",
- "amount": "47.02"
}, - "expenses": {
- "currency": "EUR",
- "amount": "47.02"
}, - "cash_balance": {
- "currency": "EUR",
- "amount": "47.02"
}, - "non_cash_payments": {
- "currency": "EUR",
- "amount": "47.02"
}, - "tips_total": {
- "currency": "EUR",
- "amount": "47.02"
}, - "tips_cash": {
- "currency": "EUR",
- "amount": "47.02"
}, - "tips_balance": {
- "currency": "EUR",
- "amount": "47.02"
}, - "payments": [
- {
- "payment_option": "5ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "payment_option_name": "American Express",
- "payment_option_type_name": "undefined",
- "amount_given": {
- "currency": "EUR",
- "amount": "47.02"
}, - "amount": {
- "currency": "EUR",
- "amount": "47.02"
}, - "amount_tip": {
- "currency": "EUR",
- "amount": "47.02"
}, - "fa_account": "1505",
- "cost_center": "0005"
}
]
}
]
}, - "_metadata": {
- "cancellation_amount": null,
- "total_count_transactions": 5000,
- "total_count_expenses": 5000,
- "first_transaction_timestamp": "2018-01-29T14:55:05.000Z",
- "last_transaction_timestamp": "2018-01-29T14:55:05.000Z",
- "first_transaction_client_uuid": "fd5bf507-e0e0-48f5-b322-619b6712b719",
- "last_transaction_client_uuid": "d0d40841-b1a7-438a-9d1e-2bfec590d2e3",
- "first_transaction_number": 221,
- "last_transaction_number": 234,
- "device": {
- "identifier_for_vendor": "A2700DA6-CE09-4041-9724-1313DEF295E2",
- "keychain_counting_numbers": "sale: 3, expense: 0, balance: 0, deliveryNote: 0, savedCart: 0, order: 1",
- "app_info": "de.tillhub.tillhubstage.dev 1.0:0",
- "os_info": "iPadOS 17.4",
- "model_info": "Simulator iPad (10th generation)"
}
}, - "wallet_data": {
- "outstanding_total": {
- "currency": "EUR",
- "amount": "47.02"
}, - "wallets": [
- {
- "id": "860defb8-5598-421d-9da4-f0826e767536",
- "outstanding": {
- "currency": "EUR",
- "amount": "47.02"
}
}
]
}, - "status": {
- "signed_at": "2018-01-29T14:55:05.000Z",
- "signature": {
- "started_at": "2019-07-10T18:41:02.000Z",
- "data": "MEQCIAy4P9k+7x9saDO0uRZ4El8QwN+qTgYiv1DIaJIMWRiuAiAt+saFDGjK2Yi5Cxgy7PprXQ5O0seRgx4ltdpW9REvwA==",
- "caption": "NF525 Vente",
- "qr_code_data": "V0;955002-00;Kassenbeleg-V1;Beleg^0.00_2.55_0.00_0.00_0.00^2.55:Bar;18;112;2019-07-10T18:41:04.000Z;2019-07-10T18:41:04.000Z;ecdsa-plain-SHA256;unixTime;MEQCIAy4P9k+7x9saDO0uRZ4El8QwN+qTgYiv1DIaJIMWRiuAiAt+saFDGjK2Yi5Cxgy7PprXQ5O0seRgx4ltdpW9REvwA==;BHhWOeisRpPBTGQ1W4VUH95TXx2GARf8e2NYZXJoInjtGqnxJ8sZ3CQpYgjI+LYEmW5A37sLWHsyU7nSJUBemyU=",
- "format": "qr",
- "payload": null,
- "request_payload": null,
- "client_id": "TillhubPOS.0014.0001",
- "counter": 227,
- "unit": "soTFFH9xiZP9JYWCPRgvpw6xhZ3ttbWDjfS4ky4AMEk=",
- "public_key": "string",
- "algorithm": "ecdsa-plain-SHA256",
- "process_type": "Kassenbeleg-V1",
- "receipt_type": "Beleg",
- "process_data": "Beleg^0.00_2.55_0.00_0.00_0.00^2.55:Bar",
- "transactionNumber": 16,
- "transaction_id": "53451613-1a15-491f-bd01-033a427084b7",
- "error": "string",
- "error_counter": 0
}, - "metadata": { },
- "dispatched_at": "2018-11-04T23:18:43.075Z",
- "printed_at": "2018-11-04T23:18:43.075Z",
- "status": "signing_requested",
- "signature_type": "fiskaltrust",
- "source_type": "transaction",
- "canceled_at": "2018-01-29T14:55:05.000Z",
- "refunded_at": "2018-01-29T14:55:05.000Z"
}
}
Query all register opening protocols from cashier counting protocols of a user.
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
branch_custom_id | string the branch number as filter |
register_custom_id | string the register number as filter |
deleted | string the string representation of boolean values as |
tillhub.register_opening_protocols.get((err, result) => {})
Create a new register opening protocol on cashier counting protocols of a user.
clientAccountID required | string Alphanumeric client ID of the user |
Simple register opening protocol
string or (any or null) Default: null | |
string or (any or null) | |
branch_custom_id required | string The Tillhub branch number. |
string or (any or null) | |
register_custom_id required | string The Tillhub register number. |
string or (any or null) Default: null | |
string or (any or null) | |
string or (any or null) Default: null | |
string or (any or null) Default: null | |
string or (any or null) Default: null | |
string or (any or null) Default: null | |
object or (any or null) Default: null | |
string or (any or null) Default: null | |
object or (any or null) Default: null | |
object or (any or null) Default: null | |
required | Array of objects or objects |
(any or null) or string | |
deleted | boolean Default: false |
opening_date required | string <date-time> The time when the cashier clicked on the button in the app to open the register |
Array of objects Total amounts per currency from manual counting (total sum of bills and coins per currency, actual value) | |
Array of objects Total amounts per currency from calculation (values from previously closed balance, setpoint value) | |
Array of objects or (any or null) | |
has_discrepancy | boolean Default: false |
Array of objects or (any or null) | |
integer or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) |
{- "custom_id": null,
- "branch": "f2ac2cae-97ff-42a1-967b-0a35222ab6d1",
- "branch_custom_id": "5",
- "register": "9d110eb2-2245-4e14-9574-49b502f3a9b3",
- "register_custom_id": "7",
- "client": null,
- "client_id": "string",
- "client_custom_id": null,
- "cashier_staff": null,
- "temp_staff": null,
- "device": null,
- "context": null,
- "comments": null,
- "metadata": null,
- "location": null,
- "cash_units": [
- {
- "client_id": null,
- "currency": "EUR",
- "units": [
- {
- "type": "coin",
- "qty": null,
- "value": 0.1
}
]
}
], - "timezone": { },
- "deleted": false,
- "opening_date": "2018-11-04T23:18:43.075Z",
- "total_counted": [
- {
- "currency": "EUR",
- "amount": "47.02"
}
], - "total_calculated": [
- {
- "currency": "EUR",
- "amount": "47.02"
}
], - "discrepancy_total": [
- {
- "currency": "EUR",
- "amount": 27633.02
}
], - "has_discrepancy": false,
- "opening_tips": [
- {
- "currency": "EUR",
- "amount": "47.02"
}
], - "balance_number": 0,
- "balance_last": "9d20d799-b6e0-46a0-9e48-7ca372af13d4",
- "balance_custom_id_last": "12",
- "merchant_receipt": "string"
}
Get a single register opening protocol object from cashier counting protocols.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric register_opening_protocols ID |
tillhub.register_opening_protocols.get((err, result) => {})
Update an entire register opening protocol object on cashier counting protocols.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric register opening protocol ID |
Simple register opening protocol
string or (any or null) Default: null | |
string or (any or null) | |
branch_custom_id | string The Tillhub branch number. |
string or (any or null) | |
register_custom_id | string The Tillhub register number. |
string or (any or null) Default: null | |
string or (any or null) | |
string or (any or null) Default: null | |
string or (any or null) Default: null | |
string or (any or null) Default: null | |
string or (any or null) Default: null | |
object or (any or null) Default: null | |
string or (any or null) Default: null | |
object or (any or null) Default: null | |
object or (any or null) Default: null | |
Array of objects or objects | |
(any or null) or string | |
deleted | boolean Default: false |
opening_date | string <date-time> The time when the cashier clicked on the button in the app to open the register |
Array of objects Total amounts per currency from manual counting (total sum of bills and coins per currency, actual value) | |
Array of objects Total amounts per currency from calculation (values from previously closed balance, setpoint value) | |
Array of objects or (any or null) | |
has_discrepancy | boolean Default: false |
Array of objects or (any or null) | |
integer or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) |
{- "custom_id": null,
- "branch": "f2ac2cae-97ff-42a1-967b-0a35222ab6d1",
- "branch_custom_id": "5",
- "register": "9d110eb2-2245-4e14-9574-49b502f3a9b3",
- "register_custom_id": "7",
- "client": null,
- "client_id": "string",
- "client_custom_id": null,
- "cashier_staff": null,
- "temp_staff": null,
- "device": null,
- "context": null,
- "comments": null,
- "metadata": null,
- "location": null,
- "cash_units": [
- {
- "client_id": null,
- "currency": "EUR",
- "units": [
- {
- "type": "coin",
- "qty": null,
- "value": 0.1
}
]
}
], - "timezone": { },
- "deleted": false,
- "opening_date": "2018-11-04T23:18:43.075Z",
- "total_counted": [
- {
- "currency": "EUR",
- "amount": "47.02"
}
], - "total_calculated": [
- {
- "currency": "EUR",
- "amount": "47.02"
}
], - "discrepancy_total": [
- {
- "currency": "EUR",
- "amount": 27633.02
}
], - "has_discrepancy": false,
- "opening_tips": [
- {
- "currency": "EUR",
- "amount": "47.02"
}
], - "balance_number": 0,
- "balance_last": "9d20d799-b6e0-46a0-9e48-7ca372af13d4",
- "balance_custom_id_last": "12",
- "merchant_receipt": "string"
}
Get the latest register opening protocol object from cashier counting protocols.
clientAccountID required | string Alphanumeric client ID of the user |
register_custom_id required | string The custom id of the register, e.g. '0001' |
branch_custom_id required | string The custom id of the branch, e.g. '0001' |
tillhub.register_opening_protocols.get((err, result) => {})
{- "custom_id": null,
- "branch": "f2ac2cae-97ff-42a1-967b-0a35222ab6d1",
- "branch_custom_id": "5",
- "register": "9d110eb2-2245-4e14-9574-49b502f3a9b3",
- "register_custom_id": "7",
- "client": null,
- "client_id": "string",
- "client_custom_id": null,
- "cashier_staff": null,
- "temp_staff": null,
- "device": null,
- "context": null,
- "comments": null,
- "metadata": null,
- "location": null,
- "cash_units": [
- {
- "client_id": null,
- "currency": "EUR",
- "units": [
- {
- "type": "coin",
- "qty": null,
- "value": 0.1
}
]
}
], - "timezone": { },
- "deleted": false,
- "opening_date": "2018-11-04T23:18:43.075Z",
- "total_counted": [
- {
- "currency": "EUR",
- "amount": "47.02"
}
], - "total_calculated": [
- {
- "currency": "EUR",
- "amount": "47.02"
}
], - "discrepancy_total": [
- {
- "currency": "EUR",
- "amount": 27633.02
}
], - "has_discrepancy": false,
- "opening_tips": [
- {
- "currency": "EUR",
- "amount": "47.02"
}
], - "balance_number": 0,
- "balance_last": "9d20d799-b6e0-46a0-9e48-7ca372af13d4",
- "balance_custom_id_last": "12",
- "merchant_receipt": "string",
- "id": "860defb8-5598-421d-9da4-f0826e767536",
- "created_at": "2018-11-04T23:18:43.075Z",
- "updated_at": "2018-11-04T23:18:43.075Z"
}
Create a new account of a user.
clientAccountID required | string Alphanumeric client ID of the user |
Simple Account
required | string or (any or null) |
string or (any or null) | |
string or (any or null) | |
type required | string Enum: "vat" "discount" "revenue" "payment" |
active | boolean Default: true |
deleted | boolean Default: false |
metadata | object |
Array of objects or (any or null) | |
Array of objects DEPRECATED: do not use |
{- "name": "string",
- "description": "string",
- "fa_account_number": "string",
- "type": "vat",
- "active": true,
- "deleted": false,
- "metadata": { },
- "financial_accounts": [
- {
- "name": "string",
- "location": "936835f7-2d75-41d2-9001-38ed6e458328",
- "custom_id": "1776",
- "cost_center": "4321"
}
], - "accounts": [
- {
- "branch": "stringstring",
- "branch_number": 0,
- "name": "string",
- "account": "stringstring"
}
]
}
Query all accounts of a user.
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
deleted | string the string representation of boolean values as |
name | string the string name of the account |
account_number | string the fa_account_number of the account |
q | string search for substring in fa_account_number and name |
{- "request": {
- "status": 200,
- "msg": "Querried all accounts succesfully.",
- "request": {
- "host": "staging-api.tillhub.com",
- "id": "UUID"
}, - "count": 2,
- "results": [
- {
- "id": "f19a8412-afec-48da-94a3-fd275d97ac39",
- "fa_account_number": 1776,
- "created_at": "2017-08-08T19:57:49.000Z",
- "update_at": "2017-08-08T19:57:49.000Z",
- "active": true,
- "type": "revenue",
- "metadata": {
- "legacy_id": 1
}, - "name": "Revenue Account X%",
- "deleted": false
}
]
}
}
Delete a single account object.
clientAccountID required | string Alphanumeric client ID of the user |
accountID required | string Alphanumeric account ID |
tillhub.accounts.delete((err, result) => {})
{- "status": 200,
- "msg": "Deleted account 96341e35-0fe1-4b72-89bc-6f62e9114ac6",
- "request": {
- "host": "staging-api.tillhub.com",
- "id": "UUID"
}
}
Replace an entire account object.
clientAccountID required | string Alphanumeric client ID of the user |
accountID required | string Alphanumeric account ID |
Simple Account
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
type | string Enum: "vat" "discount" "revenue" "payment" |
active | boolean Default: true |
deleted | boolean Default: false |
metadata | object |
Array of objects or (any or null) | |
Array of objects DEPRECATED: do not use |
{- "name": "string",
- "description": "string",
- "fa_account_number": "string",
- "type": "vat",
- "active": true,
- "deleted": false,
- "metadata": { },
- "financial_accounts": [
- {
- "name": "string",
- "location": "936835f7-2d75-41d2-9001-38ed6e458328",
- "custom_id": "1776",
- "cost_center": "4321"
}
], - "accounts": [
- {
- "branch": "stringstring",
- "branch_number": 0,
- "name": "string",
- "account": "stringstring"
}
]
}
Create a new tax reference of a user.
clientAccountID required | string Alphanumeric client ID of the user |
Simple Tax Reference
required | string or (any or null) |
string or (any or null) | |
type required | string Value: "vat" |
account | string DEPRECATED: do not use |
rate required | number >= 0 |
percentage | number >= 0 |
is_fixed | boolean Default: false |
active | boolean Default: true |
deleted | boolean Default: false |
Array of objects or (any or null) | |
string or (any or null) Default: null | |
rate_class | string Default: "normal" Enum: "normal" "reduced" "super_reduced" Rate class according to international standards, used in Germany to map types for e.g. fiscalization |
{- "name": "string",
- "fa_account_number": "string",
- "type": "vat",
- "account": "string",
- "rate": 0,
- "percentage": 0,
- "is_fixed": false,
- "active": true,
- "deleted": false,
- "financial_accounts": [
- {
- "name": "string",
- "location": "936835f7-2d75-41d2-9001-38ed6e458328",
- "custom_id": "1776",
- "cost_center": "4321"
}
], - "jurisdiction": null,
- "rate_class": "normal"
}
Query all taxes references of a user.
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
deleted | string the string representation of boolean values as |
active | string the string representation of boolean values as |
tillhub.taxes.get((err, result) => {})
{- "request": {
- "status": 200,
- "msg": "Querried all tax references succesfully.",
- "request": {
- "host": "staging-api.tillhub.com",
- "id": "UUID"
}, - "count": 1,
- "results": [
- {
- "id": "d8aa878b-dee8-4e78-bb80-b6bfe5cf43ca",
- "name": "VAT. 19 %",
- "account": "f19a8412-afec-48da-94a3-fd275d97ac39",
- "rate": 0.19,
- "is_fixed": false,
- "active": true,
- "percentage": 19,
- "created_at": {
- "iso": "2017-08-08T19:57:49.000Z",
- "unix": 1517421321000
}, - "update_at": "2017-08-08T19:57:49.000Z",
- "metadata": {
- "legacy_id": 1
}, - "type": "vat",
- "deleted": false,
- "fa_account_number": "string",
- "accounts": "string",
- "percentage_millis": 19000
}
]
}
}
Delete a single tax reference object.
clientAccountID required | string Alphanumeric client ID of the user |
accountID required | string Alphanumeric tax reference ID |
tillhub.taxes.delete((err, result) => {})
{- "status": 200,
- "msg": "Deleted tax reference f3afd983-6bc9-4eea-af25-b20f0356b10a",
- "request": {
- "host": "staging-api.tillhub.com",
- "id": "709d688a-d43c-4c1d-af6d-70b610b2f42c"
}
}
Replace an entire tax reference object.
clientAccountID required | string Alphanumeric client ID of the user |
accountID required | string Alphanumeric tax reference ID |
Simple Tax Reference
string or (any or null) | |
string or (any or null) | |
type | string Value: "vat" |
account | string DEPRECATED: do not use |
rate | number >= 0 |
percentage | number >= 0 |
is_fixed | boolean Default: false |
active | boolean Default: true |
deleted | boolean Default: false |
Array of objects or (any or null) | |
string or (any or null) Default: null | |
rate_class | string Default: "normal" Enum: "normal" "reduced" "super_reduced" Rate class according to international standards, used in Germany to map types for e.g. fiscalization |
{- "name": "string",
- "fa_account_number": "string",
- "type": "vat",
- "account": "string",
- "rate": 0,
- "percentage": 0,
- "is_fixed": false,
- "active": true,
- "deleted": false,
- "financial_accounts": [
- {
- "name": "string",
- "location": "936835f7-2d75-41d2-9001-38ed6e458328",
- "custom_id": "1776",
- "cost_center": "4321"
}
], - "jurisdiction": null,
- "rate_class": "normal"
}
Create a new discount of a user.
clientAccountID required | string Alphanumeric client ID of the user |
Simple Discount
number or (any or null) Default: null | |
string or (any or null) The currency selector for a discount. NOTE: currency will be enforced soon if value is set | |
number or (any or null) The absolut reduction via this voucher | |
required | number or (any or null) Relative value of this discount. |
type required | string Enum: "percentage" "value" |
object or (any or null) | |
string or (any or null) | |
string or (any or null) | |
group required | string Enum: "cart" "customer" "item" |
active | boolean Default: true |
deleted | boolean Default: false |
object or (any or null) | |
Array of strings or (any or null) | |
Array of strings or (any or null) | |
string or (any or null) | |
string or (any or null) A caller defined custom ID for the purpose of syncing from external resources, or to use in analytics. | |
group_on_receipt | boolean Default: false |
{- "amount": null,
- "currency": "str",
- "value": -1000000,
- "rate": 1,
- "type": "percentage",
- "behaviors": {
- "automatic": false,
- "display": {
- "show_inactive": true
}, - "cart": "per_item"
}, - "account": "string",
- "name": "string",
- "group": "cart",
- "active": true,
- "deleted": false,
- "constraints": {
- "products": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "product_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "taxes": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "time": { }
}, - "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "order": "first",
- "external_reference_id": "string",
- "group_on_receipt": false
}
{- "status": 200,
- "msg": "string",
- "count": 1,
- "results": [
- {
- "name": "A good First Discount",
- "summary": "A short summary of a discount.",
- "description": "A description of a discount."
}
]
}
Query all discounts of a user.
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
deleted | string the string representation of boolean values as |
active | string the string representation of boolean values as |
branch | string the branch ID in the location list |
branch_group | string the branch group ID in the branch groups list |
tillhub.discounts.get((err, result) => {})
Replace an entire discount object.
clientAccountID required | string Alphanumeric client ID of the user |
discountID required | string Alphanumeric discount ID |
Simple Discount
number or (any or null) Default: null | |
string or (any or null) The currency selector for a discount. NOTE: currency will be enforced soon if value is set | |
number or (any or null) The absolut reduction via this voucher | |
number or (any or null) Relative value of this discount. | |
type | string Enum: "percentage" "value" |
object or (any or null) | |
string or (any or null) | |
string or (any or null) | |
group | string Enum: "cart" "customer" "item" |
active | boolean Default: true |
deleted | boolean Default: false |
object or (any or null) | |
Array of strings or (any or null) | |
Array of strings or (any or null) | |
string or (any or null) | |
string or (any or null) A caller defined custom ID for the purpose of syncing from external resources, or to use in analytics. | |
group_on_receipt | boolean Default: false |
{- "amount": null,
- "currency": "str",
- "value": -1000000,
- "rate": 1,
- "type": "percentage",
- "behaviors": {
- "automatic": false,
- "display": {
- "show_inactive": true
}, - "cart": "per_item"
}, - "account": "string",
- "name": "string",
- "group": "cart",
- "active": true,
- "deleted": false,
- "constraints": {
- "products": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "product_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "taxes": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "time": { }
}, - "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "order": "first",
- "external_reference_id": "string",
- "group_on_receipt": false
}
Make a generic search query for discounts on the name field as a string.
clientAccountID required | string Alphanumeric client ID of the user |
q required | string the search string |
fields | string[] array of fields to search by, e.g. 'name' (if no field is specified then it will search all available fields). |
tillhub.discounts.search.get((err, result) => {})
Create a new payment option of a user.
clientAccountID required | string Alphanumeric client ID of the user |
Simple Payment Option
active | boolean Default: true |
type required | string Enum: "cash" "card" "invoice" "card_opi" "card_concardis" "card_tim" "card_adyen" "gift_card" "terminal_gift_card" "default" "undefined" "voucher" "sumup" "buy_now_pay_later" |
metadata | object |
name required | string <= 64 characters |
cost_center | string <= 64 characters |
currency required | string = 3 characters |
diff_account | string <= 64 characters |
order_index required | number >= 0 |
summable | boolean |
string or (any or null) | |
string or (any or null) | |
Array of strings or (any or null) DEPRECATED: do not use | |
Array of objects or (any or null) | |
Array of strings or (any or null) A list of card circuits (e.g. VISA, Girocard ...) that should trigger a matching re-assignment after payments with terminals | |
object or (any or null) |
{- "active": true,
- "type": "cash",
- "metadata": { },
- "name": "string",
- "cost_center": "string",
- "currency": "str",
- "diff_account": "string",
- "order_index": 0,
- "summable": true,
- "fa_account_number": "string",
- "discrepancy_account": "string",
- "accounts": [
- "string"
], - "financial_accounts": [
- {
- "name": "string",
- "location": "936835f7-2d75-41d2-9001-38ed6e458328",
- "custom_id": "1776",
- "cost_center": "4321"
}
], - "card_circuits": [
- "string"
], - "price_range": {
- "min_amount": "9.99",
- "max_amount": "16550.99"
}
}
Query all payment options of a user.
clientAccountID required | string Alphanumeric client ID of the user |
deleted | string the string representation of boolean values as |
active | string the string representation of boolean values as |
tillhub.payment_options.get((err, result) => {})
Replace an entire payment option.
clientAccountID required | string Alphanumeric client ID of the user |
paymentOptionID required | string Alphanumeric payment options ID |
Simple Account
active | boolean Default: true |
type | string Enum: "cash" "card" "invoice" "card_opi" "card_concardis" "card_tim" "card_adyen" "gift_card" "terminal_gift_card" "default" "undefined" "voucher" "sumup" "buy_now_pay_later" |
metadata | object |
name | string <= 64 characters |
cost_center | string <= 64 characters |
currency | string = 3 characters |
diff_account | string <= 64 characters |
order_index | number >= 0 |
summable | boolean |
string or (any or null) | |
string or (any or null) | |
Array of strings or (any or null) DEPRECATED: do not use | |
Array of objects or (any or null) | |
Array of strings or (any or null) A list of card circuits (e.g. VISA, Girocard ...) that should trigger a matching re-assignment after payments with terminals | |
object or (any or null) |
{- "active": true,
- "type": "cash",
- "metadata": { },
- "name": "string",
- "cost_center": "string",
- "currency": "str",
- "diff_account": "string",
- "order_index": 0,
- "summable": true,
- "fa_account_number": "string",
- "discrepancy_account": "string",
- "accounts": [
- "string"
], - "financial_accounts": [
- {
- "name": "string",
- "location": "936835f7-2d75-41d2-9001-38ed6e458328",
- "custom_id": "1776",
- "cost_center": "4321"
}
], - "card_circuits": [
- "string"
], - "price_range": {
- "min_amount": "9.99",
- "max_amount": "16550.99"
}
}
Create a new expense account of a user.
clientAccountID required | string Alphanumeric client ID of the user |
Simple Account
active | boolean Default: true |
deleted | boolean Default: false |
required | string or (any or null) |
required | string or (any or null) |
Array of objects or (any or null) | |
type required | string Enum: "expense" "deposit" "bank" "transit" "safe" "tip" |
string or (any or null) DEPRECATED | |
Array of strings or (any or null) | |
Array of strings or (any or null) | |
accepts_booking_from_safe | boolean Default: false |
{- "active": true,
- "deleted": false,
- "name": "Utilities expense",
- "fa_account_number": "1776",
- "financial_accounts": [
- {
- "name": "string",
- "location": "936835f7-2d75-41d2-9001-38ed6e458328",
- "custom_id": "1776",
- "cost_center": "4321"
}
], - "type": "expense",
- "tax": "string",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "accepts_booking_from_safe": false
}
Query all expense accounts of a user.
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
deleted | string the string representation of boolean values as |
active | string the string representation of boolean values as |
name | string the name of the account |
branch | string the uuid of the branch |
branch_group | string the uuid of the branch_group |
account_number | string the fa_account_number of the account |
q | string search for substring in fa_account_number and name |
tillhub.expense_accounts.get((err, result) => {})
Replace an entire expense account.
clientAccountID required | string Alphanumeric client ID of the user |
exepenseAccountID required | string Alphanumeric expense accounts ID |
Simple Account
active | boolean Default: true |
deleted | boolean Default: false |
string or (any or null) | |
string or (any or null) | |
Array of objects or (any or null) | |
type | string Enum: "expense" "deposit" "bank" "transit" "safe" "tip" |
string or (any or null) DEPRECATED | |
Array of strings or (any or null) | |
Array of strings or (any or null) | |
accepts_booking_from_safe | boolean Default: false |
{- "active": true,
- "deleted": false,
- "name": "Utilities expense",
- "fa_account_number": "1776",
- "financial_accounts": [
- {
- "name": "string",
- "location": "936835f7-2d75-41d2-9001-38ed6e458328",
- "custom_id": "1776",
- "cost_center": "4321"
}
], - "type": "expense",
- "tax": "string",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "accepts_booking_from_safe": false
}
Create a new document template of a user.
clientAccountID required | string Alphanumeric client ID of the user |
Simple Template
name | string |
summary | string |
description | string |
{- "name": "A good First template",
- "summary": "A short summary of a template.",
- "description": "A description of a template."
}
{- "status": 200,
- "msg": "string",
- "count": 1,
- "results": [
- {
- "name": "A good First template",
- "summary": "A short summary of a template.",
- "description": "A description of a template."
}
]
}
Query all templates of a user.
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
tillhub.templates.get((err, result) => {})
Replace an entire template object.
clientAccountID required | string Alphanumeric client ID of the user |
templateID required | string Alphanumeric template ID |
Simple Template
name | string |
summary | string |
description | string |
{- "name": "A good First template",
- "summary": "A short summary of a template.",
- "description": "A description of a template."
}
Creates a new Delivery Note that will be loaded by the app and produce a transaction. DeliveryNote feature is still in development/testing stage and might change in the following weeks.
Simple DeliveryNote
date | string |
client_id | string |
branch_number | number |
register_number | string |
cashier_staff_number | string |
cashier_staff | string |
temp_staff | string |
geo_data | string |
currency_iso_code | string |
customer_receipt | string |
merchant_receipt | string |
barcode | string |
deliverynote_number | integer |
customer_number required | string |
customer_description | string |
title | string |
description | string |
invoiced_at | string |
required | object |
{- "date": "2018-05-07T14:35:52.626+02:00",
- "client_id": "0bc320a1d21fcfb59a141e8c041affda",
- "branch_number": 1,
- "register_number": 1,
- "cashier_staff_number": 1,
- "cashier_staff": "91eae756-f70f-4210-99d3-2c40c301a6b1",
- "temp_staff": "91eae756-f70f-4210-99d3-2c40c301a6b1",
- "geo_data": "string",
- "currency_iso_code": "EUR",
- "customer_receipt": "string",
- "merchant_receipt": "string",
- "barcode": 234526245345,
- "deliverynote_number": 2345,
- "customer_number": "102345223A",
- "customer_description": "Linda Simpson",
- "title": "delivery note title",
- "description": "delivery note description",
- "invoiced_at": "2018-05-07T14:35:52.626+02:00",
- "cartitems": {
- "product": "8e3bf6b2-3a11-4776-8aef-e08300afee03",
- "name": "My Product Name",
- "product_number": 1,
- "original_price": 12,
- "product_group": "9e3bf6b2-3a11-4776-8aef-e08300afee03",
- "product_group_number": 2352,
- "qty": 1,
- "currency_iso_code": "EUR",
- "discount_amount": 0.25,
- "salesman_staff": "5ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "salesman_staff_number": 2432,
- "tax": "6ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "account": "b8644296-8519-4eed-8dd9-838915a5df12",
- "account_number": 5345,
- "vat_fa_account_number": 8200,
- "vat_percentage": 19,
- "vat_amount": 1.92,
- "vat_amount_euro": 1.9156,
- "note": "My cartitem note",
- "position": 1,
- "discounts": [
- {
- "group": "cart or customer",
- "name": "Discount name",
- "discount": "discount id",
- "amount": 10,
- "type": "percentage or value",
- "order_index": 1
}
]
}
}
{- "status": 0,
- "msg": "Queried Delivery Notes successfully",
- "count": 1,
- "results": [
- {
- "date": "2018-05-07T14:35:52.626+02:00",
- "client_id": "0bc320a1d21fcfb59a141e8c041affda",
- "branch_number": 1,
- "register_number": 1,
- "cashier_staff_number": 1,
- "cashier_staff": "91eae756-f70f-4210-99d3-2c40c301a6b1",
- "temp_staff": "91eae756-f70f-4210-99d3-2c40c301a6b1",
- "geo_data": "string",
- "currency_iso_code": "EUR",
- "customer_receipt": "string",
- "merchant_receipt": "string",
- "barcode": 234526245345,
- "deliverynote_number": 2345,
- "customer_number": "102345223A",
- "customer_description": "Linda Simpson",
- "title": "delivery note title",
- "description": "delivery note description",
- "invoiced_at": "2018-05-07T14:35:52.626+02:00",
- "cartitems": {
- "product": "8e3bf6b2-3a11-4776-8aef-e08300afee03",
- "name": "My Product Name",
- "product_number": 1,
- "original_price": 12,
- "product_group": "9e3bf6b2-3a11-4776-8aef-e08300afee03",
- "product_group_number": 2352,
- "qty": 1,
- "currency_iso_code": "EUR",
- "discount_amount": 0.25,
- "salesman_staff": "5ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "salesman_staff_number": 2432,
- "tax": "6ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "account": "b8644296-8519-4eed-8dd9-838915a5df12",
- "account_number": 5345,
- "vat_fa_account_number": 8200,
- "vat_percentage": 19,
- "vat_amount": 1.92,
- "vat_amount_euro": 1.9156,
- "note": "My cartitem note",
- "position": 1,
- "discounts": [
- {
- "group": "cart or customer",
- "name": "Discount name",
- "discount": "discount id",
- "amount": 10,
- "type": "percentage or value",
- "order_index": 1
}
]
}
}
]
}
Query all delivery_notes of a user.
clientDeliveryNoteID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
branch_number | integer Set the branch number to filter delivery notes per branch. |
register_number | integer Set the register number to filter delivery notes per branch and register. Use only with branch_number |
tillhub.delivery_note.get((err, result) => {})
{- "status": 0,
- "msg": "Queried Delivery Notes successfully",
- "count": 1,
- "results": [
- {
- "date": "2018-05-07T14:35:52.626+02:00",
- "client_id": "0bc320a1d21fcfb59a141e8c041affda",
- "branch_number": 1,
- "register_number": 1,
- "cashier_staff_number": 1,
- "cashier_staff": "91eae756-f70f-4210-99d3-2c40c301a6b1",
- "temp_staff": "91eae756-f70f-4210-99d3-2c40c301a6b1",
- "geo_data": "string",
- "currency_iso_code": "EUR",
- "customer_receipt": "string",
- "merchant_receipt": "string",
- "barcode": 234526245345,
- "deliverynote_number": 2345,
- "customer_number": "102345223A",
- "customer_description": "Linda Simpson",
- "title": "delivery note title",
- "description": "delivery note description",
- "invoiced_at": "2018-05-07T14:35:52.626+02:00",
- "cartitems": {
- "product": "8e3bf6b2-3a11-4776-8aef-e08300afee03",
- "name": "My Product Name",
- "product_number": 1,
- "original_price": 12,
- "product_group": "9e3bf6b2-3a11-4776-8aef-e08300afee03",
- "product_group_number": 2352,
- "qty": 1,
- "currency_iso_code": "EUR",
- "discount_amount": 0.25,
- "salesman_staff": "5ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "salesman_staff_number": 2432,
- "tax": "6ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "account": "b8644296-8519-4eed-8dd9-838915a5df12",
- "account_number": 5345,
- "vat_fa_account_number": 8200,
- "vat_percentage": 19,
- "vat_amount": 1.92,
- "vat_amount_euro": 1.9156,
- "note": "My cartitem note",
- "position": 1,
- "discounts": [
- {
- "group": "cart or customer",
- "name": "Discount name",
- "discount": "discount id",
- "amount": 10,
- "type": "percentage or value",
- "order_index": 1
}
]
}
}
]
}
Get a single delivery_note member.
clientDeliveryNoteID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric delivery_note ID |
tillhub.delivery_note.get((err, result) => {})
{- "status": 0,
- "msg": "Queried Delivery Notes successfully",
- "count": 1,
- "results": [
- {
- "date": "2018-05-07T14:35:52.626+02:00",
- "client_id": "0bc320a1d21fcfb59a141e8c041affda",
- "branch_number": 1,
- "register_number": 1,
- "cashier_staff_number": 1,
- "cashier_staff": "91eae756-f70f-4210-99d3-2c40c301a6b1",
- "temp_staff": "91eae756-f70f-4210-99d3-2c40c301a6b1",
- "geo_data": "string",
- "currency_iso_code": "EUR",
- "customer_receipt": "string",
- "merchant_receipt": "string",
- "barcode": 234526245345,
- "deliverynote_number": 2345,
- "customer_number": "102345223A",
- "customer_description": "Linda Simpson",
- "title": "delivery note title",
- "description": "delivery note description",
- "invoiced_at": "2018-05-07T14:35:52.626+02:00",
- "cartitems": {
- "product": "8e3bf6b2-3a11-4776-8aef-e08300afee03",
- "name": "My Product Name",
- "product_number": 1,
- "original_price": 12,
- "product_group": "9e3bf6b2-3a11-4776-8aef-e08300afee03",
- "product_group_number": 2352,
- "qty": 1,
- "currency_iso_code": "EUR",
- "discount_amount": 0.25,
- "salesman_staff": "5ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "salesman_staff_number": 2432,
- "tax": "6ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "account": "b8644296-8519-4eed-8dd9-838915a5df12",
- "account_number": 5345,
- "vat_fa_account_number": 8200,
- "vat_percentage": 19,
- "vat_amount": 1.92,
- "vat_amount_euro": 1.9156,
- "note": "My cartitem note",
- "position": 1,
- "discounts": [
- {
- "group": "cart or customer",
- "name": "Discount name",
- "discount": "discount id",
- "amount": 10,
- "type": "percentage or value",
- "order_index": 1
}
]
}
}
]
}
Update a Delivery Note status DONE. The app will discard this savedCart.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Delivery note ids |
Done a DeliveryNote
invoiced_at | string |
{- "invoiced_at": "2018-05-07T14:35:52.626+02:00 If not set will be set automatically"
}
{- "status": 0,
- "msg": "Queried Delivery Notes successfully",
- "count": 1,
- "results": [
- {
- "date": "2018-05-07T14:35:52.626+02:00",
- "client_id": "0bc320a1d21fcfb59a141e8c041affda",
- "branch_number": 1,
- "register_number": 1,
- "cashier_staff_number": 1,
- "cashier_staff": "91eae756-f70f-4210-99d3-2c40c301a6b1",
- "temp_staff": "91eae756-f70f-4210-99d3-2c40c301a6b1",
- "geo_data": "string",
- "currency_iso_code": "EUR",
- "customer_receipt": "string",
- "merchant_receipt": "string",
- "barcode": 234526245345,
- "deliverynote_number": 2345,
- "customer_number": "102345223A",
- "customer_description": "Linda Simpson",
- "title": "delivery note title",
- "description": "delivery note description",
- "invoiced_at": "2018-05-07T14:35:52.626+02:00",
- "cartitems": {
- "product": "8e3bf6b2-3a11-4776-8aef-e08300afee03",
- "name": "My Product Name",
- "product_number": 1,
- "original_price": 12,
- "product_group": "9e3bf6b2-3a11-4776-8aef-e08300afee03",
- "product_group_number": 2352,
- "qty": 1,
- "currency_iso_code": "EUR",
- "discount_amount": 0.25,
- "salesman_staff": "5ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "salesman_staff_number": 2432,
- "tax": "6ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "account": "b8644296-8519-4eed-8dd9-838915a5df12",
- "account_number": 5345,
- "vat_fa_account_number": 8200,
- "vat_percentage": 19,
- "vat_amount": 1.92,
- "vat_amount_euro": 1.9156,
- "note": "My cartitem note",
- "position": 1,
- "discounts": [
- {
- "group": "cart or customer",
- "name": "Discount name",
- "discount": "discount id",
- "amount": 10,
- "type": "percentage or value",
- "order_index": 1
}
]
}
}
]
}
Query all delivery notes of a user.
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
branch_number | integer Set the branch number to filter delivery notes per branch. |
register_number | integer Set the register number to filter delivery notes per branch and register. Use only with branch_number |
invoiced | boolean return only already invoiced delivery notes or not. Invoiced is the presence of any invoiced_at timestamp |
tillhub.deliveryNotes.get((err, result) => {})
{- "status": 0,
- "msg": "Queried Delivery Notes successfully",
- "count": 1,
- "results": [
- {
- "date": "2018-05-07T14:35:52.626+02:00",
- "client_id": "0bc320a1d21fcfb59a141e8c041affda",
- "branch_number": 1,
- "register_number": 1,
- "cashier_staff_number": 1,
- "cashier_staff": "91eae756-f70f-4210-99d3-2c40c301a6b1",
- "temp_staff": "91eae756-f70f-4210-99d3-2c40c301a6b1",
- "geo_data": "string",
- "currency_iso_code": "EUR",
- "customer_receipt": "string",
- "merchant_receipt": "string",
- "barcode": 234526245345,
- "deliverynote_number": 2345,
- "customer_number": "102345223A",
- "customer_description": "Linda Simpson",
- "title": "delivery note title",
- "description": "delivery note description",
- "invoiced_at": "2018-05-07T14:35:52.626+02:00",
- "cartitems": {
- "product": "8e3bf6b2-3a11-4776-8aef-e08300afee03",
- "name": "My Product Name",
- "product_number": 1,
- "original_price": 12,
- "product_group": "9e3bf6b2-3a11-4776-8aef-e08300afee03",
- "product_group_number": 2352,
- "qty": 1,
- "currency_iso_code": "EUR",
- "discount_amount": 0.25,
- "salesman_staff": "5ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "salesman_staff_number": 2432,
- "tax": "6ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "account": "b8644296-8519-4eed-8dd9-838915a5df12",
- "account_number": 5345,
- "vat_fa_account_number": 8200,
- "vat_percentage": 19,
- "vat_amount": 1.92,
- "vat_amount_euro": 1.9156,
- "note": "My cartitem note",
- "position": 1,
- "discounts": [
- {
- "group": "cart or customer",
- "name": "Discount name",
- "discount": "discount id",
- "amount": 10,
- "type": "percentage or value",
- "order_index": 1
}
]
}
}
]
}
Creates a new Delivery Note that can be loaded by tillhub client and produce a transaction.
clientAccountID required | string Alphanumeric client ID of the user |
Simple Delivery Note
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
required | Array of objects [ 1 .. 100 ] items |
object or (any or null) |
{- "date": "2019-08-24T14:15:22Z",
- "invoiced_at": "2019-08-24T14:15:22Z",
- "refunded_at": "2019-08-24T14:15:22Z",
- "dispatched_at": "2019-08-24T14:15:22Z",
- "done_at": "2019-08-24T14:15:22Z",
- "branch": "7c628a07-d557-4cd4-9105-51f9aade2c65",
- "register": "4b794f4b-e370-4a63-80bf-1886f8318f00",
- "cashier_staff": "5e61e874-ceac-4381-80d4-e22cb1be1d10",
- "temporary_staff": "961fe479-cf35-45f0-aed9-48afdac5cd4d",
- "currency": "str",
- "client_id": "stringstring",
- "external_reference_id": "string",
- "customer": "0ac6320b-fa4d-4235-8d23-413a2b863bad",
- "customer_name": "string",
- "customer_description": "string",
- "customer_number": "string",
- "name": "string",
- "description": "string",
- "custom_id": "string",
- "barcode": "string",
- "customer_receipt": "string",
- "merchant_receipt": "string",
- "comments": "string",
- "items": [
- {
- "product": "e0588024-d851-42d5-ab9f-1b664ef352d4",
- "product_supplier_name": "string",
- "is_service": false,
- "qty": 0,
- "custom_id": "string",
- "vat_rate": 1,
- "vat_rate_class": "normal",
- "currency": "str",
- "amount": {
- "net": 0,
- "gross": 0
}, - "amount_total": {
- "net": 0,
- "gross": 0
}, - "revenue": {
- "net": 0,
- "gross": 0
}, - "tax_amount": 0,
- "tax_amount_total": 0,
- "discount_amount": 0,
- "discount_amount_total": 0,
- "promotion_amount": -1000000,
- "promotion_amount_total": -1000000,
- "product_service_answers": [
- {
- "id": "1d53f799-c24f-49e3-b68f-93ae5fc69921",
- "question": "Which colour is used?",
- "type": "checkbox",
- "content_type": "string",
- "required": null,
- "answer": null
}
], - "is_voucher": false,
- "voucher": null,
- "is_refund": true,
- "return_reason": null,
- "attributes_description": "red | big | 32",
- "reference_cartitem_client_id": "01331B44-130B-45D4-97A7-401247FD5B68",
- "used_barcode": "0E9761310XF",
- "name": "string",
- "position": 0,
- "comments": "string",
- "client_id": "string",
- "discounts": [
- {
- "amount": 0,
- "amount_total": 0,
- "order_index": 0,
- "currency": "str",
- "value": 0,
- "rate": 1,
- "client_id": "string",
- "external_reference_id": "string",
- "type_name": "percentage",
- "group": "customer",
- "source_id": "ae50a35c-df42-4eff-ba26-f8bc28d2af81",
- "assignment_id": "string",
- "assignment_source": "customer",
- "name": "string",
- "is_automatic": false,
- "order": "first",
- "vat_rate_class": "normal"
}
], - "salesman_staff": "60aa716a-e92b-4c7a-a991-84c21829042f",
- "tax": "2b46be7d-65ac-4a23-a5dd-524b80fe8e49",
- "account": "f5b54a51-a98c-44cf-bb68-a676332e7d12",
- "product_group": "9d319324-1900-4660-8658-5d638e57fa1f",
- "custom_properties": { },
- "attributes": { }
}
], - "metadata": {
- "customer": {
- "price_book": "512448db-5e6c-4fcf-bd70-f8a5e56fa269"
}
}
}
{- "status": 0,
- "msg": "Queried Delivery Notes successfully",
- "count": 1,
- "results": [
- {
- "date": "2018-05-07T14:35:52.626+02:00",
- "client_id": "0bc320a1d21fcfb59a141e8c041affda",
- "branch_number": 1,
- "register_number": 1,
- "cashier_staff_number": 1,
- "cashier_staff": "91eae756-f70f-4210-99d3-2c40c301a6b1",
- "temp_staff": "91eae756-f70f-4210-99d3-2c40c301a6b1",
- "geo_data": "string",
- "currency_iso_code": "EUR",
- "customer_receipt": "string",
- "merchant_receipt": "string",
- "barcode": 234526245345,
- "deliverynote_number": 2345,
- "customer_number": "102345223A",
- "customer_description": "Linda Simpson",
- "title": "delivery note title",
- "description": "delivery note description",
- "invoiced_at": "2018-05-07T14:35:52.626+02:00",
- "cartitems": {
- "product": "8e3bf6b2-3a11-4776-8aef-e08300afee03",
- "name": "My Product Name",
- "product_number": 1,
- "original_price": 12,
- "product_group": "9e3bf6b2-3a11-4776-8aef-e08300afee03",
- "product_group_number": 2352,
- "qty": 1,
- "currency_iso_code": "EUR",
- "discount_amount": 0.25,
- "salesman_staff": "5ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "salesman_staff_number": 2432,
- "tax": "6ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "account": "b8644296-8519-4eed-8dd9-838915a5df12",
- "account_number": 5345,
- "vat_fa_account_number": 8200,
- "vat_percentage": 19,
- "vat_amount": 1.92,
- "vat_amount_euro": 1.9156,
- "note": "My cartitem note",
- "position": 1,
- "discounts": [
- {
- "group": "cart or customer",
- "name": "Discount name",
- "discount": "discount id",
- "amount": 10,
- "type": "percentage or value",
- "order_index": 1
}
]
}
}
]
}
Replace values of a delivery note.
clientAccountID required | string Alphanumeric client ID of the user |
Simple Delivery Note
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
Array of objects [ 1 .. 100 ] items | |
object or (any or null) |
{- "date": "2019-08-24T14:15:22Z",
- "invoiced_at": "2019-08-24T14:15:22Z",
- "refunded_at": "2019-08-24T14:15:22Z",
- "dispatched_at": "2019-08-24T14:15:22Z",
- "done_at": "2019-08-24T14:15:22Z",
- "branch": "7c628a07-d557-4cd4-9105-51f9aade2c65",
- "register": "4b794f4b-e370-4a63-80bf-1886f8318f00",
- "cashier_staff": "5e61e874-ceac-4381-80d4-e22cb1be1d10",
- "temporary_staff": "961fe479-cf35-45f0-aed9-48afdac5cd4d",
- "currency": "str",
- "client_id": "stringstring",
- "external_reference_id": "string",
- "customer": "0ac6320b-fa4d-4235-8d23-413a2b863bad",
- "customer_name": "string",
- "customer_description": "string",
- "customer_number": "string",
- "name": "string",
- "description": "string",
- "custom_id": "string",
- "barcode": "string",
- "customer_receipt": "string",
- "merchant_receipt": "string",
- "comments": "string",
- "items": [
- {
- "product": "e0588024-d851-42d5-ab9f-1b664ef352d4",
- "product_supplier_name": "string",
- "is_service": false,
- "qty": 0,
- "custom_id": "string",
- "vat_rate": 1,
- "vat_rate_class": "normal",
- "currency": "str",
- "amount": {
- "net": 0,
- "gross": 0
}, - "amount_total": {
- "net": 0,
- "gross": 0
}, - "revenue": {
- "net": 0,
- "gross": 0
}, - "tax_amount": 0,
- "tax_amount_total": 0,
- "discount_amount": 0,
- "discount_amount_total": 0,
- "promotion_amount": -1000000,
- "promotion_amount_total": -1000000,
- "product_service_answers": [
- {
- "id": "1d53f799-c24f-49e3-b68f-93ae5fc69921",
- "question": "Which colour is used?",
- "type": "checkbox",
- "content_type": "string",
- "required": null,
- "answer": null
}
], - "is_voucher": false,
- "voucher": null,
- "is_refund": true,
- "return_reason": null,
- "attributes_description": "red | big | 32",
- "reference_cartitem_client_id": "01331B44-130B-45D4-97A7-401247FD5B68",
- "used_barcode": "0E9761310XF",
- "name": "string",
- "position": 0,
- "comments": "string",
- "client_id": "string",
- "discounts": [
- {
- "amount": 0,
- "amount_total": 0,
- "order_index": 0,
- "currency": "str",
- "value": 0,
- "rate": 1,
- "client_id": "string",
- "external_reference_id": "string",
- "type_name": "percentage",
- "group": "customer",
- "source_id": "ae50a35c-df42-4eff-ba26-f8bc28d2af81",
- "assignment_id": "string",
- "assignment_source": "customer",
- "name": "string",
- "is_automatic": false,
- "order": "first",
- "vat_rate_class": "normal"
}
], - "salesman_staff": "60aa716a-e92b-4c7a-a991-84c21829042f",
- "tax": "2b46be7d-65ac-4a23-a5dd-524b80fe8e49",
- "account": "f5b54a51-a98c-44cf-bb68-a676332e7d12",
- "product_group": "9d319324-1900-4660-8658-5d638e57fa1f",
- "custom_properties": { },
- "attributes": { }
}
], - "metadata": {
- "customer": {
- "price_book": "512448db-5e6c-4fcf-bd70-f8a5e56fa269"
}
}
}
{- "status": 0,
- "msg": "Queried Delivery Notes successfully",
- "count": 1,
- "results": [
- {
- "date": "2018-05-07T14:35:52.626+02:00",
- "client_id": "0bc320a1d21fcfb59a141e8c041affda",
- "branch_number": 1,
- "register_number": 1,
- "cashier_staff_number": 1,
- "cashier_staff": "91eae756-f70f-4210-99d3-2c40c301a6b1",
- "temp_staff": "91eae756-f70f-4210-99d3-2c40c301a6b1",
- "geo_data": "string",
- "currency_iso_code": "EUR",
- "customer_receipt": "string",
- "merchant_receipt": "string",
- "barcode": 234526245345,
- "deliverynote_number": 2345,
- "customer_number": "102345223A",
- "customer_description": "Linda Simpson",
- "title": "delivery note title",
- "description": "delivery note description",
- "invoiced_at": "2018-05-07T14:35:52.626+02:00",
- "cartitems": {
- "product": "8e3bf6b2-3a11-4776-8aef-e08300afee03",
- "name": "My Product Name",
- "product_number": 1,
- "original_price": 12,
- "product_group": "9e3bf6b2-3a11-4776-8aef-e08300afee03",
- "product_group_number": 2352,
- "qty": 1,
- "currency_iso_code": "EUR",
- "discount_amount": 0.25,
- "salesman_staff": "5ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "salesman_staff_number": 2432,
- "tax": "6ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "account": "b8644296-8519-4eed-8dd9-838915a5df12",
- "account_number": 5345,
- "vat_fa_account_number": 8200,
- "vat_percentage": 19,
- "vat_amount": 1.92,
- "vat_amount_euro": 1.9156,
- "note": "My cartitem note",
- "position": 1,
- "discounts": [
- {
- "group": "cart or customer",
- "name": "Discount name",
- "discount": "discount id",
- "amount": 10,
- "type": "percentage or value",
- "order_index": 1
}
]
}
}
]
}
Get a single delivery_note member.
clientAccountID required | string Alphanumeric client ID of the user |
deliveryNoteId required | string Alphanumeric client ID of the user |
tillhub.deliveryNotes.get((err, result) => {})
{- "status": 0,
- "msg": "Queried Delivery Notes successfully",
- "count": 1,
- "results": [
- {
- "date": "2018-05-07T14:35:52.626+02:00",
- "client_id": "0bc320a1d21fcfb59a141e8c041affda",
- "branch_number": 1,
- "register_number": 1,
- "cashier_staff_number": 1,
- "cashier_staff": "91eae756-f70f-4210-99d3-2c40c301a6b1",
- "temp_staff": "91eae756-f70f-4210-99d3-2c40c301a6b1",
- "geo_data": "string",
- "currency_iso_code": "EUR",
- "customer_receipt": "string",
- "merchant_receipt": "string",
- "barcode": 234526245345,
- "deliverynote_number": 2345,
- "customer_number": "102345223A",
- "customer_description": "Linda Simpson",
- "title": "delivery note title",
- "description": "delivery note description",
- "invoiced_at": "2018-05-07T14:35:52.626+02:00",
- "cartitems": {
- "product": "8e3bf6b2-3a11-4776-8aef-e08300afee03",
- "name": "My Product Name",
- "product_number": 1,
- "original_price": 12,
- "product_group": "9e3bf6b2-3a11-4776-8aef-e08300afee03",
- "product_group_number": 2352,
- "qty": 1,
- "currency_iso_code": "EUR",
- "discount_amount": 0.25,
- "salesman_staff": "5ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "salesman_staff_number": 2432,
- "tax": "6ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "account": "b8644296-8519-4eed-8dd9-838915a5df12",
- "account_number": 5345,
- "vat_fa_account_number": 8200,
- "vat_percentage": 19,
- "vat_amount": 1.92,
- "vat_amount_euro": 1.9156,
- "note": "My cartitem note",
- "position": 1,
- "discounts": [
- {
- "group": "cart or customer",
- "name": "Discount name",
- "discount": "discount id",
- "amount": 10,
- "type": "percentage or value",
- "order_index": 1
}
]
}
}
]
}
Get the latest delivery notes.
clientAccountID required | string Alphanumeric client ID of the user |
embed | string Value: "customer" let the API embed a specified object; currently the only options is "customer" |
limit | integer limits the number of returned results; default and maximum is 200 |
invoiced | boolean by default returns only not invoiced delivery notes - "invoiced" is the presence of invoiced_at |
branch | string alphanumeric uuid of the branch |
tillhub.delivery_notes.get((err, result) => {})
{ }
Update a Delivery Note status to being invoiced
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Delivery note ID |
invoiced_at required | string |
{- "invoiced_at": "2018-05-07T14:35:52.626Z If not set will be set automatically"
}
{- "status": 0,
- "msg": "Queried Delivery Notes successfully",
- "count": 1,
- "results": [
- {
- "date": "2018-05-07T14:35:52.626+02:00",
- "client_id": "0bc320a1d21fcfb59a141e8c041affda",
- "branch_number": 1,
- "register_number": 1,
- "cashier_staff_number": 1,
- "cashier_staff": "91eae756-f70f-4210-99d3-2c40c301a6b1",
- "temp_staff": "91eae756-f70f-4210-99d3-2c40c301a6b1",
- "geo_data": "string",
- "currency_iso_code": "EUR",
- "customer_receipt": "string",
- "merchant_receipt": "string",
- "barcode": 234526245345,
- "deliverynote_number": 2345,
- "customer_number": "102345223A",
- "customer_description": "Linda Simpson",
- "title": "delivery note title",
- "description": "delivery note description",
- "invoiced_at": "2018-05-07T14:35:52.626+02:00",
- "cartitems": {
- "product": "8e3bf6b2-3a11-4776-8aef-e08300afee03",
- "name": "My Product Name",
- "product_number": 1,
- "original_price": 12,
- "product_group": "9e3bf6b2-3a11-4776-8aef-e08300afee03",
- "product_group_number": 2352,
- "qty": 1,
- "currency_iso_code": "EUR",
- "discount_amount": 0.25,
- "salesman_staff": "5ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "salesman_staff_number": 2432,
- "tax": "6ad2351d-9a67-45f9-ad4f-0abcbefa9037",
- "account": "b8644296-8519-4eed-8dd9-838915a5df12",
- "account_number": 5345,
- "vat_fa_account_number": 8200,
- "vat_percentage": 19,
- "vat_amount": 1.92,
- "vat_amount_euro": 1.9156,
- "note": "My cartitem note",
- "position": 1,
- "discounts": [
- {
- "group": "cart or customer",
- "name": "Discount name",
- "discount": "discount id",
- "amount": 10,
- "type": "percentage or value",
- "order_index": 1
}
]
}
}
]
}
Generate a PDF Delivery Note
clientAccountID required | string Alphanumeric client ID of the user |
deliveryNoteUUID required | string UUID of delivery note |
embed | array of array of strings current option is "correspondence"; decides if the correspondence object is returned in the response or not |
delivery note user's preference
{ }
Send a PDF delivery note via an email
clientAccountID required | string Alphanumeric client ID of the user |
deliveryNoteUUID required | string UUID for delivery note |
embed | array of array of strings current option is "correspondence"; decides if the correspondence object is returned in the response or not |
recipient's email address
{ }
Generate a pdf receipt from the request payload. Returns the generated pdf.
Any error object.
receipt_text required | string new line delimited receipt text (comes withtout barcodes) |
lines | Array of any array of objects of barcode data |
{- "receipt_text": "string",
- "lines": [
- null
]
}
Generate a receipt website from the request payload. Returns the generated website.
Any error object.
receipt_text required | string new line delimited receipt text (comes withtout barcodes) |
lines | Array of any array of objects of barcode data |
{- "receipt_text": "string",
- "lines": [
- null
]
}
Create a new product of a user.
clientAccountID required | string Alphanumeric client ID of the user |
Simple Product
{ }
{- "status": 200,
- "msg": "string",
- "count": 1,
- "results": [
- { }
]
}
Query all receipts
clientAccountID required | string Alphanumeric client ID of the user |
limit | integer the discrete limit, that will default to 1000 on the legacy route |
cursor | string the alphanumeric cursor field |
cursor_field | string which column to cursor on. Currently we only support |
tillhub.receipts.get((err, result) => {})
Get a single invoice object.
clientAccountID required | string Alphanumeric client ID of the user |
invoiceID required | string Alphanumeric configuration ID |
tillhub.invoices.get((err, result) => {})
{ }
Replace an entire invoice object.
clientAccountID required | string Alphanumeric client ID of the user |
invoiceID required | string Alphanumeric invoice ID |
Simple Invoice
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
object or (any or null) | |
(any or null) or string | |
string or (any or null) | |
number or (any or null) | |
string or (any or null) | |
status | string Enum: "paid" "overdue" "issued" |
archived | boolean |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
object or (any or null) | |
object or (any or null) | |
Array of any or (any or null) | |
Array of any or (any or null) | |
Array of any or (any or null) | |
string or (any or null) | |
deleted | boolean Default: false |
active | boolean Default: true |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
paid | boolean |
string or (any or null) | |
string or (any or null) | |
printed | boolean |
{- "comments": "string",
- "customer": "0ac6320b-fa4d-4235-8d23-413a2b863bad",
- "customer_external_reference_id": "string",
- "amount": { },
- "currency": { },
- "issued_at": "2019-08-24T14:15:22Z",
- "balance": 0,
- "due_date": "2019-08-24T14:15:22Z",
- "status": "paid",
- "archived": true,
- "archived_at": "2019-08-24T14:15:22Z",
- "custom_id": "string",
- "external_reference_id": "string",
- "external_reference": { },
- "metadata": { },
- "origins": [
- null
], - "related_to": [
- null
], - "depends_on": [
- null
], - "client_id": "string",
- "deleted": false,
- "active": true,
- "assignee": "52cf793d-61ec-4818-938e-7a539e4f8457",
- "assigned_by": "dd7cba77-7080-4b0e-9a94-fdfd1232f6b4",
- "transaction": "6b91fbed-a61e-4512-a48d-a6c1ac2f90cb",
- "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5",
- "paid": true,
- "paid_at": "2019-08-24T14:15:22Z",
- "payment_reference": "string",
- "printed": true
}
Query all invoices
clientAccountID required | string Alphanumeric client ID of the user |
limit | integer the discrete limit, that will default to 1000 on the legacy route |
offset | string the number of rows to skip |
order_by | string the name of the table field by which the table will be ordered, e.g. 'due_date' |
direction | string determines if the results should return in ascending or descending order, either 'asc' or 'desc' |
deleted | string the string representation of boolean values as |
archived | string the string representation of boolean values as |
tillhub.invoices.get((err, result) => {})
{ }
Create a new invoice
clientAccountID required | string Alphanumeric client ID of the user |
Simple invoice
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
object or (any or null) | |
(any or null) or string | |
string or (any or null) | |
number or (any or null) | |
string or (any or null) | |
status | string Enum: "paid" "overdue" "issued" |
archived | boolean |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
object or (any or null) | |
object or (any or null) | |
Array of any or (any or null) | |
Array of any or (any or null) | |
Array of any or (any or null) | |
string or (any or null) | |
deleted | boolean Default: false |
active | boolean Default: true |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
paid | boolean |
string or (any or null) | |
string or (any or null) | |
printed | boolean |
{- "comments": "string",
- "customer": "0ac6320b-fa4d-4235-8d23-413a2b863bad",
- "customer_external_reference_id": "string",
- "amount": { },
- "currency": { },
- "issued_at": "2019-08-24T14:15:22Z",
- "balance": 0,
- "due_date": "2019-08-24T14:15:22Z",
- "status": "paid",
- "archived": true,
- "archived_at": "2019-08-24T14:15:22Z",
- "custom_id": "string",
- "external_reference_id": "string",
- "external_reference": { },
- "metadata": { },
- "origins": [
- null
], - "related_to": [
- null
], - "depends_on": [
- null
], - "client_id": "string",
- "deleted": false,
- "active": true,
- "assignee": "52cf793d-61ec-4818-938e-7a539e4f8457",
- "assigned_by": "dd7cba77-7080-4b0e-9a94-fdfd1232f6b4",
- "transaction": "6b91fbed-a61e-4512-a48d-a6c1ac2f90cb",
- "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5",
- "paid": true,
- "paid_at": "2019-08-24T14:15:22Z",
- "payment_reference": "string",
- "printed": true
}
{- "status": 200,
- "msg": "string",
- "count": 1,
- "results": [
- {
- "comments": "string",
- "customer": "0ac6320b-fa4d-4235-8d23-413a2b863bad",
- "customer_external_reference_id": "string",
- "amount": { },
- "currency": { },
- "issued_at": "2019-08-24T14:15:22Z",
- "balance": 0,
- "due_date": "2019-08-24T14:15:22Z",
- "status": "paid",
- "archived": true,
- "archived_at": "2019-08-24T14:15:22Z",
- "custom_id": "string",
- "external_reference_id": "string",
- "external_reference": { },
- "metadata": { },
- "origins": [
- null
], - "related_to": [
- null
], - "depends_on": [
- null
], - "client_id": "string",
- "deleted": false,
- "active": true,
- "assignee": "52cf793d-61ec-4818-938e-7a539e4f8457",
- "assigned_by": "dd7cba77-7080-4b0e-9a94-fdfd1232f6b4",
- "transaction": "6b91fbed-a61e-4512-a48d-a6c1ac2f90cb",
- "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5",
- "paid": true,
- "paid_at": "2019-08-24T14:15:22Z",
- "payment_reference": "string",
- "printed": true
}
]
}
Search records in invoices table by search term. Optional: specify column to be returned and fields to be searched in (limited options)
clientAccountID required | string Alphanumeric client ID of the user |
q required | string the search term to be used for the search |
embed | Array of any the columns to be returned in the results |
search_fields | Array of any limits the search to specified columns. Current options are custom_id, customer_name, and customer_number. |
tillhub.invoices.search.get((err, result) => {})
The Safes API allows the api user to CRU safes objects that keep track of the cash amounts. Most importantly, the booking process creates logs for any movement to and from safes.
The Safes API provides a convenience function to book cashflow from either safe-to-safe, safe-to-bank (where "bank" is an Expense Account object of type "bank"), or pos-to-safe. The booking process not only updates the amounts in the Safes objects, but also creates logs to keep track of each cashflow transfer. For each transfer the following entries in the safes_log_book will be created in this order:
Book a transfer from one safe to another safe/expense_account or from the POS to a safe.
clientAccountID required | string Alphanumeric client ID of the user |
safeId required | string Alphanumeric ID of the safe, where to book from |
Booking information
initiated_at required | string <date-time> The timestamp from the UI, when the transfer was initiated by the user, e.g. clicking the submit button |
issuer required | string Client account ID of who initiated the transfer |
string or (any or null) | |
required | string or (string or null) |
string or (any or null) | |
object or (any or null) | |
object or (any or null) | |
transfer_type required | string Enum: "pos_to_safe" "pos_to_safe_cancel" "safe_to_safe" "safe_to_bank" "safe_to_expense" |
client_id | string The unique id that is generated by the POS for each http request. |
required | Array of objects non-empty Array of bookings with an element for each currency to allow multi-currency |
{- "initiated_at": "2019-08-24T14:15:22Z",
- "issuer": "string",
- "from": "dee192b0-275e-44a2-9c77-32b75da2f26f",
- "to": "4a3e8739-e3a9-4b51-9b6f-406b6818a828",
- "comment": "string",
- "metadata": { },
- "origins": { },
- "transfer_type": "pos_to_safe",
- "client_id": "string",
- "items": [
- {
- "amount": 0,
- "currency": "EUR"
}
]
}
{ }
Create a new safe of a user.
clientAccountID required | string Alphanumeric client ID of the user |
Simple Safe
type required | string Enum: "safe" "vault" |
account_number required | string non-empty Financial account number of the safe, which is mutable and not deduplicated |
Array of objects or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
object or (any or null) | |
Array of objects or (any or null) Upper capacity or safety limit per currency | |
Array of objects or (any or null) Lower safety limit per currency | |
Array of objects or (any or null) Current cash amount stored in the safe per currency | |
object or (any or null) | |
deleted | boolean Default: false |
active | boolean Default: true |
{- "type": "safe",
- "account_number": "string",
- "financial_accounts": [
- {
- "name": "string",
- "location": "936835f7-2d75-41d2-9001-38ed6e458328",
- "custom_id": "1776",
- "cost_center": "4321"
}
], - "name": "string",
- "custom_id": "string",
- "cost_center": "string",
- "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5",
- "state": { },
- "limit_upper": [
- {
- "currency": "EUR",
- "amount": "47.02"
}
], - "limit_lower": [
- {
- "currency": "EUR",
- "amount": "47.02"
}
], - "items": [
- {
- "currency": "EUR",
- "amount": "47.02"
}
], - "metadata": { },
- "deleted": false,
- "active": true
}
{- "type": "safe",
- "account_number": "string",
- "financial_accounts": [
- {
- "name": "string",
- "location": "936835f7-2d75-41d2-9001-38ed6e458328",
- "custom_id": "1776",
- "cost_center": "4321"
}
], - "name": "string",
- "custom_id": "string",
- "cost_center": "string",
- "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5",
- "state": { },
- "limit_upper": [
- {
- "currency": "EUR",
- "amount": "47.02"
}
], - "limit_lower": [
- {
- "currency": "EUR",
- "amount": "47.02"
}
], - "items": [
- {
- "currency": "EUR",
- "amount": "47.02"
}
], - "metadata": { },
- "deleted": false,
- "active": true,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
Query all safes
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
end | string <date-time> Example: end=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
deleted | string the string representation of boolean values as |
active | string the string representation of boolean values as |
embed | string The information of other resources to be embedded. It can be passed as a string or array of strings. The option is currently "location" only. |
location | string Alphanumeric client ID of the location (e.g. branch or warehouse) |
tillhub.safes.get((err, result) => {})
Get a single safe object.
clientAccountID required | string Alphanumeric client ID of the user |
safeId required | string Alphanumeric configuration ID |
tillhub.safes.get((err, result) => {})
{- "type": "safe",
- "account_number": "string",
- "financial_accounts": [
- {
- "name": "string",
- "location": "936835f7-2d75-41d2-9001-38ed6e458328",
- "custom_id": "1776",
- "cost_center": "4321"
}
], - "name": "string",
- "custom_id": "string",
- "cost_center": "string",
- "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5",
- "state": { },
- "limit_upper": [
- {
- "currency": "EUR",
- "amount": "47.02"
}
], - "limit_lower": [
- {
- "currency": "EUR",
- "amount": "47.02"
}
], - "items": [
- {
- "currency": "EUR",
- "amount": "47.02"
}
], - "metadata": { },
- "deleted": false,
- "active": true,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
Query all safes logs with optional filter for transaction_id (booking id)
clientAccountID required | string Alphanumeric client ID of the user |
limit | integer the discrete limit, that will default to 1000 on the legacy route |
cursor_field | string which column to cursor on. Currently we only support |
transaction_id | string Alphanumeric id of the transaction_id. The transaction_id is different than the uuid of a fr_transaction or tx_v1. The transaction_id is used to identify all the logs that belong together to one procedure. |
start | string ISO format of a date. Returns all logs starting from that date |
end | string ISO format of a date. Returns all logs until that date |
format | string to get data in any other format then JSON straight away, you can set |
embed | string The information of other resources to be embedded. It can be passed as a string or array of strings. The options are "from" and "to". |
transfer_party | string deprecated - please use "source_or_destination" instead |
source_or_destination | array of strings the uuid of the participant in 'to' OR 'from', e.g. a safe id or a register id; "source_or_destination" cannot logically exist in combination with "source"/"destination" in the query |
source | array of string the uuid of 'from', e.g. a safe id or a register id; if "destination" is part of this query as well, both are connected with the logical operator "AND" |
destination | array of string the uuid of 'to', e.g. a safe id or a register id; if "source" is part of this query as well, both are connected with the logical operator "AND" |
operation | string or array of strings e.g. "book", "start", "stop" |
transfer_type | string or array of strings e.g. "safe_to_safe", "safe_to_bank", "pos_to_safe", "pos_to_safe_cancel", "safe_to_expense" |
exclude_errors | boolean string representation of "true" and "false"; if "true", all bookings where operation = "error" will be excluded |
transfer_value_range_start | number lower end of transfer value range |
transfer_value_range_end | number higher end of transfer value range |
currency | string the currency of the transfer value, e.g. 'EUR' or 'USD' |
tillhub.safes.logs.get((err, result) => {})
Get meta data for safe logs
clientAccountID required | string Alphanumeric client ID of the user |
start | string ISO format of a date. Returns all logs starting from that date |
end | string ISO format of a date. Returns all logs until that date |
transfer_party | string deprecated - please use "source_or_destination" instead |
source_or_destination | array of strings the uuid of the participant in 'to' OR 'from', e.g. a safe id or a register id; "source_or_destination" cannot logically exist in combination with "source"/"destination" in the query |
source | array of string the uuid of 'from', e.g. a safe id or a register id; if "destination" is part of this query as well, both are connected with the logical operator "AND" |
destination | array of string the uuid of 'to', e.g. a safe id or a register id; if "source" is part of this query as well, both are connected with the logical operator "AND" |
operation | string or array of strings e.g. "book", "start", "stop" |
transfer_type | string or array of strings e.g. "safe_to_safe", "safe_to_bank", "pos_to_safe", "pos_to_safe_cancel", "safe_to_expense" |
exclude_errors | boolean string representation of "true" and "false"; if "true", all bookings where operation = "error" will be excluded |
transfer_value_range_start | number lower end of transfer value range |
transfer_value_range_end | number higher end of transfer value range |
currency | string the currency of the transfer value, e.g. 'EUR' or 'USD' |
tillhub.transactions.legacy.meta.get((err, result) => {})
Update parts of a safe object.
clientAccountID required | string Alphanumeric client ID of the user |
safeId required | string Alphanumeric safe ID |
Simple Safe
type | string Enum: "safe" "vault" |
account_number | string non-empty Financial account number of the safe, which is mutable and not deduplicated |
Array of objects or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
object or (any or null) | |
Array of objects or (any or null) Upper capacity or safety limit per currency | |
Array of objects or (any or null) Lower safety limit per currency | |
Array of objects or (any or null) Current cash amount stored in the safe per currency | |
object or (any or null) | |
deleted | boolean Default: false |
active | boolean Default: true |
{- "type": "safe",
- "account_number": "string",
- "financial_accounts": [
- {
- "name": "string",
- "location": "936835f7-2d75-41d2-9001-38ed6e458328",
- "custom_id": "1776",
- "cost_center": "4321"
}
], - "name": "string",
- "custom_id": "string",
- "cost_center": "string",
- "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5",
- "state": { },
- "limit_upper": [
- {
- "currency": "EUR",
- "amount": "47.02"
}
], - "limit_lower": [
- {
- "currency": "EUR",
- "amount": "47.02"
}
], - "items": [
- {
- "currency": "EUR",
- "amount": "47.02"
}
], - "metadata": { },
- "deleted": false,
- "active": true
}
{- "type": "safe",
- "account_number": "string",
- "financial_accounts": [
- {
- "name": "string",
- "location": "936835f7-2d75-41d2-9001-38ed6e458328",
- "custom_id": "1776",
- "cost_center": "4321"
}
], - "name": "string",
- "custom_id": "string",
- "cost_center": "string",
- "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5",
- "state": { },
- "limit_upper": [
- {
- "currency": "EUR",
- "amount": "47.02"
}
], - "limit_lower": [
- {
- "currency": "EUR",
- "amount": "47.02"
}
], - "items": [
- {
- "currency": "EUR",
- "amount": "47.02"
}
], - "metadata": { },
- "deleted": false,
- "active": true,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
Soft delete a single cashier counting protocol object.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric cashier counting protocol ID |
tillhub.cashier_counting_protocols.delete((err, result) => {})
{- "status": 200,
- "msg": "Deleted cashier counting protocol 96341e35-0fe1-4b72-89bc-6f62e9114ac6",
- "request": {
- "host": "staging-api.tillhub.com",
- "id": "UUID"
}
}
Get a single cashier counting protocol object.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric cashier_counting_protocols ID |
tillhub.cashier_counting_protocols.get((err, result) => {})
Update an entire cashier counting protocol object.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric cashier counting protocol ID |
Simple cashier counting protocol
string or (any or null) Default: null | |
string or (any or null) | |
branch_custom_id | string The Tillhub branch number. |
string or (any or null) | |
register_custom_id | string The Tillhub register number. |
string or (any or null) Default: null | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) Default: null | |
string or (any or null) Default: null | |
string or (any or null) Default: null | |
string or (any or null) Default: null | |
object or (any or null) Default: null | |
string or (any or null) Default: null | |
object or (any or null) Default: null | |
object or (any or null) Default: null | |
Array of objects or objects | |
(any or null) or string | |
deleted | boolean Default: false |
counting_type | string Enum: "opening" "cashing_up" "wallet_open" "wallet_close" The type of the cashier counting of the register |
counting_date | string <date-time> The time when the cashier clicked on the button in the app to count the register |
Array of objects Total amounts per currency from manual counting (total sum of bills and coins per currency, actual value) | |
Array of objects Total amounts per currency from calculation (values from previously closed balance, setpoint value) | |
Array of objects or (any or null) | |
has_discrepancy | boolean Default: false |
Array of objects or (any or null) | |
integer or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) |
{- "custom_id": null,
- "branch": "f2ac2cae-97ff-42a1-967b-0a35222ab6d1",
- "branch_custom_id": "5",
- "register": "9d110eb2-2245-4e14-9574-49b502f3a9b3",
- "register_custom_id": "7",
- "client": null,
- "wallet": "7e04ca6f-1090-4fc4-bba5-96db96e0dd2b",
- "client_id": "string",
- "client_custom_id": null,
- "cashier_staff": null,
- "temp_staff": null,
- "device": null,
- "context": null,
- "comments": null,
- "metadata": null,
- "location": null,
- "cash_units": [
- {
- "client_id": null,
- "currency": "EUR",
- "units": [
- {
- "type": "coin",
- "qty": null,
- "value": 0.1
}
]
}
], - "timezone": { },
- "deleted": false,
- "counting_type": "opening",
- "counting_date": "2018-11-04T23:18:43.075Z",
- "total_counted": [
- {
- "currency": "EUR",
- "amount": "47.02"
}
], - "total_calculated": [
- {
- "currency": "EUR",
- "amount": "47.02"
}
], - "discrepancy_total": [
- {
- "currency": "EUR",
- "amount": 27633.02
}
], - "has_discrepancy": false,
- "counting_tips": [
- {
- "currency": "EUR",
- "amount": "47.02"
}
], - "balance_number": 3,
- "balance_custom_id_last": "2",
- "balance_last": "9d20d799-b6e0-46a0-9e48-7ca372af13d4",
- "merchant_receipt": "string"
}
Query all cashier counting protocols of a user.
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
branch_custom_id | string the branch number as filter |
register_custom_id | string the register number as filter |
counting_type | string the counting protocol type as filter |
deleted | string the string representation of boolean values as |
tillhub.cashier_counting_protocols.get((err, result) => {})
Create a new cashier counting protocol of a user.
clientAccountID required | string Alphanumeric client ID of the user |
Simple cashier counting protocol
string or (any or null) Default: null | |
string or (any or null) | |
branch_custom_id required | string The Tillhub branch number. |
string or (any or null) | |
register_custom_id required | string The Tillhub register number. |
string or (any or null) Default: null | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) Default: null | |
string or (any or null) Default: null | |
string or (any or null) Default: null | |
string or (any or null) Default: null | |
object or (any or null) Default: null | |
string or (any or null) Default: null | |
object or (any or null) Default: null | |
object or (any or null) Default: null | |
required | Array of objects or objects |
(any or null) or string | |
deleted | boolean Default: false |
counting_type required | string Enum: "opening" "cashing_up" "wallet_open" "wallet_close" The type of the cashier counting of the register |
counting_date required | string <date-time> The time when the cashier clicked on the button in the app to count the register |
Array of objects Total amounts per currency from manual counting (total sum of bills and coins per currency, actual value) | |
Array of objects Total amounts per currency from calculation (values from previously closed balance, setpoint value) | |
Array of objects or (any or null) | |
has_discrepancy | boolean Default: false |
Array of objects or (any or null) | |
integer or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) |
{- "custom_id": null,
- "branch": "f2ac2cae-97ff-42a1-967b-0a35222ab6d1",
- "branch_custom_id": "5",
- "register": "9d110eb2-2245-4e14-9574-49b502f3a9b3",
- "register_custom_id": "7",
- "client": null,
- "wallet": "7e04ca6f-1090-4fc4-bba5-96db96e0dd2b",
- "client_id": "string",
- "client_custom_id": null,
- "cashier_staff": null,
- "temp_staff": null,
- "device": null,
- "context": null,
- "comments": null,
- "metadata": null,
- "location": null,
- "cash_units": [
- {
- "client_id": null,
- "currency": "EUR",
- "units": [
- {
- "type": "coin",
- "qty": null,
- "value": 0.1
}
]
}
], - "timezone": { },
- "deleted": false,
- "counting_type": "opening",
- "counting_date": "2018-11-04T23:18:43.075Z",
- "total_counted": [
- {
- "currency": "EUR",
- "amount": "47.02"
}
], - "total_calculated": [
- {
- "currency": "EUR",
- "amount": "47.02"
}
], - "discrepancy_total": [
- {
- "currency": "EUR",
- "amount": 27633.02
}
], - "has_discrepancy": false,
- "counting_tips": [
- {
- "currency": "EUR",
- "amount": "47.02"
}
], - "balance_number": 3,
- "balance_custom_id_last": "2",
- "balance_last": "9d20d799-b6e0-46a0-9e48-7ca372af13d4",
- "merchant_receipt": "string"
}
Get the latest cashier counting protocol object.
clientAccountID required | string Alphanumeric client ID of the user |
register_custom_id required | string The custom id of the register, e.g. '0001' |
branch_custom_id required | string The custom id of the branch, e.g. '0001' |
counting_type | string the counting protocol type as filter |
tillhub.cashier_counting_protocols.get((err, result) => {})
{- "custom_id": null,
- "branch": "f2ac2cae-97ff-42a1-967b-0a35222ab6d1",
- "branch_custom_id": "5",
- "register": "9d110eb2-2245-4e14-9574-49b502f3a9b3",
- "register_custom_id": "7",
- "client": null,
- "wallet": "7e04ca6f-1090-4fc4-bba5-96db96e0dd2b",
- "client_id": "string",
- "client_custom_id": null,
- "cashier_staff": null,
- "temp_staff": null,
- "device": null,
- "context": null,
- "comments": null,
- "metadata": null,
- "location": null,
- "cash_units": [
- {
- "client_id": null,
- "currency": "EUR",
- "units": [
- {
- "type": "coin",
- "qty": null,
- "value": 0.1
}
]
}
], - "timezone": { },
- "deleted": false,
- "counting_type": "opening",
- "counting_date": "2018-11-04T23:18:43.075Z",
- "total_counted": [
- {
- "currency": "EUR",
- "amount": "47.02"
}
], - "total_calculated": [
- {
- "currency": "EUR",
- "amount": "47.02"
}
], - "discrepancy_total": [
- {
- "currency": "EUR",
- "amount": 27633.02
}
], - "has_discrepancy": false,
- "counting_tips": [
- {
- "currency": "EUR",
- "amount": "47.02"
}
], - "balance_number": 3,
- "balance_custom_id_last": "2",
- "balance_last": "9d20d799-b6e0-46a0-9e48-7ca372af13d4",
- "merchant_receipt": "string",
- "id": "860defb8-5598-421d-9da4-f0826e767536",
- "created_at": "2018-11-04T23:18:43.075Z",
- "updated_at": "2018-11-04T23:18:43.075Z"
}
Get the meta info of cashier counting protocol object.
clientAccountID required | string Alphanumeric client ID of the user |
register_custom_id required | string The custom id of the register, e.g. '0001' |
branch_custom_id required | string The custom id of the branch, e.g. '0001' |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
deleted | string the string representation of boolean values as |
tillhub.cashier_counting_protocols.get((err, result) => {})
Vouchers can be updated in several ways
/increment
route to increment monetary values/decrement
route to decrement monetary valuesPATCH
on the voucher id to manipulate any valueAll voucher actions will cause a log to be written, which can be queried by the /logs
route.
This model will trackold and new states, as well as metadata.
For maximum transparency it is advised for implementors to always send the issuer of a change in the metadata object. Downstream consumers, like the dashboard, will display the issuer based on availability of the given data from the log. Example
/increment
{
"metadata" : {
"issuer": {
"register": "0001",
"branch": "a-demo-branch",
"staff": "0032"
}
}
}
Some endpoints are able to use custom hooks in order to customize endpoint behavior.
The following overview shows
Endpoint | Hook location | Body example | Expected response example | Description |
---|---|---|---|---|
GET/api/v1/vouchers/${id}/lookup |
voucher_systems.hooks.get.incoming | { code: "123456xyz" } | { code: "123abc" } | This hook is intended for the case when a voucher is queried by voucher-code. This hook allows to modify the code before the query continues and it receives the code in the request body in the form of { code: "some string" }. The endpoint expects from the hook response a similar structure, e.g. { code: "some other string" }. |
GET/api/v1/vouchers/${id}/lookup |
voucher_systems.hooks.get.outgoing | Object with array of voucher data objects. { vouchers: [{ code: "12345678", currency: "EUR", format: "XXXXXXXX" }] } |
Array of voucher data objects. [{ barcode: "12345678xx", iso_currency: "EUR", format: "XXXXXXXXXX" }] |
This hook is applied after the results returned from the database query and before they are returned to the caller. The hook receives the voucher in the request body in the format of { vouchers: [{}] }. The response from the hook is expected to be an array of (voucher) objects. |
Store logs as file. If processing is doen, it will be out of band. The maximum file size is 100mb.
clientAccountID required | string Alphanumeric client ID of the user |
logs required | string <binary> file to upload |
tillhub.telemetries.logs.files.post((err, result) => {})
Get a log file download URL
clientAccountID required | string Alphanumeric client ID of the user |
filename required | string URL safe id of a file. Can be retrieved from the GET all call above. |
tillhub.telemetries.logs.files.get((err, result) => {})
Check for and execute a migration if a client account needs one.
clientAccountID required | string Alphanumeric client ID of the user |
Migration description object.
{ }
Check for the status of a migration.
clientAccountID required | string Alphanumeric client ID of the user |
migrationID required | string Alphanumeric ID of of a migration |
tillhub.telemetries.migrations.check.post((err, result) => {})
Create a new function of a user.
clientAccountID required | string Alphanumeric client ID of the user |
Simple Function
required | string or (any or null) |
runtime required | string Enum: "pos" "nodejs8x" "python27" Define where this function is runnable. |
type required | string Enum: "pubsub" "http" "local" Resource type that will drive runtime specific behaviour. Indicates whether this function needs ingress or egress. |
string or (any or null) Source code for this function, if applies. | |
string or (any or null) Topic for this function, if applies. | |
string or (any or null) Define which function specific handler to use, if a function has more than one handler, if applies. | |
string or (any or null) Installable dependencies for this function, if applies. | |
client_id | string <= 128 characters |
active | boolean Default: true |
deleted | boolean Default: false |
object Function configuration that e.g. drives specific local client behaviour | |
Array of strings or (any or null) | |
Array of strings or (any or null) |
{- "name": "string",
- "runtime": "pos",
- "type": "pubsub",
- "function": "string",
- "topic": "string",
- "handler": "string",
- "deps": "string",
- "client_id": "string",
- "active": true,
- "deleted": false,
- "configuration": {
- "class": "discounted_voucher",
- "description": "string",
- "resources": [
- {
- "type": "product",
- "object_id": "463a83d0-a816-4902-abba-2486e0c0a0bb"
}
], - "images": {
- "original": null,
- "1x": null,
- "2x": null,
- "3x": null,
- "lia_1x": null,
- "lia_2x": null,
- "lia_3x": null,
- "square_1x": null,
- "square_2x": null,
- "square_3x": null,
}, - "payload": {
- "products": [
- {
- "product": "43847a66-97dc-4ac2-8e8a-c44920e1f22f",
- "qty": "100"
}
], - "discount": null,
- "payment_option": null,
- "linked_voucher": {
- "action": "3fe039d8-e38d-4333-86d8-48334da189a8",
- "amount": 50,
- "linked_action": "fc7cc46a-ebe2-4b62-9b1b-0f849680b49",
- "linked_amount": 10,
- "linked_discount": {
- "name": "X-mas discount",
- "rate": "1.0"
}
}, - "discounted_voucher": {
- "action": "efe039d8-e38d-4333-86d8-48334da189a8",
- "amount": 50,
- "linked_product": "fc7cc46a-ebe2-4b62-9b1b-0f849680b49",
- "linked_amount": 10,
- "linked_quantity": -1
}
}
}, - "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}
{ }
Query all functions of a user.
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
runtime | string <date-time> |
type | string <date-time> |
deleted | string the string representation of boolean values as |
active | string the string representation of boolean values as |
client_id | string <uuid> |
location | string the UUID representation of a location or an array of locations |
q | string text search by name, with a partial match (by comma or space separated words with minimal length of 2 chars) |
tillhub.functions.get((err, result) => {})
Replace an entire function object.
clientAccountID required | string Alphanumeric client ID of the user |
functionID required | string Alphanumeric function ID |
Simple Function
string or (any or null) | |
runtime | string Enum: "pos" "nodejs8x" "python27" Define where this function is runnable. |
type | string Enum: "pubsub" "http" "local" Resource type that will drive runtime specific behaviour. Indicates whether this function needs ingress or egress. |
string or (any or null) Source code for this function, if applies. | |
string or (any or null) Topic for this function, if applies. | |
string or (any or null) Define which function specific handler to use, if a function has more than one handler, if applies. | |
string or (any or null) Installable dependencies for this function, if applies. | |
client_id | string <= 128 characters |
active | boolean Default: true |
deleted | boolean Default: false |
object Function configuration that e.g. drives specific local client behaviour | |
Array of strings or (any or null) | |
Array of strings or (any or null) |
{- "name": "string",
- "runtime": "pos",
- "type": "pubsub",
- "function": "string",
- "topic": "string",
- "handler": "string",
- "deps": "string",
- "client_id": "string",
- "active": true,
- "deleted": false,
- "configuration": {
- "class": "discounted_voucher",
- "description": "string",
- "resources": [
- {
- "type": "product",
- "object_id": "463a83d0-a816-4902-abba-2486e0c0a0bb"
}
], - "images": {
- "original": null,
- "1x": null,
- "2x": null,
- "3x": null,
- "lia_1x": null,
- "lia_2x": null,
- "lia_3x": null,
- "square_1x": null,
- "square_2x": null,
- "square_3x": null,
}, - "payload": {
- "products": [
- {
- "product": "43847a66-97dc-4ac2-8e8a-c44920e1f22f",
- "qty": "100"
}
], - "discount": null,
- "payment_option": null,
- "linked_voucher": {
- "action": "3fe039d8-e38d-4333-86d8-48334da189a8",
- "amount": 50,
- "linked_action": "fc7cc46a-ebe2-4b62-9b1b-0f849680b49",
- "linked_amount": 10,
- "linked_discount": {
- "name": "X-mas discount",
- "rate": "1.0"
}
}, - "discounted_voucher": {
- "action": "efe039d8-e38d-4333-86d8-48334da189a8",
- "amount": 50,
- "linked_product": "fc7cc46a-ebe2-4b62-9b1b-0f849680b49",
- "linked_amount": 10,
- "linked_quantity": -1
}
}
}, - "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}
Query all supported topics. Those are events that the API is generating internally via Kafla.
E.g. customers.create
will be called when the POST /customers/:user
will be called. Any event can be bind one function.
Note: The actual event that will be dispatched is on a per client account basis, but will be stripped when the function will be attached. E.g.
users.b128b7f5-27eb-41d4-b3b9-0fc3a9d95bef.customers.create
Events | Description |
---|---|
customers.create | Asynchronous event when a customer is created by POST /customers |
balances.create | Asynchronous event when a balance is created by POST /balances |
transactions.create | Asynchronous event when a transaction is created by POST /transactions |
clientAccountID required | string Alphanumeric client ID of the user |
tillhub.functions.topics.get((err, result) => {})
Send emails with delivery notes to customers, with attached PDF.
clientAccountID required | string Alphanumeric client ID of the user |
Any error object.
html required | string HTML text |
email required | string email address of customer |
lines | Array of any array of objects of barcode data |
template | object object of template variables |
{- "html": "string",
- "email": "string",
- "lines": [
- null
], - "template": { }
}
Send emails with invoices to customers, with attached PDF.
clientAccountID required | string Alphanumeric client ID of the user |
Any error object.
html required | string HTML text |
email required | string email address of customer |
lines | Array of any array of objects of barcode data |
template | object object of template variables |
{- "html": "string",
- "email": "string",
- "lines": [
- null
], - "template": { }
}
Send emails with receipts to customers, with attached PDF.
clientAccountID required | string Alphanumeric client ID of the user |
embed | array of array of strings current option is "correspondence"; decides if the correspondence object is returned in the response or not |
Any error object.
receipt_text required | string new line delimited receipt text (comes withtout barcodes) |
email required | string email address of customer |
lines | Array of any array of objects of barcode data |
template | object object of template variables |
{- "receipt_text": "string",
- "email": "string",
- "lines": [
- null
], - "template": { }
}
Send emails with delivery note to customers, with attached PDF.
clientAccountID required | string Alphanumeric client ID of the user |
Any error object.
email required | string email address of customer |
invoice | object object of delivery note data |
{- "email": "string",
- "invoice": { }
}
Send emails with full receipt to customers, with attached PDF.
clientAccountID required | string Alphanumeric client ID of the user |
Any error object.
email required | string email address of customer |
invoice | object object of full receipt data |
{- "email": "string",
- "invoice": { }
}
Send emails with invoices to customers, with attached PDF.
clientAccountID required | string Alphanumeric client ID of the user |
Any error object.
email required | string email address of customer |
invoice | object object of invoice data |
{- "email": "string",
- "invoice": { }
}
Create a new message.
clientAccountID required | string Alphanumeric client ID of the user |
Simple Message
required | string or (any or null) |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
payload | object |
object or (any or null) | |
ignorable | boolean |
ignored | boolean |
read | boolean |
string or (any or null) | |
deleted | boolean Default: false |
progress | object |
string or (any or null) | |
counter | number |
{- "message": "string",
- "invoked_at": "2019-08-24T14:15:22Z",
- "consumer_type": "string",
- "channel": "string",
- "level": "string",
- "type": "string",
- "payload": { },
- "metadata": {
- "user": "string",
- "route": "string"
}, - "ignorable": true,
- "ignored": true,
- "read": true,
- "read_at": "2019-08-24T14:15:22Z",
- "deleted": false,
- "progress": { },
- "client_account": "string",
- "counter": 0
}
{ }
Replace an entire message object.
clientAccountID required | string Alphanumeric client ID of the user |
messageID required | string Alphanumeric messages ID |
Simple Message
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
payload | object |
object or (any or null) | |
ignorable | boolean |
ignored | boolean |
read | boolean |
string or (any or null) | |
deleted | boolean Default: false |
progress | object |
string or (any or null) | |
counter | number |
{- "message": "string",
- "invoked_at": "2019-08-24T14:15:22Z",
- "consumer_type": "string",
- "channel": "string",
- "level": "string",
- "type": "string",
- "payload": { },
- "metadata": {
- "user": "string",
- "route": "string"
}, - "ignorable": true,
- "ignored": true,
- "read": true,
- "read_at": "2019-08-24T14:15:22Z",
- "deleted": false,
- "progress": { },
- "client_account": "string",
- "counter": 0
}
Delete a single reason object.
clientAccountID required | string Alphanumeric client ID of the user |
accountID required | string Alphanumeric reason ID |
import * as tillhub from '@tillhub/javascript-sdk' const { data: reasons } = await tillhub.reasons().delete('0b99513a-6d97-4111-88db-81e930611656)
{- "status": 200,
- "msg": "Deleted reason f3afd983-6bc9-4eea-af25-b20f0356b10a",
- "request": {
- "host": "staging-api.tillhub.com",
- "id": "709d688a-d43c-4c1d-af6d-70b610b2f42c"
}
}
Create a new reason of a user.
clientAccountID required | string Alphanumeric client ID of the user |
Simple Reason
required | string or (any or null) |
string or (any or null) | |
object or (any or null) or (any or null) | |
deleted | boolean Default: false |
active | boolean Default: true The reason is active |
type required | string Enum: "refund" "pos_price_change" "stock_change" "stock_increase" "stock_decrease" "expense" "deposit" The reason type |
noted_required | boolean Default: false The action must be noted |
image_required | boolean Default: false The image must be enclosed |
approval_required | boolean Default: false The action must be approved by supervisor |
{- "name": "Returned goods",
- "description": "Goods were returned by the customer",
- "behavior": {
- "stock": "restock",
- "stock_location": "current",
- "navigation": "payment_view"
}, - "deleted": false,
- "active": true,
- "type": "expense",
- "noted_required": false,
- "image_required": false,
- "approval_required": false
}
{- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "name": "Returned goods",
- "description": "Goods were returned by the customer",
- "behavior": {
- "stock": "restock",
- "stock_location": "current",
- "navigation": "payment_view"
}, - "deleted": false,
- "active": true,
- "type": "expense",
- "noted_required": false,
- "image_required": false,
- "approval_required": false
}
Get a single reason object.
clientAccountID required | string Alphanumeric client ID of the user |
reasonId required | string Alphanumeric configuration ID |
import * as tillhub from '@tillhub/javascript-sdk' const { data: reasons } = await tillhub.reasons().get('0b99513a-6d97-4111-88db-81e930611656')
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": {
- "iso": "2021-06-03T11:18:47.725Z",
- "unix": 1622719127725
}, - "updated_at": {
- "iso": "2021-06-03T11:18:47.725Z",
- "unix": 1622719127725
}, - "name": "Returned goods",
- "description": "Goods were returned by the customer",
- "behavior": {
- "stock": "restock",
- "stock_location": "current",
- "navigation": "payment_view"
}, - "deleted": false,
- "active": true,
- "type": "expense",
- "noted_required": false,
- "image_required": false,
- "approval_required": false
}
]
}
Get metadata of the Reasons model.
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> The start date from which the reasons were created/updated |
end | string <date-time> The end date up to which the reasons were created/updated |
type | string Enum: "refund" "pos_price_change" "stock_change" "expense" "deposit" The type of the reason |
deleted | string Enum: "true" "false" Filter entities which are deleted or not |
q | string this will text search by name, with a partial match (by comma or space separated words with minimal length of 2 chars) |
curl 'https://api.tillhub.com/api/v0/reasons/58b4ff3f-73dd-4712-a732-388127a52217/meta' \ -H 'authorization: Bearer ***' \
Update parts of a reason object.
clientAccountID required | string Alphanumeric client ID of the user |
reasonId required | string Alphanumeric reason ID |
Simple Reason
string or (any or null) | |
string or (any or null) | |
object or (any or null) or (any or null) | |
deleted | boolean Default: false |
active | boolean Default: true The reason is active |
type | string Enum: "refund" "pos_price_change" "stock_change" "stock_increase" "stock_decrease" "expense" "deposit" The reason type |
noted_required | boolean Default: false The action must be noted |
image_required | boolean Default: false The image must be enclosed |
approval_required | boolean Default: false The action must be approved by supervisor |
{- "name": "Returned goods",
- "description": "Goods were returned by the customer",
- "behavior": {
- "stock": "restock",
- "stock_location": "current",
- "navigation": "payment_view"
}, - "deleted": false,
- "active": true,
- "type": "expense",
- "noted_required": false,
- "image_required": false,
- "approval_required": false
}
{- "id": "936835f7-2d75-41d2-9001-38ed6e458328",
- "created_at": "2019-03-17T21:12:04.849Z",
- "updated_at": "2019-03-17T21:12:04.849Z",
- "name": "Returned goods",
- "description": "Goods were returned by the customer",
- "behavior": {
- "stock": "restock",
- "stock_location": "current",
- "navigation": "payment_view"
}, - "deleted": false,
- "active": true,
- "type": "expense",
- "noted_required": false,
- "image_required": false,
- "approval_required": false
}
Soft delete a single custom hook object.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric custom hooks ID |
tillhub.custom_hooks.delete((err, result) => {})
{- "status": 200,
- "msg": "Deleted custom hook 96341e35-0fe1-4b72-89bc-6f62e9114ac6",
- "request": {
- "host": "staging-api.tillhub.com",
- "id": "UUID"
}
}
Update an entire custom hook object.
clientAccountID required | string Alphanumeric client ID of the user |
id required | string Alphanumeric custom hooks ID |
Simple custom hook
string or (any or null) Name of the custom hook | |
event | string Enum: "on_scan" "after_payment" The event that should trigger the hook |
Array of strings or (any or null) The POS context on which the hook should be triggered | |
hook | string The hook as a URL |
object Info to use in order to authenticate with the provided hook |
{- "name": "string",
- "event": "on_scan",
- "context": [
- "library"
], - "hook": "string",
- "auth": {
- "type": "none",
- "user": "string",
- "pwd": "string"
}
}
Query all custom hooks of a user.
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Example: start=2018-01-29T14%3A55%3A05.000Z Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
deleted | string the string representation of boolean values as |
tillhub.custom_hooks.get((err, result) => {})
Create a new custom hooks of a user.
clientAccountID required | string Alphanumeric client ID of the user |
Simple custom hooks
string or (any or null) Name of the custom hook | |
event required | string Enum: "on_scan" "after_payment" The event that should trigger the hook |
required | Array of strings or (any or null) The POS context on which the hook should be triggered |
hook required | string The hook as a URL |
required | object Info to use in order to authenticate with the provided hook |
{- "name": "string",
- "event": "on_scan",
- "context": [
- "library"
], - "hook": "string",
- "auth": {
- "type": "none",
- "user": "string",
- "pwd": "string"
}
}
{ }
Query all deleted resources of a user.
clientAccountID required | string Alphanumeric client ID of the user |
start | string <date-time> Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
end | string <date-time> Url safe ISO 8601 compliant date e.g. 2018-01-29T14:55:05.000Z |
limit | integer the discrete limit, that will default to 1000 on the legacy route |
offset | string the number of rows to skip |
type | string The type of the resource, eg. accounts, branch_groups, branches, categories, category_trees, clients, customers, device_groups, discounts, expense_accounts, favourites, functions, manufacturers, payment_options, processes, product_groups, product_service_question_groups, product_service_questions, product_templates, products_v1, promotions, reasons, regions, safes, seasons, staffs, staff_groups, staff_permission_templates, storefronts, tags, taxes, templates, warehouses |
tillhub.trash.get((err, result) => {})
Recover a deleted resource.
clientAccountID required | string Alphanumeric client ID of the user |
type required | string The type of the resource, eg. accounts, branch_groups, branches, categories, category_trees, clients, customers, device_groups, discounts, expense_accounts, favourites, functions, manufacturers, payment_options, processes, product_groups, product_service_question_groups, product_service_questions, product_templates, products_v1, promotions, reasons, regions, safes, seasons, staffs, staff_groups, staff_permission_templates, storefronts, tags, taxes, templates, warehouses |
resource required | string The resource UUID |
tillhub.trash.put((err, result) => {})
Get the resource masterdata dependencies.
clientAccountID required | string Alphanumeric client ID of the user |
type required | string Enum: "tax_account" "revenue_account" "product_group" The resource type |
resource required | string Alphanumeric ID of the resource |
tillhub.dependencies.get((err, result) => {})
Make a generic search query for branches on the name, number, addresses.street, addresses.locality, and addresses.postal_code fields as a string.
clientAccountID required | string Alphanumeric client ID of the user |
q required | string the search string |
fields | string[] array of fields to search by, e.g. 'name', 'branch_number', 'addresses.street', 'addresses.locality', 'addresses.postal_code' (if no field is specified then it will search all available fields). |
import * as tillhub from '@tillhub/javascript-sdk' const { data: branches } = await tillhub.branches().search('flagship')
Make a generic search query for discounts on the name field as a string.
clientAccountID required | string Alphanumeric client ID of the user |
q required | string the search string |
fields | string[] array of fields to search by, e.g. 'name' (if no field is specified then it will search all available fields). |
tillhub.discounts.search.get((err, result) => {})
Make a generic search query for product groups on the name field as a string.
clientAccountID required | string Alphanumeric client ID of the user |
q required | string the search string |
fields | string[] array of fields to search by, e.g. 'name' (if no field is specified then it will search all available fields). |
tillhub.product_groups.search.get((err, result) => {})
Make a fuzzy search query for products on the name, description and ID fields as a string. This will return max. configured limit or 100 results, with their score and some metadata. Also it will treat the input as incomplete string and make a suggestion for correction.
NOTE: if the index does not exist yet, we will try to create it on the fly. On a products database with millions of products, that will take up to 7 minutes.
clientAccountID required | string Alphanumeric client ID of the user |
q required | string the search string |
types | Array of any The product types to filter |
branch | string The location to filter |
stockable | string Enum: true false Filter products by stockable flag |
sellable | string Enum: true false Filter products by sellable flag |
purchasable | string Enum: true false Filter products by purchasable flag |
tillhub.products.search.get((err, result) => {})
Make a fuzzy search query for products on the name and description fields as a string. This will return max. 20 results, with their score and some metadata. Also it will treat the input as incomplete string and make a suggestion for correction.
clientAccountID required | string Alphanumeric client ID of the user |
q required | string the search string |
types | Array of any the product types to filter |
stockable | string Enum: true false Filter products by stockable flag |
sellable | string Enum: true false Filter products by sellable flag |
purchasable | string Enum: true false Filter products by purchasable flag |
limit | string Enum: true false the results limit |
offset | string the results offset |
offset | string the results offset |
tillhub.products.search.get((err, result) => {})
{- "msg": "Product search and suggestion successful.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 10,
- "results": {
- "0": {
- "name": "string",
- "summary": "string",
- "description": "string",
- "attributes": {
- "property1": "string",
- "property2": "string"
}, - "parent": "string",
- "options": [
- {
- "Color": [
- "blue",
- "green",
- "red"
]
}, - {
- "Size": [
- "L",
- "M",
- "S"
]
}
], - "children": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Shirt S rot",
- "custom_id": "P0000001046TEST280824-1",
- "attributes": {
- "Color": "blue",
- "Size": "S"
}, - "images": {
- "original": null,
- "1x": null,
- "2x": null,
- "3x": null,
- "lia_1x": null,
- "lia_2x": null,
- "lia_3x": null,
- "square_1x": null,
- "square_2x": null,
- "square_3x": null,
}, - "barcodes": [
- "ABC-abc-1234"
]
}
], - "tags": [
- "860defb8-5598-421d-9da4-f0826e767536"
], - "linked_products": [
- null
], - "prices": {
- "branch_prices": [
- {
- "branch": "7c628a07-d557-4cd4-9105-51f9aade2c65",
- "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "scaled_prices": [
- {
- "qty": 0,
- "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "time_based_prices": [
- {
- "time_range": {
- "start": "2019-08-24T14:15:22Z",
- "end": "2019-08-24T14:15:22Z"
}, - "prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}
], - "default_prices": [
- {
- "amount": {
- "net": "27633.02",
- "gross": "27633.02"
}, - "currency": "str",
- "percentage": 0,
- "purchase_price": "27633.02",
- "cost": "27633.02",
- "margin": 0
}
]
}, - "barcodes": [
- "ABC-abc-1234"
], - "barcode": "string",
- "sku": "string",
- "stock_minimum": 0,
- "stock_maximum": 0,
- "reorder_point": 0,
- "reorder_qty": 0,
- "min_stock": [
- {
- "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5",
- "qty": 0
}
], - "sellable": true,
- "purchasable": true,
- "stockable": true,
- "discountable": true,
- "linkable": false,
- "metadata": { },
- "audiences": [
- null
], - "keywords": [
- null
], - "categories": [
- null
], - "custom_ids": { },
- "related_to": [
- null
], - "similar_to": [
- null
], - "released_at": "2019-08-24T14:15:22Z",
- "purchased_at": "2019-08-24T14:15:22Z",
- "produced_at": "2019-08-24T14:15:22Z",
- "custom_id": "0000000028-000008",
- "tax": "2b46be7d-65ac-4a23-a5dd-524b80fe8e49",
- "taxes_options": [
- null
], - "season": "string",
- "seasons": { },
- "account": "f5b54a51-a98c-44cf-bb68-a676332e7d12",
- "vat_class": "string",
- "category": "string",
- "brand": "string",
- "takeaway_tax": "4936a0c4-d266-4950-9c4d-03c5207ccf96",
- "takeaway_account": "921ec83d-c08b-411a-96d8-355f354d790d",
- "active": true,
- "deleted": false,
- "type": "product",
- "manufacturer": {
- "iln": ""
}, - "supplier": {
- "sku": ""
}, - "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "branch_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "condition": "string",
- "images": {
- "original": null,
- "1x": null,
- "2x": null,
- "3x": null,
- "lia_1x": null,
- "lia_2x": null,
- "lia_3x": null,
- "square_1x": null,
- "square_2x": null,
- "square_3x": null,
}, - "insert_id": 0,
- "product_group": "string",
- "delegated_to": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "client_id": "string",
- "external_reference_id": "string",
- "default_tile_color": "string",
- "codes": null,
- "stock_mode": "simple",
- "stock_configuration_location": [
- {
- "location": "string",
- "stockable": true,
- "stock_minimum": 0,
- "reorder_qty": 0,
- "reorder_point": 0,
- "location_type": "client",
- "qty": 0
}
], - "is_service": true,
- "service_questions": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "service_question_groups": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "addon_groups": [
- {
- "name": "string"
}
], - "configuration": {
- "allow_zero_prices": true,
- "pricing": {
- "allow_is_free": false
}
}, - "loyalty_values": [
- {
- "unit": "miles",
- "amount": 1000000
}
], - "manufacturers": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "components": [
- {
- "product": "e0588024-d851-42d5-ab9f-1b664ef352d4",
- "quantity": 0
}
], - "delegatable": true,
- "online": false,
- "serial_number_input_required": false,
- "shipping_required": true,
- "delegatable_to": [
- {
- "type": "client_account",
- "value": "a860a344-d7b2-406e-828e-8d442f23f344"
}
], - "delegated_from": {
- "owner": {
- "type": "client_account",
- "value": "a860a344-d7b2-406e-828e-8d442f23f344"
}, - "product": "e0588024-d851-42d5-ab9f-1b664ef352d4"
}, - "warranty_notice": "string",
- "refund_policy": "string",
- "disclaimer": "string",
- "policy": {
- "version": "v0",
- "statements": [
- {
- "effect": "allow",
- "resource_type": "register",
- "resource": "stringstringstri"
}
]
}, - "external_ids": [
- {
- "store_front": "string",
- "product_id": "string"
}
], - "custom_properties": { },
- "price_book_entries": [
- {
- "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
- "summary": "string",
- "active": true,
- "deleted": false,
- "clients": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "external_reference_id": "string",
- "value_type": "rate",
- "amount_net": "27633.02",
- "amount_gross": "27633.02",
- "rate": 0,
- "discounted_by": 1,
- "metadata": { },
- "currency": "EUR",
- "tax": "2b46be7d-65ac-4a23-a5dd-524b80fe8e49"
}
], - "stock_info": {
- "additionalProperties": null,
- "summary": {
- "total": {
- "qty": 0
}, - "locations": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "qty": 0
}
]
}
}, - "i18n": {
- "locales": [
- {
- "code": "de_DE",
- "translations": {
- "format": "i18next",
- "payload": [
- null
]
}
}
]
}
}, - "search": [
- {
- "score": 6.7483287,
- "doc": {
- "id": "fabdcfc9-27d9-4a69-be85-3a32f5e0a2b2",
- "name": "PS 4 Controller",
- "custom_id": "060919-667100",
- "description": "The DualShock 4 Wireless Controller features familiar controls, and incorporates several innovative features to usher in a new era of interactive experiences. Its definitive analog sticks and trigger buttons have been improved for greater feel and sensitivity. A multi-touch, clickable touch pad expands gameplay possibilities, while the incorporated light bar in conjunction with the PlayStation Camera allows for easy player identification and screen adjustment when playing with friends in the same room. The addition of the Share button makes utilizing the social capabilities of the PlayStation 4 as easy as the push of a button. The DualShock 4 Wireless Controller is more than a controller; it's your physical connection to a new era of gaming. PLAYSTATION DUALSHOCK 4 CONTROLLER",
- "type": "product",
- "locations": [ ]
}, - "highlight": {
- "description": [
- "A multi-touch, clickable touch <em>pad</em> expands gameplay possibilities, while the incorporated light bar in"
]
}
}
]
}, - "status": 200
}
Make a generic search query for registers on the name and number field as a string.
clientAccountID required | string Alphanumeric client ID of the user |
q required | string the search string |
fields | string[] array of fields to search by, e.g. 'name' (if no field is specified then it will search all available fields). |
tillhub.registers.search.get((err, result) => {})
Make a generic search query for staffs on the name field as a string.
clientAccountID required | string Alphanumeric client ID of the user |
q required | string the search string |
fields | string[] array of fields to search by, e.g. 'name' (if no field is specified then it will search all available fields). |
tillhub.staff.search.get((err, result) => {})
Make a generic search query for warehouses on the name field as a string.
clientAccountID required | string Alphanumeric client ID of the user |
q required | string the search string |
fields | string[] array of fields to search by, e.g. 'name' (if no field is specified then it will search all available fields). |
tillhub.warehouses.search.get((err, result) => {})
Query all service_categories of a user.
clientAccountID required | string Alphanumeric client ID of the user |
q | string The search string for Name and Description of the category and its services |
branch_id | string The branch all services must belong to |
tillhub.service_categories.get((err, result) => {})
Create a new service category of a user.
clientAccountID required | string Alphanumeric client ID of the user |
Simple service category
required | string or (any or null) |
product_group_id | string Product group ID |
string or (any or null) | |
active | boolean Default: true Soft disable or enable this service category. |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
object or (any or null) | |
string or (any or null) | |
string or (any or null) | |
deleted | boolean Default: false Soft delete this service category. |
{- "name": "Beverages",
- "product_group_id": "42",
- "tax": "f5cf4198-ae26-463f-aa2b-014bd2fed8e5",
- "active": true,
- "account": "6ad04406-683c-4255-822a-3acd694d2ad1",
- "takeaway_tax": "4936a0c4-d266-4950-9c4d-03c5207ccf96",
- "takeaway_account": "921ec83d-c08b-411a-96d8-355f354d790d",
- "images": {
}, - "color": "string",
- "description": "Haircuts for men",
- "deleted": false
}
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "id": "05297f58-3408-44d0-8bf4-125d4e86c08a",
- "name": "Beverages",
- "product_group_id": "42",
- "tax": "f5cf4198-ae26-463f-aa2b-014bd2fed8e5",
- "active": true,
- "account": "6ad04406-683c-4255-822a-3acd694d2ad1",
- "takeaway_tax": "4936a0c4-d266-4950-9c4d-03c5207ccf96",
- "takeaway_account": "921ec83d-c08b-411a-96d8-355f354d790d",
- "images": {
}, - "color": "string",
- "description": "Haircuts for men",
- "deleted": false
}
]
}
Replace an entire service category object.
clientAccountID required | string Alphanumeric client ID of the user |
serviceCategoryID required | string Alphanumeric service category ID |
Simple Service Category
string or (any or null) | |
product_group_id | string Product group ID |
string or (any or null) | |
active | boolean Default: true Soft disable or enable this service category. |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
object or (any or null) | |
string or (any or null) | |
string or (any or null) | |
deleted | boolean Default: false Soft delete this service category. |
{- "name": "Beverages",
- "product_group_id": "42",
- "tax": "f5cf4198-ae26-463f-aa2b-014bd2fed8e5",
- "active": true,
- "account": "6ad04406-683c-4255-822a-3acd694d2ad1",
- "takeaway_tax": "4936a0c4-d266-4950-9c4d-03c5207ccf96",
- "takeaway_account": "921ec83d-c08b-411a-96d8-355f354d790d",
- "images": {
}, - "color": "string",
- "description": "Haircuts for men",
- "deleted": false
}
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "id": "05297f58-3408-44d0-8bf4-125d4e86c08a",
- "name": "Beverages",
- "product_group_id": "42",
- "tax": "f5cf4198-ae26-463f-aa2b-014bd2fed8e5",
- "active": true,
- "account": "6ad04406-683c-4255-822a-3acd694d2ad1",
- "takeaway_tax": "4936a0c4-d266-4950-9c4d-03c5207ccf96",
- "takeaway_account": "921ec83d-c08b-411a-96d8-355f354d790d",
- "images": {
}, - "color": "string",
- "description": "Haircuts for men",
- "deleted": false
}
]
}
Create a new service for a user.
clientAccountID required | string Alphanumeric client ID of the user |
Simple service
id | string <uuid> The service ID |
name | string The name of the service |
string or (any or null) | |
object or (any or null) | |
object or (any or null) | |
object or (any or null) | |
object or (any or null) | |
string or (any or null) | |
string or (any or null) | |
integer or (any or null) | |
boolean or (any or null) | |
Array of any or (any or null) | |
object or (any or null) | |
Array of any or (any or null) | |
Array of any or (any or null) | |
Array of any or (any or null) | |
object or (any or null) | |
Array of any or (any or null) | |
Array of any or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
active | boolean |
deleted | boolean |
string or (any or null) | |
object or (any or null) | |
object or (any or null) | |
string or (any or null) | |
object or (any or null) | |
string or (any or null) | |
insert_id | integer |
string or (any or null) | |
Array of any or (any or null) | |
Array of strings or (any or null) | |
duration | integer [ 5 .. 1440 ] the duration of the service in mintues |
linked_product | string <uuid> The UUID of the product associated with the service |
Array of strings or (any or null) |
{- "id": "05297f58-3408-44d0-8bf4-125d4e86c08a",
- "name": "Haircut",
- "description": "string",
- "attribute_combination": { },
- "attributes": { },
- "linked_to": { },
- "prices": { },
- "barcode": "string",
- "sku": "string",
- "stock_minimum": 0,
- "stockable": true,
- "linked_articles": [
- null
], - "metadata": { },
- "audiences": [
- null
], - "keywords": [
- null
], - "categories": [
- null
], - "custom_ids": { },
- "related_to": [
- null
], - "similar_to": [
- null
], - "released_at": "2019-08-24T14:15:22Z",
- "purchased_at": "2019-08-24T14:15:22Z",
- "produced_at": "2019-08-24T14:15:22Z",
- "custom_id": "string",
- "tax": "string",
- "account": "string",
- "vat_class": "string",
- "category": "05297f58-3408-44d0-8bf4-125d4e86c08a",
- "brand": "string",
- "active": true,
- "deleted": true,
- "type": "product",
- "manufacturer": { },
- "supplier": { },
- "condition": "string",
- "summary": "string",
- "insert_id": 0,
- "product_group": "string",
- "taxes_options": [
- null
], - "manufacturers": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "duration": 30,
- "linked_product": "05297f58-3408-44d0-8bf4-125d4e86c08a",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "id": "05297f58-3408-44d0-8bf4-125d4e86c08a",
- "name": "Haircut",
- "description": "string",
- "attribute_combination": { },
- "attributes": { },
- "linked_to": { },
- "prices": { },
- "barcode": "string",
- "sku": "string",
- "stock_minimum": 0,
- "stockable": true,
- "linked_articles": [
- null
], - "metadata": { },
- "audiences": [
- null
], - "keywords": [
- null
], - "categories": [
- null
], - "custom_ids": { },
- "related_to": [
- null
], - "similar_to": [
- null
], - "released_at": "2019-08-24T14:15:22Z",
- "purchased_at": "2019-08-24T14:15:22Z",
- "produced_at": "2019-08-24T14:15:22Z",
- "custom_id": "string",
- "tax": "string",
- "account": "string",
- "vat_class": "string",
- "category": "05297f58-3408-44d0-8bf4-125d4e86c08a",
- "brand": "string",
- "active": true,
- "deleted": true,
- "type": "product",
- "manufacturer": { },
- "supplier": { },
- "condition": "string",
- "summary": "string",
- "insert_id": 0,
- "product_group": "string",
- "taxes_options": [
- null
], - "manufacturers": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "duration": 30,
- "linked_product": "05297f58-3408-44d0-8bf4-125d4e86c08a",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}
]
}
Updates a service object.
clientAccountID required | string Alphanumeric client ID of the user |
productServiceID required | string Alphanumeric product service ID |
Simple Service Object
id | string <uuid> The service ID |
name | string The name of the service |
string or (any or null) | |
object or (any or null) | |
object or (any or null) | |
object or (any or null) | |
object or (any or null) | |
string or (any or null) | |
string or (any or null) | |
integer or (any or null) | |
boolean or (any or null) | |
Array of any or (any or null) | |
object or (any or null) | |
Array of any or (any or null) | |
Array of any or (any or null) | |
Array of any or (any or null) | |
object or (any or null) | |
Array of any or (any or null) | |
Array of any or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
string or (any or null) | |
active | boolean |
deleted | boolean |
string or (any or null) | |
object or (any or null) | |
object or (any or null) | |
string or (any or null) | |
object or (any or null) | |
string or (any or null) | |
insert_id | integer |
string or (any or null) | |
Array of strings or (any or null) | |
duration | integer [ 5 .. 1440 ] the duration of the service in mintues |
linked_product | string <uuid> The UUID of the product associated with the service |
Array of strings or (any or null) |
{- "id": "05297f58-3408-44d0-8bf4-125d4e86c08a",
- "name": "Haircut",
- "description": "string",
- "attribute_combination": { },
- "attributes": { },
- "linked_to": { },
- "prices": { },
- "barcode": "string",
- "sku": "string",
- "stock_minimum": 0,
- "stockable": true,
- "linked_articles": [
- null
], - "metadata": { },
- "audiences": [
- null
], - "keywords": [
- null
], - "categories": [
- null
], - "custom_ids": { },
- "related_to": [
- null
], - "similar_to": [
- null
], - "released_at": "2019-08-24T14:15:22Z",
- "purchased_at": "2019-08-24T14:15:22Z",
- "produced_at": "2019-08-24T14:15:22Z",
- "custom_id": "string",
- "tax": "string",
- "account": "string",
- "vat_class": "string",
- "category": "05297f58-3408-44d0-8bf4-125d4e86c08a",
- "brand": "string",
- "active": true,
- "deleted": true,
- "type": "product",
- "manufacturer": { },
- "supplier": { },
- "condition": "string",
- "summary": "string",
- "insert_id": 0,
- "product_group": "string",
- "manufacturers": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "duration": 30,
- "linked_product": "05297f58-3408-44d0-8bf4-125d4e86c08a",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}
{- "msg": "Queried transactions successfully.",
- "msg_localised": "Abgefragte Transaktionen erfolgreich.",
- "count": 1,
- "results": [
- {
- "id": "05297f58-3408-44d0-8bf4-125d4e86c08a",
- "name": "Haircut",
- "description": "string",
- "attribute_combination": { },
- "attributes": { },
- "linked_to": { },
- "prices": { },
- "barcode": "string",
- "sku": "string",
- "stock_minimum": 0,
- "stockable": true,
- "linked_articles": [
- null
], - "metadata": { },
- "audiences": [
- null
], - "keywords": [
- null
], - "categories": [
- null
], - "custom_ids": { },
- "related_to": [
- null
], - "similar_to": [
- null
], - "released_at": "2019-08-24T14:15:22Z",
- "purchased_at": "2019-08-24T14:15:22Z",
- "produced_at": "2019-08-24T14:15:22Z",
- "custom_id": "string",
- "tax": "string",
- "account": "string",
- "vat_class": "string",
- "category": "05297f58-3408-44d0-8bf4-125d4e86c08a",
- "brand": "string",
- "active": true,
- "deleted": true,
- "type": "product",
- "manufacturer": { },
- "supplier": { },
- "condition": "string",
- "summary": "string",
- "insert_id": 0,
- "product_group": "string",
- "manufacturers": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "duration": 30,
- "linked_product": "05297f58-3408-44d0-8bf4-125d4e86c08a",
- "locations": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}
]
}