Expenses

The Expenses Import Endpoint

https://{BASE_URL}/imports/expenses

All import integration endpoints use the same authentication parameters, please see Authentication page for more details.

Advanced Expense Import Parameters

When importing Expenses you can additionally specify which Markets you wish to import for. The default market is dk (Denmark).

This default can be overridden by the query parameter markets. The value for the parameter is a comma separated lists of markets.

E.g.:

https://{BASE_URL}/imports/expenses?markets=dk,se,no&...

For further clarification of the Market concept, please read the Vocabulary.

Importing Expenses

Send a POST request to the endpoint with the parameters specified above.

The body of the POST request must be a JSON object with the following layout:

{
    "expenses": [
        [expense A],
        [expense B],
        ...
    ]
}

The definition of the Expense model can be found in the Models document. The minimal data required for an expense is an id and a name:

{
    "expenses": [
        {
            "id": "0001",
            "name": "Catering"
        },
        {
            "id": "0002",
            "name": "External catering"
        }
    ]
}

NOTE

When expenses are imported into the Ka-ching system, the id will be used as a unique key.

One limitation in the database we are using (the Firebase real-time database) is that not all characters are valid to use in keys.

This means that the following list of characters may not be used in the "id" field of an expense: ., /, #, $, *, [ and ]

The only other property of an expense is a list of taxes.

By not specifying any taxes, the default value added taxes for the relevant market will be used.

Note that the value added taxes of an expense are 'incoming taxes' while taxes from sold goods are 'outgoing taxes'. They will be registered as such on the Z-report.

Different countries have different value added taxes for different kinds of expenses. In Denmark we have a lowered VAT for dining out with clients ('repræsentation'). We have no VAT for catering at the shop - for instance when buying pizzas when doing stock counts. And finally we have regular VAT when buying items relevant to running the shop - paper, scissors, etc.

In order to specify 'no VAT' you need to add a tax with 0% since just leaving out the tax means that the default tax for the market is being applied.

Importing expenses with specific taxes

{
    "expenses": [
        {
            "id": "0001",
            "name": "Forplejning",
            "taxes": [ {
                    "name": "Ingen moms",
                    "rate": 0,
                    "type": "vat"
            } ]
        },
        {
            "id": "0002",
            "name": "Forplejning ude af huset",
            "taxes": [ {
                    "name": "Kvartmoms",
                    "rate": 0.0625,
                    "type": "vat"
            } ]
        }
    ]
}

Importing expenses with market specific taxes

If you import the same expenses for several different markets, you can specify an array of taxes per market as follows:

{
    "expenses": [
        {
            "id": "0001",
            "name": "Forplejning",
            "taxes": {
                "da": [ {
                        "name": "Ingen moms",
                        "rate": 0,
                        "type": "vat"
                } ],
                "no": [ {
                        "name": "Lav moms",
                        "rate": 0.01,
                        "type": "vat"
                } ],
            }
        },
        {
            "id": "0002",
            "name": "Forplejning ude af huset",
            "taxes": {
                "da": [ {
                        "name": "Kvartmoms",
                        "rate": 0.0625,
                        "type": "vat"
                } ],
                "no": [ {
                        "name": "Halvmoms",
                        "rate": 0.125,
                        "type": "vat"
                } ],
            }
        }
    ]
}

Deleting Expenses

Send an HTTP DELETE request to the endpoint with a body containing a JSON object containing expense ids to delete.

{
  "ids": ["0001", "0002"]
}