Tillhub API (0.100.2)

Download OpenAPI specification:Download

The Tillhub API is a utility to acces POS data models in a flexible and model independent manner.

Introduction

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.

Documentation

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

General Mechanisms

  • we provide a multi-tenant, multi-user, delegatable CRUD system, also see staff and sub-users
  • we page on large datasets, whereas the load must be handled by consumers
  • our storage format is generally SQL compatible, but has NoSQL components, such as embedded documents, that are usually not queryable by themselves out-of-the box (such as lists of addresses of customers, metadata, configurations)
  • we offer a highly configurable system through a large number of toggles and other data to drive client behaviour and appearance, see configuration
  • our system is whitelabelable
  • file uploads feature based on "multipart form" data and usually comes as dedicated POST/PUT endpoint(s) along with traditional set of CRUD endpoints. The following flow applies:
    • obtain an entity unique ID via creation or reading endpoint
    • use such ID to upload associated file(s) via file(s) upload endpoint
    • get uploaded file URL from response

Authentication

The authentication flow is split in into several flows, to cater for multiple headless, headfull and elevation of rights scenarios:

  • Users
    • client account as admin (with expiration)
    • sub-user with specific rights (with expiration)
    • support users of Tillhub (with expiration)
  • Devices
    • such as the POS systems themselves (without expiration)
    • or, based on your choosing and client scenarios (adjustable expiration)
  • Service Accounts

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 Overviews

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

API Key Auth

Login

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

device authentication is currently restricted via email/password auth flow

Authorization

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.


Products

The products model is at the heart of the application. Understanding and utlising the model is key.

Prior-Art

  • the variants model of Amazon Amazon has similarities and good illustrations, which can serve as primer

Model

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.

Types of Products

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_products 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.

Layout of Type Specific Properties

variant_product

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"]
  }
}
variant

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"
  }
}
product
{
  "id": "8a7f7ba8-2240-4bda-ab10-3836c4d609d5",
  // other properties
}
voucher
{
  "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
}
linked_product
{
  "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"
          }
        ]
      }
    }
  ]
}
linked
{
  "id": "8e15e674-148e-4bd2-a216-0536e5c6fd7e",
  // other properties
  "stockable": false,
  "prices"; {
    "default": [
      {
        "amount": {
          "gross":  0.3,
          "net": null
        },
        "currency": "EUR"
      }
    ]
  }
}

Prices

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.

a product with different prices
{
  "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"
          }
        ]
      }
    ]
  }
}

Properties

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_ids 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.

Gs1-barcodes

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.

Products API

For the products API documentation, jump to


Locations

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

Conventions

Validation of Incoming Data

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.

Sending Incremental Change

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

The Original Document

{
  "baz": "qux",
  "foo": "bar"
}

The Patch

[
  { "op": "replace", "path": "/baz", "value": "boo" },
  { "op": "add", "path": "/hello", "value": ["world"] },
  { "op": "remove", "path": "/foo"}
]

The Result

{
  "baz": "boo",
  "hello": ["world"]
}

Realtime

For some of the APIs we offer configurable integrations into third party systems, such as webhooks, message queues or direct implementations.

Message Queues

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))

Use Cases

Below we will describe common opeation with example and explantion of business logic

1. Create A Sellable Cart from Outside Client Applications

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:

  1. authenticate through any auth mechanism from the /users/login-API
    Note: Mensure or assume you are sufficiently authorised to do all following actions

  2. 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.

  3. 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.

1.1. Getting a Authenication Token

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.

1.2. Getting a Product

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]'

1.3. Constructing a Cart

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_prices and the origial_price of the product.


Business Partner

Business Partner API

Get list of business partners

path Parameters
tenantId
required
string
query Parameters
companyName
string
number
string
taxNumber
string
q
string
start
string
end
string
limit
number
Default: 100
offset
number
Default: 0
orderFields
Array of strings

Responses

Response samples

Content type
application/json
{
  • "cursors": {
    },
  • "msg": "Success",
  • "results": [
    ],
  • "status": 200
}

Create new business partner

path Parameters
tenantId
required
string
Request Body schema: application/json
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
email
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

Responses

Request samples

Content type
application/json
{
  • "accountsPayable": [
    ],
  • "accountsReceivable": [
    ],
  • "active": true,
  • "addresses": [
    ],
  • "bankAccounts": [
    ],
  • "companyName": "string",
  • "createdAt": "string",
  • "deletedAt": "string",
  • "description": "string",
  • "email": "[email protected]",
  • "firstName": "string",
  • "glnNumber": "string",
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "lastName": "string",
  • "number": "string",
  • "paymentTerms": 0,
  • "phoneNumbers": [
    ],
  • "taxNumber": "string",
  • "taxSubject": true,
  • "updatedAt": "string"
}

Response samples

Content type
application/json
{
  • "cursors": {
    },
  • "msg": "Success",
  • "results": [
    ],
  • "status": 200
}

Export business partners

path Parameters
tenantId
required
string
query Parameters
companyName
string
number
string
taxNumber
string
q
string
start
string
end
string
limit
number
Default: 100
offset
number
Default: 0
orderFields
Array of strings

Responses

Response samples

Content type
application/json
{
  • "cursors": {
    },
  • "msg": "Success",
  • "results": [
    ],
  • "status": 200
}

Bulk import business partners

path Parameters
tenantId
required
string
Request Body schema: application/json
Array (non-empty)
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
email
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

Responses

Request samples

Content type
application/json
[
  • {
    }
]

Response samples

Content type
application/json
{
  • "cursors": {
    },
  • "msg": "Success",
  • "results": [
    ],
  • "status": 200
}

Meta information about business partners

path Parameters
tenantId
required
string
query Parameters
companyName
string
number
string
taxNumber
string
q
string
start
string
end
string
limit
number
Default: 100
offset
number
Default: 0
orderFields
Array of strings

Responses

Response samples

Content type
application/json
{
  • "cursors": {
    },
  • "msg": "Success",
  • "results": [
    ],
  • "status": 200
}

Delete single business partner

path Parameters
tenantId
required
string
id
required
string <uuid>

Responses

Response samples

Content type
application/json
{
  • "cursors": {
    },
  • "msg": "Success",
  • "results": [
    ],
  • "status": 200
}

Get single business partner

path Parameters
tenantId
required
string
id
required
string <uuid>

Responses

Response samples

Content type
application/json
{
  • "cursors": {
    },
  • "msg": "Success",
  • "results": [
    ],
  • "status": 200
}

Update business partner

path Parameters
tenantId
required
string
id
required
string <uuid>
Request Body schema: application/json
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
email
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

Responses

Request samples

Content type
application/json
{
  • "accountsPayable": [
    ],
  • "accountsReceivable": [
    ],
  • "active": true,
  • "addresses": [
    ],
  • "bankAccounts": [
    ],
  • "companyName": "string",
  • "createdAt": "string",
  • "deletedAt": "string",
  • "description": "string",
  • "email": "[email protected]",
  • "firstName": "string",
  • "glnNumber": "string",
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "lastName": "string",
  • "number": "string",
  • "paymentTerms": 0,
  • "phoneNumbers": [
    ],
  • "taxNumber": "string",
  • "taxSubject": true,
  • "updatedAt": "string"
}

Response samples

Content type
application/json
{
  • "cursors": {
    },
  • "msg": "Success",
  • "results": [
    ],
  • "status": 200
}

Business Partner Products

Business Partner Products API

Get business partner by assigned product id

path Parameters
tenantId
required
string
productId
required
string <uuid>

Responses

Response samples

Content type
application/json
{
  • "cursors": {
    },
  • "msg": "Success",
  • "results": [
    ],
  • "status": 200
}

Get products to business partners releations map

path Parameters
tenantId
required
string
Request Body schema: application/json
createdAt
string
id
string <uuid>
productId
required
Array of strings <uuid>
updatedAt
string

Responses

Request samples

Content type
application/json
{
  • "createdAt": "string",
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "productId": [
    ],
  • "updatedAt": "string"
}

Response samples

Content type
application/json
{
  • "cursors": {
    },
  • "msg": "Success",
  • "results": [
    ],
  • "status": 200
}

Delete products relation to business partner

path Parameters
tenantId
required
string
businessPartnerId
required
string <uuid>
Request Body schema: application/json
createdAt
string
id
string <uuid>
productId
required
Array of strings <uuid>
updatedAt
string

Responses

Request samples

Content type
application/json
{
  • "createdAt": "string",
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "productId": [
    ],
  • "updatedAt": "string"
}

Response samples

Content type
application/json
{
  • "cursors": {
    },
  • "msg": "Success",
  • "results": [
    ],
  • "status": 200
}

Get products IDs assigned to business partner

path Parameters
tenantId
required
string
businessPartnerId
required
string <uuid>

Responses

Response samples

Content type
application/json
{
  • "cursors": {
    },
  • "msg": "Success",
  • "results": [
    ],
  • "status": 200
}

Bulk assign products to business partner

path Parameters
tenantId
required
string
businessPartnerId
required
string <uuid>
Request Body schema: application/json
createdAt
string
id
string <uuid>
productId
required
Array of strings <uuid>
updatedAt
string

Responses

Request samples

Content type
application/json
{
  • "createdAt": "string",
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "productId": [
    ],
  • "updatedAt": "string"
}

Response samples

Content type
application/json
{
  • "cursors": {
    },
  • "msg": "Success",
  • "results": [
    ],
  • "status": 200
}

Delete single product relation to business partner

path Parameters
tenantId
required
string
businessPartnerId
required
string <uuid>
productId
required
string <uuid>

Responses

Response samples

Content type
application/json
{
  • "cursors": {
    },
  • "msg": "Success",
  • "results": [
    ],
  • "status": 200
}

Assign single product to business partner

path Parameters
tenantId
required
string
businessPartnerId
required
string <uuid>
productId
required
string <uuid>

Responses

Response samples

Content type
application/json
{
  • "cursors": {
    },
  • "msg": "Success",
  • "results": [
    ],
  • "status": 200
}

Business Partner Products V1

Business Partner Products API V1

Get products assigned to business partner

path Parameters
tenantId
required
string
businessPartnerId
required
string <uuid>

Responses

Response samples

Content type
application/json
{
  • "cursors": {
    },
  • "msg": "Success",
  • "results": [
    ],
  • "status": 200
}

/api/v1/business-partner-products/{tenantId}/{businessPartnerId}

path Parameters
tenantId
required
string
businessPartnerId
required
string <uuid>
Request Body schema: application/json
minOrder
number >= 0
productId
required
string <uuid>

Responses

Request samples

Content type
application/json
{
  • "minOrder": 0,
  • "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113"
}

Response samples

Content type
application/json
{
  • "cursors": {
    },
  • "msg": "Success",
  • "results": [
    ],
  • "status": 200
}

/api/v1/business-partner-products/{tenantId}/{businessPartnerId}/bulk

path Parameters
tenantId
required
string
businessPartnerId
required
string <uuid>
Request Body schema: application/json
createdAt
string
id
string <uuid>
required
Array of objects
updatedAt
string

Responses

Request samples

Content type
application/json
{
  • "createdAt": "string",
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "products": [
    ],
  • "updatedAt": "string"
}

Response samples

Content type
application/json
{
  • "cursors": {
    },
  • "msg": "Success",
  • "results": [
    ],
  • "status": 200
}

Purchase Orders

Purchase Orders API

Get list of purchase orders

path Parameters
tenantId
required
string
query Parameters
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

Responses

Response samples

Content type
application/json
{
  • "cursors": {
    },
  • "msg": "Success",
  • "results": [
    ],
  • "status": 200
}

Create new purchase order

path Parameters
tenantId
required
string
Request Body schema: application/json
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

Responses

Request samples

Content type
application/json
{
  • "active": true,
  • "businessPartner": {
    },
  • "createdAt": "string",
  • "deletedAt": "string",
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5",
  • "notes": "string",
  • "purchaseOrderNumber": "string",
  • "recipients": [],
  • "status": "draft",
  • "updatedAt": "string"
}

Response samples

Content type
application/json
{
  • "cursors": {
    },
  • "msg": "Success",
  • "results": [
    ],
  • "status": 200
}

Export purchase orders

path Parameters
tenantId
required
string
query Parameters
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

Responses

Response samples

Content type
application/json
{
  • "cursors": {
    },
  • "msg": "Success",
  • "results": [
    ],
  • "status": 200
}

Meta information about purchase orders

path Parameters
tenantId
required
string
query Parameters
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

Responses

Response samples

Content type
application/json
{
  • "cursors": {
    },
  • "msg": "Success",
  • "results": [
    ],
  • "status": 200
}

Delete purchase order

path Parameters
tenantId
required
string
purchaseOrderId
required
string <uuid>

Responses

Response samples

Content type
application/json
{
  • "cursors": {
    },
  • "msg": "Success",
  • "results": [
    ],
  • "status": 200
}

Get single purchase order

path Parameters
tenantId
required
string
purchaseOrderId
required
string <uuid>

Responses

Response samples

Content type
application/json
{
  • "cursors": {
    },
  • "msg": "Success",
  • "results": [
    ],
  • "status": 200
}

Update purchase order

path Parameters
tenantId
required
string
purchaseOrderId
required
string <uuid>
Request Body schema: application/json
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

Responses

Request samples

Content type
application/json
{
  • "active": true,
  • "businessPartner": {
    },
  • "createdAt": "string",
  • "deletedAt": "string",
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5",
  • "notes": "string",
  • "purchaseOrderNumber": "string",
  • "recipients": [],
  • "status": "draft",
  • "updatedAt": "string"
}

Response samples

Content type
application/json
{
  • "cursors": {
    },
  • "msg": "Success",
  • "results": [
    ],
  • "status": 200
}

Get purchase order pdf

path Parameters
tenantId
required
string
purchaseOrderId
required
string <uuid>

Responses

Response samples

Content type
application/json
{
  • "cursors": {
    },
  • "msg": "Success",
  • "results": [
    ],
  • "status": 200
}

Get purchase order email preview

path Parameters
tenantId
required
string
purchaseOrderId
required
string <uuid>

Responses

Response samples

Content type
application/json
{
  • "cursors": {
    },
  • "msg": "Success",
  • "results": [
    ],
  • "status": 200
}

Delete products from purchase order

path Parameters
tenantId
required
string
purchaseOrderId
required
string <uuid>
Request Body schema: application/json
products
required
Array of strings <uuid> non-empty

Responses

Request samples

Content type
application/json
{
  • "products": [
    ]
}

Response samples

Content type
application/json
{
  • "cursors": {
    },
  • "msg": "Success",
  • "results": [
    ],
  • "status": 200
}

Bulk upsert products into purchase order

path Parameters
tenantId
required
string
purchaseOrderId
required
string <uuid>
Request Body schema: application/json
required
Array of objects non-empty

Responses

Request samples

Content type
application/json
{
  • "products": [
    ]
}

Response samples

Content type
application/json
{
  • "cursors": {
    },
  • "msg": "Success",
  • "results": [
    ],
  • "status": 200
}

Delete product from purchase order

path Parameters
tenantId
required
string
productId
required
string <uuid>

Responses

Response samples

Content type
application/json
{
  • "cursors": {
    },
  • "msg": "Success",
  • "results": [
    ],
  • "status": 200
}

Update product in purchase order

path Parameters
tenantId
required
string
productId
required
string <uuid>
Request Body schema: application/json
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

Responses

Request samples

Content type
application/json
{
  • "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
}

Response samples

Content type
application/json
{
  • "cursors": {
    },
  • "msg": "Success",
  • "results": [
    ],
  • "status": 200
}

Send purchase order (set status SENT)

path Parameters
tenantId
required
string
Request Body schema: application/json
active
boolean
createdAt
string
deletedAt
string or null
id
string <uuid>
recipients
Array of strings <email>
replyToEmail
string <email>
updatedAt
string

Responses

Request samples

Content type
application/json
{
  • "active": true,
  • "createdAt": "string",
  • "deletedAt": "string",
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "recipients": [],
  • "replyToEmail": "[email protected]",
  • "updatedAt": "string"
}

Response samples

Content type
application/json
{
  • "cursors": {
    },
  • "msg": "Success",
  • "results": [
    ],
  • "status": 200
}

Notifications V1

Managing notifications about the products reaching a min stock level

Get notifications list

path Parameters
tenantId
required
string
query Parameters
start
string
end
string
limit
number
Default: 100
offset
number
Default: 0
orderFields
Array of strings
q
string

Responses

Response samples

Content type
application/json
{
  • "cursors": {
    },
  • "msg": "Success",
  • "results": [
    ],
  • "status": 200
}

Create new notification

path Parameters
tenantId
required
string
Request Body schema: application/json
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

Responses

Request samples

Content type
application/json
{
  • "active": true,
  • "channel": "email",
  • "createdAt": "string",
  • "criteria": {
    },
  • "deletedAt": "string",
  • "fallbackMinStock": 0,
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "lastSent": null,
  • "locations": [
    ],
  • "name": "string",
  • "nextRunAt": null,
  • "period": "daily",
  • "recipients": [],
  • "schedule": [
    ],
  • "startAt": null,
  • "updatedAt": "string"
}

Response samples

Content type
application/json
{
  • "cursors": {
    },
  • "msg": "Success",
  • "results": [
    ],
  • "status": 200
}

Get notifications list meta

path Parameters
tenantId
required
string
query Parameters
start
string
end
string
limit
number
Default: 100
offset
number
Default: 0
orderFields
Array of strings
q
string

Responses

Response samples

Content type
application/json
{
  • "cursors": {
    },
  • "msg": "Success",
  • "results": [
    ],
  • "status": 200
}

delete notification

path Parameters
tenantId
required
string
notificationId
required
string <uuid>

Responses

Response samples

Content type
application/json
{
  • "cursors": {
    },
  • "msg": "Success",
  • "results": [
    ],
  • "status": 200
}

get notification

path Parameters
tenantId
required
string
notificationId
required
string <uuid>

Responses

Response samples

Content type
application/json
{
  • "cursors": {
    },
  • "msg": "Success",
  • "results": [
    ],
  • "status": 200
}

update notification

path Parameters
tenantId
required
string
notificationId
required
string <uuid>
Request Body schema: application/json
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

Responses

Request samples

Content type
application/json
{
  • "active": true,
  • "channel": "email",
  • "createdAt": "string",
  • "criteria": {
    },
  • "deletedAt": "string",
  • "events": [
    ],
  • "fallbackMinStock": 0,
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "lastSent": null,
  • "locations": [
    ],
  • "name": "string",
  • "nextRunAt": null,
  • "period": "daily",
  • "recipients": [],
  • "schedule": [
    ],
  • "startAt": null,
  • "updatedAt": "string"
}

Response samples

Content type
application/json
{
  • "cursors": {
    },
  • "msg": "Success",
  • "results": [
    ],
  • "status": 200
}

Customers

Customer API.

Model

customers.create.v0 Webhook

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{}

customers.update.v0 Webhook

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{}

customers.delete.v0 Webhook

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{}

Bulk create Customers

Create many new customer of a user.

Generating Customer Numbers

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
path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
customer_number_template
string

the template which will be used to generate a customer number. This is stored as object inside the configuration

Request Body schema: application/json

Array of Simple Customers

Array
Any of
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

Responses

Request samples

Content type
application/json
[]

Response samples

Content type
application/json
{}

Create a Customer (DEPRECATED, use v1 instead) Deprecated

Create a new customer of a user.

Generating Customer Numbers

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
path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
customer_number_template
string

the template which will be used to generate a customer number. This is stored as object inside the configuration

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{}

Get all customers (DEPRECATED, use v1 instead) Deprecated

Query all customers

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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.

email
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 id and custom.id (which are aliased on the legacy route). It will default to custom.id on the legacy route

format
string
Enum: "csv" "csv_custom"

To get data in any other format then JSON straight away, you can set format=csv or format=csv_custom which will return csv table with only the customer_number, gender, firstname, lastname, email, newsletter

Responses

Request samples

import * as tillhub from '@tillhub/javascript-sdk'
const { data: customers } = await tillhub.customers().getAll({ deleted: false, limit: 50 })

Response samples

Content type
application/json
{}

Delete a single Customer Deprecated

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.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

customerID
required
string

Alphanumeric customer ID

Responses

Request samples

import * as tillhub from '@tillhub/javascript-sdk'
const { msg } = await tillhub.customers().delete('09ba6f6c-ecc4-4cdb-9cfa-0e1fdb3979a4')

Get a single customer (DEPRECATED, use v1 instead) Deprecated

Get a single customer object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

customerID
required
string

Alphanumeric customer ID

query Parameters
extended
boolean

embed extended fields

Responses

Request samples

import * as tillhub from '@tillhub/javascript-sdk'
const { data: customer } = await tillhub.customers().get('09ba6f6c-ecc4-4cdb-9cfa-0e1fdb3979a4')

Response samples

Content type
application/json
{}

Replace a Customer (DEPRECATED, use v1 instead) Deprecated

Replace an entire customer object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

customerID
required
string

Alphanumeric customer ID

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{}

Get Metadata of customers (DEPRECATED, use v1 instead) Deprecated

Get metadata of the customers model.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Request samples

tillhub.customers.meta.get((err, result) => {})

Checks if a customer number is unique (DEPRECATED, use v1 instead) Deprecated

Checks if a customer number is unique based on exsiting customer numbers

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
customer_number
required
string

the customer number to be checked

Responses

Request samples

tillhub.customers.get((err, result) => {})

Legacy: Get all Customers

Query all legacy customers

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 id and custom.id (which are aliased on the legacy route). It will default to custom.id on the legacy route

Responses

Request samples

tillhub.customers.legacy.get((err, result) => {})

Legacy: Get a single Customers

Get a single legacy customer object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

articleID
required
string

Alphanumeric configuration ID

Responses

Request samples

tillhub.customers.legacy.get((err, result) => {})

Create a Customer Note

Create a new customer note.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric customer ID

Request Body schema: application/json

Simple Note

type
required
string
Value: "text"
payload
required
string <= 16384 characters
string or (any or null)
string or (any or null)

Responses

Request samples

Content type
application/json
{
  • "type": "text",
  • "payload": "string",
  • "client_id": "string",
  • "date": "2019-08-24T14:15:22Z"
}

Response samples

Content type
application/json
{ }

Fuzzy Search Customers

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.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
q
required
string

the search string

Responses

Request samples

tillhub.customers.search.get((err, result) => {})

Flush search-index with all records from the database

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.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Request samples

tillhub.customers.search.get((err, result) => {})

Create elastic search indexes for Fuzzy Search Customers

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.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Request samples

tillhub.customers.search.get((err, result) => {})

Create a Customer

Create a new customer of a user.

Generating Customer Numbers

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
path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
customer_number_template
string

the template which will be used to generate a customer number. This is stored as object inside the configuration

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{}

Get all customers

Query all customers

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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.

email
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 format=csv which will return csv table with only the customer_number, gender, firstname, lastname, email, newsletter

Responses

Request samples

import * as tillhub from '@tillhub/javascript-sdk'
const { data: customers } = await tillhub.customersV1().getAll({ deleted: false, limit: 50 })

Response samples

Content type
application/json
{}

Delete a single Customer

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.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

customerID
required
string

Alphanumeric customer ID

Responses

Request samples

import * as tillhub from '@tillhub/javascript-sdk'
const { msg } = await tillhub.customersV1().delete('09ba6f6c-ecc4-4cdb-9cfa-0e1fdb3979a4')

Get a single customer

Get a single customer object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

customerID
required
string

Alphanumeric customer ID

query Parameters
extended
boolean

embed extended fields

Responses

Request samples

import * as tillhub from '@tillhub/javascript-sdk'
const { data: customer } = await tillhub.customersV1().get('09ba6f6c-ecc4-4cdb-9cfa-0e1fdb3979a4')

Response samples

Content type
application/json
{}

Replace a Customer

Replace an entire customer object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

customerID
required
string

Alphanumeric customer ID

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{}

Get Metadata of customers

Get metadata of the customers model.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Request samples

tillhub.customers.meta.get((err, result) => {})

Checks if a customer number is unique.

Checks if a customer number is unique based on existing customer numbers

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
customer_number
required
string

the customer number to be checked

Responses

Request samples

tillhub.customers.get((err, result) => {})

Get Metadata of vouchers bounded to customer

Get metadata of the vouchers bounded to customer model.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

customerID
required
string

Alphanumeric customer ID

Responses

Request samples

