NAV
Samples

Introduction

sticky.de offers you JSON API access so that you can access your company or user profile to automate calls or processes.

Endpoints

We provide our API in production as well as in a sandbox environment.

Production System

https://app.sticky.de

Sandbox System

https://dvl.sticky.de

Please note:

Authentication

Sample request

curl https://dvl.sticky.de
-X POST
-H "Content-Type: application/json"
-H "Accept: application/json"
-H "Sticky-Token: 2a3b301d-73c9-e31b-eab4-xxxxxxxxxxxx" 
-H "Sticky-User: 5ef5d753a91766xxxxxxxxxx"
-H "Sticky-Company: 2f8c1f2bcfa625xxxxxxxxxx"
-d '
{
  ... JSON payload ...
}
'

Authentication on the Sticky API always consists of three different "tokens". These three tokens are specified as HTTP headers with each call. API access is disabled for users by default. You can activate the API for your account in your profile under the API access menu item, where you will also find the three tokens.

Tokens

Title Length Description
Sticky-Token 36-digits This token is your personal secret
Sticky-User 24-digits This token identifies the user context
Sticky-Company 24-digits This token identifies the company context

In Sticky, it is of course possible for you as a user to have access to multiple companies with a single account. For this reason, you specify both your user context (which user rights you want to act with) and a company context (which company you want to act in) in an API call.

Logging

All API calls (including the parameters transmitted in each case) are logged in your company log.

Request

Sample cURL request

curl https://dvl.sticky.de \ 
-X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "Sticky-Token: 2a3b301d-73c9-e31b-eab4-xxxxxxxxxxxx" \ 
-H "Sticky-User: 5ef5d753a91766xxxxxxxxxx" \ 
-H "Sticky-Company: 2f8c1f2bcfa625xxxxxxxxxx"
-d '
{
  "m": "articles",
  "method": "create_article",
  "msg": {
    "title": "Reifen",
    "type": "product",
    "unit_name": "Stück",
    "price_net": 16.99,
    "tax_rate": 19
  }
}
'

Sample PHP request

$ch = curl_init();
curl_setopt_array($ch, [
    CURLOPT_URL => 'https://dvl.sticky.de',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 10,
    CURLOPT_POST => true,
    CURLOPT_HTTPHEADER => [
        "Content-Type: application/json",
        "Accept: application/json",
        "Sticky-Token: 2a3b301d-73c9-e31b-eab4-xxxxxxxxxxxx",
        "Sticky-User: 5ef5d753a91766xxxxxxxxxx",
        "Sticky-Company: 2f8c1f2bcfa625xxxxxxxxxx",
    ],
    CURLOPT_POSTFIELDS => json_encode([
        "m" => "articles",
        "method" => "create_article",
        "msg" => [
            'title' => 'Reifen',
            'type' => 'product',
            'unit_name' => 'Stück',
            'price_net' => 16.99,
            'tax_rate' => 19
        ]
    ]),
]);

$response = curl_exec($ch);
curl_close($ch);

$response_decoded = json_decode($response, true);
print_r($response_decoded);

Sample Javascript request

"use strict";

let api_request = await fetch("https://dvl.sticky.de", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Sticky-Token": '2a3b301d-73c9-e31b-eab4-xxxxxxxxxxxx',
    "Sticky-User": '5ef5d753a91766xxxxxxxxxx',
    "Sticky-Company": '2f8c1f2bcfa625xxxxxxxxxx'
  },
  body: JSON.stringify({
    m: "articles",
    method: "create_article",
    "msg": {
        "title": "Reifen",
        "type": "product",
        "unit_name": "Stück",
        "price_net": 16.99,
        "tax_rate": 19
    }
  })
});

let response = await api_request.json();
console.log(response);

Our API expects basic POST requests with a JSON payload and the following properties.

Property Datatype Required Description
m string Yes used "module"
method string Yes used "method"
c string No depend on method
msg string / object No depend on method
id string No depend on method

Response

Sample response payload

{
  "src": "server",
  "time": 1656960905,
  "module": "articles",               
  "method": "create_article",
  "msg": "ok",
  "id": "103ed61f-2b76-4780-a0a0-8421750a7b15",
}

Sample response payload with an array as payload

{
  "src": "server",
  "time": 1656960905,
  "module": "articles",
  "method": "get_all",
  "msg": {
    [
      { "id": 1234, "title": "Datensatz Titel 1", ... },
      { "id": 1235, "title": "Datensatz Titel 2", ... }
    ]
  },
  "id": ""
}

Sample response payload with an error

{
  "src": "server",
  "time": 1656960905,
  "module": "system",
  "method": "access",
  "msg": "ERROR_API_INVALID_USER",
  "id": "",
  "error": 1
}

Endpoints return JSON formated responses with the following properties.

Property Datatype Required Description
src string Yes source of this packet. Here it is "server" every time
time int Yes serverside timestamp at packet creation
module string Yes used module
method string Yes used method
msg string / array / object Yes the response to your request
id string Yes if a new resource has been created, its ID is returned.
error bool No true if an error occurs, otherwhise this property did not exists

Scopes: Modules

Here you will find a list of all documented endpoints. If you find something missing, just let us know or send us an email at support@sticky.de.

We are sure that the endpoint you are looking for already exists, but it has not yet anybody wrote it into the documentation ;-}

Articles

Create article

Sample request

{
  "m": "articles",               
  "method": "create_article",
  "msg": {
        "title": "Reifen",
        "type": "product",
        "unit_name": "Stück",
        "price_net": 16.99,
        "tax_rate": 19
    }
}

Sample response

{
    "src": "server",
    "time": 1757673247,
    "module": "articles",
    "method": "create_article",
    "msg": "ok",
    "id": "103ed61f-2b76-4780-a0a0-8421750a7b15"
}
Property Datatype Required Description
m string Yes static: articles
method string Yes static: create_article
msg object Yes see below
------------------------- ---------- ---------- -------------------------------------------------------------------
➝ title string Yes
➝ description string No
➝ type string Yes service or product
➝ article_number string No has to be unique. Maximum length is 18 chars.
➝ gtin string No GTIN (Global Trade Item Number)
➝ note string No
➝ unit_name string Yes if the unit does not yet exist, it will be created automatically.
➝ price_net float Yes
➝ tax_rate int Yes 0, 7 or 19

Possible error messages

Scopes: Company

Here you will find a list of all documented endpoints. If you find something missing, just let us know or send us an email at support@sticky.de.

We are sure that the endpoint you are looking for already exists, but it has not yet anybody wrote it into the documentation ;-}

Scopes: User

Here you will find a list of all documented endpoints. If you find something missing, just let us know or send us an email at support@sticky.de.

We are sure that the endpoint you are looking for already exists, but it has not yet anybody wrote it into the documentation ;-}

Historical information

Name change Lexware Office (formerly lexoffice)

The product "lexoffice" was renamed "Lexware Office" on October 1, 2024. Internally, Sticky continues to refer to the connection as "lexoffice". This means that in all API requests, the string "lexoffice" must continue to be used as the "source" if the connection to "Lexware Office" is to be used as the source.