tillhub.customers.vouchers.meta.get((err, result) => {})

Get all vouchers bounded to customer

Query all vouchers bounded to customer

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

customerID
required
string

Alphanumeric customer ID

query Parameters
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 id and custom.id (which are aliased on the legacy route). It will default to custom.id on the legacy route

Responses

Request samples

tillhub.customers.vouchers.get((err, result) => {})

Fuzzy Search Customers

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.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Request samples

tillhub.customers.search.get((err, result) => {})

Create elastic search indexes for customers

Create elastic search indexes for customers from scratch.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Sync elastic search indexes for customers

Sync elastic search indexes for customers.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Recreate elastic search indexes for customers

Recreate elastic search indexes for customers. It will replace all indexes.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Get a single correspondence

Get a single correspondence object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric correspondence ID

Responses

Request samples

tillhub.correspondences.get((err, result) => {})

Images

The Images API.

Delete a single image

Delete a single image object.

path Parameters
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

Get a single image

Get a single image object.

path Parameters
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

Scale image and upload to Google storage

Scale an uploaded image into various sizes, then upload to Google Storage and return

path Parameters
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

Request Body schema: application/json

image file

any

Request samples

Content type
application/json
null

Scale image and upload to Google storage

Scale an uploaded image into various sizes, then upload to Google Storage and return

path Parameters
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

Request Body schema: application/json

image file

any

Request samples

Content type
application/json
null

Delete image with all its sizes

Delete image with all its sizes.

path Parameters
user
required
string

username of the client

subsystem
required
string

sub system of the image e.g. products, customers, branches

prefix
required
string

prefix of image title

Scale image and upload to Google storage

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

path Parameters
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

Request Body schema: application/json

image file

any

Request samples

Content type
application/json
null

Scale image and upload to Google storage

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

path Parameters
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

Request Body schema: application/json

image file

any

Request samples

Content type
application/json
null

Get a single image upload status

Get a single image status (whether uploaded already or not yet)

path Parameters
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

Get images from transaction

Get images from transaction

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

transactionId
required
string

Alphanumeric transaction ID

Responses

Update images for the transaction

Update images for the transaction

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

transactionId
required
string

Alphanumeric transaction ID

Request Body schema: application/json

image file at form field field named 'image'

any

Request samples

Content type
application/json
null

Update first image for the transaction

Update first image for the transaction

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

transactionId
required
string

Alphanumeric transaction ID

Request Body schema: application/json

Image file at form field field named 'image'

any

Request samples

Content type
application/json
null

Deletes images from transaction

Get images from transaction

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

transactionId
required
string

Alphanumeric transaction ID

Responses

Deletes images from transaction

Get images from transaction

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

transactionId
required
string

Alphanumeric transaction ID

index
required
number

Position of the image

Responses

Update images for the transaction

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.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

transactionId
required
string

Alphanumeric transaction ID

Request Body schema: application/json

image file at form field field named 'image'

any

Request samples

Content type
application/json
null

Update image with given index for the transaction

Update image with given index for the transaction

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

transactionId
required
string

Alphanumeric transaction ID

index
required
number

Position of the image

Request Body schema: application/json

Image file at form field field named 'image'

any

Request samples

Content type
application/json
null

Timetracking

The Timetracking API.

Hard or Soft Delete Time Entry

Hard or soft delete one time entry.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

timeEntryId
required
string

Alphanumeric ID of the time entry

query Parameters
purge
boolean
Default: false

Define whether to soft or hard delete

Responses

Get One Time Entry Item.

Get one time entry.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric ID of the time entry

Responses

Update a Time Entry Item

Update a Time Entry Item

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric ID of the time entry

Request Body schema: application/json

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.

Responses

Request samples

Content type
application/json
{
  • "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.

Get all time entries items.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Create a Time Entry Item

Create a time entry item

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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.

Responses

Request samples

Content type
application/json
{
  • "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"
}

Stop Time Entry Item

Stop Time Entry Item

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

timeEntryId
required
string

Alphanumeric ID of the time entry to stop

Responses

Get All Time Entries Items of a Staff Member.

Get all time entries items of a staff member.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric staff ID

query Parameters
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

Responses

Get Latest Staff's Time Entry.

Get Latest Staff's Time Entry.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric staff ID

query Parameters
type
required
string

The type of time entry, e.g. day or break

Responses

Get All Staff With Logged Time Entries.

Get all staff with logged time entries.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Audit Logs

The Audit Logs for Timetracking API.

Reports

The Reports for Timetracking API.

Get the time entries report of a Staff Member.

Get the time entries report of a staff member.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric staff ID of the user

query Parameters
start
string

a timestamp for filter starting period

end
string

a timestamp for filter ending period

Responses

Get Summary of a Staff's Time Entries.

Get Summary of a Staff's Time Entries.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric staff ID

query Parameters
started_at
string

a timestamp for filter starting period

ended_at
string

a timestamp for filter ending period

Responses

Get Summary of All Time Entries

Get Summary of All Time Entries.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
started_at
string

a timestamp for filter starting period

ended_at
string

a timestamp for filter ending period

Responses

Get the time sheet of a Staff Member.

Get the time sheet of a staff member.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric staff ID of the user

query Parameters
started_at
string

a timestamp for filter starting period

ended_at
string

a timestamp for filter ending period

Responses

Get the time sheet of All Staff Members

Get the time sheet of all Staff Members.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
started_at
string

a timestamp for filter starting period

ended_at
string

a timestamp for filter ending period

Responses

Configurations

The Configurations for Timetracking API.

Soft delete a single configuration

Soft delete a single configuration object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric configuration ID

Responses

Request samples

tillhub.timetracking.configurations.delete((err, result) => {})

Response samples

Content type
application/json
{
  • "status": 200,
  • "msg": "Deleted configuration 96341e35-0fe1-4b72-89bc-6f62e9114ac6",
  • "request": {
    }
}

Update configuration

Update an entire configuration object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric configuration ID

Request Body schema: application/json

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.

Responses

Request samples

Content type
application/json
{
  • "client_id": "string",
  • "active": true,
  • "deleted": false,
  • "auto_clock_out": false,
  • "auto_clock_out_after": {
    },
  • "auto_clock_out_at_midnight": false,
  • "auto_clock_out_at": "20:20:39+00:00"
}

Get all configurations

Query all configurations of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 false or true

active
string

the string representation of boolean values as false or true

Responses

Request samples

tillhub.timetracking.configurations.get((err, result) => {})

Create a configuration

Create a new configuration of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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.

Responses

Request samples

Content type
application/json
{
  • "client_id": "string",
  • "active": true,
  • "deleted": false,
  • "auto_clock_out": false,
  • "auto_clock_out_after": {
    },
  • "auto_clock_out_at_midnight": false,
  • "auto_clock_out_at": "20:20:39+00:00"
}

Get a single configuration

Get a single configuration object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric configuration ID

Responses

Request samples

tillhub.timetracking.configurations.get((err, result) => {})

Carts

The Carts API.

v1: Create a Cart

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
path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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.

Responses

Request samples

Content type
application/json
{
  • "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": [
    ],
  • "metadata": {
    },
  • "opened_at": "2022-02-19T00:00:00.001Z"
}

Response samples

Content type
application/json
{
  • "msg": "Queried transactions successfully.",
  • "msg_localised": "Abgefragte Transaktionen erfolgreich.",
  • "request": {},
  • "count": 1,
  • "results": [
    ]
}

v1: Get all Carts

Query all carts of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Request samples

import * as tillhub from '@tillhub/javascript-sdk'
const { data: carts } = await tillhub.carts().getAll({ done: false, limit: 50 })

Response samples

Content type
application/json
{
  • "msg": "Queried transactions successfully.",
  • "msg_localised": "Abgefragte Transaktionen erfolgreich.",
  • "request": {},
  • "count": 1,
  • "results": [
    ]
}

v1: Get Metadata of Carts

Get metadata of customer carts. All filters from carts list apply.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

v1: Get a single Cart

Get a single cart.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

cartID
required
string

Alphanumeric ID of the cart

query Parameters
embed
string
Value: "customer"

let the API embed a specified object

Responses

Request samples

import * as tillhub from '@tillhub/javascript-sdk'
const { data: cart } = await tillhub.carts().get('748aebef-1456-4dc7-8257-aa11304afa53')

Response samples

Content type
application/json
{
  • "msg": "Queried transactions successfully.",
  • "msg_localised": "Abgefragte Transaktionen erfolgreich.",
  • "request": {},
  • "count": 1,
  • "results": [
    ]
}

v1: Get the latest carts

Get the latest carts.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Request samples

import * as tillhub from '@tillhub/javascript-sdk'
const { data: carts } = await tillhub.carts().getLatest({ done: false, limit: 50 })

Response samples

Content type
application/json
{
  • "msg": "Queried transactions successfully.",
  • "msg_localised": "Abgefragte Transaktionen erfolgreich.",
  • "request": {},
  • "count": 1,
  • "results": [
    ]
}

Update cart

Update an entire cart object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric cart ID

Request Body schema: application/json

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.

Responses

Request samples

Content type
application/json
{
  • "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": [
    ],
  • "metadata": {
    },
  • "opened_at": "2022-02-19T00:00:00.001Z"
}

Response samples

Content type
application/json
{
  • "msg": "Queried transactions successfully.",
  • "msg_localised": "Abgefragte Transaktionen erfolgreich.",
  • "request": {},
  • "count": 1,
  • "results": [
    ]
}

v1: Update Carts to Status Done

Update a Cart status to DONE. The app will discard this carts.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

cartID
required
string

Cart ID

Request Body schema: application/json

to object to replace the cart with

done_at
string

Responses

Request samples

Content type
application/json
{
  • "done_at": "2018-05-07T14:35:52.626+02:00 If not set will be set automatically"
}

Response samples

Content type
application/json
{
  • "msg": "Queried transactions successfully.",
  • "msg_localised": "Abgefragte Transaktionen erfolgreich.",
  • "request": {},
  • "count": 1,
  • "results": [
    ]
}

v1: Update Carts to Status Undone

Update a Cart status to UNDONE.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

cartID
required
string

Cart ID

Responses

Request samples

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

Response samples

Content type
application/json
{
  • "msg": "Queried transactions successfully.",
  • "msg_localised": "Abgefragte Transaktionen erfolgreich.",
  • "request": {},
  • "count": 1,
  • "results": [
    ]
}

v1: Update Carts to Status open

Update a Cart status to open. If no date is specified in the request, it will default to now.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

cartID
required
string

Cart ID

Request Body schema: application/json

to object to replace the cart with

opened_at
string

Responses

Request samples

Content type
application/json
{
  • "opened_at": "2019-11-12T13:39:17.654Z"
}

Response samples

Content type
application/json
{
  • "msg": "Queried transactions successfully.",
  • "msg_localised": "Abgefragte Transaktionen erfolgreich.",
  • "request": {},
  • "count": 1,
  • "results": [
    ]
}

Authentication

The authentication API.

Generate Register Auth Token

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.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

registerNumber
required
string

Alphanumeric configuration ID

header Parameters
Authorization
required
string <jwt>

Bearer JWT token

Responses

Request samples

tillhub.registers.authenticate.legacy.post((err, result) => {})

Login with a user

Login with a user and receive a JWT token

Request Body schema: application/json

the email and password in a JSON body

email
required
string
password
required
string

Responses

Request samples

Content type
application/json
{}

Reset Password of a User

Reset the password of a user by sending and email to the user.

query Parameters
email
required
string

The email address of the user

Responses

Request samples

tillhub.login.get((err, result) => {})

v1: Login via API key

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

Request Body schema: application/json
id
required
string

a users legacy ID or ID

api_key
required
string

a sub users api_key property

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "api_key": "string"
}

v1: Login via User Credentials with Organisation

Sub users with email and password can login into an organisation

Request Body schema: application/json
organisation
required
string

the display name of the organisation

username
required
string

admin defined username

password
required
string

user defined password

Responses

Request samples

Content type
application/json
{
  • "organisation": "string",
  • "username": "string",
  • "password": "string"
}

v1: Login as Support Member

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).

Request Body schema: application/json
client_account
required
string

the uuid or legacy ID of that Tillhub client account

token
required
string

prerequested token

Responses

Request samples

Content type
application/json
{
  • "client_account": "string",
  • "token": "string"
}

Authorization

Authorization.

Tokens

The Tokens API.

Get all tokens

Query all tokens.

query Parameters
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 false or true

Responses

Request samples

tillhub.tokens.get((err, result) => {})

Get a single token

Get a single token object.

path Parameters
id
required
string

Alphanumeric token ID

Responses

Request samples

tillhub.tokens.get((err, result) => {})

Update token

Update a token object.

path Parameters
id
required
string

Alphanumeric tokens ID

Request Body schema: application/json

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.

Responses

Request samples

Content type
application/json
{
  • "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

Block a token object.

path Parameters
id
required
string

Alphanumeric token ID

Request Body schema: application/json

Simple token

string or (any or null)
Default: null
object or (any or null)
Default: null

Responses

Request samples

Content type
application/json
{
  • "block_reason": null,
  • "block_origin": null
}

Users

Manage users.

Create an API Key for an API user

Create an API Key for an API user

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

configurationID
required
string

Alphanumeric configuration ID

userID
required
string

Alphanumeric user ID

Responses

Request samples

tillhub.configurations.users.api.key.post((err, result) => {})

Soft delete a single user permission template

Soft delete a single user permission template object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric user permission template ID

Responses

Request samples

tillhub.user_permission_templates.delete((err, result) => {})

Response samples

Content type
application/json
{
  • "status": 200,
  • "msg": "Deleted user permission template 96341e35-0fe1-4b72-89bc-6f62e9114ac6",
  • "request": {
    }
}

Get a single user permission template

Get a single user permission template object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric user permission template ID

Responses

Request samples

tillhub.user_permission_templates.get((err, result) => {})

Update user permission template

Update an entire user permission template object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric user permission template ID

Request Body schema: application/json

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.

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "scopes": [
    ],
  • "client_id": "string",
  • "active": true,
  • "deleted": false
}

Get all user permission templates

Query all user permission templates of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 false or true

Responses

Request samples

tillhub.user_permission_templates.get((err, result) => {})

Create a user permission template

Create a new user permission template of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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.

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "scopes": [
    ],
  • "client_id": "string",
  • "active": true,
  • "deleted": false
}

Generate a User

Any client with sufficient authorization can create a user by providing an ID and email address.

Request Body schema: application/json

Simple User

id
string
email
string

Responses

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{}

Delete a User

Any client with sufficient authorization can delete a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
hard
boolean

hard delete a user or not, defaults to hard

Responses

Request samples

tillhub.users.delete((err, result) => {})

Response samples

Content type
application/json
{
  • "status": 200,
  • "msg": "Successfully deleted user {clientAccountID}."
}

Me

Get all data of a user as a user.

Responses

Request samples

tillhub.me.get((err, result) => {})

Me

Get specific user data, e.g. scopes, role, etc.

Responses

Request samples

tillhub.me.get((err, result) => {})

Response samples

Content type
application/json
{
  • "msg": "string",
  • "results": [
    ]
}

Client Accounts

Manage users and client accounts.

Get parent merchant's client account MMS data by its unit's unzerId

Get parent merchant's client account MMS data by its unit's unzerId.

path Parameters
unzerId
required
string

Alphanumeric unzerId of the unit

Responses

Request samples

tillhub.clients.get((err, result) => {})

Generate a User

Any client with sufficient authorization can create a user by providing an ID and email address.

Request Body schema: application/json

Simple User

id
string
email
string

Responses

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{}

Delete a User

Any client with sufficient authorization can delete a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
hard
boolean

hard delete a user or not, defaults to hard

Responses

Request samples

tillhub.users.delete((err, result) => {})

Response samples

Content type
application/json
{
  • "status": 200,
  • "msg": "Successfully deleted user {clientAccountID}."
}

Favourites

Favourites for the tiles.

Create a Favourite

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.

Request Body schema: application/json

Simple Favourite

metadata
object
Array of objects

Responses

Request samples

Content type
application/json
{
  • "metadata": { },
  • "tabs": [
    ]
}

Response samples

Content type
application/json
{
  • "status": 200,
  • "msg": "Favourite added."
}

Get all favourites

Query all favourites of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Request samples

tillhub.favourites.get((err, result) => {})

Delete a single Favourite

Delete a single favourite object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

favouriteID
required
string

Alphanumeric favourite ID

Responses

Request samples

tillhub.favourites.delete((err, result) => {})

Get a single Favourite

Get a single favourite object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

favouriteID
required
string

Alphanumeric favourite ID

Responses

Request samples

tillhub.favourites.get((err, result) => {})

Update Favourite Entirely

Update a whole favourite object by replacing its mutable properties.

Responses

Request samples

tillhub.favourites.put((err, result) => {})

Get all Prodcts from Favourite

Get all products from favourite object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

favouriteID
required
string

Alphanumeric favourite ID

Responses

Request samples

tillhub.favourites.products.get((err, result) => {})

Get all Articles from Favourite Product Set

Get all articles from favourite object products set.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

favouriteID
required
string

Alphanumeric favourite ID

Responses

Request samples

tillhub.favourites.products.articles.get((err, result) => {})

Get all Products from Favourite

Get all products from favourite object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

favouriteID
required
string

Alphanumeric favourite ID

Responses

Request samples

tillhub.favourites.products.get((err, result) => {})

Branches

Manage branches. See Locations for more information.

Model

Soft delete a single branch group

Soft delete a single branch group object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric branch_groups ID

Responses

Request samples

tillhub.branch_groups.delete((err, result) => {})

Response samples

Content type
application/json
{
  • "status": 200,
  • "msg": "Deleted branch_groups 96341e35-0fe1-4b72-89bc-6f62e9114ac6",
  • "request": {
    }
}

Update Branch Group

Update an entire branch group object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric branch group ID

Request Body schema: application/json

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.

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string",
  • "color": "string",
  • "branches": [
    ],
  • "client_id": "string",
  • "active": true,
  • "deleted": false,
  • "available_in_online_booking": true
}

Get all Branch Groups

Query all branch groups of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 false or true

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)

Responses

Request samples

tillhub.branch_groups.get((err, result) => {})

Create a Branch Group

Create a new branch group of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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.

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string",
  • "color": "string",
  • "branches": [
    ],
  • "client_id": "string",
  • "active": true,
  • "deleted": false,
  • "available_in_online_booking": true
}

Create a Branch

Create a new branch of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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.

Responses

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{}

Delete a single Branch

Delete a single branch object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

accountID
required
string

Alphanumeric branch ID

Responses

Request samples

import * as tillhub from '@tillhub/javascript-sdk'
const { data: branch } = await tillhub.branches().delete('3e35cf30-e61c-4570-b8b5-5161ee9b1470')

Get Metadata of Branches

Get metadata of the Branches model.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
total
string
Enum: "true" "false"

Return the total count of branches

Responses

Request samples

import * as tillhub from '@tillhub/javascript-sdk'
const { data: meta } = await tillhub.branches().count()

Get a single Branch

Get a single branch object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

branchID
required
string

Alphanumeric branch ID

Responses

Request samples

import * as tillhub from '@tillhub/javascript-sdk'
const { data: branch } = await tillhub.branches().get('0b99513a-6d97-4111-88db-81e930611656')

Response samples

Content type
application/json
{}

Replace a Branch

Replace an entire branch object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

branchID
required
string

Alphanumeric branch ID

Request Body schema: application/json

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.

Responses

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{}

Tell if a provided external_custom_id is unique or not.

Tell if a provided external_custom_id is unique or not.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
provided_id
string

external_custom_id provided by the user

Responses

Request samples

tillhub.branches.external_id.get((err, result) => {})

Generic Search Branches

Make a generic search query for branches on the name, number, addresses.street, addresses.locality, and addresses.postal_code fields as a string.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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).

Responses

Request samples

import * as tillhub from '@tillhub/javascript-sdk'
const { data: branches } = await tillhub.branches().search('flagship')

Get Metadata of Branches

Get metadata of the Branches model.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
total
string
Enum: "true" "false"

Return the total count of branches

Responses

Request samples

import * as tillhub from '@tillhub/javascript-sdk'
const { data: meta } = await tillhub.branchesV1().meta()

Get all Branches

Query all branches of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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]

Responses

Request samples

import * as tillhub from '@tillhub/javascript-sdk'
const { data: branches } = await tillhub.branchesV1().getAll({ deleted: false, limit: 50 })

Response samples

Content type
application/json
{}

Staff

The Staff API

Defining configuration parameters of staff objects

Permissions

Roles

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

Transaction System

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

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

Balances

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

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

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

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

Selections

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

Registers

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

Settings

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

Analytics

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

Products and Articles

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

Customers

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

Vouchers

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

Miscellaneous

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



Model

Soft delete a single staff_groups

Soft delete a single staff_groups object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric staff_groups ID

Responses

Request samples

tillhub.staff_groups.delete((err, result) => {})

Response samples

Content type
application/json
{
  • "status": 200,
  • "msg": "Deleted staff_groups 96341e35-0fe1-4b72-89bc-6f62e9114ac6",
  • "request": {
    }
}

Update staff_groups

Update an entire staff_groups object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric staff_groups ID

Request Body schema: application/json

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.

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string",
  • "staffs": [
    ],
  • "client_id": "string",
  • "active": true,
  • "deleted": false
}

Get all Staff Groups

Query all staff groups of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
deleted
string

the string representation of boolean values as false or true

q
string

this will text search by staff group name, with a partial match

Responses

Request samples

tillhub.staff_groups.get((err, result) => {})

Create a staff_groups

Create a new staff_groups of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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.

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string",
  • "staffs": [
    ],
  • "client_id": "string",
  • "active": true,
  • "deleted": false
}

Soft delete a single Staff Permission Template

Soft delete a single staff permission template object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric staff_permission_templates ID

Responses

Request samples

tillhub.staff_permission_templates.delete((err, result) => {})

Response samples

Content type
application/json
{
  • "status": 200,
  • "msg": "Deleted staff_permission_templates 96341e35-0fe1-4b72-89bc-6f62e9114ac6",
  • "request": {
    }
}

Get a single staff_permission_templates

Get a single staff_permission_templates object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric staff_permission_templates ID

Responses

Request samples

tillhub.staff_permission_templates.get((err, result) => {})

Update a Staff Permission Template

Update an entire staff permission template object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric staff_permission_templates ID

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "scopes": [
    ],
  • "active": true,
  • "deleted": false
}

Get all Staff Permission Templates

Query all staff permission templates of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 false or true

Responses

Request samples

tillhub.staff_permission_templates.get((err, result) => {})

Create a Staff Permission Template

Create a new staff permission template of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "scopes": [
    ],
  • "active": true,
  • "deleted": false
}

Create a Staff Member

Create a new staff member of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "firstname": "string",
  • "lastname": "string",
  • "displayname": "string",
  • "phonenumbers": {
    },
  • "email": "[email protected]",
  • "staff_number": "string",
  • "password": "string",
  • "pin": "string",
  • "date_of_birth": "2019-08-24T14:15:22Z",
  • "gender": "male",
  • "images": {},
  • "scopes": [
    ],
  • "staff_permission_template_id": "string",
  • "active": true,
  • "deleted": false,
  • "metadata": { },
  • "addresses": [
    ],
  • "comment": "string",
  • "discounts": [
    ],
  • "short_code": "string",
  • "locations": [
    ],
  • "branch_groups": [
    ],
  • "default": true,
  • "owner": false,
  • "external_reference_id": "string",
  • "calendar_color": "strings",
  • "individual_reservation_times": true,
  • "individual_work_plan": [
    ],
  • "services": [
    ]
}

Response samples

Content type
application/json
{
  • "firstname": "string",
  • "lastname": "string",
  • "displayname": "string",
  • "phonenumbers": {
    },
  • "email": "[email protected]",
  • "staff_number": "string",
  • "password": "string",
  • "pin": "string",
  • "date_of_birth": "2019-08-24T14:15:22Z",
  • "gender": "male",
  • "images": {},
  • "scopes": [
    ],
  • "staff_permission_template_id": "string",
  • "active": true,
  • "deleted": false,
  • "metadata": { },
  • "addresses": [
    ],
  • "comment": "string",
  • "discounts": [
    ],
  • "short_code": "string",
  • "locations": [
    ],
  • "branch_groups": [
    ],
  • "default": true,
  • "owner": false,
  • "external_reference_id": "string",
  • "calendar_color": "strings",
  • "individual_reservation_times": true,
  • "individual_work_plan": [
    ],
  • "services": [
    ]
}

Get all Staff Members

Query all staff members of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 false or true

active
string

the string representation of boolean values as false or true

staff_number
string

the staff number as filter

lastname
string

the lastname as filter

firstname
string

the firstname as filter

email
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 false or true to return only default/not default staff

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 false or true to return staff with connected user or not

Responses

Request samples

tillhub.staff.get((err, result) => {})

Delete a single Staff Member

Delete a single staff member.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

staffID
required
string

Alphanumeric staff ID

Responses

Request samples

tillhub.staff.delete((err, result) => {})

Get a single Staff Member

Get a single staff member.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

staffID
required
string

Alphanumeric staff ID

Responses

Request samples

tillhub.staff.get((err, result) => {})

Replace a Staff Member

Replace an entire staff member.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

staffID
required
string

Alphanumeric staff ID

Request Body schema: application/json

Simple Account

Any of
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

Responses

Request samples

Content type
application/json
{
  • "firstname": "string",
  • "lastname": "string",
  • "displayname": "string",
  • "phonenumbers": {
    },
  • "email": "[email protected]",
  • "staff_number": "string",
  • "password": "string",
  • "pin": "string",
  • "date_of_birth": "2019-08-24T14:15:22Z",
  • "gender": "male",
  • "images": {},
  • "scopes": [
    ],
  • "staff_permission_template_id": "string",
  • "active": true,
  • "deleted": false,
  • "metadata": { },
  • "addresses": [
    ],
  • "comment": "string",
  • "discounts": [
    ],
  • "short_code": "string",
  • "locations": [
    ],
  • "branch_groups": [
    ],
  • "default": true,
  • "owner": false,
  • "external_reference_id": "string",
  • "calendar_color": "strings",
  • "individual_reservation_times": true,
  • "individual_work_plan": [
    ],
  • "services": [
    ]
}

Gets a random pin number

Generate a random pin number or determines if the provided pin is valid.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
provided_pin
string

pin provided by the user

pin_length
string

pin length for the generator

Responses

Request samples

tillhub.staff.get((err, result) => {})

Gets a unique staff number

Generate a unique staff number or determines if the provided staff number is unique based on existing staff numbers.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
provided_staff_number
string

staff_number provided by the user

Responses

Request samples

tillhub.staff.get((err, result) => {})

Make staff a user

Connect a staff member with a specific user

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

Simple Account

any

Responses

Request samples

Content type
application/json
null

Generic Search Staffs

Make a generic search query for staffs on the name field as a string.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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).

Responses

Request samples

tillhub.staff.search.get((err, result) => {})

Get all Services of a staff member

Query all services of a staff member.

path Parameters
staffId
required
string

Alphanumeric ID of the staff member

clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Request samples

tillhub.staff.get((err, result) => {})

Get all Staff Members

Query all staff members of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 false or true

active
string

the string representation of boolean values as false or true

staff_number
string

the staff number as filter

lastname
string

the lastname as filter

firstname
string

the firstname as filter

email
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 false or true to return only default/not default staff

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 false or true to return staff with connected user or not

Responses

Request samples

import * as tillhub from '@tillhub/javascript-sdk'
const { data: staffs } = await tillhub.staffV1().getAll({ deleted: false, limit: 50 })

Response samples

Content type
application/json
{
  • "firstname": "string",
  • "lastname": "string",
  • "displayname": "string",
  • "phonenumbers": {
    },
  • "email": "[email protected]",
  • "staff_number": "string",
  • "password": "string",
  • "pin": "string",
  • "date_of_birth": "2019-08-24T14:15:22Z",
  • "gender": "male",
  • "images": {},
  • "scopes": [
    ],
  • "staff_permission_template_id": "string",
  • "active": true,
  • "deleted": false,
  • "metadata": { },
  • "addresses": [
    ],
  • "comment": "string",
  • "discounts": [
    ],
  • "short_code": "string",
  • "locations": [
    ],
  • "branch_groups": [
    ],
  • "default": true,
  • "owner": false,
  • "external_reference_id": "string",
  • "calendar_color": "strings",
  • "individual_reservation_times": true,
  • "individual_work_plan": [
    ],
  • "services": [
    ]
}

Get meta data for Staff Members

Query meta data staff members of a user. Query string params are exactly the same as for staff members list.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Devices

The Devices API.

Soft delete a single device_groups

Soft delete a single device_groups object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric device_groups ID

Responses

Request samples

tillhub.device_groups.delete((err, result) => {})

Response samples

Content type
application/json
{
  • "status": 200,
  • "msg": "Deleted device_groups 96341e35-0fe1-4b72-89bc-6f62e9114ac6",
  • "request": {
    }
}

Update device_groups

Update an entire device_groups object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric device_groups ID

Request Body schema: application/json

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.

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string",
  • "devices": [
    ],
  • "client_id": "string",
  • "active": true,
  • "deleted": false
}

Get all device_groups

Query all device_groups of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 false or true

Responses

Request samples

tillhub.device_groups.get((err, result) => {})

Create a device_groups

Create a new device_groups of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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.

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string",
  • "devices": [
    ],
  • "client_id": "string",
  • "active": true,
  • "deleted": false
}

Sub Users

Al delegated users of an user.

Create a Sub-User of Configuration

Create a new sub-user of a configuration of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

configurationID
required
string

Alphanumeric configuration ID

Request Body schema: application/json

Simple Sub-User

metadata
object
Array of objects

Responses

Request samples

Content type
application/json
{
  • "metadata": { },
  • "tabs": [
    ]
}

Response samples

Content type
application/json
{
  • "status": 200,
  • "msg": "Configuration added."
}

Get all Sub-Users of a Configuration

Query all sub-users in a configuration of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Request samples

tillhub.configurations.users.get((err, result) => {})

Delete a single Sub-User of a Configuration

Delete a single sub-user of a configuration object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

configurationID
required
string

Alphanumeric favourite ID

userID
required
string

Alphanumeric user ID

Responses

Request samples

tillhub.configurations.users.delete((err, result) => {})

Get a single Sub-User of Configuration

Get a single sub-user of configuration object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

configurationID
required
string

Alphanumeric configuration ID

userID
required
string

Alphanumeric user ID

Responses

Request samples

tillhub.configurations.users.get((err, result) => {})

Update Sub-User of Configuration Entirely

Update a whole sub-user of a configuration object by replacing its mutable properties.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

configurationID
required
string

Alphanumeric configuration ID

userID
required
string

Alphanumeric user ID

Request Body schema: application/json

Simple Sub-User

metadata
object
Array of objects

Responses

Request samples

Content type
application/json
{
  • "metadata": { },
  • "tabs": [
    ]
}

Configurations

The configurations API

Description

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.

Configuration Inheritance

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
}

Objects

Following the available objects:

configurations.metadata

Containing metadata like undrelated information, or dumped information not used by any client

configurations.registers

[]

Currently unsupported.

configurations.branches

[]

Currently unsupported.

configurations.owner

varchar:

self

Currently available options: self, other. Defines which configuration is used by the register on account level.

configurations.vouchers

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
      }
    ]
  }
}

configurations.scan_prefixes

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"
  }
]

configurations.voucher_actions

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
  }
 }
]

configurations.settings

Defining general settings of the account as:

  • multi VAT behavior
  • language
  • online shop url (currently unsuported)
  • dashboard url
  • zedas_url (currently unsuported)
  • invoice_id (legacy & currently unsuported) --> for more information regarding invoice printing, see payment_options
  • templater_url (legacy & currently unsuported)
  • fleurop_voucher (legacy & currently unsuported)
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"
}

configurations.themes

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"
        }
    }
}

configurations.hooks

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]"
  }
]

configurations.products

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"
      }
    }
  ]
}

configurations.customers

{
    "customer_add_policy": "before",
    "customer_number_type": "franchise",
    "auto_customer_number_enabled": false
}

configurations.staff

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
}

configurations.franchise

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"
}

configurations.financials

Currently unsuported.

[]

configurations.taxes

Currently unsuported.

{
  "type": "inclusive" // whether tax will be calculated from gross or net ('exclusive'). This is necessary in the US, as opposed to Europe
}

configurations.transactions

.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"
 }
}

configurations.features

Currently unsuported.

[]

configurations.stock

Drives behaviour of the stock management system

{
  "stock_mode": "never_out_of_stock",
  "stock_notification_channel": "email",
  "stock_notification_default_recipient": "[email protected]"
}

configurations.saved_cart

Feature configuration of saved_carts.

{
  "enabled": true
}

configurations.crm

Feature configuration of crm. Currently unsuported

{}

configurations.datev

Feature configuration of datev. Currently unsuported

{
  "enabled": true
}

configurations.label_printer

Feature configuration of label printing. Currently unsuported

{
  "enabled": true
}

configurations.delivery_note

Feature configuration of delivery note.

{
  "enabled": true
}

configurations.shore

Feature configuration of shore implementations (not connected to shore synch config in hooks) Currently unsuported

{
  "enabled": true
}

configurations.togo

Feature configuration of to go feature. Currently configured in settings.

{
  "enabled": true
}

configurations.receipts

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"]
  }
}

configurations.cart

Feature configuration of cart behaviour.

{
  "wipe_confirmation": true
}



Create a Configuration

Create a new configuration of a user.

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "configurations": { },
  • "vouchers": {
    },
  • "scan_prefixes": { },
  • "voucher_actions": { },
  • "expenses_deposits": {
    },
  • "countings": {
    },
  • "time_tracking": {},
  • "settings": { },
  • "hooks": [
    ],
  • "themes": {
    },
  • "name": { },
  • "client_id": { },
  • "metadata": { },
  • "registers": { },
  • "branches": { },
  • "owner": "string",
  • "franchise": { },
  • "staff": {
    },
  • "financials": { },
  • "features": {
    },
  • "gastro": {
    },
  • "stock": { },
  • "transactions": {
    },
  • "products": { },
  • "customers": { },
  • "saved_cart": { },
  • "crm": { },
  • "datev": { },
  • "label_printer": { },
  • "delivery_note": { },
  • "shore": { },
  • "togo": { },
  • "receipts": {
    },
  • "orders": { },
  • "carts": {
    },
  • "tips": { },
  • "emails": { },
  • "communications": { },
  • "level": "client_account",
  • "taxes": { },
  • "analytics": {
    },
  • "interfaces": { },
  • "custom_dashboards": { },
  • "deliveries": { },
  • "validations": {
    },
  • "payments": { },
  • "balances": { },
  • "integrations": {
    },
  • "discounts": { },
  • "clients": {
    },
  • "widgets": { },
  • "reservations": { },
  • "searches": { },
  • "custom_properties": { },
  • "ui_configurations": {
    },
  • "created_at": "2019-03-17T21:12:04.849Z",
  • "updated_at": "2019-03-17T21:12:04.849Z",
  • "warehub": {
    },
  • "tenant": { },
  • "onboarding": { },
  • "reports": { }
}

Response samples

Content type
application/json
{ }

Get all Configurations

Query all configurations of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Request samples

tillhub.configurations.get((err, result) => {})

Delete a single Configuration

Delete a single configuration object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

configurationID
required
string

Alphanumeric favourite ID

Responses

Request samples

tillhub.configurations.delete((err, result) => {})

Get a single Configuration

Get a single configuration object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

configurationID
required
string

Alphanumeric configuration ID

Responses

Request samples

tillhub.configurations.get((err, result) => {})

Replace a Configuration

Replace an entire configurations object.

The fields will be validated very strictly. The following fields are mutable, and with their type:

  • name: string
  • client_id: string
  • metadata: object
  • configurations: object
path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

configurationID
required
string

Alphanumeric favourite ID

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "configurations": { },
  • "vouchers": {
    },
  • "scan_prefixes": { },
  • "voucher_actions": { },
  • "expenses_deposits": {
    },
  • "countings": {
    },
  • "time_tracking": {},
  • "settings": { },
  • "hooks": [
    ],
  • "themes": {
    },
  • "name": { },
  • "client_id": { },
  • "metadata": { },
  • "registers": { },
  • "branches": { },
  • "owner": "string",
  • "franchise": { },
  • "staff": {
    },
  • "financials": { },
  • "features": {
    },
  • "gastro": {
    },
  • "stock": { },
  • "transactions": {
    },
  • "products": { },
  • "customers": { },
  • "saved_cart": { },
  • "crm": { },
  • "datev": { },
  • "label_printer": { },
  • "delivery_note": { },
  • "shore": { },
  • "togo": { },
  • "receipts": {
    },
  • "orders": { },
  • "carts": {
    },
  • "tips": { },
  • "emails": { },
  • "communications": { },
  • "level": "client_account",
  • "taxes": { },
  • "analytics": {
    },
  • "interfaces": { },
  • "custom_dashboards": { },
  • "deliveries": { },
  • "validations": {
    },
  • "payments": { },
  • "balances": { },
  • "integrations": {
    },
  • "discounts": { },
  • "clients": {
    },
  • "widgets": { },
  • "reservations": { },
  • "searches": { },
  • "custom_properties": { },
  • "ui_configurations": {
    },
  • "created_at": "2019-03-17T21:12:04.849Z",
  • "updated_at": "2019-03-17T21:12:04.849Z",
  • "warehub": {
    },
  • "tenant": { },
  • "onboarding": { },
  • "reports": { }
}

Update a Configuration by Field

Update specific configuration fields.

The fields will be validated very strictly. The following fields are mutable, and with their type:

  • name: string
  • client_id: string
  • metadata: object
path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

configurationID
required
string

Alphanumeric favourite ID

Request Body schema: application/json

Simple Configuration

object

Responses

Request samples

Content type
application/json
{ }

Legacy: Get all Configurations

Query all legacy configurtions of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Request samples

tillhub.configurations.legacy.get((err, result) => {})

Get Configurations from a resource node

Query a resource node configurations of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

resource
required
string

Configuration resource. e.g. account, branch or register

query Parameters
owner
required
string

UUID of the owner resource or self

Responses

Request samples

tillhub.configurations.node.get((err, result) => {})

Get the Configuration for the default branch

Get a configuration object for the default branch.

path Parameters
organization
required
string

Alphanumeric name of the organization

Responses

Request samples

tillhub.configurations.get((err, result) => {})

Analytics

The Analytics API.

Get the Revenue for Days of Week

Get the revenue for days of week

Sunday = 0, Monday = 1, Tuesday = 2, Wednesday = 3, Thrusday = 4, Firday = 5, Saturday = 6

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Request samples

tillhub.analytics.aggregates.revenues.day_of_week.get((err, result) => {})

Get the Sum of Today's Revenues

Get the sum of today's revenues.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Request samples

tillhub.analytics.aggregates.revenues.day.get((err, result) => {})

Get a Grouped Revenue in a Time Range

Get a grouped revenue in a time range.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

groupBy
required
string

model to group by, allowed are: product_group_number, product_number

query Parameters
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

Responses

Request samples

tillhub.analytics.aggregates.revenues.groups.get((err, result) => {})

Get a Grouped Revenue in a Time Range as Sum

Get a grouped revenue in a time range as sum.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

groupBy
required
string

model to group by, allowed are: product_group_number, product_number

query Parameters
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

Responses

Request samples

tillhub.analytics.aggregates.revenues.groups.get((err, result) => {})

Get the Revenue and Qty for Hours of Day

Get the revenue and qty for hours of day

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Request samples

tillhub.analytics.aggregates.revenues.hour_of_day.get((err, result) => {})

Get the Revenue in a Time Range as Sum

Get the revenue in a time range as sum.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Request samples

tillhub.analytics.aggregates.revenues.get((err, result) => {})

Get the Sales in a Time Range

Get the sales in a time range.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Request samples

tillhub.analytics.aggregates.sales.get((err, result) => {})

Get the Sales in a Time Range as Sum

Get the sales in a time range as sum.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Request samples

tillhub.analytics.aggregates.sales.get((err, result) => {})

Soft Delete a Single Analytics Snapshot

Soft delete a single analytics snapshot object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric snapshots ID

Responses

Request samples

tillhub.snapshots.delete((err, result) => {})

Response samples

Content type
application/json
{
  • "status": 200,
  • "msg": "Deleted snapshots 96341e35-0fe1-4b72-89bc-6f62e9114ac6",
  • "request": {
    }
}

Get all Analytics Snapshots

Query all analytics snapshots of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 false or true

limit
integer

the discrete limit, that will default to 500

Responses

Request samples

tillhub.snapshots.get((err, result) => {})

Create a Analytics Snapshot

Create a new analytics snapshots of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

Simple snapshots

any

Responses

Request samples

Content type
application/json
null

reports

The Reports API.

Get Transaction Data Grouped By Product Groups

Query Transaction Data Grouped By Product Groups

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Request samples

tillhub.analytics.aggregates.product_groups.get((err, result) => {})

Get All Balances

Get all balances. This endpoint is paged on 1000 objects

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 date_closing, 'created_at' and date. It will default to date in case of legacy query and to 'date_closing' in case of non-legacy query. To indicate the sorting order, add a + or - for asc/desc order, e.g. %2Bdate.

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 format=csv.

Responses

Request samples

tillhub.balances.get((err, result) => {})

Get One Balance

Get One balances.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

balanceID
required
string

the uuid balance ID

query Parameters
legacy
boolean

flags to us legacy table fr_balance

currency
required
string

specify which currency the item is in

Responses

Request samples

tillhub.balances.get((err, result) => {})

Response samples

Content type
application/json
{
  • "msg": "Queried transactions successfully.",
  • "msg_localised": "Abgefragte Transaktionen erfolgreich.",
  • "request": {},
  • "count": 1,
  • "results": [
    ]
}

Get Metadata of Balances

Get metadata of the balances model.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Request samples

tillhub.balances.meta.get((err, result) => {})

Get the Cashbook in a Time Range

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.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 format=csv. Currently CSV is the only supported type

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.

Type Description
default Captures transactions and balances in an automated window.,That is, start includes the balance the first balance of the day, but only if the balance has not been in use in transactions the past day. end includes the last balance of the day and fetches the the balance of the next day, if transactions of that window day use it.,All in all this report will try to achieve a more a less "work" day.
balance_to_balance Captures the balances and transactions of a window day and returns a page for each and every balance time distance. That is, if a balance start to end time distance is large than one day, we will display it in the UI, but will not take any action data wise.

Responses

Request samples

tillhub.analytics.reports.dashBook.get((err, result) => {})

Get the Cashier Counting Protocols in a Time Range

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.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 format=csv. Currently CSV is the only supported type

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.

Responses

Request samples

tillhub.analytics.reports.cashier_counting_protocols.get((err, result) => {})

Get Customer cart items information

report of customer and associated revenue, in order to quickly identify my most valuable customers and customer groups

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
format
string

to get data in any other format then JSON straight away, you can set format=csv. Currently CSV is the only supported type

Responses

Request samples

tillhub.analytics.reports.journal.get((err, result) => {})

Get Metadata of customers

Get metadata of the customers model.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Request samples

tillhub.customers.meta.get((err, result) => {})

Get Customer cart items overview information

report of customer and associated revenue, in order to quickly identify my most valuable customers and customer groups

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
currency
string

ISO currency code

customerId
required
string

customer ID

Responses

Request samples

tillhub.analytics.reports.journal.get((err, result) => {})

Get the most recent 3 transactions

report of customer and associated revenue, in order to quickly identify my most valuable customers and customer groups

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
currency
string

ISO currency code

customerId
required
string

customer ID

Responses

Request samples

tillhub.analytics.reports.journal.get((err, result) => {})

Get Customer cart items information

report of customer and associated revenue, in order to quickly identify my most valuable customers and customer groups

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
format
string

to get data in any other format then JSON straight away, you can set format=csv. Currently CSV is the only supported type

Responses

Request samples

tillhub.analytics.reports.journal.get((err, result) => {})

Gets aggregated balance for French market NF525 format

Aggregated balance closing the period (month or year) after previous period with the same type is closed

path Parameters
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

query Parameters
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

Responses

Response samples

Content type
application/json
{
  • "status": 200,
  • "msg": "Aggregated balance calculated successfully",
  • "request": {
    },
  • "results": [
    ]
}

Get Cart Action on a Transaction Level

Get Transaction Data Per Line Item Sold

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 format=csv. Currently CSV is the only supported type

target
string

to get goBD format, you can set target=gobd. Currently goBD is the only supported type

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.

Responses

Request samples

tillhub.analytics.reports.journal.get((err, result) => {})

Gets All Payment Options

Gets all payment options total amount and quantity for transactions

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
cursor_field
string

which column to cursor on. To indicate the sorting order, add a + or - for asc/desc order, e.g. %2Bname.

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 format=csv.

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.

Responses

Request samples

tillhub.balances.get((err, result) => {})

Get Metadata of Payment Options

Get metadata of the Payment Options model.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
legacy
boolean

flags to us legacy table fr_balance

branch_number
string

branch number

legacy
boolean

flags to us legacy table fr_transaction_payment

Responses

Request samples

tillhub.balances.meta.get((err, result) => {})

Gets All Payment Options

Gets all payment options total amount and quantity for transactions

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
cursor_field
string

which column to cursor on. To indicate the sorting order, add a + or - for asc/desc order, e.g. %2Bname.

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 format=csv.

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.

Responses

Request samples

tillhub.balances.get((err, result) => {})

Get a Simple List of Sales in Range

Get a simple list of sales in range.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 format=csv. Currently CSV is the only supported type

Responses

Request samples

tillhub.analytics.aggregates.sales.get((err, result) => {})

Get a List of Payments

Get a list of payments.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
context_locations
string

Context locations used to filter transactions

Responses

Request samples

tillhub.analytics.reports.payments.get((err, result) => {})

Get Metadata of Payments

Get metadata of the payments model.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
legacy
boolean

flags to us legacy table fr_transaction

Responses

Request samples

tillhub.payments.meta.get((err, result) => {})

Get Top Payments

Get top payments data.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Get a List of Payments

Get a list of payments.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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.

Responses

Request samples

tillhub.analytics.reports.payments.get((err, result) => {})

Get List of filter options

gets the list from the table to use for search filter options

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
column
required
string

column name

type
string

Specifies the kind of filter to be returned can be "list" or "range"

Responses

Request samples

tillhub.analytics.reportss.product_groups.filters.get((err, result) => {})

Get Cart According to Products Group

Get Transaction Data Per Products Group

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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.

Responses

Request samples

tillhub.analytics.reports.product_groups.get((err, result) => {})

Get Cart According to Products

Get Transaction Data Per Products

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Request samples

tillhub.analytics.reports.journal.get((err, result) => {})

Children per Per Product Number

Get Transaction Data Per Products

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

productNumber
required
string

Product number

query Parameters
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

Responses

Request samples

tillhub.analytics.reports.journal.get((err, result) => {})

Get Top Products

Get top products data.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Get Cart According to Products

Get Transaction Data Per Products

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Request samples

tillhub.analytics.reports.journal.get((err, result) => {})

Get Cart According to Products

Get Transaction Data Per Products

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Request samples

tillhub.analytics.reports.journal.get((err, result) => {})

Get Transaction Data Per Staff

Get Transaction Data Per Staff

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Request samples

tillhub.analytics.reports.staff.overview.get((err, result) => {})

Get Payments Data Per Staff

Query payments for staff.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Request samples

tillhub.analytics.reports.staff.payments.get((err, result) => {})

Get Transaction Data Grouped By Product Groups Per All Staff

Query Transaction Data Grouped By Product Groups Per All Staff

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
context_locations
string

The context locations id used to filter transactions

Responses

Request samples

tillhub.analytics.reports.staff.get((err, result) => {})

Get Transaction Data Grouped By Product Groups Per One Staff Member

Query Transaction Data Grouped By Product Groups Per One Staff Member

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

staffID
required
string

Alphanumeric staff ID

Responses

Request samples

tillhub.analytics.reports.staff.product_groups.get((err, result) => {})

Get Transaction Data Grouped By Products Per All Staff

Query Transaction Data Grouped By Products Per All Staff

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
context_locations
string

The context locations id used to filter transactions

Responses

Request samples

tillhub.analytics.reports.staff.get((err, result) => {})

Get Transaction Data Grouped By Products Per One Staff Member

Query Transaction Data Grouped By Products Per One Staff Member

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

staffID
required
string

Alphanumeric staff ID

Responses

Request samples

tillhub.analytics.reports.staff.products.get((err, result) => {})

Get Refunds Data Grouped By Payment Method for All Staff

Query Refunds Data Grouped By Payment Method for All Staff

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Request samples

tillhub.analytics.reports.staff.refunds.get((err, result) => {})

Get Refunds Data Grouped By Payment Method for One Staff Member

Query Refunds Data Grouped By Payment Method for One Staff Member

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

staffID
required
string

Alphanumeric staff ID

Responses

Request samples

tillhub.analytics.reports.staff.refunds.get((err, result) => {})

Sales within a product group per staff and branch

Query Sales within a product group per staff and branch

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 format=csv.

Responses

Request samples

curl 'https://api.tillhub.com/api/v1/analytics/58b4ff3f-73dd-4712-a732-388127a52217/reports/staff/sales' \
-H 'authorization: Bearer ***' \

Get Stocks Data

Query Stocks Data

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Request samples

tillhub.analytics.reports.stocks.get((err, result) => {})

Get Stocks Data

Query Stocks Data

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Request samples

tillhub.analytics.reports.stocks.get((err, result) => {})

Get Stocks Data

Query Stocks Data

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
branch_group
string | string[]

filter by branches within branch group. Not applied if branch_number parameter received.

Responses

Request samples

tillhub.analytics.reports.stocks.get((err, result) => {})

Returns transactions report

Returns transactions report providing detailed information over particular period of time.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Request samples

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'
})

Response samples

Content type
application/json
{
  • "msg": "Queried transactions successfully.",
  • "msg_localised": "Abgefragte Transaktionen erfolgreich.",
  • "request": {},
  • "count": 1,
  • "results": [
    ]
}

Get VAT Data

Query VAT Data

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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.

Responses

Request samples

tillhub.analytics.reports.vat.get((err, result) => {})

Get Metadata of Payments

Get metadata of the vat model.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
legacy
boolean

flags to us legacy table fr_transaction

Responses

Request samples

tillhub.vat.meta.get((err, result) => {})

Get VAT Data

Query VAT Data

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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.

Responses

Request samples

tillhub.analytics.reports.vat.get((err, result) => {})

Get list of all the voucher transactions sub-users have made

Get vouchers data

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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)

Responses

Request samples

tillhub.analytics.reports.vouchers.get((err, result) => {})

Get list of all the voucher transactions sub-users have made

Get vouchers data

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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)

Responses

Request samples

tillhub.analytics.reports.vouchers.get((err, result) => {})

Audits

The Audits API.

Get all audit actions

Query all audit actions with optional filter for audit action type and embedding of more information

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 created_at and date. It will default to date. To indicate the sorting order, add a + or - for asc/desc order, e.g. %2Bdate.

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

Responses

Request samples

tillhub.audit_actions.get((err, result) => {})

Get a single audit action

Get a single audit action object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

actionId
required
string

Alphanumeric configuration ID

Responses

Request samples

tillhub.audit_actions.get((err, result) => {})

Response samples

Content type
application/json
{ }

Get Metadata of Audits

Get metadata of the Audits model.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Request samples

tillhub.audits.actions.meta.get((err, result) => {})

Get types data of Audits

Get types data of the Audits model.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Request samples

tillhub.audits.actions.types.get((err, result) => {})

Store Auditable User Actions

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

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

a list of user actions.

required
Array of objects

Responses

Request samples

Content type
application/json
{
  • "actions": [
    ]
}

Get all audit logs

Query all audit logs with optional filter for audit log type and embedding of more information

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 created_at. To indicate the sorting order, add a + or - for asc/desc order, e.g. %2Bdcreated_at.

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 format=csv. Currently CSV is the only supported type

Responses

Request samples

tillhub.audit_logs.get((err, result) => {})

Response samples

Content type
application/json
{}

Get a single audit log

Get a single audit log object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

logId
required
string

Alphanumeric configuration ID

Responses

Request samples

tillhub.audit_logs.get((err, result) => {})

Response samples

Content type
application/json
{ }

Get Metadata of Audits

Get metadata of the Audits model.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Request samples

tillhub.audits.logs.meta.get((err, result) => {})

Get all audit logs

Query all audit logs with optional filter for audit log type and embedding of more information

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 created_at. To indicate the sorting order, add a + or - for asc/desc order, e.g. %2Bdcreated_at.

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 format=csv. Currently CSV is the only supported type

Responses

Request samples

tillhub.audit_logs.get((err, result) => {})

Response samples

Content type
application/json
{}

Get Metadata of Stocks Book

Get metadata of the Stocks Book model.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Request samples

tillhub.audits.meta.get((err, result) => {})

Exports

The Exports API.

Get GOBD Report

Get GOBD report with the transaction data (csv) and the accompanying description (xml) in one zip file

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

the client name that is supposed to appear in the xml description file

string

Responses

Request samples

Content type
application/json
"string"

Exports GOBD Report

Exports GOBD report with the transaction data (csv) and the accompanying description (xml) in one zip file

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
"string"

fiscalisation

Uploads a TSE export TAR file

Uploads an Epson TSE export TAR file

path Parameters
clientAccountID
required
string

Alphanumeric client account ID

exportID
required
string

Alphanumeric export ID

Request Body schema: application/json

TSE export TAR file binary at form field named 'file'

any

Responses

Request samples

Content type
application/json
null

Response samples

Content type
application/json
{
  • "msg": "Queried transactions successfully.",
  • "msg_localised": "Abgefragte Transaktionen erfolgreich.",
  • "request": {},
  • "count": 1,
  • "results": [
    ]
}

Reads all TSE exports

path Parameters
clientAccountID
required
string

Alphanumeric client account ID

query Parameters
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

Responses

Request samples

tillhub.tse_exports.get((err, result) => {})

Response samples

Content type
application/json
{
  • "msg": "Queried transactions successfully.",
  • "msg_localised": "Abgefragte Transaktionen erfolgreich.",
  • "request": {},
  • "count": 1,
  • "results": [
    ]
}

Creates a TSE export

Creates an Epson TSE export data entry

path Parameters
clientAccountID
required
string

Alphanumeric client account ID

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "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": {
    }
}

Response samples

Content type
application/json
{
  • "msg": "Queried transactions successfully.",
  • "msg_localised": "Abgefragte Transaktionen erfolgreich.",
  • "request": {},
  • "count": 1,
  • "results": [
    ]
}

Get metadata of TSE exports

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Request samples

tillhub.tse_exports.meta.get((err, result) => {})

Get the latest tse state from a specific register and TSE

Get the latest tse state from a specific register and TSE.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

registerId
required
string

Alphanumeric register uuid

query Parameters
tse_serial_number
string

Alphanumeric tse serial number

Responses

Request samples

tillhub.tse_states.get((err, result) => {})

Create a tse state

Create a new tse state of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

registerID
required
string

Alphanumeric register

Request Body schema: application/json

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.

Responses

Request samples

Content type
application/json
{
  • "client_id": "string",
  • "raw_data": { },
  • "date": "2019-03-17T21:12:04.849Z",
  • "context": "manual",
  • "tse_serial_number": "string"
}

Core

Core API utilties.

Model

Get System Health

Returns a health message

Responses

Request samples

tillhub.healthz.get((err, result) => {})

Get System Versions

Returns the versions of the services

Responses

Request samples

tillhub.versions.get((err, result) => {})

Get System Health

Returns a health message

Responses

Request samples

tillhub.healthz.get((err, result) => {})

Customers

Customer API.

Model

customers.create.v0 Webhook

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{}

customers.update.v0 Webhook

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{}

customers.delete.v0 Webhook

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{}

Bulk create Customers

Create many new customer of a user.

Generating Customer Numbers

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
path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
customer_number_template
string

the template which will be used to generate a customer number. This is stored as object inside the configuration

Request Body schema: application/json

Array of Simple Customers

Array
Any of
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

Responses

Request samples

Content type
application/json
[]

Response samples

Content type
application/json
{}

Create a Customer (DEPRECATED, use v1 instead) Deprecated

Create a new customer of a user.

Generating Customer Numbers

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
path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
customer_number_template
string

the template which will be used to generate a customer number. This is stored as object inside the configuration

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{}

Get all customers (DEPRECATED, use v1 instead) Deprecated

Query all customers

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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.

email
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 id and custom.id (which are aliased on the legacy route). It will default to custom.id on the legacy route

format
string
Enum: "csv" "csv_custom"

To get data in any other format then JSON straight away, you can set format=csv or format=csv_custom which will return csv table with only the customer_number, gender, firstname, lastname, email, newsletter

Responses

Request samples

import * as tillhub from '@tillhub/javascript-sdk'
const { data: customers } = await tillhub.customers().getAll({ deleted: false, limit: 50 })

Response samples

Content type
application/json
{}

Delete a single Customer Deprecated

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.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

customerID
required
string

Alphanumeric customer ID

Responses

Request samples

import * as tillhub from '@tillhub/javascript-sdk'
const { msg } = await tillhub.customers().delete('09ba6f6c-ecc4-4cdb-9cfa-0e1fdb3979a4')

Get a single customer (DEPRECATED, use v1 instead) Deprecated

Get a single customer object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

customerID
required
string

Alphanumeric customer ID

query Parameters
extended
boolean

embed extended fields

Responses

Request samples

import * as tillhub from '@tillhub/javascript-sdk'
const { data: customer } = await tillhub.customers().get('09ba6f6c-ecc4-4cdb-9cfa-0e1fdb3979a4')

Response samples

Content type
application/json
{}

Replace a Customer (DEPRECATED, use v1 instead) Deprecated

Replace an entire customer object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

customerID
required
string

Alphanumeric customer ID

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{}

Get Metadata of customers (DEPRECATED, use v1 instead) Deprecated

Get metadata of the customers model.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Request samples

tillhub.customers.meta.get((err, result) => {})

Checks if a customer number is unique (DEPRECATED, use v1 instead) Deprecated

Checks if a customer number is unique based on exsiting customer numbers

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
customer_number
required
string

the customer number to be checked

Responses

Request samples

tillhub.customers.get((err, result) => {})

Legacy: Get all Customers

Query all legacy customers

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 id and custom.id (which are aliased on the legacy route). It will default to custom.id on the legacy route

Responses

Request samples

tillhub.customers.legacy.get((err, result) => {})

Legacy: Get a single Customers

Get a single legacy customer object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

articleID
required
string

Alphanumeric configuration ID

Responses

Request samples

tillhub.customers.legacy.get((err, result) => {})

Create a Customer Note

Create a new customer note.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric customer ID

Request Body schema: application/json

Simple Note

type
required
string
Value: "text"
payload
required
string <= 16384 characters
string or (any or null)
string or (any or null)

Responses

Request samples

Content type
application/json
{
  • "type": "text",
  • "payload": "string",
  • "client_id": "string",
  • "date": "2019-08-24T14:15:22Z"
}

Response samples

Content type
application/json
{ }

Fuzzy Search Customers

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.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
q
required
string

the search string

Responses

Request samples

tillhub.customers.search.get((err, result) => {})

Flush search-index with all records from the database

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.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Request samples

tillhub.customers.search.get((err, result) => {})

Create elastic search indexes for Fuzzy Search Customers

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.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Request samples

tillhub.customers.search.get((err, result) => {})

Create a Customer

Create a new customer of a user.

Generating Customer Numbers

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
path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
customer_number_template
string

the template which will be used to generate a customer number. This is stored as object inside the configuration

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{}

Get all customers

Query all customers

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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.

email
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 format=csv which will return csv table with only the customer_number, gender, firstname, lastname, email, newsletter

Responses

Request samples

import * as tillhub from '@tillhub/javascript-sdk'
const { data: customers } = await tillhub.customersV1().getAll({ deleted: false, limit: 50 })

Response samples

Content type
application/json
{}

Delete a single Customer

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.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

customerID
required
string

Alphanumeric customer ID

Responses

Request samples

import * as tillhub from '@tillhub/javascript-sdk'
const { msg } = await tillhub.customersV1().delete('09ba6f6c-ecc4-4cdb-9cfa-0e1fdb3979a4')

Get a single customer

Get a single customer object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

customerID
required
string

Alphanumeric customer ID

query Parameters
extended
boolean

embed extended fields

Responses

Request samples

import * as tillhub from '@tillhub/javascript-sdk'
const { data: customer } = await tillhub.customersV1().get('09ba6f6c-ecc4-4cdb-9cfa-0e1fdb3979a4')

Response samples

Content type
application/json
{}

Replace a Customer

Replace an entire customer object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

customerID
required
string

Alphanumeric customer ID

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{}

Get Metadata of customers

Get metadata of the customers model.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Request samples

tillhub.customers.meta.get((err, result) => {})

Checks if a customer number is unique.

Checks if a customer number is unique based on existing customer numbers

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
customer_number
required
string

the customer number to be checked

Responses

Request samples

tillhub.customers.get((err, result) => {})

Get Metadata of vouchers bounded to customer

Get metadata of the vouchers bounded to customer model.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

customerID
required
string

Alphanumeric customer ID

Responses

Request samples

tillhub.customers.vouchers.meta.get((err, result) => {})

Get all vouchers bounded to customer

Query all vouchers bounded to customer

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

customerID
required
string

Alphanumeric customer ID

query Parameters
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 id and custom.id (which are aliased on the legacy route). It will default to custom.id on the legacy route

Responses

Request samples

tillhub.customers.vouchers.get((err, result) => {})

Fuzzy Search Customers

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.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Request samples

tillhub.customers.search.get((err, result) => {})

Create elastic search indexes for customers

Create elastic search indexes for customers from scratch.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Sync elastic search indexes for customers

Sync elastic search indexes for customers.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Recreate elastic search indexes for customers

Recreate elastic search indexes for customers. It will replace all indexes.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Get a single correspondence

Get a single correspondence object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric correspondence ID

Responses

Request samples

tillhub.correspondences.get((err, result) => {})

Regions

The Regions API.

Soft delete a single Region

Soft delete a single Region object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric Region ID

Responses

Request samples

tillhub.regions.delete((err, result) => {})

Response samples

Content type
application/json
{
  • "status": 200,
  • "msg": "Deleted region 96341e35-0fe1-4b72-89bc-6f62e9114ac6",
  • "request": {
    }
}

Get a single region

Get a single region object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric region ID

Responses

Request samples

tillhub.regions.get((err, result) => {})

Update region

Update an entire region object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric region ID

Request Body schema: application/json

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.

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string",
  • "countries": [
    ],
  • "states": [
    ],
  • "zipcodes": [
    ],
  • "nielsen": [
    ],
  • "nielsen_micro": [
    ],
  • "client_id": "string",
  • "active": true,
  • "deleted": false
}

Get all regions

Query all regions of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 false or true

Responses

Request samples

tillhub.regions.get((err, result) => {})

Create a region

Create a new region of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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.

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string",
  • "countries": [
    ],
  • "states": [
    ],
  • "zipcodes": [
    ],
  • "nielsen": [
    ],
  • "nielsen_micro": [
    ],
  • "client_id": "string",
  • "active": true,
  • "deleted": false
}

Correspondences

The Correspondences API.

Get all correspondences

Query all correspondences of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 id and custom.id (which are aliased on the legacy route). It will default to custom.id on the legacy route

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

Responses

Request samples

tillhub.correspondences.get((err, result) => {})

Create a correspondence

Create a new correspondence of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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)

Responses

Request samples

Content type
application/json
{
  • "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 correspondence

Update an entire correspondence object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric correspondence ID

Request Body schema: application/json

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)

Responses

Request samples

Content type
application/json
{
  • "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"
}

Products

The core products API.

Model

products.create.v0 Webhook

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "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": {
    }
}

products.update.v0 Webhook

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "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": {
    }
}

v1: Book stock for a Product, V1

Book stock for product of a user at a specific location.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

productID
required
string

Alphanumeric configuration ID

Request Body schema: application/json
qty
required
number
location
required
string <uuid>

Responses

Request samples

Content type
application/json
{
  • "qty": 0,
  • "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5"
}

Response samples

Content type
application/json
{ }

v1: Update a branch customization for product

Update a branch customization for product

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric ID of customization

Request Body schema: application/json

Customization details

One of
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

Responses

Request samples

Content type
application/json
{
  • "product": "e0588024-d851-42d5-ab9f-1b664ef352d4",
  • "name": "string",
  • "branches": [
    ],
  • "branch_groups": [
    ],
  • "description": "string",
  • "summary": "string",
  • "default_tile_color": "string",
  • "active": true,
  • "deleted": false
}

Response samples

Content type
application/json
{ }

v1: Get list of customizations for product

Get list of customizations for product

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric ID of customization

query Parameters
product
string

uuid of product

active
string

the string representation of boolean values as false or true

deleted
string

the string representation of boolean values as false or true

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

Responses

v1: Create a branch customization for product

Create a branch customization for product

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

Customization details

One of
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

Responses

Request samples

Content type
application/json
{
  • "product": "e0588024-d851-42d5-ab9f-1b664ef352d4",
  • "name": "string",
  • "branches": [
    ],
  • "branch_groups": [
    ],
  • "description": "string",
  • "summary": "string",
  • "default_tile_color": "string",
  • "active": true,
  • "deleted": false
}

Response samples

Content type
application/json
{ }

v1: Create multiple Products

Creates multiple product objects.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
prefer_update
string
Enum: "true" "false"

If product with given 'custom_id' already exists update it instead of creating new one

Request Body schema: application/json

Array of Products

Array
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 linked and embedded (full product schema)

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

Responses

Request samples

Content type
application/json
[
  • {
    }
]

v1: Replace multiple Products

Replace multiple product objects. Its always override unless its specifically supported.

path Parameters
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.

Request Body schema: application/json

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.

Array
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 linked and embedded (full product schema)

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)

Responses

Request samples

Content type
application/json
[
  • {
    }
]

v1: Copy a Product

Copy a product. Note that if the original product has children then its children will also be copied as children of the new product.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

productID
required
string

Alphanumeric ID of the product to be copied

Request Body schema: application/json

Product properties to be override e.g. custom_id

One of
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 linked and embedded (full product schema)

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

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "summary": "string",
  • "description": "string",
  • "attributes": {
    },
  • "parent": "string",
  • "options": [
    ],
  • "children": [
    ],
  • "tags": [
    ],
  • "linked_products": [
    ],
  • "prices": {
    },
  • "barcodes": [
    ],
  • "barcode": "string",
  • "sku": "string",
  • "stock_minimum": 0,
  • "stock_maximum": 0,
  • "reorder_point": 0,
  • "reorder_qty": 0,
  • "min_stock": [
    ],
  • "sellable": true,
  • "purchasable": true,
  • "stockable": true,
  • "discountable": true,
  • "linkable": false,
  • "metadata": { },
  • "audiences": [
    ],
  • "keywords": [
    ],
  • "categories": [
    ],
  • "custom_ids": { },
  • "related_to": [
    ],
  • "similar_to": [
    ],
  • "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": [
    ],
  • "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": {
    },
  • "supplier": {
    },
  • "locations": [
    ],
  • "branch_groups": [
    ],
  • "condition": "string",
  • "images": {
    },
  • "insert_id": 0,
  • "product_group": "string",
  • "delegated_to": [
    ],
  • "client_id": "string",
  • "external_reference_id": "string",
  • "default_tile_color": "string",
  • "codes": null,
  • "stock_mode": "simple",
  • "stock_configuration_location": [
    ],
  • "is_service": true,
  • "service_questions": [
    ],
  • "service_question_groups": [
    ],
  • "addon_groups": [
    ],
  • "configuration": {
    },
  • "loyalty_values": [
    ],
  • "manufacturers": [
    ],
  • "components": [
    ],
  • "delegatable": true,
  • "online": false,
  • "serial_number_input_required": false,
  • "shipping_required": true,
  • "delegatable_to": [
    ],
  • "delegated_from": {
    },
  • "warranty_notice": "string",
  • "refund_policy": "string",
  • "disclaimer": "string",
  • "policy": {
    },
  • "external_ids": [
    ],
  • "custom_properties": { },
  • "stock_info": {
    },
  • "i18n": {
    }
}

Response samples

Content type
application/json
{
  • "msg": "Queried transactions successfully.",
  • "msg_localised": "Abgefragte Transaktionen erfolgreich.",
  • "request": {},
  • "count": 1,
  • "results": [
    ]
}

v1: Create a Product, V1

Create a new product of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

Simple or Extended Product

One of
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 linked and embedded (full product schema)

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

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "summary": "string",
  • "description": "string",
  • "attributes": {
    },
  • "parent": "string",
  • "options": [
    ],
  • "children": [
    ],
  • "tags": [
    ],
  • "linked_products": [
    ],
  • "prices": {
    },
  • "barcodes": [
    ],
  • "barcode": "string",
  • "sku": "string",
  • "stock_minimum": 0,
  • "stock_maximum": 0,
  • "reorder_point": 0,
  • "reorder_qty": 0,
  • "min_stock": [
    ],
  • "sellable": true,
  • "purchasable": true,
  • "stockable": true,
  • "discountable": true,
  • "linkable": false,
  • "metadata": { },
  • "audiences": [
    ],
  • "keywords": [
    ],
  • "categories": [
    ],
  • "custom_ids": { },
  • "related_to": [
    ],
  • "similar_to": [
    ],
  • "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": [
    ],
  • "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": {
    },
  • "supplier": {
    },
  • "locations": [
    ],
  • "branch_groups": [
    ],
  • "condition": "string",
  • "images": {
    },
  • "insert_id": 0,
  • "product_group": "string",
  • "delegated_to": [
    ],
  • "client_id": "string",
  • "external_reference_id": "string",
  • "default_tile_color": "string",
  • "codes": null,
  • "stock_mode": "simple",
  • "stock_configuration_location": [
    ],
  • "is_service": true,
  • "service_questions": [
    ],
  • "service_question_groups": [
    ],
  • "addon_groups": [
    ],
  • "configuration": {
    },
  • "loyalty_values": [
    ],
  • "manufacturers": [
    ],
  • "components": [
    ],
  • "delegatable": true,
  • "online": false,
  • "serial_number_input_required": false,
  • "shipping_required": true,
  • "delegatable_to": [
    ],
  • "delegated_from": {
    },
  • "warranty_notice": "string",
  • "refund_policy": "string",
  • "disclaimer": "string",
  • "policy": {
    },
  • "external_ids": [
    ],
  • "custom_properties": { },
  • "stock_info": {
    },
  • "i18n": {
    }
}

Response samples

Content type
application/json
{
  • "msg": "Queried transactions successfully.",
  • "msg_localised": "Abgefragte Transaktionen erfolgreich.",
  • "request": {},
  • "count": 1,
  • "results": [
    ]
}

v1: Get all Products

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.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 id and custom.id (which are aliased on the legacy route). It will default to custom.id on the legacy route

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 format=csv.

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

Responses

Request samples

tillhub.products.get((err, result) => {})

Response samples

Content type
application/json
{
  • "msg": "Queried transactions successfully.",
  • "msg_localised": "Abgefragte Transaktionen erfolgreich.",
  • "request": {},
  • "count": 1,
  • "results": [
    ]
}

v1: Create a Product, V1

Create a new product customization of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

Simple or Extended Product

One of
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)

Responses

Request samples

Content type
application/json
{
  • "product": "e0588024-d851-42d5-ab9f-1b664ef352d4",
  • "customer": "0ac6320b-fa4d-4235-8d23-413a2b863bad",
  • "name": "string",
  • "summary": "string",
  • "description": "string",
  • "attributes": { },
  • "prices": {
    },
  • "metadata": { },
  • "brand": "string",
  • "active": true,
  • "deleted": false,
  • "supplier": {
    },
  • "locations": [
    ],
  • "condition": "string",
  • "images": {
    },
  • "client_id": "string",
  • "external_reference_id": "string",
  • "service_questions": [
    ],
  • "loyalty_values": [
    ]
}

Response samples

Content type
application/json
{ }

v1: Get all Product Customizations

Query all product customizations

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 id and custom.id (which are aliased on the legacy route). It will default to custom.id on the legacy route

deleted
string

the string representation of boolean values as false or true

active
string

the string representation of boolean values as false or true

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

Responses

v1: Get a single Product Customization

Get a single product customization object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

productCustomizationID
required
string

Alphanumeric configuration ID

query Parameters
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

Responses

Request samples

tillhub.products.get((err, result) => {})

v1: Replace a Product Customization

Replace an entire product customization object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

productCustomiztionID
required
string

Alphanumeric product ID

Request Body schema: application/json

Simple Product Customization

One of
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)

Responses

Request samples

Content type
application/json
{
  • "product": "e0588024-d851-42d5-ab9f-1b664ef352d4",
  • "customer": "0ac6320b-fa4d-4235-8d23-413a2b863bad",
  • "name": "string",
  • "summary": "string",
  • "description": "string",
  • "attributes": { },
  • "prices": {
    },
  • "metadata": { },
  • "brand": "string",
  • "active": true,
  • "deleted": false,
  • "supplier": {
    },
  • "locations": [
    ],
  • "condition": "string",
  • "images": {
    },
  • "client_id": "string",
  • "external_reference_id": "string",
  • "service_questions": [
    ],
  • "loyalty_values": [
    ]
}

v1: Delete a single Product

Delete a single product object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

productID
required
string

Alphanumeric product ID

query Parameters
delete_dependencies
string
Value: "true"

Soft delete all products that have this product as parent

Responses

Request samples

tillhub.products.delete((err, result) => {})

v1: Get a single Product

Get a single product object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

productID
required
string

Alphanumeric configuration ID

query Parameters
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

Responses

Request samples

tillhub.products.get((err, result) => {})

Response samples

Content type
application/json
{
  • "msg": "Queried transactions successfully.",
  • "msg_localised": "Abgefragte Transaktionen erfolgreich.",
  • "request": {},
  • "count": 1,
  • "results": [
    ]
}

v1: Replace a Product

Replace an entire product object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

productID
required
string

Alphanumeric product ID

Request Body schema: application/json

Simple or Extended Product

One of
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 linked and embedded (full product schema)

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

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "summary": "string",
  • "description": "string",
  • "attributes": {
    },
  • "parent": "string",
  • "options": [
    ],
  • "children": [
    ],
  • "tags": [
    ],
  • "linked_products": [
    ],
  • "prices": {
    },
  • "barcodes": [
    ],
  • "barcode": "string",
  • "sku": "string",
  • "stock_minimum": 0,
  • "stock_maximum": 0,
  • "reorder_point": 0,
  • "reorder_qty": 0,
  • "min_stock": [
    ],
  • "sellable": true,
  • "purchasable": true,
  • "stockable": true,
  • "discountable": true,
  • "linkable": false,
  • "metadata": { },
  • "audiences": [
    ],
  • "keywords": [
    ],
  • "categories": [
    ],
  • "custom_ids": { },
  • "related_to": [
    ],
  • "similar_to": [
    ],
  • "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": [
    ],
  • "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": {
    },
  • "supplier": {
    },
  • "locations": [
    ],
  • "branch_groups": [
    ],
  • "condition": "string",
  • "images": {
    },
  • "insert_id": 0,
  • "product_group": "string",
  • "delegated_to": [
    ],
  • "client_id": "string",
  • "external_reference_id": "string",
  • "default_tile_color": "string",
  • "codes": null,
  • "stock_mode": "simple",
  • "stock_configuration_location": [
    ],
  • "is_service": true,
  • "service_questions": [
    ],
  • "service_question_groups": [
    ],
  • "addon_groups": [
    ],
  • "configuration": {
    },
  • "loyalty_values": [
    ],
  • "manufacturers": [
    ],
  • "components": [
    ],
  • "delegatable": true,
  • "online": false,
  • "serial_number_input_required": false,
  • "shipping_required": true,
  • "delegatable_to": [
    ],
  • "delegated_from": {
    },
  • "warranty_notice": "string",
  • "refund_policy": "string",
  • "disclaimer": "string",
  • "policy": {
    },
  • "external_ids": [
    ],
  • "custom_properties": { },
  • "stock_info": {
    },
  • "i18n": {
    }
}

Response samples

Content type
application/json
{
  • "msg": "Queried transactions successfully.",
  • "msg_localised": "Abgefragte Transaktionen erfolgreich.",
  • "request": {},
  • "count": 1,
  • "results": [
    ]
}

v1: Duplicate products, V1

Duplicate products of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

Product IDs

productIds
required
Array of strings <uuid> non-empty

Responses

Request samples

Content type
application/json
{
  • "productIds": [
    ]
}

Response samples

Content type
application/json
{
  • "msg": "Queried transactions successfully.",
  • "msg_localised": "Abgefragte Transaktionen erfolgreich.",
  • "request": {},
  • "count": 1,
  • "results": [
    ]
}

Get all products (light)

Query all products (light)

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Request samples

tillhub.products.light.get((err, result) => {})

Get all products (light)

Query all products (light)

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Request samples

tillhub.products.light.get((err, result) => {})

v1: Get details of a single Product

Get details of a single product object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

productID
required
string

Alphanumeric configuration ID

query Parameters
stock
string
Default: "true"
Enum: "true" "false"

Include stock information

branch
string
original_product
boolean
Default: false

If true, don't serve customization

Responses

Request samples

tillhub.products.get((err, result) => {})

v1: Get the details of all children of a product

Get the details of all children of a product

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

productID
required
string

Alphanumeric configuration ID

query Parameters
stock
string
Default: "true"
Enum: "true" "false"

Include stock information

branch
string
original_product
boolean
Default: false

If true, don't serve customization

Responses

Request samples

tillhub.products.get((err, result) => {})

v1: Get all children of a product

Get all children of a product

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

productID
required
string

Alphanumeric configuration ID

Responses

Request samples

tillhub.products.get((err, result) => {})

v1: Get Metadata of Products

Get metadata of the products model.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Request samples

tillhub.products.meta.get((err, result) => {})

v1: Import all Products with limited information

Query all products and receive limited information

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 id and custom.id (which are aliased on the legacy route). It will default to custom.id on the legacy route

deleted
string

the string representation of boolean values as false or true

active
string

the string representation of boolean values as false or true

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

Responses

Request samples

tillhub.products.get((err, result) => {})

Check if a barcode is unique.

Check if a barcode is unique by checking if it's mentioned in any of the codes data in the products.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
code
required
string

new barcode from the user

Responses

Request samples

tillhub.branches.barcode.get((err, result) => {})

Checks if a custom id is unique.

Checks if a custom id is unique based on exsiting product custom ids

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
custom_id
required
string

the product custom id to be checked

Responses

Request samples

tillhub.products.get((err, result) => {})

v1: Get metadata for price and stock by location of a single Product

Get metadata for price and stock by location of a single Product

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

productID
required
string

Alphanumeric configuration ID

query Parameters
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 false or true for returning the total count of branches

Responses

v1: Get price and stock by location of a single Product

Get price and stock by location of a single Product

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

productID
required
string

Alphanumeric configuration ID

query Parameters
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 name, qty and price. To indicate the sorting order, add a + or - for asc/desc order, e.g. %2Bdname.

limit
integer

the discrete limit, that will default to 1000 on the legacy route

Responses

v1: Update a Product by Field

Update specific product fields.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

productId
required
string

Alphanumeric product ID

Request Body schema: application/json

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 linked and embedded (full product schema)

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

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "summary": "string",
  • "description": "string",
  • "attributes": {
    },
  • "parent": "string",
  • "options": [
    ],
  • "children": [
    ],
  • "tags": [
    ],
  • "linked_products": [
    ],
  • "prices": {
    },
  • "barcodes": [
    ],
  • "barcode": "string",
  • "sku": "string",
  • "stock_minimum": 0,
  • "stock_maximum": 0,
  • "reorder_point": 0,
  • "reorder_qty": 0,
  • "min_stock": [
    ],
  • "sellable": true,
  • "purchasable": true,
  • "stockable": true,
  • "discountable": true,
  • "linkable": false,
  • "metadata": { },
  • "audiences": [
    ],
  • "keywords": [
    ],
  • "categories": [
    ],
  • "custom_ids": { },
  • "related_to": [
    ],
  • "similar_to": [
    ],
  • "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": [
    ],
  • "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": {
    },
  • "supplier": {
    },
  • "locations": [
    ],
  • "branch_groups": [
    ],
  • "condition": "string",
  • "images": {
    },
  • "insert_id": 0,
  • "product_group": "string",
  • "delegated_to": [
    ],
  • "client_id": "string",
  • "external_reference_id": "string",
  • "default_tile_color": "string",
  • "codes": null,
  • "stock_mode": "simple",
  • "stock_configuration_location": [
    ],
  • "is_service": true,
  • "service_questions": [
    ],
  • "service_question_groups": [
    ],
  • "addon_groups": [
    ],
  • "configuration": {
    },
  • "loyalty_values": [
    ],
  • "manufacturers": [
    ],
  • "components": [
    ],
  • "delegatable": true,
  • "online": false,
  • "serial_number_input_required": false,
  • "shipping_required": true,
  • "delegatable_to": [
    ],
  • "delegated_from": {
    },
  • "warranty_notice": "string",
  • "refund_policy": "string",
  • "disclaimer": "string",
  • "policy": {
    },
  • "external_ids": [
    ],
  • "custom_properties": { }
}

Gets an actual price of a product

Gets an actual price of a product based on location and following sources in priority:

  • price books
  • product embedded prices
path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
query
required
string

The query search params

Responses

Request samples

tillhub.products.prices.actual.get((err, result) => {})

Response samples

Content type
application/json
{
  • "amount_net": "27633.02",
  • "amount_gross": "27633.02",
  • "rate": 0,
  • "currency": "EUR"
}

Copy up to 5 price books

Copy up to 5 price books of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

array with up to 5 elements to copy

Array
any

Responses

Request samples

Content type
application/json
[
  • null
]

Soft delete a single price book

Soft delete a single price book object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric price book ID

Responses

Update price book

Update an entire price book object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric price book ID

Request Body schema: application/json

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)

Responses

Request samples

Content type
application/json
{
  • "custom_id": "string",
  • "name": "string",
  • "constraints": {
    },
  • "locations": [
    ],
  • "branch_groups": [
    ],
  • "active": true,
  • "deleted": false,
  • "type": "customer"
}

Soft delete a single Price Book Entry

Soft delete a single Price Book Entry object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric Price Book Entry ID

Responses

Get a single Price Book Entry

Get a single Price Book Entry object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric Price Book Entry ID

Responses

Update price book entry

Update an entire price book entry object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric price book entry ID

Request Body schema: application/json

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)

Responses

Request samples

Content type
application/json
{
  • "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
  • "product": "e0588024-d851-42d5-ab9f-1b664ef352d4",
  • "products": [
    ],
  • "product_groups": [
    ],
  • "summary": "string",
  • "active": true,
  • "deleted": false,
  • "clients": [
    ],
  • "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 all Price Book Entries

Query all Price Book Entries of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 false or true

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)'

Responses

Create a price book entry

Create a new price book entry. The reason for not creating it:

  • The product to be already in the pricebook.
  • The product is not sellable.
path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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)

Responses

Request samples

Content type
application/json
{
  • "price_book": "ad218f01-9027-4548-b2f4-1185198c2d39",
  • "product": "e0588024-d851-42d5-ab9f-1b664ef352d4",
  • "products": [
    ],
  • "product_groups": [
    ],
  • "summary": "string",
  • "active": true,
  • "deleted": false,
  • "clients": [
    ],
  • "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

Get Metadata of all Price Book Entries.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 false or true

branch
string

the UUID representation of a location

q
required
string

the search string

Responses

v1: Get all product price book items

Query all product price book items

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 id and custom.id (which are aliased on the legacy route). It will default to custom.id on the legacy route

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 false or true

active
string

the string representation of boolean values as false or true

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

Responses

Create a price book

Create a new price book of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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)

Responses

Request samples

Content type
application/json
{
  • "custom_id": "string",
  • "name": "string",
  • "constraints": {
    },
  • "locations": [
    ],
  • "branch_groups": [
    ],
  • "active": true,
  • "deleted": false,
  • "type": "customer"
}

v1: Get Price Book Item

Get price book item

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

productID
required
string

Alphanumeric configuration ID

Responses

v1: Get Price Book Items for a Product

Get price book items for a product

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

productID
required
string

Alphanumeric configuration ID

Responses

v1: Get Metadata of Products Price Book

Get metadata of the products price book model.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Request samples

tillhub.products.meta.get((err, result) => {})

Get A Single Branch Price

Get a single branch price object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric product ID

branchId
required
string

Alphanumeric branch ID

Responses

Request samples

tillhub.products.prices.get((err, result) => {})

Add Product Branch Prices

Add an product branch prices object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric product ID

Request Body schema: application/json

Simple prices

any

Responses

Request samples

Content type
application/json
null

Update product prices

Update an entire prices object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric product ID

Request Body schema: application/json

Simple price

any

Responses

Request samples

Content type
application/json
null

Returns price list the specified branch for the product

Returns price list the specified branch for the product using following sources:

  • price books
  • product prices
path Parameters
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

Responses

Response samples

Content type
application/json
{}

Fuzzy Search Products

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.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Request samples

tillhub.products.search.get((err, result) => {})

Flush search-index with all records from the database

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.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Request samples

tillhub.products.search.get((err, result) => {})

Create elastic search indexes for Fuzzy Search Products

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.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Request samples

tillhub.products.search.get((err, result) => {})

v1: Select Products

Select Products by providing a list of ids or custom ids.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Request Body schema: application/json

List of Product ids

any

Responses

Request samples

Content type
application/json
null

v1: Manually Trigger Products Sysnc from External Systems

Manually trigger products Sysnc from external systems.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
systems
string
Example: systems=?systems=thirdpart&systems=mysap

one or more external systems.

Responses

Request samples

tillhub.products.post((err, result) => {})

Response samples

Content type
application/json
{
  • "status": 200,
  • "msg": "string",
  • "count": 1,
  • "results": [
    ]
}

Fuzzy Search Products V3

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.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Request samples

tillhub.products.search.get((err, result) => {})

Response samples

Content type
application/json
{
  • "msg": "Product search and suggestion successful.",
  • "msg_localised": "Abgefragte Transaktionen erfolgreich.",
  • "request": {},
  • "count": 10,
  • "results": {
    },
  • "status": 200
}

Create elastic search indexes for products

Create elastic search indexes for products from scratch.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Sync elastic search indexes for products

Sync elastic search indexes for products.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Recreate elastic search indexes for products

Rereate elastic search indexes for products. It will replace all indexes.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Product Groups

Group products to assign default values and dependencies.

Create a Product Group

Create a new prodcut group of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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)

Responses

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{
  • "msg": "Queried transactions successfully.",
  • "msg_localised": "Abgefragte Transaktionen erfolgreich.",
  • "request": {},
  • "count": 1,
  • "results": [
    ]
}

Get all Accounts

Query all product_groups of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 false or true

active
string

the string representation of boolean values as false or true

is_service_category
string

the string representation of boolean values as false or true

Responses

Request samples

tillhub.product_groups.get((err, result) => {})

Delete a single Product Group

Delete a single product group object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

product_groupID
required
string

Alphanumeric product group ID

Responses

Request samples

tillhub.delete.delete((err, result) => {})

Get a single Product Group

Get a single product group object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

productGroupID
required
string

Alphanumeric product group ID

Responses

Request samples

tillhub.product_groups.get((err, result) => {})

Response samples

Content type
application/json
{
  • "msg": "Queried transactions successfully.",
  • "msg_localised": "Abgefragte Transaktionen erfolgreich.",
  • "request": {},
  • "count": 1,
  • "results": [
    ]
}

Replace an Product Group

Replace an entire product group object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

productGroupID
required
string

Alphanumeric product group ID

Request Body schema: application/json

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)

Responses

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{
  • "msg": "Queried transactions successfully.",
  • "msg_localised": "Abgefragte Transaktionen erfolgreich.",
  • "request": {},
  • "count": 1,
  • "results": [
    ]
}

Checks if a product group id is unique.

Checks if a product group id is unique based on exsiting product group ids

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
product_group_id
required
string

the product group id to be checked

Responses

Request samples

tillhub.product_groups.get((err, result) => {})

Generic Search Product Groups

Make a generic search query for product groups on the name field as a string.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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).

Responses

Request samples

tillhub.product_groups.search.get((err, result) => {})

Product Addon Groups

Group addons to assign default values and dependencies.

Creates a Product Addon Group

Creates an Product Addon Group data entry

path Parameters
clientAccountID
required
string

Alphanumeric client account ID

Request Body schema: application/json

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.

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "multiselect": true,
  • "max_selected": 1,
  • "skippable": true,
  • "active": true,
  • "deleted": false
}

Response samples

Content type
application/json
{
  • "msg": "Queried transactions successfully.",
  • "msg_localised": "Abgefragte Transaktionen erfolgreich.",
  • "request": {},
  • "count": 1,
  • "results": [
    ]
}

Get all products addon groups

Query all product addon groups.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 false or true

skippable
string

the string representation of boolean values as false or true

deleted
string

the string representation of boolean values as false or true

active
string

the string representation of boolean values as false or true

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

Responses

deletes a Product Addon Group

Deletes a Product Addon Group

path Parameters
clientAccountID
required
string

Alphanumeric client account ID

productAddonGroup
required
string

Alphanumeric product addon group ID

Responses

Request samples

tillhub.product_addon_groups.files.delete((err, result) => {})

Updates a Product Addon Group

Updates a Product Addon Group

path Parameters
clientAccountID
required
string

Alphanumeric client account ID

productAddonGroup
required
string

Alphanumeric product addon group ID

Request Body schema: application/json

Product Addon Group

any

Responses

Request samples

Content type
application/json
null

Response samples

Content type
application/json
{
  • "msg": "Queried transactions successfully.",
  • "msg_localised": "Abgefragte Transaktionen erfolgreich.",
  • "request": {},
  • "count": 1,
  • "results": [
    ]
}

Get Metadata of Product Addon Groups

Get metadata of the Product Addon Groups model.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 false or true

skippable
string

the string representation of boolean values as false or true

deleted
string

the string representation of boolean values as false or true

active
string

the string representation of boolean values as false or true

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

Responses

Get a single Addon Group

Get a single Product Addon Group object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

addonGroupId
required
string

Alphanumeric Product Addon Group ID

Responses

Product Templates

Generate products from product templates.

Create a Product Template

Create a new product template of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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)

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "option_template": {
    },
  • "active": true,
  • "deleted": false,
  • "metadata": { }
}

Response samples

Content type
application/json
{
  • "name": "string",
  • "option_template": {
    },
  • "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"
}

Get all Product Templates

Query all product templates of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
q
string

text search by name, with a partial match (by comma or space separated words with minimal length of 2 chars)

Responses

Request samples

tillhub.productTemplates.get((err, result) => {})

Delete a Single Product Template

Delete a single product template object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

productTemplateID
required
string

Alphanumeric product template ID

Responses

Request samples

tillhub.productTemplates.delete((err, result) => {})

Get a single Product Template

Get a single product template object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

productTemplateID
required
string

Alphanumeric product template ID

Responses

Request samples

tillhub.prodcutTemplates.get((err, result) => {})

Replace a Product Template

Replace an entire product template object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

productTemplateID
required
string

Alphanumeric product template ID

Request Body schema: application/json

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)

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "option_template": {
    },
  • "active": true,
  • "deleted": false,
  • "metadata": { }
}

Product Service Questions

The Product Service Questions API.

Delete a single Product Question

Delete a single product question object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

resourceID
required
string

Alphanumeric discount ID

Responses

Request samples

tillhub.productServiceQuestions.delete((err, result) => {})

Get all Product Service Questions

Query all product_service_questions

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
deleted
string

the string representation of boolean values as false or true

active
string

the string representation of boolean values as false or true

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)

Responses

Request samples

tillhub.product_service_questions.get((err, result) => {})

Create a Product Service Question

Create a new product service question.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "name": "Customer satisfaction",
  • "description": "string",
  • "content": "Was the service performed without any problems?",
  • "deleted": false,
  • "active": true,
  • "required": true,
  • "answer_validation": {}
}

Response samples

Content type
application/json
{
  • "name": "Customer satisfaction",
  • "description": "string",
  • "content": "Was the service performed without any problems?",
  • "deleted": false,
  • "active": true,
  • "required": true,
  • "answer_validation": {},
  • "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

Get a single product service question object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

productQuestionId
required
string

Alphanumeric configuration ID

Responses

Request samples

tillhub.product_service_questions.get((err, result) => {})

Response samples

Content type
application/json
{
  • "name": "Customer satisfaction",
  • "description": "string",
  • "content": "Was the service performed without any problems?",
  • "deleted": false,
  • "active": true,
  • "required": true,
  • "answer_validation": {},
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "created_at": "2019-08-24T14:15:22Z",
  • "updated_at": "2019-08-24T14:15:22Z"
}

Get Metadata of Product Service Questions

Get metadata of the Product Service Questions model.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Request samples

tillhub.product_service_questions.meta.get((err, result) => {})

Update a Product Service Question

Update parts of a product service question object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

reasonId
required
string

Alphanumeric product service question ID

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "name": "Customer satisfaction",
  • "description": "string",
  • "content": "Was the service performed without any problems?",
  • "deleted": false,
  • "active": true,
  • "required": true,
  • "answer_validation": {}
}

Response samples

Content type
application/json
{
  • "name": "Customer satisfaction",
  • "description": "string",
  • "content": "Was the service performed without any problems?",
  • "deleted": false,
  • "active": true,
  • "required": true,
  • "answer_validation": {},
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "created_at": "2019-08-24T14:15:22Z",
  • "updated_at": "2019-08-24T14:15:22Z"
}

Product Service Question Groups

The Product Service Question Groups API.

Create a Product Service Question Group

Create a new product_service_qproduct service question group.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "name": "Hair treatment questions",
  • "description": "string",
  • "custom_id": "string",
  • "service_questions": [
    ],
  • "deleted": false,
  • "active": true
}

Response samples

Content type
application/json
{
  • "name": "Hair treatment questions",
  • "description": "string",
  • "custom_id": "string",
  • "service_questions": [
    ],
  • "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

Get a single product service question group object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

productQuestionGroupId
required
string

Alphanumeric configuration ID

Responses

Request samples

tillhub.product_service_question_groups.get((err, result) => {})

Response samples

Content type
application/json
{
  • "name": "Hair treatment questions",
  • "description": "string",
  • "custom_id": "string",
  • "service_questions": [
    ],
  • "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 Metadata of Product Service Question Groups

Get metadata of the Product Service Question Groups model.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Request samples

tillhub.product_service_question_groups.meta.get((err, result) => {})

Update a Product Service Question

Update parts of a product service question group object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

groupId
required
string

Alphanumeric product service question group ID

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "name": "Hair treatment questions",
  • "description": "string",
  • "custom_id": "string",
  • "service_questions": [
    ],
  • "deleted": false,
  • "active": true
}

Response samples

Content type
application/json
{
  • "name": "Hair treatment questions",
  • "description": "string",
  • "custom_id": "string",
  • "service_questions": [
    ],
  • "deleted": false,
  • "active": true,
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "created_at": "2019-08-24T14:15:22Z",
  • "updated_at": "2019-08-24T14:15:22Z"
}

Product Addons

Product Addons to add to a product.

v0: Create a Product Addon, V0

Create a new product addon of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

Simple Product Addon

One of
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

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "addon_group": "6ad6fefd-0dc7-4522-9320-b0b336144930",
  • "product": "e0588024-d851-42d5-ab9f-1b664ef352d4",
  • "price_change": [
    ],
  • "stock_quantity": 1,
  • "add_to_cart": false,
  • "allow_quantity_edit": false,
  • "max_quantity": 1,
  • "order_index": 1,
  • "active": true,
  • "deleted": false
}

Response samples

Content type
application/json
{
  • "msg": "Queried transactions successfully.",
  • "msg_localised": "Abgefragte Transaktionen erfolgreich.",
  • "request": {},
  • "count": 1,
  • "results": [
    ]
}

Get all products addons

Query all product addons.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 false or true

active
string

the string representation of boolean values as false or true

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

Responses

v0: Delete a single Product Addon

Delete a single product addon object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

productAddonID
required
string

Alphanumeric product addon ID

Responses

Request samples

tillhub.product_addons.delete((err, result) => {})

v0: Replace a Product Addon

Replace an entire product addon object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

productAddonID
required
string

Alphanumeric product addon ID

Request Body schema: application/json

Simple Product Addon

One of
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

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "addon_group": "6ad6fefd-0dc7-4522-9320-b0b336144930",
  • "product": "e0588024-d851-42d5-ab9f-1b664ef352d4",
  • "price_change": [
    ],
  • "stock_quantity": 1,
  • "add_to_cart": false,
  • "allow_quantity_edit": false,
  • "max_quantity": 1,
  • "order_index": 1,
  • "active": true,
  • "deleted": false
}

Response samples

Content type
application/json
{
  • "msg": "Queried transactions successfully.",
  • "msg_localised": "Abgefragte Transaktionen erfolgreich.",
  • "request": {},
  • "count": 1,
  • "results": [
    ]
}

Get Metadata of Product Addons

Get metadata of the Product Addons model.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 false or true

active
string

the string representation of boolean values as false or true

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

Responses

Get a single Addon

Get a single Product Addon object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric Addon ID

Responses

Promotions

The Promotions API.

Soft Delete a Single Promotion

Soft delete a single promotion object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric promotions ID

Responses

Request samples

tillhub.promotions.delete((err, result) => {})

Response samples

Content type
application/json
{
  • "status": 200,
  • "msg": "Deleted promotion 96341e35-0fe1-4b72-89bc-6f62e9114ac6",
  • "request": {
    }
}

Get a Single Promotion

Get a single promotions object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric promotions ID

Responses

Request samples

tillhub.promotions.get((err, result) => {})

Update Promotion

Update an entire promotion object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric promotions ID

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string",
  • "payload": "string",
  • "type": "cart_map_function",
  • "metadata": { },
  • "arguments": [
    ],
  • "locations": [
    ],
  • "client_id": "string",
  • "deleted": false,
  • "active": true,
  • "template": {
    },
  • "constraints": {
    },
  • "branch_groups": [
    ],
  • "version": 2,
  • "barcode": "0E9761310XF"
}

Get all Promotions

Query all promotions of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 false or true

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)

Responses

Request samples

tillhub.promotions.get((err, result) => {})

Create a promotion

Create a new promotions of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string",
  • "payload": "string",
  • "type": "cart_map_function",
  • "metadata": { },
  • "arguments": [
    ],
  • "locations": [
    ],
  • "client_id": "string",
  • "deleted": false,
  • "active": true,
  • "template": {
    },
  • "constraints": {
    },
  • "branch_groups": [
    ],
  • "version": 2,
  • "barcode": "0E9761310XF"
}

Apply a Promotion

Apply a promotions object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric promotions ID

Responses

Request samples

tillhub.promotions.get((err, result) => {})

Create a promotion

Create a new promotions of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string",
  • "type": "cart_map_function",
  • "metadata": { },
  • "arguments": [
    ],
  • "locations": [
    ],
  • "client_id": "string",
  • "deleted": false,
  • "active": true,
  • "template": {
    },
  • "constraints": {
    },
  • "branch_groups": [
    ],
  • "version": 2,
  • "barcode": "0E9761310XF"
}

Update Promotion

Update an entire promotion object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric promotions ID

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string",
  • "type": "cart_map_function",
  • "metadata": { },
  • "arguments": [
    ],
  • "locations": [
    ],
  • "client_id": "string",
  • "deleted": false,
  • "active": true,
  • "template": {
    },
  • "constraints": {
    },
  • "branch_groups": [
    ],
  • "version": 2,
  • "barcode": "0E9761310XF"
}

Seasons

The Seasons API.

Soft delete a single seasons

Soft delete a single seasons object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric seasons ID

Responses

Request samples

tillhub.seasons.delete((err, result) => {})

Response samples

Content type
application/json
{
  • "status": 200,
  • "msg": "Deleted seasons 96341e35-0fe1-4b72-89bc-6f62e9114ac6",
  • "request": {
    }
}

Get a single seasons

Get a single seasons object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric seasons ID

Responses

Request samples

tillhub.seasons.get((err, result) => {})

Update seasons

Update an entire seasons object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric seasons ID

Request Body schema: application/json

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.

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string",
  • "from": "2019-08-24T14:15:22Z",
  • "to": "2019-08-24T14:15:22Z",
  • "client_id": "string",
  • "active": true,
  • "deleted": false
}

Get all seasons

Query all seasons of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 false or true

Responses

Request samples

tillhub.seasons.get((err, result) => {})

Create a seasons

Create a new seasons of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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.

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string",
  • "from": "2019-08-24T14:15:22Z",
  • "to": "2019-08-24T14:15:22Z",
  • "client_id": "string",
  • "active": true,
  • "deleted": false
}

category_trees

Soft delete a Single Category Tree

Soft delete a single category tree object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric category tree ID

Responses

Request samples

tillhub.category_trees.delete((err, result) => {})

Response samples

Content type
application/json
{
  • "status": 200,
  • "msg": "Deleted category tree 96341e35-0fe1-4b72-89bc-6f62e9114ac6",
  • "request": {
    }
}

Get a Single Category Tree

Get a single category tree object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric category tree ID

Responses

Request samples

tillhub.category_trees.get((err, result) => {})

Update Category Tree

Update an entire category tree object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric category tree ID

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "summary": { },
  • "description": { },
  • "children": { },
  • "comments": "string",
  • "active": true,
  • "deleted": false,
  • "metadata": { }
}

Get all Category Trees

Query all category trees of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 false or true

Responses

Request samples

tillhub.category_trees.get((err, result) => {})

Create a Category Tree

Create a new category tree of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "summary": { },
  • "description": { },
  • "children": { },
  • "comments": "string",
  • "active": true,
  • "deleted": false,
  • "metadata": { }
}

Categories

The Categories API.

Soft delete a Single Category

Soft delete a single category object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric category ID

Responses

Request samples

tillhub.categories.delete((err, result) => {})

Response samples

Content type
application/json
{
  • "status": 200,
  • "msg": "Deleted category 96341e35-0fe1-4b72-89bc-6f62e9114ac6",
  • "request": {
    }
}

Get a Single Category

Get a single category object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric category ID

Responses

Request samples

tillhub.categories.get((err, result) => {})

Update Category

Update an entire category object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric category ID

Request Body schema: application/json

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)

Responses

Request samples

Content type
application/json
{}

Get all Categories

Query all categories of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 false or true

Responses

Request samples

tillhub.categories.get((err, result) => {})

Create a Category

Create a new category of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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)

Responses

Request samples

Content type
application/json
{}

Stock

The core stock API.

Model

stocks-book.create.v0 Webhook

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "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": {
    }
}

Get all Stock Book entries

Query all stock book entries of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 format=csv.

cursor_field
string

which column to cursor on. Currently we only support created_at and date

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

Responses

Request samples

import * as tillhub from '@tillhub/javascript-sdk'
const { data: stocksBook } = await tillhub.stocksBook().getAll({ type: 'relocation', limit: 50 })

Response samples

Content type
application/json
{}

Get a single Stock book entry

Get a single stock book entry object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

stockID
required
string

Alphanumeric stock book ID

query Parameters
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".

Responses

Request samples

tillhub.stock.get((err, result) => {})

Get all Stock Book entries

Query all stock book entries of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 format=csv.

cursor_field
string

which column to cursor on. Currently we only support created_at and date

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

Responses

Request samples

import * as tillhub from '@tillhub/javascript-sdk'
const { data: stocksBook } = await tillhub.stocksBookV1().getAll({ type: 'relocation', limit: 50 })

Response samples

Content type
application/json
{}

Get Stock Book meta data

Get Stock Book meta data of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Create a Stock

Create a new stock of a user.

Several Tillhub locations can have stock, such as branches, warehouses, warehouse shelves and (e.g. in-store) clients.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "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"
}

Response samples

Content type
application/json
{ }

Get all Stock

Query all stock of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Request samples

tillhub.stock.get((err, result) => {})

Delete a single Stock

Delete a single stock object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

stockID
required
string

Alphanumeric stock ID

Responses

Request samples

tillhub.stock.delete((err, result) => {})

Get a single Stock

Get a single stock object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

stockID
required
string

Alphanumeric stock ID

Responses

Request samples

tillhub.stock.get((err, result) => {})

Replace a Stock

Replace an entire stock object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

stockID
required
string

Alphanumeric stock ID

Request Body schema: application/json

Simple Stock

qty
required
number
object or (any or null)
string or (any or null)

Responses

Request samples

Content type
application/json
{
  • "qty": 0,
  • "metadata": { },
  • "reason": "82923651-ad20-41d1-9334-85fd9df8e817"
}

Get all locations

Query all locations of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 false or true

Responses

Request samples

tillhub.stock.get((err, result) => {})

Get a single Location

Get a single location object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

locationID
required
string

Alphanumeric location ID

Responses

Request samples

tillhub.location.get((err, result) => {})

Transfer stock

Transfer stock from one location to another

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
  • "locationId": "1a5515a3-ba81-4a42-aee7-ad9ffc090a54",
  • "reasonId": "c577cf67-9268-488b-9f16-1c6585ec43bf"
}

Response samples

Content type
application/json
{
  • "status": 200,
  • "msg": "Stock transferred.",
  • "request": {
    },
  • "count": 1,
  • "results": {
    },
  • "reason": "uuid"
}

Warehouses

The Warehouses API. See Locations for more information.

Create a Warehouse

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

path Parameters
clientAccountID
required
string

Alphanumeric warehouse ID of the user

Request Body schema: application/json

Simple Warehouse

object

Responses

Request samples

Content type
application/json
{ }

Get all Warehouses

Query all warehouses of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 false or true

active
string

the string representation of boolean values as false or true

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)

Responses

Request samples

tillhub.warehouses.get((err, result) => {})

Delete a single Warehouse

Delete a single warehouse object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

warehouseId
required
string

Alphanumeric warehouse ID

Responses

Request samples

tillhub.warehouses.delete((err, result) => {})

Get a single Warehouse

Get a single warehouse object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

warehouseId
required
string

Alphanumeric warehouse ID

Responses

Request samples

tillhub.warehouses.get((err, result) => {})

Replace a Warehouse

Replace an entire warehouse object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

warehouseId
required
string

Alphanumeric warehouse ID

Request Body schema: application/json

Simple Warehouse

object

Responses

Request samples

Content type
application/json
{ }

Generic Search Warehouses

Make a generic search query for warehouses on the name field as a string.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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).

Responses

Request samples

tillhub.warehouses.search.get((err, result) => {})

Create a Warehouse Shelve

Create a new warehouse shelve of a user.

Shelves are stock holding units that belong to a warehouse

path Parameters
clientAccountID
required
string

Alphanumeric warehouse ID of the user

Request Body schema: application/json

Simple Warehouse Shelve

object

Responses

Request samples

Content type
application/json
{ }

Get all Warehouse Shelves

Query all warehouse shelves of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 false or true

active
string

the string representation of boolean values as false or true

Responses

Request samples

tillhub.warehouses.shelves.get((err, result) => {})

Delete a single Warehouse Shelve

Delete a single warehouse shelve object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

warehouseId
required
string

Alphanumeric warehouse ID

shelveId
required
string

Alphanumeric shelve ID

Responses

Request samples

tillhub.warehouses.shelves.delete((err, result) => {})

Get a single Warehouse Shelve

Get a single warehouse shelve object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

warehouseId
required
string

Alphanumeric warehouse ID

warehouseId
required
string

Alphanumeric shelve ID

Responses

Request samples

tillhub.warehouses.shelves.get((err, result) => {})

Orders

The Orders API.

Delete a single order

Delete a single order object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

orderID
required
string

Alphanumeric order ID

Responses

Request samples

tillhub.orders.delete((err, result) => {})

Replace an order

Replace an entire order object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

orderID
required
string

Alphanumeric order ID

Request Body schema: application/json

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 false or true

deleted
boolean
Default: false

the string representation of boolean values as false or true

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"

Responses

Request samples

Content type
application/json
{
  • "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": {
    },
  • "sender": {
    },
  • "direction": "incoming",
  • "order_items": [
    ],
  • "issuer": { },
  • "status": "open"
}

Response samples

Content type
application/json
{
  • "status": 200,
  • "msg": "string",
  • "count": 1,
  • "results": [
    ]
}

Get all orders

Query all orders

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 id and custom.id (which are aliased on the legacy route). It will default to custom.id on the legacy route

deleted
string

the string representation of boolean values as false or true

direction
string

the string representation of a direction as incoming or outgoing

Responses

Request samples

tillhub.orders.get((err, result) => {})

Response samples

Content type
application/json
{
  • "status": 200
}

Create an order

Create a new order

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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 false or true

deleted
boolean
Default: false

the string representation of boolean values as false or true

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"

Responses

Request samples

Content type
application/json
{
  • "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": {
    },
  • "sender": {
    },
  • "direction": "incoming",
  • "order_items": [
    ],
  • "issuer": { },
  • "status": "open"
}

Response samples

Content type
application/json
{
  • "status": 200,
  • "msg": "string",
  • "count": 1,
  • "results": [
    ]
}

Get a single Order

Get a single order object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

orderID
required
string

Alphanumeric configuration ID

Responses

Request samples

tillhub.orders.get((err, result) => {})

Response samples

Content type
application/json
{
  • "status": 200,
  • "msg": "string",
  • "count": 1,
  • "results": [
    ]
}

Get the last open outgoing order

Get the last outgoing order that is open and was last modified. Open means that it is still in editing mode.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Request samples

tillhub.orders.open.get((err, result) => {})

Response samples

Content type
application/json
{
  • "status": 200,
  • "msg": "string",
  • "count": 1,
  • "results": [
    ]
}

Get Metadata of Orders

Get metadata of the orders model.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
deleted
string

the string representation of boolean values as false or true

direction
string

the string representation of a direction as incoming or `outgoing

Responses

Request samples

tillhub.orders.meta.get((err, result) => {})

Get order suggestions

Get order suggestions based on actual stock and product min requirements

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Request samples

tillhub.orders.suggestions.get((err, result) => {})

Response samples

Content type
application/json
{
  • "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": {
    },
  • "sender": {
    },
  • "direction": "incoming",
  • "order_items": [
    ],
  • "issuer": { },
  • "status": "open"
}

Update Stock Quantity From Item

Update stock quantity and delivered quantity for one single order item

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

orderItemID
required
string

Alphanumeric ID of the order item

Responses

Request samples

tillhub.orders.get((err, result) => {})

Response samples

Content type
application/json
{
  • "status": 200,
  • "msg": "string",
  • "results": [
    ]
}

Create Order Items

Create order items belonging to an order

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

simple order items

required
Array of objects non-empty

Responses

Request samples

Content type
application/json
{
  • "order_items": [
    ]
}

Response samples

Content type
application/json
{
  • "status": 200,
  • "msg": "Order items added.",
  • "count": 1,
  • "results": [
    ]
}

Delete Order Items Filtered by Query Parameters

Delete specific order items filtered based on query parameters

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
order_id
string

Alphanumeric order ID

auto
string

the string representation of boolean values as false or true

suggestion
string

the string representation of boolean values as false or true

order_qty
number

Responses

Request samples

tillhub.orders.delete((err, result) => {})

Replace Multiple Order Items

Replace multiple order items

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

Array of order items

required
Array of objects non-empty

Responses

Request samples

Content type
application/json
{
  • "order_items": [
    ]
}

Response samples

Content type
application/json
{
  • "status": 200,
  • "msg": "string",
  • "results": [
    ]
}

Delete a Single Order Item

Delete a single order item object

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

orderItemID
required
string

Alphanumeric order item ID

Responses

Request samples

tillhub.order_items.delete((err, result) => {})

Get a Single Order Item

Get a single order item object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

orderItemID
required
string

Alphanumeric order item ID

Responses

Request samples

tillhub.orders.get((err, result) => {})

Response samples

Content type
application/json
{
  • "status": 200,
  • "msg": "string",
  • "results": [
    ]
}

Replace an Order Item

Replace an entire order item object

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

orderItemID
required
string

Alphanumeric order item ID

Request Body schema: application/json

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)

Responses

Request samples

Content type
application/json
{
  • "added_at": "string",
  • "issuer": { },
  • "order_qty": 0,
  • "auto": true,
  • "suggestion": true,
  • "deleted": true,
  • "order": "string",
  • "product": "string",
  • "stock": "string",
  • "location": "string"
}

Response samples

Content type
application/json
{
  • "status": 200,
  • "msg": "string",
  • "results": [
    ]
}

Get All Order Items

Get all order items belonging to one specific order

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

orderID
required
string

Alphanumeric ID of the (parent) order

Responses

Request samples

tillhub.orders.get((err, result) => {})

Response samples

Content type
application/json
{
  • "status": 200,
  • "msg": "string",
  • "results": [
    ]
}

Deliveries

The Delivery API.

Delete a Single Delivery

Delete a single delivery object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

deliveryID
required
string

Alphanumeric delivery ID

Responses

Request samples

tillhub.deliveries.delete((err, result) => {})

Replace a Delivery

Replace an entire delivery object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

deliveryID
required
string

Alphanumeric delivery ID

Request Body schema: application/json

Simple Delivery

object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{ }

Delete a Single Delivery

Delete a single delivery object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

itemId
required
string

Alphanumeric delivery ID

Responses

Request samples

tillhub.deliveries.delete((err, result) => {})

Get all deliveries

Query all deliveries

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 id and custom.id (which are aliased on the legacy route). It will default to custom.id on the legacy route

deleted
string

the string representation of boolean values as false or true

active
string

the string representation of boolean values as false or true

Responses

Request samples

tillhub.deliveries.get((err, result) => {})

Response samples

Content type
application/json
{ }

Create delivery items

Create new delivery items

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

Simple Delivery Items

object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{ }

Get a single Delivery

Get a single delivery object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

deliveryID
required
string

Alphanumeric configuration ID

Responses

Request samples

tillhub.deliveries.get((err, result) => {})

Response samples

Content type
application/json
{ }

Get All Delivery Items of a Delivery

Get all delivery items of a delivery.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

deliveryID
required
string

Alphanumeric configuration ID

query Parameters
embed
string
Value: "product"

let the API embed a specified object

Responses

Request samples

tillhub.deliveries.get((err, result) => {})

Response samples

Content type
application/json
{ }

Get a single Delivery Item

Get a single delivery item object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

deliveryID
required
string

Alphanumeric configuration ID

itemID
required
string

Alphanumeric configuration ID

query Parameters
embed
string
Value: "product"

let the API embed a specified object

Responses

Request samples

tillhub.deliveries.get((err, result) => {})

Response samples

Content type
application/json
{ }

Get Metadata of Deliveries

Get metadata of the deliveries model.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Request samples

tillhub.deliveries.meta.get((err, result) => {})

Dispatch Delivery

Dsipatch a delivery

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

deliveryId
required
string

Alphanumeric delivery ID

Request Body schema: application/json

Simple Delivery

object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{ }

Set a Delivery in Progress

Set a delivery in progress state

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

deliveryId
required
string

Alphanumeric delivery ID

Request Body schema: application/json

Simple Delivery

object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{ }

Generate a PDF Delivery Sheet

Generate a PDF Delivery Sheet

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

deliveryId
required
string

Alphanumeric delivery ID

Request Body schema: application/json

Simple Delivery

object

Responses

Request samples

Content type
application/json
{ }

Replace an Delivery Item

Replace an entire delivery item object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

deliveryID
required
string

Alphanumeric delivery ID

deliveryID
required
string

Alphanumeric delivery item ID

Request Body schema: application/json

Simple Delivery

object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{ }

Processes

The Processes API.

Get all Processes

Query all processes

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Request samples

tillhub.processes.get((err, result) => {})

Create a Process

Create a new process of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

Simple Process

any

Responses

Request samples

Content type
application/json
null

Get all Processes

Query all processes

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Request samples

tillhub.processes.get((err, result) => {})

Delete a process

Delete a process object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

processId
required
string

Alphanumeric configuration ID

Responses

Request samples

tillhub.processes.get((err, result) => {})

Get a single process

Get a single process object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

processId
required
string

Alphanumeric configuration ID

query Parameters
fields
Array

specify which process properties to return

Responses

Request samples

tillhub.processes.get((err, result) => {})

Update a Process

Update parts of a process object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

processId
required
string

Alphanumeric process ID

Request Body schema: application/json

Simple Process

any

Responses

Request samples

Content type
application/json
null

Get a single process' items

Get a single process' items array.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

processId
required
string

Alphanumeric configuration ID

format
required
string
Example: csv

Responses

Request samples

tillhub.processes.get((err, result) => {})

Storefronts

The Storefronts API.

Get all products which are not whitelisted in the storefront

It utilizes the same logic as '/api/v1/products/{clientAccountID}' does but adds additional filter to get only not whitelisted products

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric storefront ID

query Parameters
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 id and custom.id (which are aliased on the legacy route). It will default to custom.id on the legacy route

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 false or true

active
string

the string representation of boolean values as false or true

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

Responses

Request samples

tillhub.storefronts.productslist.get((err, result) => {})

Get metadata of products which are not whitelisted in the storefront

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric storefront ID

Responses

Request samples

tillhub.storefronts.productslist.meta((err, result) => {})

Soft delete a single storefront

Soft delete a single storefront object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric storefront ID

Responses

Request samples

tillhub.storefronts.delete((err, result) => {})

Response samples

Content type
application/json
{
  • "status": 200,
  • "msg": "Deleted storefront 96341e35-0fe1-4b72-89bc-6f62e9114ac6",
  • "request": {
    }
}

Get a Single Storefront

Get a single storefront object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric storefront ID

Responses

Request samples

tillhub.storefronts.get((err, result) => {})

Update Storefront

Update an entire storefront object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric storefront ID

Request Body schema: application/json

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.

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": { },
  • "type": "online",
  • "external_system_type": "tillhub_shop",
  • "resource_syncs_outbound": [
    ],
  • "resource_syncs_inbound": [
    ],
  • "link": { },
  • "external_reference_id": { },
  • "external_api_base": { },
  • "auth": { },
  • "default_category_tree": { },
  • "default_location": { },
  • "active": true,
  • "deleted": false,
  • "metadata": { },
  • "profile": { },
  • "auto_sync": false,
  • "whitelisted": false
}

Get all Storefronts

Query all storefronts of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 false or true

Responses

Request samples

tillhub.storefronts.get((err, result) => {})

Create a storefront, set default profile and sync categories

Create a new storefront, set default profile and sync categories in the external partner system

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

Simple storefront

One of
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.

Responses

Request samples

Content type
application/json
Example
{
  • "name": "string",
  • "description": { },
  • "type": "online",
  • "external_system_type": "ecwid",
  • "resource_syncs_outbound": [
    ],
  • "resource_syncs_inbound": [
    ],
  • "link": { },
  • "external_reference_id": { },
  • "external_api_base": { },
  • "auth": { },
  • "default_category_tree": { },
  • "default_location": { },
  • "active": true,
  • "deleted": false,
  • "metadata": { },
  • "profile": { },
  • "auto_sync": false,
  • "whitelisted": false
}

Get Storefront Profile

Get an entire storefront profile object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric storefront ID

Responses

Request samples

tillhub.storefronts.profile.get((err, result) => {})

Update Storefront Profile

Update an entire storefront profile object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric storefront ID

Request Body schema: application/json

Simple storefront profile

object
object
object
object

Responses

Request samples

Content type
application/json
{
  • "company": {
    },
  • "formatsAndUnits": {
    },
  • "languages": {
    },
  • "taxSettings": {
    }
}

Sync Tillhub Category Trees and Categories with Storefront from the scratch

Sync category trees and categories of a user with storefront from the scratch.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

storefrontID
required
string

Alphanumeric storefront ID

Responses

Request samples

tillhub.storefronts.categories.sync((err, result) => {})

Sync Tillhub Products with Storefront

Sync products of a user with storefront.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

storefrontID
required
string

Alphanumeric storefront ID

Responses

Request samples

tillhub.storefronts.products.sync((err, result) => {})

Get the latest sync status of a storefront

Get the latest sync status of a storefront.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric storefront ID of the user

Responses

Request samples

tillhub.storefronts.sync.status.get((err, result) => {})

Get the delta sync of products

Get the delta sync of products.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric storefront ID of the user

Responses

Request samples

tillhub.storefronts.sync.delta.get((err, result) => {})

Handle Webhooks for Storefronts

Handle Webhooks for Storefronts.

path Parameters
external_system_type
required
string

the external system type to be processed

Responses

Request samples

tillhub.storefronts.webhooks.post((err, result) => {})

Get all whitelisted products from a storefront

Get all whitelisted products from a storefront.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric storefront ID

Responses

Request samples

tillhub.storefronts.whitelist.get((err, result) => {})

Create a products whitelist for the storefront

Create a products whitelist for the storefront

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric storefront ID

Request Body schema: application/json

Products IDs

any

Responses

Request samples

Content type
application/json
null

Get metadata of whitelisted products from a storefront

Get metadata of whitelisted products from a storefront.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric storefront ID

Responses

Request samples

tillhub.storefronts.whitelist.meta.get((err, result) => {})

Transactions

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.

Model

The model is currently divided into sub models that also drive client behavior

  • the core transaction: states sums and dependencies to external resources, like revenue and tax accounts
  • cart items: describe the list of itemizable, such as products, tips, vouchers and discounts
  • payments: list of payments such as cash, card etc. and their full processing information

Operations

Common tasks of transactions are

  • generating a sale
  • generate a cart, that can later be sold
  • creating delivery notes

Signing

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.

General Flow

The systems we offer usually need to be purchased at the vendor or reseller. After that the following flow applies

  1. purchase of signing system product
  2. decide on which entity level the product shall be used
  3. Set the configuration (authentication data etc.) on the Tillhub resource, e.g. a branch.
  4. Initialise the signing system on that resource
  5. Henceforth, every transaction that is produced in that entity will be tried to be signed

Secondary actions you can or must take or we will cover.

  1. If the signing system fails, you will be able to continue creating Tillhub transactions. Those will be marked as signing_requested and be queued for reconciliation. The reconciliation we be attempted after every following transaction.
  2. If yearly or monthly receipts are required from those vendors, you will need to employ business processes, to get them manually from the Tillhub Dashboard e.g. on the last day of the month after your last balance. Some systems do not offer getting those afterwards.

Transition from v0 to v1

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:

  1. v0/transactions/{client_id}
  2. v1/transactions/{client_id}/legacy

Hybrid model

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.



Model

transaction.create.v0 Webhook

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "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": {
    }
}

Legacy: Get Transaction Metadata

Query metadata for the transaction model, such as counts

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Request samples

tillhub.transactions.legacy.meta.get((err, result) => {})

Legacy: Write a Transaction

Write a Transaction to the database with the v0 model

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

The contents of a Transaction

id
required
string

Responses

Request samples

Content type
application/json
{
  • "id": "string"
}

Get all Transactions

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.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Request samples

tillhub.transactions.get((err, result) => {})

Response samples

Content type
application/json
{
  • "msg": "Queried transactions successfully.",
  • "msg_localised": "Abgefragte Transaktionen erfolgreich.",
  • "request": {},
  • "count": 10,
  • "results": [
    ],
}

Create a Transaction

Write a Transaction to the database with the v1 model

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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 created_at, which is the time the server has received it. This is necessary for e.g. offline client, and is valid time in fiscal reports.

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

Responses

Request samples

Content type
application/json
{
  • "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": [
    ],
  • "timezone": { },
  • "items": [
    ],
  • "payments": [
    ],
  • "status": {
    }
}

Response samples

Content type
application/json
{
  • "msg": "Queried transactions successfully.",
  • "msg_localised": "Abgefragte Transaktionen erfolgreich.",
  • "request": {},
  • "count": 1,
  • "results": [
    ]
}

Get one Transaction

Get one transactions.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

transactionID
required
string

the uuid transaction ID

Responses

Request samples

tillhub.transactions.get((err, result) => {})

Response samples

Content type
application/json
{
  • "msg": "Queried transactions successfully.",
  • "msg_localised": "Abgefragte Transaktionen erfolgreich.",
  • "request": {},
  • "count": 1,
  • "results": [
    ]
}

Get Metadata of Transactions

Get metadata of the Transactions model.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Request samples

tillhub.transactions.meta.get((err, result) => {})

Set Status Dispatched

Set printed status for the invoice

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

transactionID
required
string

Alphanumeric transaction ID

Request Body schema: application/json

invoice user's preference

dispatched_at
string <date-time>

Responses

Request samples

Content type
application/json
{
  • "dispatched_at": "2019-08-24T14:15:22Z"
}

LEGACY - Get all Transactions

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

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 id and id (which are aliased on the legacy route). It will default to id on the legacy route

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 sale, sale_cancel, delivery_note, delivery_note_return, selection, selection_return, downpayment, saved_cart, saved_cart_done, expense, expense_cancel, activeCart

embed
string
Enum: "customer" "payment_option" "correspondences"

let the API embed a specified object; currently the options are "customer", "payment_option", "correspondences"

Responses

Request samples

tillhub.transactions.legacy.get((err, result) => {})

LEGACY - Write a v1-legacy Transaction

Write a Transaction to the database with the v0 model

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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.

Request Body schema: application/json

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)

Responses

Request samples

Content type
application/json
{
  • "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": {
    },
  • "client_id": "string",
  • "cashier_staff": "5ad2351d-9a67-45f9-ad4f-0abcbefa9037",
  • "expense": {
    },
  • "temp_staff": "5ad2351d-9a67-45f9-ad4f-0abcbefa9037",
  • "client": "5ad2351d-9a67-45f9-ad4f-0abcbefa9037",
  • "customer": "5ad2351d-9a67-45f9-ad4f-0abcbefa9037",
  • "context": [
    ],
  • "timezone": { },
  • "has_promotion": false,
  • "applied_promotions": [
    ],
  • "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": [
    ],
  • "_depends_on": [
    ],
  • "_related_to": [
    ],
  • "_location": "{ \"lat\": 52.5065133, \"lng\": 13.1445545}",
  • "cartitems": [
    ],
  • "payments": [
    ],
  • "status": {
    },
  • "external_rewards": {
    }
}

LEGACY - Get the transaction belonging to the latest balance

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

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Request samples

tillhub.transactions.latest.legacy.get((err, result) => {})

LEGACY - Get meta data of Transactions

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

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Request samples

tillhub.transactions.meta.get((err, result) => {})

LEGACY - Get the latest transaction, filtered by type.

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'

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

type
required
string

A valid transaction type, e.g. 'sale'

query Parameters
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

Responses

Request samples

tillhub.transactions.latest.legacy.get((err, result) => {})

LEGACY - Generate a PDF Invoice Sheet

Generate a PDF Invoice Sheet

path Parameters
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.

query Parameters
embed
array of array of strings

current option is "correspondence"; decides if the correspondence object is returned in the response or not

Responses

Request samples

tillhub.transactions.post.pdf((err, result) => {})

LEGACY - Send a PDF Invoice via an email

Send a PDF invoice via an email

path Parameters
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.

query Parameters
embed
array of array of strings

current option is "correspondence"; decides if the correspondence object is returned in the response or not

Request Body schema: application/json

User's email address

object

Responses

Request samples

Content type
application/json
{ }

Legacy: Initialise a Signing System

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.

Specifics for Systems

Fiskaltrust

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.

Background

For your notice an example workflow looks like the following, but will be abstracted inside Tillhub Resources:

  1. Create a zero receipt to initiliase the system
 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}"
}
  1. Make signing request for simple items
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}"
}
path Parameters
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

Request Body schema: application/json

Necessary Authentication Data for Signing System

object

Responses

Request samples

Content type
application/json
{ }

Legacy: Close a Signing System

Some signing systems allow de-commisioning their signing instances.

path Parameters
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

Request Body schema: application/json

Necessary Authentication Data for Signing System

object

Responses

Request samples

Content type
application/json
{ }

Legacy: Delete Signing Configuration

Purge signign configuration from a resource

path Parameters
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

Request Body schema: application/json

Necessary Authentication Data for Signing System

object

Responses

Request samples

Content type
application/json
{ }

Legacy: Reconile Requested Signing Operations

Reconcile failed signing request

path Parameters
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

Request Body schema: application/json

Necessary Authentication Data for Signing System

object

Responses

Request samples

Content type
application/json
{ }

Legacy: Create a Yearly Receipt

Create a yearly receipt if the signing systems supports it.

path Parameters
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

Request Body schema: application/json

Necessary Authentication Data for Signing System

object

Responses

Request samples

Content type
application/json
{ }

Legacy: Create a Monthly Receipt

Create a monthly receipt if the signing systems supports it.

path Parameters
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

Request Body schema: application/json

Necessary Authentication Data for Signing System

object

Responses

Request samples

Content type
application/json
{ }

Legacy: Create a Generic Zero Receipt

Crate a generic Zero Receipt if a signing system allows it.

path Parameters
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

Request Body schema: application/json

Necessary Authentication Data for Signing System

object

Responses

Request samples

Content type
application/json
{ }

Balances

The core balances API.

Model

balances.create.v0 Webhook

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "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": {
    }
}

Legacy Get all Balances

Query all legacy balances

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Request samples

tillhub.balances.legacy.get((err, result) => {})

Creates a legacy balance

Write a balance to the database with the v0 legacy model

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

header Parameters
X-Client-Type
string

client type

X-Client-Version
string

client version

Request Body schema: application/json

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)

Responses

Request samples

Content type
application/json
{
  • "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": [
    ],
  • "vats": [
    ],
  • "expenses": [
    ],
  • "payments": [
    ],
  • "tips": [
    ],
  • "cash_units": {
    },
  • "extended": {
    },
  • "_metadata": {
    },
  • "wallet_data": {
    },
  • "status": {
    }
}

Register Opening Protocols

The Register Opening Protocols API.

Get all register opening protocols

Query all register opening protocols from cashier counting protocols of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 false or true

Responses

Request samples

tillhub.register_opening_protocols.get((err, result) => {})

Create a register opening protocol

Create a new register opening protocol on cashier counting protocols of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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)

Responses

Request samples

Content type
application/json
{
  • "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": [
    ],
  • "timezone": { },
  • "deleted": false,
  • "opening_date": "2018-11-04T23:18:43.075Z",
  • "total_counted": [
    ],
  • "total_calculated": [
    ],
  • "discrepancy_total": [
    ],
  • "has_discrepancy": false,
  • "opening_tips": [
    ],
  • "balance_number": 0,
  • "balance_last": "9d20d799-b6e0-46a0-9e48-7ca372af13d4",
  • "balance_custom_id_last": "12",
  • "merchant_receipt": "string"
}

Get a single register opening protocol

Get a single register opening protocol object from cashier counting protocols.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric register_opening_protocols ID

Responses

Request samples

tillhub.register_opening_protocols.get((err, result) => {})

Update register opening protocol

Update an entire register opening protocol object on cashier counting protocols.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric register opening protocol ID

Request Body schema: application/json

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)

Responses

Request samples

Content type
application/json
{
  • "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": [
    ],
  • "timezone": { },
  • "deleted": false,
  • "opening_date": "2018-11-04T23:18:43.075Z",
  • "total_counted": [
    ],
  • "total_calculated": [
    ],
  • "discrepancy_total": [
    ],
  • "has_discrepancy": false,
  • "opening_tips": [
    ],
  • "balance_number": 0,
  • "balance_last": "9d20d799-b6e0-46a0-9e48-7ca372af13d4",
  • "balance_custom_id_last": "12",
  • "merchant_receipt": "string"
}

Get the latest register_opening_protocols

Get the latest register opening protocol object from cashier counting protocols.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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'

Responses

Request samples

tillhub.register_opening_protocols.get((err, result) => {})

Response samples

Content type
application/json
{
  • "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": [
    ],
  • "timezone": { },
  • "deleted": false,
  • "opening_date": "2018-11-04T23:18:43.075Z",
  • "total_counted": [
    ],
  • "total_calculated": [
    ],
  • "discrepancy_total": [
    ],
  • "has_discrepancy": false,
  • "opening_tips": [
    ],
  • "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"
}

Accounts

The financial accounts API.

Create a Account

Create a new account of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string",
  • "fa_account_number": "string",
  • "type": "vat",
  • "active": true,
  • "deleted": false,
  • "metadata": { },
  • "financial_accounts": [
    ],
  • "accounts": [
    ]
}

Get all Accounts

Query all accounts of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 false or true

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

Responses

Response samples

Content type
application/json
{
  • "request": {
    }
}

Delete a single Account

Delete a single account object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

accountID
required
string

Alphanumeric account ID

Responses

Request samples

tillhub.accounts.delete((err, result) => {})

Response samples

Content type
application/json
{
  • "status": 200,
  • "msg": "Deleted account 96341e35-0fe1-4b72-89bc-6f62e9114ac6",
  • "request": {
    }
}

Get a single Account

Get a single account object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

accountID
required
string

Alphanumeric account ID

Responses

Request samples

tillhub.accounts.get((err, result) => {})

Replace an Account

Replace an entire account object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

accountID
required
string

Alphanumeric account ID

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string",
  • "fa_account_number": "string",
  • "type": "vat",
  • "active": true,
  • "deleted": false,
  • "metadata": { },
  • "financial_accounts": [
    ],
  • "accounts": [
    ]
}

Taxes

The taxation API.

Create a Tax Reference

Create a new tax reference of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

Simple Tax Reference

Any of
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

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "fa_account_number": "string",
  • "type": "vat",
  • "account": "string",
  • "rate": 0,
  • "percentage": 0,
  • "is_fixed": false,
  • "active": true,
  • "deleted": false,
  • "financial_accounts": [
    ],
  • "jurisdiction": null,
  • "rate_class": "normal"
}

Get all Taxes References

Query all taxes references of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 false or true

active
string

the string representation of boolean values as false or true

Responses

Request samples

tillhub.taxes.get((err, result) => {})

Response samples

Content type
application/json
{
  • "request": {
    }
}

Delete a single Tax Reference

Delete a single tax reference object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

accountID
required
string

Alphanumeric tax reference ID

Responses

Request samples

tillhub.taxes.delete((err, result) => {})

Response samples

Content type
application/json
{
  • "status": 200,
  • "msg": "Deleted tax reference f3afd983-6bc9-4eea-af25-b20f0356b10a",
  • "request": {
    }
}

Get a single Tax Reference

Get a single tax reference object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

accountID
required
string

Alphanumeric tax reference ID

Responses

Request samples

tillhub.taxes.get((err, result) => {})

Replace a Tax Reference

Replace an entire tax reference object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

accountID
required
string

Alphanumeric tax reference ID

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "fa_account_number": "string",
  • "type": "vat",
  • "account": "string",
  • "rate": 0,
  • "percentage": 0,
  • "is_fixed": false,
  • "active": true,
  • "deleted": false,
  • "financial_accounts": [
    ],
  • "jurisdiction": null,
  • "rate_class": "normal"
}

Discounts

The discount API.

Create a Discount

Create a new discount of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

Simple Discount

Any of
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

Responses

Request samples

Content type
application/json
{
  • "amount": null,
  • "currency": "str",
  • "value": -1000000,
  • "rate": 1,
  • "type": "percentage",
  • "behaviors": {
    },
  • "account": "string",
  • "name": "string",
  • "group": "cart",
  • "active": true,
  • "deleted": false,
  • "constraints": {
    },
  • "locations": [
    ],
  • "branch_groups": [
    ],
  • "order": "first",
  • "external_reference_id": "string",
  • "group_on_receipt": false
}

Response samples

Content type
application/json
{
  • "status": 200,
  • "msg": "string",
  • "count": 1,
  • "results": [
    ]
}

Get all Discounts

Query all discounts of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 false or true

active
string

the string representation of boolean values as false or true

branch
string

the branch ID in the location list

branch_group
string

the branch group ID in the branch groups list

Responses

Request samples

tillhub.discounts.get((err, result) => {})

Delete a single Discount

Delete a single discount object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

accountID
required
string

Alphanumeric discount ID

Responses

Request samples

tillhub.discounts.delete((err, result) => {})

Get a single Discount

Get a single discount object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

discountID
required
string

Alphanumeric discount ID

Responses

Request samples

tillhub.discounts.get((err, result) => {})

Replace a Discount

Replace an entire discount object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

discountID
required
string

Alphanumeric discount ID

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "amount": null,
  • "currency": "str",
  • "value": -1000000,
  • "rate": 1,
  • "type": "percentage",
  • "behaviors": {
    },
  • "account": "string",
  • "name": "string",
  • "group": "cart",
  • "active": true,
  • "deleted": false,
  • "constraints": {
    },
  • "locations": [
    ],
  • "branch_groups": [
    ],
  • "order": "first",
  • "external_reference_id": "string",
  • "group_on_receipt": false
}

Generic Search Discounts

Make a generic search query for discounts on the name field as a string.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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).

Responses

Request samples

tillhub.discounts.search.get((err, result) => {})

Payment Options

The payment options API.

Create a Payment Option

Create a new payment option of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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)

Responses

Request samples

Content type
application/json
{
  • "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": [
    ],
  • "financial_accounts": [
    ],
  • "card_circuits": [
    ],
  • "price_range": {
    }
}

Get all Payment Options

Query all payment options of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
deleted
string

the string representation of boolean values as false or true

active
string

the string representation of boolean values as false or true

Responses

Request samples

tillhub.payment_options.get((err, result) => {})

Delete a single Payment Option

Delete a single payment option.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

paymentOptionID
required
string

Alphanumeric payment options ID

Responses

Request samples

tillhub.payment_options.delete((err, result) => {})

Get a single Payment Option

Get a single payment option.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

paymentOptionID
required
string

Alphanumeric payment options ID

Responses

Request samples

tillhub.payment_options.get((err, result) => {})

Replace a Payment Option

Replace an entire payment option.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

paymentOptionID
required
string

Alphanumeric payment options ID

Request Body schema: application/json

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)

Responses

Request samples

Content type
application/json
{
  • "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": [
    ],
  • "financial_accounts": [
    ],
  • "card_circuits": [
    ],
  • "price_range": {
    }
}

Expense Accounts

The expense account API.

Create a Expense Account

Create a new expense account of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "active": true,
  • "deleted": false,
  • "name": "Utilities expense",
  • "fa_account_number": "1776",
  • "financial_accounts": [
    ],
  • "type": "expense",
  • "tax": "string",
  • "locations": [
    ],
  • "branch_groups": [
    ],
  • "accepts_booking_from_safe": false
}

Get all Expense Accounts

Query all expense accounts of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 false or true

active
string

the string representation of boolean values as false or true

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

Responses

Request samples

tillhub.expense_accounts.get((err, result) => {})

Delete a single Expense Account

Delete a single expense account.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

expenseAccountID
required
string

Alphanumeric expense accounts ID

Responses

Request samples

tillhub.expense_accounts.delete((err, result) => {})

Get a single Expense Account

Get a single expense account.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

expenseAccountID
required
string

Alphanumeric expense accounts ID

Responses

Request samples

tillhub.expense_accounts.get((err, result) => {})

Replace a Expense Account

Replace an entire expense account.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

exepenseAccountID
required
string

Alphanumeric expense accounts ID

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "active": true,
  • "deleted": false,
  • "name": "Utilities expense",
  • "fa_account_number": "1776",
  • "financial_accounts": [
    ],
  • "type": "expense",
  • "tax": "string",
  • "locations": [
    ],
  • "branch_groups": [
    ],
  • "accepts_booking_from_safe": false
}

Templates

The Templates API.

Create a Document Template

Create a new document template of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

Simple Template

name
string
summary
string
description
string

Responses

Request samples

Content type
application/json
{
  • "name": "A good First template",
  • "summary": "A short summary of a template.",
  • "description": "A description of a template."
}

Response samples

Content type
application/json
{
  • "status": 200,
  • "msg": "string",
  • "count": 1,
  • "results": [
    ]
}

Get all Templates

Query all templates of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Request samples

tillhub.templates.get((err, result) => {})

Delete a single Template

Delete a single template object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

templateID
required
string

Alphanumeric template ID

Responses

Request samples

tillhub.templates.delete((err, result) => {})

Get a single Template

Get a single template object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

templateID
required
string

Alphanumeric template ID

Responses

Request samples

tillhub.templates.get((err, result) => {})

Replace a Template

Replace an entire template object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

templateID
required
string

Alphanumeric template ID

Request Body schema: application/json

Simple Template

name
string
summary
string
description
string

Responses

Request samples

Content type
application/json
{
  • "name": "A good First template",
  • "summary": "A short summary of a template.",
  • "description": "A description of a template."
}

Delivery Notes

The Delivery Notes API.

Create a Delivery Note

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.

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "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": {
    }
}

Response samples

Content type
application/json
{
  • "status": 0,
  • "msg": "Queried Delivery Notes successfully",
  • "count": 1,
  • "results": [
    ]
}

Get all Delivery Notes

Query all delivery_notes of a user.

path Parameters
clientDeliveryNoteID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Request samples

tillhub.delivery_note.get((err, result) => {})

Response samples

Content type
application/json
{
  • "status": 0,
  • "msg": "Queried Delivery Notes successfully",
  • "count": 1,
  • "results": [
    ]
}

Get a single Delivery Note Member

Get a single delivery_note member.

path Parameters
clientDeliveryNoteID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric delivery_note ID

Responses

Request samples

tillhub.delivery_note.get((err, result) => {})

Response samples

Content type
application/json
{
  • "status": 0,
  • "msg": "Queried Delivery Notes successfully",
  • "count": 1,
  • "results": [
    ]
}

Update Delivery Note to status Done

Update a Delivery Note status DONE. The app will discard this savedCart.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Delivery note ids

Request Body schema: application/json

Done a DeliveryNote

invoiced_at
string

Responses

Request samples

Content type
application/json
{
  • "invoiced_at": "2018-05-07T14:35:52.626+02:00 If not set will be set automatically"
}

Response samples

Content type
application/json
{
  • "status": 0,
  • "msg": "Queried Delivery Notes successfully",
  • "count": 1,
  • "results": [
    ]
}

v1: Get all Delivery Notes

Query all delivery notes of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Request samples

tillhub.deliveryNotes.get((err, result) => {})

Response samples

Content type
application/json
{
  • "status": 0,
  • "msg": "Queried Delivery Notes successfully",
  • "count": 1,
  • "results": [
    ]
}

v1: Create a Delivery Note

Creates a new Delivery Note that can be loaded by tillhub client and produce a transaction.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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)

Responses

Request samples

Content type
application/json
{
  • "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": [
    ],
  • "metadata": {
    }
}

Response samples

Content type
application/json
{
  • "status": 0,
  • "msg": "Queried Delivery Notes successfully",
  • "count": 1,
  • "results": [
    ]
}

v1: Replace a Delivery Note

Replace values of a delivery note.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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)

Responses

Request samples

Content type
application/json
{
  • "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": [
    ],
  • "metadata": {
    }
}

Response samples

Content type
application/json
{
  • "status": 0,
  • "msg": "Queried Delivery Notes successfully",
  • "count": 1,
  • "results": [
    ]
}

v1: Get a single Delivery Note Member

Get a single delivery_note member.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

deliveryNoteId
required
string

Alphanumeric client ID of the user

Responses

Request samples

tillhub.deliveryNotes.get((err, result) => {})

Response samples

Content type
application/json
{
  • "status": 0,
  • "msg": "Queried Delivery Notes successfully",
  • "count": 1,
  • "results": [
    ]
}

v1: Get the latest delivery notes

Get the latest delivery notes.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Request samples

tillhub.delivery_notes.get((err, result) => {})

Response samples

Content type
application/json
{ }

v1: Update Delivery Note to Status being Invoiced

Update a Delivery Note status to being invoiced

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Delivery note ID

Request Body schema: application/json
invoiced_at
required
string

Responses

Request samples

Content type
application/json
{
  • "invoiced_at": "2018-05-07T14:35:52.626Z If not set will be set automatically"
}

Response samples

Content type
application/json
{
  • "status": 0,
  • "msg": "Queried Delivery Notes successfully",
  • "count": 1,
  • "results": [
    ]
}

Generate a PDF delivery note

Generate a PDF Delivery Note

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

deliveryNoteUUID
required
string

UUID of delivery note

query Parameters
embed
array of array of strings

current option is "correspondence"; decides if the correspondence object is returned in the response or not

Request Body schema: application/json

delivery note user's preference

object

Responses

Request samples

Content type
application/json
{ }

Send a PDF delivery note via an email

Send a PDF delivery note via an email

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

deliveryNoteUUID
required
string

UUID for delivery note

query Parameters
embed
array of array of strings

current option is "correspondence"; decides if the correspondence object is returned in the response or not

Request Body schema: application/json

recipient's email address

object

Responses

Request samples

Content type
application/json
{ }

Receipts

The Receipts API

Generate a pdf receipt from the request payload

Generate a pdf receipt from the request payload. Returns the generated pdf.

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "receipt_text": "string",
  • "lines": [
    ]
}

Generate a receipt website from the request payload

Generate a receipt website from the request payload. Returns the generated website.

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "receipt_text": "string",
  • "lines": [
    ]
}

v1: Create a Product, V1

Create a new product of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

Simple Product

object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "status": 200,
  • "msg": "string",
  • "count": 1,
  • "results": [
    ]
}

v1: Get all Receipts

Query all receipts

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 id and custom.id (which are aliased on the legacy route). It will default to custom.id on the legacy route

Responses

Request samples

tillhub.receipts.get((err, result) => {})

v1: Get a single Receipt

Get a single receipts object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

receiptID
required
string

Alphanumeric receipt ID

Responses

Request samples

tillhub.receipts.get((err, result) => {})

v1: Get Metadata of Receipts

Get metadata of the receipts model.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Request samples

tillhub.receipts.meta.get((err, result) => {})

Invoices

The Invoices API.

Delete a single invoice

Delete a single invoice object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

invoiceID
required
string

Alphanumeric invoice ID

Responses

Request samples

tillhub.invoices.delete((err, result) => {})

Get a single invoice

Get a single invoice object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

invoiceID
required
string

Alphanumeric configuration ID

Responses

Request samples

tillhub.invoices.get((err, result) => {})

Response samples

Content type
application/json
{ }

Replace an invoice

Replace an entire invoice object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

invoiceID
required
string

Alphanumeric invoice ID

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "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": [
    ],
  • "related_to": [
    ],
  • "depends_on": [
    ],
  • "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
}

Get all invoices

Query all invoices

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 false or true

archived
string

the string representation of boolean values as false or true

Responses

Request samples

tillhub.invoices.get((err, result) => {})

Response samples

Content type
application/json
{ }

Create an invoice

Create a new invoice

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "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": [
    ],
  • "related_to": [
    ],
  • "depends_on": [
    ],
  • "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
}

Response samples

Content type
application/json
{
  • "status": 200,
  • "msg": "string",
  • "count": 1,
  • "results": [
    ]
}

Search in invoices table

Search records in invoices table by search term. Optional: specify column to be returned and fields to be searched in (limited options)

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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.

Responses

Request samples

tillhub.invoices.search.get((err, result) => {})

Safes

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:

  1. A log of operation "start"
  2. Logs of operation "booking", which are split up by currency. They include the amount/currency booked, and also record the safe or bank object information before and after the booking. This can be important for e.g. determining the financial account number at the moment when the transfer happened, regardless of any subsequent changes to the Safes or Expense Account objects.
  3. A log of operation "stop"
All logs will have a common unique id called "transaction_id", to identify logs that belond to one procedure. Furthermore, all logs will include the information of the financial account number and issuer. In case of any failure of creating a log, the process will be rolled back completely - neither any logs will be written, nor any safes amounts changed. However, in case of failure to book the cashflows in the safe, the last log will be of operation "error".

Book a transfer

Book a transfer from one safe to another safe/expense_account or from the POS to a safe.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

safeId
required
string

Alphanumeric ID of the safe, where to book from

Request Body schema: application/json

Booking information

One of
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

Responses

Request samples

Content type
application/json
Example
{
  • "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": [
    ]
}

Response samples

Content type
application/json
{ }

Create a Safe

Create a new safe of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "type": "safe",
  • "account_number": "string",
  • "financial_accounts": [
    ],
  • "name": "string",
  • "custom_id": "string",
  • "cost_center": "string",
  • "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5",
  • "state": { },
  • "limit_upper": [
    ],
  • "limit_lower": [
    ],
  • "items": [
    ],
  • "metadata": { },
  • "deleted": false,
  • "active": true
}

Response samples

Content type
application/json
{
  • "type": "safe",
  • "account_number": "string",
  • "financial_accounts": [
    ],
  • "name": "string",
  • "custom_id": "string",
  • "cost_center": "string",
  • "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5",
  • "state": { },
  • "limit_upper": [
    ],
  • "limit_lower": [
    ],
  • "items": [
    ],
  • "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"
}

Get all Safes

Query all safes

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 false or true

active
string

the string representation of boolean values as false or true

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)

Responses

Request samples

tillhub.safes.get((err, result) => {})

Get a single safe

Get a single safe object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

safeId
required
string

Alphanumeric configuration ID

Responses

Request samples

tillhub.safes.get((err, result) => {})

Response samples

Content type
application/json
{
  • "type": "safe",
  • "account_number": "string",
  • "financial_accounts": [
    ],
  • "name": "string",
  • "custom_id": "string",
  • "cost_center": "string",
  • "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5",
  • "state": { },
  • "limit_upper": [
    ],
  • "limit_lower": [
    ],
  • "items": [
    ],
  • "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"
}

Get Metadata of Safes

Get metadata of the Safes model.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Request samples

tillhub.safes.meta.get((err, result) => {})

Get all safes logs

Query all safes logs with optional filter for transaction_id (booking id)

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 created_at and 'initiated_at'. To indicate the sorting order, add a + or - for asc/desc order, e.g. %2Bdcreated_at.

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 format=csv. Currently CSV is the only supported type

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'

Responses

Request samples

tillhub.safes.logs.get((err, result) => {})

Get meta data for safe logs

Get meta data for safe logs

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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'

Responses

Request samples

tillhub.transactions.legacy.meta.get((err, result) => {})

Update a Safe

Update parts of a safe object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

safeId
required
string

Alphanumeric safe ID

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "type": "safe",
  • "account_number": "string",
  • "financial_accounts": [
    ],
  • "name": "string",
  • "custom_id": "string",
  • "cost_center": "string",
  • "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5",
  • "state": { },
  • "limit_upper": [
    ],
  • "limit_lower": [
    ],
  • "items": [
    ],
  • "metadata": { },
  • "deleted": false,
  • "active": true
}

Response samples

Content type
application/json
{
  • "type": "safe",
  • "account_number": "string",
  • "financial_accounts": [
    ],
  • "name": "string",
  • "custom_id": "string",
  • "cost_center": "string",
  • "location": "15f20760-76a7-41ee-b509-705d3ffd8eb5",
  • "state": { },
  • "limit_upper": [
    ],
  • "limit_lower": [
    ],
  • "items": [
    ],
  • "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"
}

Cashier Counting Protocols

The Cashier Counting Protocols API.

Soft delete a single cashier counting protocol

Soft delete a single cashier counting protocol object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric cashier counting protocol ID

Responses

Request samples

tillhub.cashier_counting_protocols.delete((err, result) => {})

Response samples

Content type
application/json
{
  • "status": 200,
  • "msg": "Deleted cashier counting protocol 96341e35-0fe1-4b72-89bc-6f62e9114ac6",
  • "request": {
    }
}

Get a single cashier counting protocol

Get a single cashier counting protocol object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric cashier_counting_protocols ID

Responses

Request samples

tillhub.cashier_counting_protocols.get((err, result) => {})

Update cashier counting protocol

Update an entire cashier counting protocol object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric cashier counting protocol ID

Request Body schema: application/json

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)

Responses

Request samples

Content type
application/json
{
  • "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": [
    ],
  • "timezone": { },
  • "deleted": false,
  • "counting_type": "opening",
  • "counting_date": "2018-11-04T23:18:43.075Z",
  • "total_counted": [
    ],
  • "total_calculated": [
    ],
  • "discrepancy_total": [
    ],
  • "has_discrepancy": false,
  • "counting_tips": [
    ],
  • "balance_number": 3,
  • "balance_custom_id_last": "2",
  • "balance_last": "9d20d799-b6e0-46a0-9e48-7ca372af13d4",
  • "merchant_receipt": "string"
}

Get all cashier counting protocols

Query all cashier counting protocols of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 false or true

Responses

Request samples

tillhub.cashier_counting_protocols.get((err, result) => {})

Create a cashier counting protocol

Create a new cashier counting protocol of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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)

Responses

Request samples

Content type
application/json
{
  • "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": [
    ],
  • "timezone": { },
  • "deleted": false,
  • "counting_type": "opening",
  • "counting_date": "2018-11-04T23:18:43.075Z",
  • "total_counted": [
    ],
  • "total_calculated": [
    ],
  • "discrepancy_total": [
    ],
  • "has_discrepancy": false,
  • "counting_tips": [
    ],
  • "balance_number": 3,
  • "balance_custom_id_last": "2",
  • "balance_last": "9d20d799-b6e0-46a0-9e48-7ca372af13d4",
  • "merchant_receipt": "string"
}

Get the latest cashier counting protocols

Get the latest cashier counting protocol object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Request samples

tillhub.cashier_counting_protocols.get((err, result) => {})

Response samples

Content type
application/json
{
  • "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": [
    ],
  • "timezone": { },
  • "deleted": false,
  • "counting_type": "opening",
  • "counting_date": "2018-11-04T23:18:43.075Z",
  • "total_counted": [
    ],
  • "total_calculated": [
    ],
  • "discrepancy_total": [
    ],
  • "has_discrepancy": false,
  • "counting_tips": [
    ],
  • "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 protocols

Get the meta info of cashier counting protocol object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 false or true

Responses

Request samples

tillhub.cashier_counting_protocols.get((err, result) => {})

Vouchers

Updating a Voucher

Vouchers can be updated in several ways

  • using the /increment route to increment monetary values
  • using the /decrement route to decrement monetary values
  • using the PATCH on the voucher id to manipulate any value

Keeping Track of Changes

All 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.

Keeping Track of Changes caused by Specific Users

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"
    }
  }
}

Voucher Hooks

Some endpoints are able to use custom hooks in order to customize endpoint behavior.

The following overview shows

  • which endpoint uses hooks
  • where it will look for the definition of the hook
  • the body that the hook will be called with
  • the response that is expected from the hook
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.



Model

Loyalties

The core loyalties API.

Model

Telemetry

Consumer telemtry API.

Create Telemetry Object

Store and create telemetry object.

Request Body schema: application/json

Any error object.

object

Responses

Request samples

Content type
application/json
{ }

Store Client Logs as File

Store logs as file. If processing is doen, it will be out of band. The maximum file size is 100mb.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/x-www-form-urlencoded
logs
required
string <binary>

file to upload

Responses

Request samples

tillhub.telemetries.logs.files.post((err, result) => {})

Get all Log Files

Get all log files of a client

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Request samples

tillhub.telemetries.logs.files.get((err, result) => {})

Get a Log File Download URL

Get a log file download URL

path Parameters
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.

Responses

Request samples

tillhub.telemetries.logs.files.get((err, result) => {})

Check for and Execute a Migration

Check for and execute a migration if a client account needs one.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

Migration description object.

object

Responses

Request samples

Content type
application/json
{ }

Check for the Status of a Migration

Check for the status of a migration.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

migrationID
required
string

Alphanumeric ID of of a migration

Responses

Request samples

tillhub.telemetries.migrations.check.post((err, result) => {})

Metrics

The Metrics API.

Get Reuest Metrics

Get requests metrics of a client account.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Functions

The Functions API.

Create a Function

Create a new function of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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)

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "runtime": "pos",
  • "type": "pubsub",
  • "function": "string",
  • "topic": "string",
  • "handler": "string",
  • "deps": "string",
  • "client_id": "string",
  • "active": true,
  • "deleted": false,
  • "configuration": {
    },
  • "locations": [
    ],
  • "branch_groups": [
    ]
}

Response samples

Content type
application/json
{ }

Get all Functions

Query all functions of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 false or true

active
string

the string representation of boolean values as false or true

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)

Responses

Request samples

tillhub.functions.get((err, result) => {})

Delete a single Function

Delete a single function object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

functionID
required
string

Alphanumeric function ID

Responses

Request samples

tillhub.functions.delete((err, result) => {})

Get a single Function

Get a single function object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

functionID
required
string

Alphanumeric function ID

Responses

Request samples

tillhub.functions.get((err, result) => {})

Replace a Function

Replace an entire function object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

functionID
required
string

Alphanumeric function ID

Request Body schema: application/json

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)

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "runtime": "pos",
  • "type": "pubsub",
  • "function": "string",
  • "topic": "string",
  • "handler": "string",
  • "deps": "string",
  • "client_id": "string",
  • "active": true,
  • "deleted": false,
  • "configuration": {
    },
  • "locations": [
    ],
  • "branch_groups": [
    ]
}

Get all Supported Topics

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

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
path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Request samples

tillhub.functions.topics.get((err, result) => {})

Statics

The Static Data API.

Get Static Data

Get static data based on provided data point name

path Parameters
data
required
string

Name of static

query Parameters
currency_iso_code
string

specific filter for top level currency parameter in cash_units

Responses

Request samples

tillhub.statics.get((err, result) => {})

Notifications

The Notifications API

Compile JS code to ES5

Compile provided valid JS code to JavaScript's ES5 version

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

Any error object.

any

Responses

Request samples

Content type
application/json
null

Send Emails with Delivery Notes to Customers

Send emails with delivery notes to customers, with attached PDF.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "html": "string",
  • "email": "string",
  • "lines": [
    ],
  • "template": { }
}

Send Emails with Invoices to Customers

Send emails with invoices to customers, with attached PDF.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "html": "string",
  • "email": "string",
  • "lines": [
    ],
  • "template": { }
}

Send Emails with Receipts to Customers

Send emails with receipts to customers, with attached PDF.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
embed
array of array of strings

current option is "correspondence"; decides if the correspondence object is returned in the response or not

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "receipt_text": "string",
  • "email": "string",
  • "lines": [
    ],
  • "template": { }
}

Send Emails for Never out of Stock

Send emails with never out of stock, with attached PDFs.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

Any error object.

object

Responses

Request samples

Content type
application/json
{ }

Send Emails with Delivery Note to Customers

Send emails with delivery note to customers, with attached PDF.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

Any error object.

email
required
string

email address of customer

invoice
object

object of delivery note data

Responses

Request samples

Content type
application/json
{
  • "email": "string",
  • "invoice": { }
}

Send Emails with Full Receipt to Customers

Send emails with full receipt to customers, with attached PDF.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

Any error object.

email
required
string

email address of customer

invoice
object

object of full receipt data

Responses

Request samples

Content type
application/json
{
  • "email": "string",
  • "invoice": { }
}

Send Emails with Invoices to Customers

Send emails with invoices to customers, with attached PDF.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

Any error object.

email
required
string

email address of customer

invoice
object

object of invoice data

Responses

Request samples

Content type
application/json
{
  • "email": "string",
  • "invoice": { }
}

Messages

The Messages API.

Create a message

Create a new message.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "message": "string",
  • "invoked_at": "2019-08-24T14:15:22Z",
  • "consumer_type": "string",
  • "channel": "string",
  • "level": "string",
  • "type": "string",
  • "payload": { },
  • "metadata": {
    },
  • "ignorable": true,
  • "ignored": true,
  • "read": true,
  • "read_at": "2019-08-24T14:15:22Z",
  • "deleted": false,
  • "progress": { },
  • "client_account": "string",
  • "counter": 0
}

Response samples

Content type
application/json
{ }

Get all Messages

Query all Messages

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Request samples

tillhub.messages.get((err, result) => {})

Replace a Message

Replace an entire message object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

messageID
required
string

Alphanumeric messages ID

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "message": "string",
  • "invoked_at": "2019-08-24T14:15:22Z",
  • "consumer_type": "string",
  • "channel": "string",
  • "level": "string",
  • "type": "string",
  • "payload": { },
  • "metadata": {
    },
  • "ignorable": true,
  • "ignored": true,
  • "read": true,
  • "read_at": "2019-08-24T14:15:22Z",
  • "deleted": false,
  • "progress": { },
  • "client_account": "string",
  • "counter": 0
}

Create a tag

Create a new tag.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

Simple Tag

required
string or (any or null)
integer or (any or null)
integer or (any or null)
deleted
boolean
Default: false

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "update_id": 0,
  • "legacy_id": 0,
  • "deleted": false
}

Response samples

Content type
application/json
{ }

Reasons

The Reasons API.

Delete a single Reason

Delete a single reason object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

accountID
required
string

Alphanumeric reason ID

Responses

Request samples

import * as tillhub from '@tillhub/javascript-sdk'
const { data: reasons } = await tillhub.reasons().delete('0b99513a-6d97-4111-88db-81e930611656)

Response samples

Content type
application/json
{
  • "status": 200,
  • "msg": "Deleted reason f3afd983-6bc9-4eea-af25-b20f0356b10a",
  • "request": {
    }
}

Create a Reason

Create a new reason of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "name": "Returned goods",
  • "description": "Goods were returned by the customer",
  • "behavior": {
    },
  • "deleted": false,
  • "active": true,
  • "type": "expense",
  • "noted_required": false,
  • "image_required": false,
  • "approval_required": false
}

Response samples

Content type
application/json
{
  • "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": {
    },
  • "deleted": false,
  • "active": true,
  • "type": "expense",
  • "noted_required": false,
  • "image_required": false,
  • "approval_required": false
}

Get a single reason

Get a single reason object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

reasonId
required
string

Alphanumeric configuration ID

Responses

Request samples

import * as tillhub from '@tillhub/javascript-sdk'
const { data: reasons } = await tillhub.reasons().get('0b99513a-6d97-4111-88db-81e930611656')

Response samples

Content type
application/json
{
  • "msg": "Queried transactions successfully.",
  • "msg_localised": "Abgefragte Transaktionen erfolgreich.",
  • "request": {},
  • "count": 1,
  • "results": [
    ]
}

Get Metadata of Reasons

Get metadata of the Reasons model.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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)

Responses

Request samples

curl 'https://api.tillhub.com/api/v0/reasons/58b4ff3f-73dd-4712-a732-388127a52217/meta' \
-H 'authorization: Bearer ***' \

Update a Reason

Update parts of a reason object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

reasonId
required
string

Alphanumeric reason ID

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "name": "Returned goods",
  • "description": "Goods were returned by the customer",
  • "behavior": {
    },
  • "deleted": false,
  • "active": true,
  • "type": "expense",
  • "noted_required": false,
  • "image_required": false,
  • "approval_required": false
}

Response samples

Content type
application/json
{
  • "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": {
    },
  • "deleted": false,
  • "active": true,
  • "type": "expense",
  • "noted_required": false,
  • "image_required": false,
  • "approval_required": false
}

Custom Hooks

The Custom Hooks API.

Soft delete a single custom hook

Soft delete a single custom hook object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric custom hooks ID

Responses

Request samples

tillhub.custom_hooks.delete((err, result) => {})

Response samples

Content type
application/json
{
  • "status": 200,
  • "msg": "Deleted custom hook 96341e35-0fe1-4b72-89bc-6f62e9114ac6",
  • "request": {
    }
}

Get a single custom hook

Get a single custom hook object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric custom hook ID

Responses

Request samples

tillhub.custom_hooks.get((err, result) => {})

Update custom hook

Update an entire custom hook object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

id
required
string

Alphanumeric custom hooks ID

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "event": "on_scan",
  • "context": [
    ],
  • "hook": "string",
  • "auth": {
    }
}

Get all custom hooks

Query all custom hooks of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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 false or true

Responses

Request samples

tillhub.custom_hooks.get((err, result) => {})

Create a custom hooks

Create a new custom hooks of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "event": "on_scan",
  • "context": [
    ],
  • "hook": "string",
  • "auth": {
    }
}

Response samples

Content type
application/json
{ }

Trash

The Trash API.

Get all deleted resources

Query all deleted resources of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Request samples

tillhub.trash.get((err, result) => {})

Recover a deleted resource

Recover a deleted resource.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Request samples

tillhub.trash.put((err, result) => {})

Dependencies

The Dependencies API.

Get the resource masterdata dependencies.

Get the resource masterdata dependencies.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
type
required
string
Enum: "tax_account" "revenue_account" "product_group"

The resource type

resource
required
string

Alphanumeric ID of the resource

Responses

Request samples

tillhub.dependencies.get((err, result) => {})

Search

The searchable resources.

Generic Search Branches

Make a generic search query for branches on the name, number, addresses.street, addresses.locality, and addresses.postal_code fields as a string.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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).

Responses

Request samples

import * as tillhub from '@tillhub/javascript-sdk'
const { data: branches } = await tillhub.branches().search('flagship')

Generic Search Discounts

Make a generic search query for discounts on the name field as a string.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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).

Responses

Request samples

tillhub.discounts.search.get((err, result) => {})

Generic Search Product Groups

Make a generic search query for product groups on the name field as a string.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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).

Responses

Request samples

tillhub.product_groups.search.get((err, result) => {})

Fuzzy Search Products

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.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Request samples

tillhub.products.search.get((err, result) => {})

Fuzzy Search Products V3

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.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Request samples

tillhub.products.search.get((err, result) => {})

Response samples

Content type
application/json
{
  • "msg": "Product search and suggestion successful.",
  • "msg_localised": "Abgefragte Transaktionen erfolgreich.",
  • "request": {},
  • "count": 10,
  • "results": {
    },
  • "status": 200
}

Generic Search Registers

Make a generic search query for registers on the name and number field as a string.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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).

Responses

Request samples

tillhub.registers.search.get((err, result) => {})

Generic Search Staffs

Make a generic search query for staffs on the name field as a string.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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).

Responses

Request samples

tillhub.staff.search.get((err, result) => {})

Generic Search Warehouses

Make a generic search query for warehouses on the name field as a string.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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).

Responses

Request samples

tillhub.warehouses.search.get((err, result) => {})

Service Categories

The Service Categories API.

Get all Service Categories

Query all service_categories of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

query Parameters
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

Responses

Request samples

tillhub.service_categories.get((err, result) => {})

Create a service category

Create a new service category of a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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.

Responses

Request samples

Content type
application/json
{
  • "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
}

Response samples

Content type
application/json
{
  • "msg": "Queried transactions successfully.",
  • "msg_localised": "Abgefragte Transaktionen erfolgreich.",
  • "request": {},
  • "count": 1,
  • "results": [
    ]
}

Replace a Service Category

Replace an entire service category object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

serviceCategoryID
required
string

Alphanumeric service category ID

Request Body schema: application/json

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.

Responses

Request samples

Content type
application/json
{
  • "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
}

Response samples

Content type
application/json
{
  • "msg": "Queried transactions successfully.",
  • "msg_localised": "Abgefragte Transaktionen erfolgreich.",
  • "request": {},
  • "count": 1,
  • "results": [
    ]
}

Services

The Services API.

Create a service

Create a new service for a user.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Request Body schema: application/json

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)

Responses

Request samples

Content type
application/json
{
  • "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": [
    ],
  • "metadata": { },
  • "audiences": [
    ],
  • "keywords": [
    ],
  • "categories": [
    ],
  • "custom_ids": { },
  • "related_to": [
    ],
  • "similar_to": [
    ],
  • "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",
  • "images": {},
  • "summary": "string",
  • "insert_id": 0,
  • "product_group": "string",
  • "taxes_options": [
    ],
  • "manufacturers": [
    ],
  • "duration": 30,
  • "linked_product": "05297f58-3408-44d0-8bf4-125d4e86c08a",
  • "locations": [
    ]
}

Response samples

Content type
application/json
{
  • "msg": "Queried transactions successfully.",
  • "msg_localised": "Abgefragte Transaktionen erfolgreich.",
  • "request": {},
  • "count": 1,
  • "results": [
    ]
}

Updates a Service

Updates a service object.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

productServiceID
required
string

Alphanumeric product service ID

Request Body schema: application/json

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)

Responses

Request samples

Content type
application/json
{
  • "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": [
    ],
  • "metadata": { },
  • "audiences": [
    ],
  • "keywords": [
    ],
  • "categories": [
    ],
  • "custom_ids": { },
  • "related_to": [
    ],
  • "similar_to": [
    ],
  • "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",
  • "images": {},
  • "summary": "string",
  • "insert_id": 0,
  • "product_group": "string",
  • "manufacturers": [
    ],
  • "duration": 30,
  • "linked_product": "05297f58-3408-44d0-8bf4-125d4e86c08a",
  • "locations": [
    ]
}

Response samples

Content type
application/json
{
  • "msg": "Queried transactions successfully.",
  • "msg_localised": "Abgefragte Transaktionen erfolgreich.",
  • "request": {},
  • "count": 1,
  • "results": [
    ]
}

Holidays

The Holidays API.

Get public holidays

Query all public holidays for supported countries.

path Parameters
clientAccountID
required
string

Alphanumeric client ID of the user

Responses

Request samples

tillhub.holidays.get((err, result) => {})