Introduction

The Risika API uses JWT (JSON Web Token) for authorization. If you don't have token yet, please contact your sales representative or see our website for prices.

The API is REST-based and you authorize requests to the API by providing your authorization token in the request header. The authorization token you need to use depends on what type of request you want to make. There is an refresh token that works as your identity. It is used to generate access tokens that are used to request data from the API: e.g. get financial information for a given company.

We recommend that you see ID Types before you read about the end-points, since these types will be used throughout the documentation.

Headers

All the endpoints require an authorization token (access or refresh token) with the Authorization header. You should also specify the Content-Type header as "application/json", but this is the only supported format, so consider it optional.

Some endpoints also allow you to specify an Accept-Language header to get the text in different languages. We currently support Danish and English with the following codes, respectively: da-DK, en-UK.

Rate Limiting

To help provide a stable API for everyone, the API uses rate limiting to ensure everyone can get their requests through. The rates are shown in the table below. All tiers have a possiblity to send bursts, which gives added flexibility, if the rate limit have to be exceeded for a while. Sustained load have to be below the rate limit. If the limit is exceeded, the server will return HTTP status 429 Too Many Requests.

Rates are subject to change without warning, so it is recommended to always wrap an API call with a retry-function, if the server should return 429 Too Many Requests. At time of writing, all end-points use the same limit, but this may change in the future.

Your tier is, by default, determined by your subscription plan, but can be changed if your use case requires a higher limit.

Tier Limit Burst Included in plans
Tier 1 2 requests per second 50 Freemium, Trial
Tier 2 4 requests per second 50 Basic, Standard
Tier 3 10 requests per second 1000 Pro, Enterprise
Tier 4 100 requests per second 1000 Upon request

Notes about anonymous Swedish companies

In Sweden, sole proprietorships use the owner's social security number to identify the company. This means that the ID of the company is private and it should not be publicly available. This means that queries on the platform will only show an anonymized company ID for sole proprietorships.

If you are trading with this company, you will usually get their company ID for invoices. If you have the company ID, you can use it to query the company directly as you would with Danish and Norweigan companies.

If you don't have the company ID (e.g. used the search end-point to find it), you get a unique hash instead. This hash can be used as an alternative to the company ID for Swedish companies. The hash is only necessary for sole proprietorships, but can be used for all Swedish companies.

As an example, you can query this sole proprietorship using their hash:

GET https://api.risika.dk/v1.2/se/company/basics/c5003dc23321660c66e90d6ee5303b4c

"local_organization_id": {
    "country": "SE",
    "hash": "c5003dc23321660c66e90d6ee5303b4c",
    "id": "161025XXXX"
}

You can also query IKEA, which is not a sole proprietorship with their hash:

GET https://api.risika.dk/v1.2/se/company/basics/5bb0a470e09b3629ab23d6beae2ecea4

"local_organization_id": {
    "country": "SE",
    "hash": "5bb0a470e09b3629ab23d6beae2ecea4",
    "id": "5568099963"
}

Access Token

Access tokens give you temporary access to all your resources while off-loading traffic from our user servers and gives you faster response times.

The access token has a payload with all the information we need about you to authorize your requests. The access token contains an expiration timestamp, which you should check in your script automatically and request a new access token when it is about to expire. The expiration timestamp can be found by decoding the JWT and extracting the JSON-object inside it.

You can learn more about JWT at jwt.io.

Generate an access token

Using this endpoint, you can generate an access token from your refresh token. Your refresh token is permanent, while the access token only lives for a while. This is done to improve security and offload the API servers. After the 10 minute timeframe, you can request a new one.

GET
/access/refresh_token

Example request

r = requests.get("https://api.risika.dk/v1.2/access/refresh_token",
                 headers={"Authorization": <refresh_token>,
                          "Content-Type": "application/json"})
token = r.json().get("token")

Example response

{
  "token": "jwt eyJ0eXAiOiJKV1QiLCJhbG ..."
}

Create an Access Class

NB: Not available for cURL

Copy the code from the example and replace "jwt ..." with your token in self._refresh_token. After that, you should be able to initialize the class with access = Access(). You can then use the class property access.token as a variable, which will always have a valid access token. If the token expires, if will automatically request a new one.

When installing dependencies, please note that jwt is installed with pip install pyjwt. The version of jwt you get from pip install jwt is not compatible!

Access Class

import requests
import time
import jwt  # install with "pip install pyjwt", NOT "pip install jwt"


class Access():
    def __init__(self):
        self._url = "https://api.risika.dk/v1.2"
        self._refresh_token = "jwt ..."

        self._access_token = None
        self._expires = None

        self._refresh()

    def _refresh(self):
        # Get an access token using our refresh token
        r = requests.get("%s/access/refresh_token" % self._url,
                         headers={"Authorization": self._refresh_token,
                                  "Content-Type": "application/json"})

        # Save the access token for calls to self.token()
        self._access_token = r.json()["token"]

        # Skip the prepended "jwt" and extract the expiration time from the JWT.
        # We do not have the token secret, so verification is not possible.
        token = jwt.decode(self._access_token[4:], options={"verify_signature": False})
        self._expires = token["exp"]

    @property
    def token(self):
        if self._expires < time.time():
            self._refresh()

        return self._access_token


access = Access()
r = requests.get("https://api.risika.dk/v1.2/dk/company/basics/37677892",
                 headers={"Authorization": access.token,
                          "Accept-Language": "da-DK",
                          "Content-Type": "application/json"})

print(r.json())

Company Information

The end-points that starts with /{country}/company/ offers general infomation the company such as address, phone number, number of employees and people who are related to the company.

Company Basics

To get the general infomation about a company, you make a request to GET /{country}/company/basics/{local_id}.

{country} is a two letter code for the country you want to query from (ISO 3166-1 Alpha-2). The countries supported can be found in ID Types.

This end-point supports the Accept-Language header described in Headers.

Expand Endpoint Description to see description and definitions.

Endpoint Description

Table with brief descriptions of all variables delivered by Company Basics:

Value Description
local_organization_id The local id and country code of the company requested
address The address with city, coname, number, street, country, zipcode, postdistrict. Values may be null.
status The status of the company. See Company Status for full list of statuses. This end-point change language depending on Accept-Language
status_code Shows the same information as status, but is not affected by Accept-Language
advertisement_protection true/false whether the contact information can be used for advertisement. See advertisement protection for more information.
audit_selected true/false whether this company has a been financially audited
financial_reports true/false whether this company has or is able to submit financial reports
main_industry_code See industry for more information.
secondary_industry_codes The secondary industry code
number_of_employees The number of employees in intervals (1, 2-4, 5-9, 10-19, 20-49, 50-99, 100-199, 200-499, 500-999, 1000+) or the specific count
last_report_date The date of the last report, if it has any
date_of_incorporation The date of which the company was established
company_type See company type for more information.
score The current risika score of the company
score_data The current risika score for both BOHR and NEWTON
risk_assessment Shows a risk assessment for companies that cannot have a risika score (e.g. ENK companies in Denmark)
risk_assessment_code Shows the same information as risk_assessment_code, but is not affected by Accept-Language. The value can be HIGH, MEDIUM, LOW
registered_capital The registered capital in the company. See registered capital for more information.
company_name The primary name of the company
company_secondary_names A list of aliases for the company
holding_company Some holding companies does not have the correct industry. This value shows if our analysis proves this should be a holding company. See holding company for more information.
powers_to_bind A description of who has the powers to sign binding documents. See powers to bind for more information.
email The email of the company and whether or not it can be used for advertisement
phone The phone number of the company and whether or not it can be used for advertisement
webpage The website of the company
bank Bank information provided from the newest financial statement
vat Boolean value showing if the company is registered for VAT (can be null if unknown)
credit_policy See Credit Policy for more information
financial_year Shows that start and end dates for the financial year
internal_id See Notes for more information
listed true/false whether this company is a listed stock company
purpose The company's own description of their purpose according to the offical company registers
status_valid_from The date of the last status change. If the date is the same as date_of_incorporation, it can be safely ignored

Example request

r = requests.get("https://api.risika.dk/v1.2/dk/company/basics/37677892",
                 headers={"Authorization": <access_token>,
                          "Content-Type": "application/json"})
print(r.json())

Example response

{
    "address": {
        "city": "København K",
        "coname": null,
        "country": "DK",
        "municipality": "København",
        "number": "26, st.",
        "postdistrict": "København K",
        "street": "Kronprinsessegade",
        "zipcode": 1306
    },
    "advertisement_protection": true,
    "audit_selected": true,
    "bank": null,
    "company_name": "RISIKA A/S",
    "company_secondary_names": [
        {
            "name": "Global Business Platform ApS",
            "valid_from": "2016-04-30",
            "valid_to": "2017-05-17"
        },
        {
            "name": "Globus Platform ApS",
            "valid_from": "2017-01-14",
            "valid_to": "2017-05-17"
        }
    ],
    "company_type": {
        "long": "Aktieselskab",
        "short": "A/S"
    },
    "credit_policy": null,
    "date_of_incorporation": "2016-04-30",
    "email": {
        "email": "contact@risika.dk",
        "hidden": false
    },
    "financial_reports": true,
    "financial_year": {
        "end": "--12-31",
        "start": "--01-01"
    },
    "holding_company": false,
    "internal_id": null,
    "last_report_date": "2019-12-31",
    "listed": null,
    "local_organization_id": {
        "country": "DK",
        "id": "37677892"
    },
    "main_industry_code": {
        "code": "829100",
        "description": "Inkassovirksomhed og kreditoplysning",
        "isic": {
            "code": "8291",
            "description": "Activities of collection agencies and credit bureaus",
            "section": "N"
        },
        "nace": {
            "code": "8291",
            "description": "Activities of collection agencies and credit bureaus",
            "section": "N"
        },
        "section": "N"
    },
    "number_of_employees": {
        "interval": "10-19",
        "specific": 15
    },
    "phone": {
        "hidden": false,
        "phone_number": "+4542905757"
    },
    "powers_to_bind": "Selskabet tegnes af en direktør i forening med et medlem af bestyrelsen eller af den samlede bestyrelse",
    "purpose": "Selskabets formål er at etablere og drive en online kreditvurderingsplatform",
    "registered_capital": {
        "currency": "DKK",
        "value": 557574.0
    },
    "risk_assessment": "Medium",
    "risk_assessment_code": "MEDIUM",
    "score": 5,
    "score_data": {
        "BOHR": {
            "date": "2020-12-16",
            "probability_of_distress": null,
            "risk_assessment": "MEDIUM",
            "score": 5
        },
        "NEWTON": {
            "date": "2020-12-16",
            "probability_of_distress": 0.002701502526178956,
            "risk_assessment": "LOW",
            "score": 7
        }
    },
    "secondary_industry_codes": [
        {
            "group_name": "Databehandling, webhosting og lignende serviceydelser; webportaler",
            "industry_code": "631100",
            "industry_description": "Databehandling, webhosting og lignende serviceydelser",
            "isic": {
                "code": "6311",
                "description": "Data processing, hosting and related activities",
                "section": "J"
            },
            "nace": {
                "code": "6311",
                "description": "Data processing, hosting and related activities",
                "section": "J"
            },
            "priority": 1,
            "section": "J"
        },
        {
            "group_name": "Computerprogrammering, konsulentbistand vedrørende informationsteknologi og lignende aktiviteter",
            "industry_code": "620200",
            "industry_description": "Konsulentbistand vedrørende informationsteknologi",
            "isic": {
                "code": "6202",
                "description": "Computer consultancy and computer facilities management activities",
                "section": "J"
            },
            "nace": {
                "code": "6202",
                "description": "Computer consultancy activities",
                "section": "J"
            },
            "priority": 2,
            "section": "J"
        }
    ],
    "status": "Active",
    "status_code": "ACTIVE",
    "status_valid_from": "2016-07-01",
    "vat": true,
    "webpage": "www.risika.dk"
}

Find EAN using CVR

You can look up the EAN-number (what is an EAN-number?) of a company using the CVR-number and the optional key argument to specify the type of EAN-number (the key can be any of the following: DK:P, GLN, DK:CVR, DK:SE, DK:VANS).

Example request

r = requests.get("https://api.risika.dk/v1.2/dk/company/ean",
                 params={"cvr": 25362365},
                 headers={"Authorization": <access_token>,
                          "Content-Type": "application/json"})
print(r.json())

Example response

[
    {
        "key": "5790001718633",
        "keytype": "GLN",
        "local_id": "25362365",
        "name": "KONTAKT ApS"
    },
    {
        "key": "25362365",
        "keytype": "DK:CVR",
        "local_id": "25362365",
        "name": "KONTAKT ApS"
    }
]

Find CVR using EAN

If you have the EAN-number, but wants to find the CVR-number, you can do so by querying for the key without cvr.

Example request

r = requests.get("https://api.risika.dk/v1.2/dk/company/ean",
                 params={"key": 5790001899950},
                 headers={"Authorization": <access_token>,
                          "Content-Type": "application/json"})
print(r.json())

Example response

[
    {
        "key": "5790001899950",
        "keytype": "GLN",
        "local_id": "10404916",
        "name": "Tivoli / Nimb"
    }
]

Company Relations

This endpoint is used to get all the relational information for a given company. You will get the owners, directors, together with a date for when the person got the role.

This end-point supports the Accept-Language header described in Headers.

Expand Endpoint Description to see description and definitions.

Endpoint Description

Table with brief descriptions of all variables delivered by Company Relations:

Value Description
personal_id personal_id of subject related to the company.
name Name of subject related to the company.
type Type of subject related to the company. Can either be PERSON or VIRKSOMHED (the Danish word for company)
functions Historical list of functions the subject related to the company has in the company.
local_organization_id local_id of the subject related to the company if the subject is a company.

Table with variables delivered by functions in Company Relations:

Value Description
function See company functions for more information.
valid_from Date where the function is valid from.
valid_to Date where the function is valid to. If the function is still active valid_toreturns NULL
shares Shares held by the subject. See shareholder for more information.
shares_interval Shares reported in share interval held by the subject. See shareholder for more information.

Example request

r = requests.get("https://api.risika.dk/v1.2/dk/company/relations/37677892",
                 headers={"Authorization": <access_token>,
                          "Content-Type": "application/json"})
print(r.json())

Example response

{
    "relations": [
        {
            "functions": [
                {
                    "function": "AUDIT",
                    "title": "Audit",
                    "valid_from": "2019-02-13",
                    "valid_to": null
                }
            ],
            "local_organization_id": {
                "country": "DK",
                "id": "19263096"
            },
            "name": "inforevision statsautoriseret revisionsaktieselskab",
            "personal_id": 3369870,
            "type": "COMPANY"
        },
        {
            "functions": [
                {
                    "function": "BOARD OF DIRECTORS",
                    "title": "Board of Directors",
                    "valid_from": "2019-01-14",
                    "valid_to": null
                }
            ],
            "name": "Martin Lavesen",
            "personal_id": 4000397851,
            "type": "PERSON"
        },
        {
            "functions": [
                {
                    "function": "BOARD OF DIRECTORS",
                    "title": "Board of Directors",
                    "valid_from": "2019-01-14",
                    "valid_to": "2019-03-18"
                }
            ],
            "name": "Niels Gade-Jacobsen",
            "personal_id": 4000569667,
            "type": "PERSON"
        },
        {
            "functions": [
                {
                    "function": "MANAGEMENT",
                    "title": "Management",
                    "valid_from": "2016-12-31",
                    "valid_to": "2017-05-18"
                },
                {
                    "function": "BENEFICIAL OWNER",
                    "shares": 30.0,
                    "title": "Beneficial Owner",
                    "valid_from": "2018-03-06",
                    "valid_to": "2018-04-01"
                },
                {
                    "function": "BENEFICIAL OWNER",
                    "shares": 50.0,
                    "title": "Beneficial Owner",
                    "valid_from": "2016-12-31",
                    "valid_to": "2018-03-05"
                }
            ],
            "name": "Hanne Bach-Nielsen",
            "personal_id": 4000625364,
            "type": "PERSON"
        },
        {
            "functions": [
                {
                    "function": "MANAGEMENT",
                    "title": "Management",
                    "valid_from": "2018-04-01",
                    "valid_to": null
                },
                {
                    "function": "BENEFICIAL OWNER",
                    "shares": 30.0,
                    "title": "Beneficial Owner",
                    "valid_from": "2018-04-01",
                    "valid_to": "2018-10-28"
                },
                {
                    "function": "BENEFICIAL OWNER",
                    "shares": 27.0,
                    "title": "Beneficial Owner",
                    "valid_from": "2018-10-29",
                    "valid_to": "2019-02-18"
                }
            ],
            "name": "Nicolai Rasmussen",
            "personal_id": 4000652101,
            "type": "PERSON"
        },
        {
            "functions": [
                {
                    "function": "MANAGEMENT",
                    "title": "Management",
                    "valid_from": "2016-07-01",
                    "valid_to": "2016-12-31"
                }
            ],
            "name": "Poul Erik M\u00f8lgaard Rasmussen",
            "personal_id": 4000679462,
            "type": "PERSON"
        },
        {
            "functions": [
                {
                    "function": "BOARD OF DIRECTORS",
                    "title": "Board of Directors",
                    "valid_from": "2019-03-18",
                    "valid_to": null
                }
            ],
            "name": "Peter Christian Schmiegelow",
            "personal_id": 4000693282,
            "type": "PERSON"
        },
        {
            "functions": [
                {
                    "function": "CHAIRMAN",
                    "title": "Chairman",
                    "valid_from": "2019-01-14",
                    "valid_to": null
                }
            ],
            "name": "Mads Guttorm Jakobsen",
            "personal_id": 4004175969,
            "type": "PERSON"
        },
        {
            "functions": [
                {
                    "function": "FOUNDER",
                    "title": "Founder",
                    "valid_from": "2016-04-30",
                    "valid_to": null
                },
                {
                    "function": "LEGAL OWNER",
                    "shares_interval": "20-24.99%",
                    "title": "Legal Owner",
                    "valid_from": "2019-02-18",
                    "valid_to": null
                },
                {
                    "function": "LEGAL OWNER",
                    "shares_interval": "100%",
                    "title": "Legal Owner",
                    "valid_from": "2016-07-01",
                    "valid_to": "2017-05-17"
                },
                {
                    "function": "LEGAL OWNER",
                    "shares_interval": "25-33.33%",
                    "title": "Legal Owner",
                    "valid_from": "2018-03-06",
                    "valid_to": "2019-02-17"
                },
                {
                    "function": "LEGAL OWNER",
                    "shares_interval": "50-66.65%",
                    "title": "Legal Owner",
                    "valid_from": "2017-05-18",
                    "valid_to": "2018-03-05"
                }
            ],
            "local_organization_id": {
                "country": "DK",
                "id": "36701927"
            },
            "name": "N. Rasmussen Holding ApS",
            "personal_id": 4005959089,
            "type": "COMPANY"
        },
        {
            "functions": [
                {
                    "function": "LEGAL OWNER",
                    "shares_interval": "10-14.99%",
                    "title": "Legal Owner",
                    "valid_from": "2019-02-18",
                    "valid_to": null
                }
            ],
            "name": "Simon Turner",
            "personal_id": 4006184467,
            "type": "OTHER"
        },
        {
            "functions": [
                {
                    "function": "MANAGEMENT",
                    "title": "Management",
                    "valid_from": "2017-05-18",
                    "valid_to": "2018-03-31"
                },
                {
                    "function": "CHIEF EXECUTIVE OFFICER",
                    "title": "Chief Executive Officer",
                    "valid_from": "2018-04-01",
                    "valid_to": null
                },
                {
                    "function": "BENEFICIAL OWNER",
                    "shares": 45.0,
                    "title": "Beneficial Owner",
                    "valid_from": "2018-03-06",
                    "valid_to": "2018-10-28"
                },
                {
                    "function": "BENEFICIAL OWNER",
                    "shares": 50.0,
                    "title": "Beneficial Owner",
                    "valid_from": "2017-05-18",
                    "valid_to": "2018-03-05"
                },
                {
                    "function": "BENEFICIAL OWNER",
                    "shares": 41.4,
                    "title": "Beneficial Owner",
                    "valid_from": "2018-10-29",
                    "valid_to": "2019-02-17"
                },
                {
                    "function": "BENEFICIAL OWNER",
                    "shares": 34.050000000000004,
                    "title": "Beneficial Owner",
                    "valid_from": "2019-02-18",
                    "valid_to": null
                }
            ],
            "name": "Timm Jeppesen",
            "personal_id": 4006873173,
            "type": "PERSON"
        },
        {
            "functions": [
                {
                    "function": "LEGAL OWNER",
                    "shares_interval": "50-66.65%",
                    "title": "Legal Owner",
                    "valid_from": "2017-05-18",
                    "valid_to": "2018-03-05"
                },
                {
                    "function": "LEGAL OWNER",
                    "shares_interval": "33.34-49.99%",
                    "title": "Legal Owner",
                    "valid_from": "2018-03-06",
                    "valid_to": null
                }
            ],
            "local_organization_id": {
                "country": "DK",
                "id": "38599070"
            },
            "name": "TJ Formueinvest ApS",
            "personal_id": 4006873174,
            "type": "COMPANY"
        },
        {
            "functions": [
                {
                    "function": "LEGAL OWNER",
                    "shares_interval": "20-24.99%",
                    "title": "Legal Owner",
                    "valid_from": "2018-10-29",
                    "valid_to": "2019-02-17"
                },
                {
                    "function": "LEGAL OWNER",
                    "shares_interval": "10-14.99%",
                    "title": "Legal Owner",
                    "valid_from": "2019-02-18",
                    "valid_to": null
                },
                {
                    "function": "LEGAL OWNER",
                    "shares_interval": "25-33.33%",
                    "title": "Legal Owner",
                    "valid_from": "2018-03-06",
                    "valid_to": "2018-10-28"
                }
            ],
            "local_organization_id": {
                "country": "DK",
                "id": "39258072"
            },
            "name": "Perceval ApS",
            "personal_id": 4007482058,
            "type": "COMPANY"
        },
        {
            "functions": [
                {
                    "function": "LEGAL OWNER",
                    "shares_interval": "10-14.99%",
                    "title": "Legal Owner",
                    "valid_from": "2019-02-18",
                    "valid_to": null
                }
            ],
            "name": "Sort Hest Limited",
            "personal_id": 4007487941,
            "type": "OTHER"
        }
    ]
}

Find last update from a single CVR

You can look up the date of the last update for a company.

Example request

r = requests.get("https://api.risika.dk/v1.2/dk/company/ean",
                 params={"local_id": "37677892"},
                 headers={"Authorization": <access_token>,
                          "Content-Type": "application/json"})
print(r.json())

Example response

[
    {
        "local_organization_id": "37677892",
        "ts": "2021-07-08"
    }
]

Find last updates for a list of CVR's

You can look up the date of last update for each individual CVR in a list

Example request

r = requests.get("https://api.risika.dk/v1.2/dk/company/ean",
                 params={"local_id": ["10404916", "37677892", "61126228"]},
                 headers={"Authorization": <access_token>,
                          "Content-Type": "application/json"})
print(r.json())

Example response

[
    {
        "local_organization_id": "10404916",
        "ts": "2021-07-17"
    },
    {
        "local_organization_id": "61126228",
        "ts": "2021-07-17"
    },
    {
        "local_organization_id": "37677892",
        "ts": "2021-07-08"
    }
]

Financial

Using the financial end-points, you can get access to a companies financial reports, key figures, information about the auditor and a link to their official financial report. The financial information have been categorized into four types/end-points: Numbers, stats, performance and ratios. You can read more about the specific types below.

Common for numbers, stats, and ratios is that they all return lists with information for each annual report. The reports are sorted by date.

If you query a Company ID and it returns an empty list, it either means that the Company ID doesn't exist (confirm this with a call to Company Basic) or that the company is not obligated to submit financial reports.

The reports are filtered, so it only outputs annual reports. Some companies submit quarterly or semi-annually, but these are not included in the API.

Financial Numbers

This endpoint provides you with all the relevant financial numbers for a given company. You can read about the limitations in Financial

Expand Endpoint Description to see description of each financial number

Endpoint Description

Financial Numbers - Income Statement

An income statement is one of the three important financial statements used for reporting a company's financial performance over a specific accounting period, with the other two key statements being the balance sheet and the statement of cash flows. Also known as the profit and loss statement or the statement of revenue and expense, the income statement primarily focuses on company’s revenues and expenses during a particular period.

Variable Danish Translation
revenue Omsætning
other_income Anden indtægter
costs Omkostninger (Variable omkostninger)
gross_result Bruttoresultat
operating_costs Operationelle udgifter (Faste omkostninger)
other_operating_income Andre operationelle indtægter
staff_expenses Medarbejder udgifter
ebitda EBITDA
depreciation Afskrivninger
ebit EBIT
interest_income Renteindtægter
interest_expenses Renteudgifter
other_net_financial_income Andet finansielt resultat
net_financial_income Netto finansielle poster
ordinary_profit Ordinært resultat
extraordinary_item Ekstraordinære poster
profit_loss_before_tax Resultat før skat
tax_expenses Udgifter til skat
profit_loss Årets resultat / Endeligt resultat
  • EBIT = Earnings Before Interest and Taxes
  • EBITDA = Earnings Before Interest, Taxes, Depreciation and Amortization

Financial Numbers - Balance Sheet

A balance sheet is a financial statement that reports a company's assets, liabilities and shareholders' equity at a specific point in time, and provides a basis for computing rates of return and evaluating its capital structure. It is a financial statement that provides a snapshot of what a company owns and owes, as well as the amount invested by shareholders.

Balance Sheet - Assets

In financial accounting, an asset is any resource owned by the business. Anything tangible or intangible that can be owned or controlled to produce value and that is held by a company to produce positive economic value is an asset. Simply stated, assets represent value of ownership that can be converted into cash (although cash itself is also considered an asset). The balance sheet of a firm records the monetary value of the assets owned by that firm. It covers money and other valuables belonging to an individual or to a business.

Variable Danish Translation
goodwill Goodwill
other_intangible_assets Andre immatrielle anlægsaktiver
intangible_assets Immatrielle anlægsaktiver i alt
land_and_buildings Grunde og bygninger
plant_equipment_and_fixtures Driftsmidler
other_property_plant_and_equipment Andre materielle anlægsaktiver
property_plant_and_equipment Materielle anlægsaktiver i alt
noncurrent_receivables Langfristede tilgodehavender
noncurrent_investments Kapitalinteresser
other_noncurrent_financial_assets Andre finansielle anlægsaktiver
noncurrent_financial_assets Finansielle anlægsaktiver i alt
noncurrent_assets Anlægsaktiver i alt
inventories Varebeholdning
current_prepayments Forudbetalinger
short_term_receivables_from_sales_and_services Tilgodehavender fra salg og services
short_term_receivables_from_group_enterprises Tilgodehavender fra nærtstående parter
other_short_term_receivables Andre tilgodehavender
short_term_receivables Kortfristede tilgodehavender i alt
current_financial_assets Kortfristede finansielle aktiver / Værdipapirer
cash Likvide midler
current_assets Omsætningsaktiver i alt
assets Aktiver i alt

Balance Sheet - Liabilities and Equity

A liability, in general, is an obligation to or something that you owe somebody else. Liabilities are defined as a company's legal financial debts or obligations that arise during the course of business operations. Liabilities are settled over time through the transfer of economic benefits including money, goods, or services. Recorded on the right side of the balance sheet, liabilities include loans, accounts payable, mortgages, deferred revenues, and accrued expenses.

Equity is typically referred to as shareholder equity (also known as shareholders' equity) which represents the amount of money that would be returned to a company’s shareholders if all of the assets were liquidated and all of the company's debt was paid off.

Column Name Danish Translation
contributed_capital Selskabskapital
reserves Reserveringer
dividend Udbytte
retained_earnings Overført resultat
equity_before_minority_interests Egenkapital før minoritets interesser
minority_interests Minoritets interessanter
equity Egenkapital i alt
provisions Hensættelser / Hensatte forpligtelser
long_term_debt_to_group_enterprises Langfristet gæld til nærtstående parter
long_term_debt_to_banks Langfristet gæld til banker og andre kreditinstitutioner
long_term_mortgage_debt Langfristet realkredit gæld
equity_loan Ansvarlig lånekapital
deferred_tax Udskudt skat
other_long_term_debt Anden langfristet gæld
long_term_debt Langfristet gæld i alt
short_term_debt_to_group_enterprises Kortfristet gæld til nærtstående parter
short_term_debt_to_banks Kortfristet gæld til banker og andre kreditinstitutioner
short_term_mortgage_debt Kortfristet realkredit gæld
short_term_trade_payables Varekreditorer
short_term_tax_payables Selskabsskat
other_short_term_debt Anden kortfristet gæld
short_term_debt Kortfristet gæld i alt
debt Gæld i alt
liabilities_and_equity Passiver i alt

GET
/{country}/financial/numbers/{local_id}

Example request

r = requests.get("https://api.risika.dk/v1.2/dk/financial/numbers/37677892",
                 headers={"Authorization": <access_token>,
                          "Content-Type": "application/json"})
print(r.json())

Example response

[
  {
    "period": {
      "start": "2018-01-01",
      "end": "2018-12-31"
    },
    "revenue": null,
    "other_income": null,
    "costs": 0.0,
    "gross_result": -557581.0,
    "operating_costs": 0.0,
    "other_operating_income": 190000.0,
    "staff_expenses": 128950.0,
    "ebitda": -496531.0,
    "depreciation": 417673.0,
    "ebit": -914204.0,
    "interest_income": 0.0,
    "interest_expenses": -22900.0,
    "other_net_financial_income": 0.0,
    "net_financial_income": -22900.0,
    "ordinary_profit": -534098.0,
    "extraordinary_item": 0.0,
    "profit_loss_before_tax": -937104.0,
    "tax_expenses": -201503.0,
    "profit_loss": -735601.0,
    "goodwill": 0.0,
    "other_intangible_assets": 0.0,
    "intangible_assets": 1380614.0,
    "land_and_buildings": 0.0,
    "plant_equipment_and_fixtures": 0.0,
    "other_property_plant_and_equipment": 0.0,
    "property_plant_and_equipment": 0.0,
    "noncurrent_receivables": 0.0,
    "noncurrent_investments": 0.0,
    "other_noncurrent_financial_assets": 0.0,
    "noncurrent_financial_assets": 0.0,
    "noncurrent_assets": 1380614.0,
    "inventories": 0.0,
    "current_prepayments": 0.0,
    "short_term_receivables_from_sales_and_services": 13662.0,
    "short_term_receivables_from_group_enterprises": 0.0,
    "other_short_term_receivables": 571258.0,
    "short_term_receivables": 584920.0,
    "current_financial_assets": 0.0,
    "cash": 45317.0,
    "current_assets": 630237.0,
    "assets": 2010851.0,
    "contributed_capital": 399406.0,
    "reserves": 1076879.0,
    "dividend": 0.0,
    "retained_earnings": -576556.0,
    "equity_before_minority_interests": 899729.0,
    "minority_interests": 0.0,
    "equity": 899729.0,
    "provisions": 681195.0,
    "long_term_debt_to_group_enterprises": 0.0,
    "long_term_debt_to_banks": 0.0,
    "long_term_mortgage_debt": 0.0,
    "equity_loan": 0.0,
    "deferred_tax": 0.0,
    "other_long_term_debt": 0.0,
    "long_term_debt": 0.0,
    "short_term_debt_to_group_enterprises": 0.0,
    "short_term_debt_to_banks": 0.0,
    "short_term_mortgage_debt": 0.0,
    "short_term_trade_payables": 61334.0,
    "short_term_tax_payables": 0.0,
    "other_short_term_debt": 165437.0,
    "short_term_debt": 429927.0,
    "debt": 429927.0,
    "liabilities_and_equity": 2010851.0
  },
  {
    "period": {
      "start": "2016-07-01",
      "end": "2017-12-31"
    },
    "revenue": null,
    "other_income": null,
    "costs": 0.0,
    "gross_result": -114631.0,
    "operating_costs": 0.0,
    "other_operating_income": 0.0,
    "staff_expenses": 0.0,
    "ebitda": -114631.0,
    "depreciation": 56216.0,
    "ebit": -170847.0,
    "interest_income": 0.0,
    "interest_expenses": 0.0,
    "other_net_financial_income": 0.0,
    "net_financial_income": 0.0,
    "ordinary_profit": -96415.0,
    "extraordinary_item": 0.0,
    "profit_loss_before_tax": -170847.0,
    "tax_expenses": -37216.0,
    "profit_loss": -133631.0,
    "goodwill": 0.0,
    "other_intangible_assets": 199881.0,
    "intangible_assets": 199881.0,
    "land_and_buildings": 0.0,
    "plant_equipment_and_fixtures": 0.0,
    "other_property_plant_and_equipment": 0.0,
    "property_plant_and_equipment": 0.0,
    "noncurrent_receivables": 0.0,
    "noncurrent_investments": 0.0,
    "other_noncurrent_financial_assets": 2500.0,
    "noncurrent_financial_assets": 2500.0,
    "noncurrent_assets": 202381.0,
    "inventories": 0.0,
    "current_prepayments": 0.0,
    "short_term_receivables_from_sales_and_services": 0.0,
    "short_term_receivables_from_group_enterprises": 0.0,
    "other_short_term_receivables": 110505.0,
    "short_term_receivables": 110505.0,
    "current_financial_assets": 0.0,
    "cash": 25461.0,
    "current_assets": 135966.0,
    "assets": 338347.0,
    "contributed_capital": 50000.0,
    "reserves": 375907.0,
    "dividend": 0.0,
    "retained_earnings": -289538.0,
    "equity_before_minority_interests": 136369.0,
    "minority_interests": 0.0,
    "equity": 136369.0,
    "provisions": 43974.0,
    "long_term_debt_to_group_enterprises": 0.0,
    "long_term_debt_to_banks": 0.0,
    "long_term_mortgage_debt": 0.0,
    "equity_loan": 0.0,
    "deferred_tax": 0.0,
    "other_long_term_debt": 0.0,
    "long_term_debt": 0.0,
    "short_term_debt_to_group_enterprises": 0.0,
    "short_term_debt_to_banks": 0.0,
    "short_term_mortgage_debt": 0.0,
    "short_term_trade_payables": 76324.0,
    "short_term_tax_payables": 0.0,
    "other_short_term_debt": 81680.0,
    "short_term_debt": 158004.0,
    "debt": 158004.0,
    "liabilities_and_equity": 338347.0
  }
]

Financial Ratios

This endpoint provides some ratios that we have calculated from their financial report. These include ratios like interest coverage, return on equity (ROE), return on investment (ROI), etc. You can read about the general limitations in Financial

Expand Endpoint Description to see description of each financial ratio

Endpoint Description

Financial Key Figure

A financial key figure or financial ratio or accounting ratio is a relative magnitude of two selected numerical values taken from an enterprise's financial statements. Often used in accounting, there are many standard ratios used to try to evaluate the overall financial condition of a corporation or other organization.

Profitability Ratios

Profitability ratios are a class of financial metrics that are used to assess a business's ability to generate earnings relative to its revenue, operating costs, balance sheet assets, and shareholders' equity over time, using data from a specific point in time.

Variable Danish Translation Formula
gross_margin Dækningsgrad gross_result / revenue
operating_margin Overskudsgrad ebit / revenue
profit_margin Resultatgrad profit_loss / revenue
return_on_equity Egenkapitalens forrentning profit_loss / equity
return_on_equity_with_average Egenkapitalens forrentning profit_loss / ((equity1 + equity2)/2)
return_on_assets Afkastningsgrad profit_loss / assets
return_on_assets_with_average Afkastningsgrad profit_loss / ((assets1 + assets2)/2)
return_on_net_assets Nettokapitalforretning (RONA) profit_loss / (assets - debt)
return_on_net_assets_with_average Nettokapitalforretning (RONA)
basic_earning_power Primær indtjeningsevne (BEP) ebit / assets
basic_earning_power_with_average Primær indtjeningsevne (BEP) ebit / ((assets1 + assets2)/2)
cash_conversion_rate Pengestrømskonverteringsrate ebitda / profit_loss

Liquidity Ratios

Liquidity ratios are an important class of financial metrics used to determine a debtor's ability to pay off current debt obligations without raising external capital. Liquidity ratios measure a company's ability to pay debt obligations and its margin of safety through the calculation of metrics including the current ratio, quick ratio, and operating cash flow ratio.

Variable Danish Translation Definition
asset_turnover Aktivernes omsætningshastighed revenue / assets
asset_turnover_with_average Aktivernes omsætningshastighed revenue / ((assets1 + assets2)/2)
cash_ratio Pengeraten cash / short_term_debt
capacity_ratio Kapacitetsgrad gross_result / (gross_result - ebit)
current_ratio Likviditetsgrad current_assets / short_term_debt
quick_ratio Kortsigtet likviditetsgrad (current_assets - inventories) / short_term_debt
current_assets_to_equity Omsætningsaktiver-til-egenkapital rate current_assets / equity
inventory_conversion_ratio Varelagerets omsætningshastighed 365.25 / (revenue / inventories)

Debt Ratios / Leveraging Ratios

A leverage ratio is any one of several financial measurements that look at how much capital comes in the form of debt (loans) or assesses the ability of a company to meet its financial obligations. The leverage ratio category is important because companies rely on a mixture of equity and debt to finance their operations, and knowing the amount of debt held by a company is useful in evaluating whether it can pay its debts off as they come due.

Variable Danish Translation Definition
debt_ratio Gældsgrad debt / assets
debt_to_equity_ratio Gæld til egenkapital rate debt / equity
fixed_assets_to_long_term_liabilities_ratio Kapitalbindingsgrad noncurrent_assets / (equity + long_term_debt)
income_to_debt_ratio Profit til gæld rate profit_loss / debt
income_to_debt_ratio_with_average Profit til gæld rate profit_loss / debt
ebitda_to_debt_ratio EBITDA til gæld rate ebitda / debt
ebitda_to_debt_ratio_with_average EBITDA til gæld rate ebitda / debt
interest_coverage Rentedækningsgrad ebit / ABS(interest_expenses)
interest_margin Rentemarginal
interest_rate_on_debt_with_average Gældsrente
solidity_ratio Soliditetsgrad equity / assets
liabilities_to_equity_ratio Forpligtelsernes gearing (liabilities_and_equity - equity) / equity

Other Ratios

Variable Danish Translation Definition
one_year_change_in_equity Årlig ændring i egenkapital (equity1 / equity2) - 1
one_year_change_in_debt Årlig ændring i gæld (debt1 / debt2) - 1
equity_to_contributed_capital_ratio Egenkapital til selskabskapital rate equity / contributed_capital
gross_profit_per_employee Bruttofortjeneste per medarbejder gross_result / averagenumberofemployees
net_income_per_employee Nettoresultat per medarbejder profit_loss / averagenumberofemployees
revenue_per_employee Omsætning per medarbejder revenue / averagenumberofemployees

GET
/{country}financial/ratios/{local_id}

Example request

r = requests.get("https://api.risika.dk/v1.2/dk/financial/ratios/37677892",
                 headers={"Authorization": <access_token>,
                          "Content-Type": "application/json"})
print(r.json())

Example response

[
  {
    "period": {
        "end": "2018-12-31",
        "start": "2018-01-01"
    },
    "asset_turnover": null,
    "asset_turnover_with_average": null,
    "basic_earning_power": -0.4546,
    "basic_earning_power_with_average": -0.7783,
    "capacity_ratio": -1.5635,
    "cash_conversion_rate": 0.675,
    "cash_ratio": 0.1054,
    "current_assets_to_equity": 0.7005,
    "current_ratio": 1.4659,
    "debt_ratio": 0.2138,
    "debt_to_equity_ratio": 0.4778,
    "ebitda_to_debt_ratio": -1.1549,
    "ebitda_to_debt_ratio_with_average": -1.6891,
    "equity_to_contributed_capital_ratio": 2.2527,
    "fixed_assets_to_long_term_liabilities_ratio": 1.5345,
    "gross_margin": null,
    "gross_profit_per_employee": -111516.2,
    "income_to_debt_ratio": -1.711,
    "income_to_debt_ratio_with_average": -2.5023,
    "interest_coverage": -39.9216,
    "interest_margin": -0.635,
    "interest_rate_on_debt_with_average": 0.0087,
    "inventory_conversion_ratio": null,
    "liabilities_to_equity_ratio": 1.235,
    "net_income_per_employee": -147120.2,
    "one_year_change_in_debt": 1.721,
    "one_year_change_in_equity": 5.5978,
    "operating_margin": null,
    "profit_margin": null,
    "quick_ratio": 1.4659,
    "return_on_assets": -0.3658,
    "return_on_assets_with_average": -0.6263,
    "return_on_equity": -0.8176,
    "return_on_equity_with_average": -1.4199,
    "return_on_net_assets": -0.4653,
    "return_on_net_assets_with_average": -0.8353,
    "revenue_per_employee": null,
    "solidity_ratio": 0.4474
  },
  {
    "period": {
        "end": "2017-12-31",
        "start": "2016-07-01"
    },
    "asset_turnover": null,
    "asset_turnover_with_average": null,
    "basic_earning_power": -0.5049,
    "basic_earning_power_with_average": null,
    "capacity_ratio": -2.0391,
    "cash_conversion_rate": 0.8578,
    "cash_ratio": 0.1611,
    "current_assets_to_equity": 0.997,
    "current_ratio": 0.8605,
    "debt_ratio": 0.467,
    "debt_to_equity_ratio": 1.1587,
    "ebitda_to_debt_ratio": -0.7255,
    "ebitda_to_debt_ratio_with_average": null,
    "equity_to_contributed_capital_ratio": 2.7274,
    "fixed_assets_to_long_term_liabilities_ratio": 1.4841,
    "gross_margin": null,
    "gross_profit_per_employee": null,
    "income_to_debt_ratio": -0.8457,
    "income_to_debt_ratio_with_average": null,
    "interest_coverage": null,
    "interest_margin": null,
    "interest_rate_on_debt_with_average": null,
    "inventory_conversion_ratio": null,
    "liabilities_to_equity_ratio": 1.4811,
    "net_income_per_employee": null,
    "one_year_change_in_debt": null,
    "one_year_change_in_equity": null,
    "operating_margin": null,
    "profit_margin": null,
    "quick_ratio": 0.8605,
    "return_on_assets": -0.395,
    "return_on_assets_with_average": null,
    "return_on_equity": -0.9799,
    "return_on_equity_with_average": null,
    "return_on_net_assets": -0.741,
    "return_on_net_assets_with_average": null,
    "revenue_per_employee": null,
    "solidity_ratio": 0.403
  }
]

Financial Stats

This endpoint has information about each financial report. We provide information about who audited the report, when it was approved, a link to the actual PDF report, whether they are IFRS (International Financial Reporting Standards) compliant, etc.

Expand Endpoint Description to see description and definitions.

Endpoint Description

Table with brief descriptions of all variables delivered by Financial Stats:

Value Description
period Contains start and end date for the reporting period of the financial statement. See reporting period for more information.
pdf_link Link to pdf version of the financial statement.
type See types of financial statements for more information.
class_of_reporting_entity See class of reporting entity for more information.
approval_date Date of the approval of the financial statement.
general_meeting_date Date of the general meeting related to the financial statement. Usually, the approval_date is identical to general_meeting_date. See general meeting for more information.
auditor Contains auditor information: name, description, type_of_auditor_assistance, company_id and company_name. See auditor for more information.
currency Specifies the reporting currency. See currency for more information.
ifrs true/false indication of if the financial statement is following IFRS auditing rules. See IFRS for more information.

GET
/{country}/financial/stats/{local_id}

Example request

r = requests.get("https://api.risika.dk/v1.2/dk/financial/stats/37677892",
                 headers={"Authorization": <access_token>,
                          "Content-Type": "application/json"})
print(r.json())

Example response

[
  {
    "period": {
      "start": "2018-01-01",
      "end": "2018-12-31"
    },
    "pdf_link": "http://regnskaber.virk.dk/29877673/ZG9rdW1lbnRsYWdlcjovLzAzLzhlL2FhLzgwL2ZiL2EzN2QtNDA2Ny05NDVkLWRhN2MxNWQ5MzhlMA.pdf",
    "type": "ANNUAL REPORT",
    "class_of_reporting_entity": "REPORTING CLASS B",
    "approval_date": "2019-04-10",
    "general_meeting_date": "2019-04-19",
    "auditor": {
      "name": "Michael Dam-Johansen",
      "description": "statsautoriseret revisor",
      "type_of_assistance": "AUDITOR'S REPORT",
      "company_id": "19263096",
      "company_name": "inforevision statsautoriseret revisionsaktieselskab"
    },
    "currency": "DKK",
    "ifrs": false
  },
  {
    "period": {
      "start": "2016-07-01",
      "end": "2017-12-31"
    },
    "pdf_link": "http://regnskaber.virk.dk/29877673/ZG9rdW1lbnRsYWdlcjovLzAzLzM2LzhlL2E0L2Q4LzdkMmMtNDBmYy04ZWIxLWFmYzFhZTg4YjNhOQ.pdf",
    "type": "ANNUAL REPORT",
    "class_of_reporting_entity": "REPORTING CLASS B",
    "approval_date": "2018-05-25",
    "general_meeting_date": "2018-05-25",
    "auditor": {
      "name": null,
      "description": "uautoriseret titel",
      "type_of_assistance": "NO AUDITOR ASSISTANCE",
      "company_id": null,
      "company_name": null
    },
    "currency": "DKK",
    "ifrs": false
  }
]

Financial Performance

This endpoint calculates the performance compared to the rest of the market.

This end-point supports the Accept-Language header described in Headers.

Expand Endpoint Description to see description and definitions.

Endpoint Description

Table with brief descriptions of all financial ratios delivered by Financial Performance:

Value Description
performance Can deliver 10, 20, ... , 100
explanation Exaplanation of financial performance.

The performance number idendicates how the company perform in terms of deciles for a specific financial ratio compared to all other companies within the same industry.

Example 1: Consider a company in the automotive industry with a performance = 20. Then the company has a financial ratio among the 20% lowest financial ratios for automotive companies.

Example 2: Consider a company in the healthcare industry with a performance = 100. Then the company has a financial ratio among the 10% highest financial ratios for healthcare companies.

NB: Not all financial ratios has currently explanations

GET
/{country}/financial/performance/{local_id}

Example request

r = requests.get("https://api.risika.dk/v1.2/dk/financial/performance/37677892",
                 headers={"Authorization": <access_token>,
                          "Content-Type": "application/json"})
print(r.json())

Example response

{
  "gross_margin": {
    "performance": null,
    "explanation": null
  },
  "operating_margin": {
    "performance": null,
    "explanation": null
  },
  "profit_margin": {
    "performance": null,
    "explanation": null
  },
  "return_on_equity": {
    "performance": 10,
    "explanation": "Egenkapitalsforrentning er evnen til at skabe sundt afkast. Virksomheden har en meget svag egenkapitalsforretning, da den ligger blandt de 10% laveste ratede virksomheder i samme branche."
  },
  "return_on_assets": {
    "performance": 20,
    "explanation": "Afkastningsgrad er evnen til skabe afkast til investorer. Virksomheden har en meget svag afkastningsgrad, da den ligger blandt de 20% laveste ratede virksomheder i samme branche."
  },
  "return_on_net_assets": {
    "performance": 10,
    "explanation": null
  },
  "basic_earning_power": {
    "performance": 10,
    "explanation": null
  },
  "current_ratio": {
    "performance": 60,
    "explanation": "Likviditetsgrad er evnen til at betale regninger og afdrage på gæld. Virksomheden har en middel likviditetsgrad, sammenlignet med andre virksomheder i samme branche."
  },
  "current_assets_to_equity": {
    "performance": 20,
    "explanation": null
  },
  "cash_ratio": {
    "performance": 40,
    "explanation": null
  },
  "capacity_ratio": {
    "performance": 10,
    "explanation": null
  },
  "asset_turnover": {
    "performance": null,
    "explanation": null
  },
  "inventory_conversion_ratio": {
    "performance": null,
    "explanation": null
  },
  "debt_ratio": {
    "performance": 100,
    "explanation": null
  },
  "debt_to_equity_ratio": {
    "performance": 100,
    "explanation": "Gearing er evnen til at stå imod større interne eller eksterne kriser. Virksomheden har en meget stærk gearing, da den ligger blandt de 10% højeste ratede virksomheder i samme branche."
  },
  "income_to_debt_ratio": {
    "performance": 10,
    "explanation": null
  },
  "ebitda_to_debt_ratio": {
    "performance": 10,
    "explanation": null
  },
  "interest_coverage": {
    "performance": 20,
    "explanation": "Rentedækningsgrad er evnen til at tilbagebetale renter på gæld. Virksomheden har en meget svag rentedækningsgrad, da den ligger blandt de 20% laveste ratede virksomheder i samme branche."
  },
  "solidity_ratio": {
    "performance": 60,
    "explanation": "Soliditetsgrad er evnen til at bære større tab. Virksomheden har en middel soliditetsgrad, sammenlignet med andre virksomheder i samme branche."
  },
  "liabilities_to_equity_ratio": {
    "performance": 100,
    "explanation": null
  },
  "one_year_change_in_equity": {
    "performance": 10,
    "explanation": null
  }
}

Person Relations

Using a personal_id, you can look up a specific person and see their relations to other companies. Currently, this is only supported for Danish companies, but will be available for other countries later on.

You get the personal_id by using the Search end-point or the Company Basic end-point.

This end-point supports the Accept-Language header described in Headers.

Endpoint Description

Definitions

CEO - Administrerende Direktør

The chief executive officer (CEO), or just chief executive (CE), is the most senior corporate, executive, or administrative officer in charge of managing an organization – especially an independent legal entity such as a company or nonprofit institution. CEOs lead a range of organizations, including public and private corporations, non-profit organizations and even some government organizations (e.g., Crown corporations). The CEO of a corporation or company typically reports to the board of directors and is charged with maximizing the value of the entity, which may include maximizing the share price, market share, revenues, or another element. In the non-profit and government sector, CEOs typically aim at achieving outcomes related to the organization's mission, such as reducing poverty, increasing literacy, etc.

Board of Directors - Bestyrelse

A board of directors is a group of people who jointly supervise the activities of an organization, which can be either a for-profit business, nonprofit organization, or a government agency. Such a board's powers, duties, and responsibilities are determined by government regulations (including the jurisdiction's corporations law) and the organization's own constitution and bylaws. These authorities may specify the number of members of the board, how they are to be chosen, and how often they are to meet.

Chairman of the Board - Formand

The chairman (also chair) is the highest officer of an organized group such as a board, a committee, or a deliberative assembly. The person holding the office is typically elected or appointed by the members of the group, and the chairman presides over meetings of the assembled group and conducts its business in an orderly fashion.

Auditor - Revisor

An auditor is a person or a firm appointed by a company to execute an audit. To act as an auditor, a person should be certified by the regulatory authority of accounting and auditing or possess certain specified qualifications. Generally, to act as an external auditor of the company, a person should have a certificate of practice from the regulatory authority.

Real Owner - Reel Ejer

Reelle ejere er fysiske personer, der direkte eller indirekte ejer eller kontrollerer en tilstrækkelig del af en virksomhed, eller som udøver kontrol ved hjælp af andre midler. Som udgangspunkt anses det som en tilstrækkelig del, hvis en person ejer eller kontrollerer 25% eller mere af virksomheden. Dog er denne procentdel kun en indikator på reelt ejerskab. Virksomheden skal nemlig tilsikre oplysninger på mulige reelle, og foretage en vurdering af om registrering skal ske.

Legal Owner - Legal Ejer

En legal ejer er den formelle ejer af virksomheden, og kan både være en person eller en virksomhed. Dette gør sig ikke gældende for en reel ejer, som kun kan være en fysisk person. De legale ejere er alle personer og virksomheder, som råder over mere end 5% af et selskabs kapital eller stemmeret. Derudover skal den præcise beholdning af ejerandele og stemmerettigheder registreres for reelle ejere. Hvorimod legale ejeres beholdning og ejerandele angives i intervaller.

Stakeholder - Interessent

Stakeholders are people, separate organizations or groups with direct or indirect interests in the company's success. A large or small business' stakeholders range from creditors and employees to shareholders, owners, labor unions and the surrounding community, according to Business Dictionary's website. The type of stakeholders for a business depends largely the company's legal definition. For example, a corporation can sell stock and have shareholders, while a sole proprietorship or business partnership cannot do so legally.

Founder - Stifter

An organizational founder is a person who has undertaken some or all of the work needed to create a new organization, whether this is a business, a charitable organization, a governing body, a school, a group of entertainers, or some other kind of organization. If there are multiple founders, each can be referred to as a co-founder. If the organization is a business, the founder is usually an entrepreneur. If an organization is created to carry out charitable work, the founder is generally considered a philanthropist.

Shareholder - Aktionær

A shareholder is someone who owns shares in a corporation. Generally, corporations are owned by several shareholders. For example, Google is a publicly traded corporation with almost half a million shareholders. Other corporations are closely held, meaning that there are only a few shareholders

Corporate Ownership - Virksomheds Ejerskab

While an argument can be made that corporations can’t truly be owned, it is widely agreed upon that the shareholders of the corporation are owners, but not legal owners. Legal ownership means having the ability to make actual business decisions or use the company’s assets. The shareholders aren’t the actual true owners of the business. While they aren’t legal owners, they are still considered owners due to their ownership in stock.

Such ownership will depend on the percentage of shares that each person carries in the corporation. For example, someone who holds 51% of the shares in a corporation owns a controlling interest in it; therefore, he or she has greater voting and other decision-making power.

The shareholders have the following rights:

  • The right to receive a portion of the corporation’s net revenue
  • The right to vote on the board of directors
  • The right to inspect corporate records
  • The right to sue for wrongful acts committed by the board, i.e., breach of fiduciary duty, fraud, illegal conduct
  • The right to sell their stock
  • The right to dividends
  • The right to purchase more stock if another public offering is made

With regard to the second right, all shareholders have a right to vote for who will be on the board, giving them some sort of oversight as to how the business will be run, as they run the company for the benefit of the shareholders. Additionally, as noted above, if a shareholder owns a significant amount of shares in the business (i.e., 51%), then he or she might even be able to appoint the board alone.

If a shareholder wants to sell his stock to another person, but still holds beneficial ownership over the shares, he can do so by turning over the rights to his shares without turning over title. If this occurs, the third party will be the registered owner of the stock, but there is a document that will specify the original shareholder as the true holder of the shares. This also means that the original shareholder will continue to have the above-mentioned rights as all other shareholders.

Liquidator - Likvidator

In law, a liquidator is the officer appointed when a company goes into winding-up or liquidation who has responsibility for collecting in all of the assets under such circumstances of the company and settling all claims against the company before putting the company into dissolution.

Management Levels

Most organizations have three management levels: first-level, middle-level, and top-level managers. First-line managers are the lowest level of management and manage the work of nonmanagerial individuals who are directly involved with the production or creation of the organization's products. First-line managers are often called supervisors, but may also be called line managers, office managers, or even foremen. Middle managers include all levels of management between the first-line level and the top level of the organization. These managers manage the work of first-line managers and may have titles such as department head, project leader, plant manager, or division manager. Top managers are responsible for making organization-wide decisions and establishing the plans and goals that affect the entire organization. These individuals typically have titles such as executive vice president, president, managing director, chief operating officer, chief executive officer, or chairman of the board.

These managers are classified in a hierarchy of authority, and perform different tasks. In many organizations, the number of managers in every level resembles a pyramid. Each level is explained below in specifications of their different responsibilities and likely job titles.

Top Management

The top or senior layer of management consists of the board of directors (including non-executive directors and executive directors), president, vice-president, CEOs and other members of the C-level executives. Different organizations have various members in their C-suite, which may include a Chief Financial Officer, Chief Technology Officer, and so on. They are responsible for controlling and overseeing the operations of the entire organization. They set a "tone at the top" and develop strategic plans, company policies, and make decisions on the overall direction of the organization. In addition, top-level managers play a significant role in the mobilization of outside resources. Senior managers are accountable to the shareholders, the general public and to public bodies that oversee corporations and similar organizations. Some members of the senior management may serve as the public face of the organization, and they may make speeches to introduce new strategies or appear in marketing.

The board of directors is typically primarily composed of non-executives who owe a fiduciary duty to shareholders and are not closely involved in the day-to-day activities of the organization, although this varies depending on the type (e.g., public versus private), size and culture of the organization. These directors are theoretically liable for breaches of that duty and typically insured under directors and officers liability insurance. Fortune 500 directors are estimated to spend 4.4 hours per week on board duties, and median compensation was $212,512 in 2010. The board sets corporate strategy, makes major decisions such as major acquisitions,[25] and hires, evaluates, and fires the top-level manager (Chief Executive Officer or CEO). The CEO typically hires other positions. However, board involvement in the hiring of other positions such as the Chief Financial Officer (CFO) has increased. In 2013, a survey of over 160 CEOs and directors of public and private companies found that the top weaknesses of CEOs were "mentoring skills" and "board engagement", and 10% of companies never evaluated the CEO. The board may also have certain employees (e.g., internal auditors) report to them or directly hire independent contractors; for example, the board (through the audit committee) typically selects the auditor.

Helpful skills of top management vary by the type of organization but typically include a broad understanding of competition, world economies, and politics. In addition, the CEO is responsible for implementing and determining (within the board's framework) the broad policies of the organization. Executive management accomplishes the day-to-day details, including: instructions for preparation of department budgets, procedures, schedules; appointment of middle level executives such as department managers; coordination of departments; media and governmental relations; and shareholder communication.

Middel Management

Consist of general managers, branch managers and department managers. They are accountable to the top management for their department's function. They devote more time to organizational and directional functions. Their roles can be emphasized as executing organizational plans in conformance with the company's policies and the objectives of the top management, they define and discuss information and policies from top management to lower management, and most importantly they inspire and provide guidance to lower level managers towards better performance.

Middle management is the midway management of a categorized organization, being secondary to the senior management but above the deepest levels of operational members. An operational manager may be well-thought-out by middle management, or may be categorized as non-management operate, liable to the policy of the specific organization. Efficiency of the middle level is vital in any organization, since they bridge the gap between top level and bottom level staffs.

Their functions include:

  • Design and implement effective group and inter-group work and information systems.
  • Define and monitor group-level performance indicators.
  • Diagnose and resolve problems within and among work groups.
  • Design and implement reward systems that support cooperative behavior. They also make decision and share ideas with top managers.

Lower Management

Lower managers include supervisors, section leaders, forepersons and team leaders. They focus on controlling and directing regular employees. They are usually responsible for assigning employees' tasks, guiding and supervising employees on day-to-day activities, ensuring the quality and quantity of production and/or service, making recommendations and suggestions to employees on their work, and channeling employee concerns that they cannot resolve to mid-level managers or other administrators. First-level or "front line" managers also act as role models for their employees. In some types of work, front line managers may also do some of the same tasks that employees do, at least some of the time. For example, in some restaurants, the front line managers will also serve customers during a very busy period of the day.

Front-line managers typically provide:

  • Training for new employees
  • Basic supervision
  • Motivation
  • Performance feedback and guidance
  • Some front-line managers may also provide career planning for employees who aim to rise within the organization.

GET
/{country}/person/relations/{personal_id}

Example request

r = requests.get("https://api.risika.dk/v1.2/dk/person/relations/4006873173",
                 headers={"Authorization": <access_token>,
                          "Content-Type": "application/json"})
print(r.json())

Example response

{
    "local_organization_id": null,
    "name": "Timm Jeppesen",
    "politically_exposed_persons": null,
    "relations": [
        {
            "company_name": "RISIKA A/S",
            "company_status": "Active",
            "company_status_code": "ACTIVE",
            "company_type": {
                "long": "Aktieselskab",
                "short": "A/S"
            },
            "functions": [
                {
                    "function": "CHIEF EXECUTIVE OFFICER",
                    "title": "Chief Executive Officer",
                    "valid_from": "2018-04-01",
                    "valid_to": null
                },
                {
                    "function": "MANAGEMENT",
                    "title": "Management",
                    "valid_from": "2017-05-18",
                    "valid_to": "2018-03-31"
                },
                {
                    "function": "BENEFICIAL OWNER",
                    "title": "Beneficial Owner",
                    "valid_from": "2017-05-18",
                    "valid_to": null
                }
            ],
            "local_organization_id": {
                "country": "DK",
                "id": "37677892"
            },
            "risk_assessment": "High",
            "risk_assessment_code": "HIGH",
            "score": 3
        },
        {
            "company_name": "TJ Formueinvest ApS",
            "company_status": "Active",
            "company_status_code": "ACTIVE",
            "company_type": {
                "long": "Anpartsselskab",
                "short": "APS"
            },
            "functions": [
                {
                    "function": "MANAGEMENT",
                    "title": "Management",
                    "valid_from": "2017-04-26",
                    "valid_to": null
                },
                {
                    "function": "LEGAL OWNER",
                    "title": "Legal Owner",
                    "valid_from": "2017-04-26",
                    "valid_to": null
                },
                {
                    "function": "BENEFICIAL OWNER",
                    "title": "Beneficial Owner",
                    "valid_from": "2017-04-26",
                    "valid_to": null
                },
                {
                    "function": "FOUNDER",
                    "title": "Founder",
                    "valid_from": "2017-04-26",
                    "valid_to": null
                }
            ],
            "local_organization_id": {
                "country": "DK",
                "id": "38599070"
            },
            "risk_assessment": "High",
            "risk_assessment_code": "HIGH",
            "score": 3
        },
        {
            "company_name": "MoneyFlow Group ApS",
            "company_status": "Active",
            "company_status_code": "ACTIVE",
            "company_type": {
                "long": "Anpartsselskab",
                "short": "APS"
            },
            "functions": [
                {
                    "function": "BOARD OF DIRECTORS",
                    "title": "Board of Directors",
                    "valid_from": "2018-02-13",
                    "valid_to": null
                }
            ],
            "local_organization_id": {
                "country": "DK",
                "id": "39228327"
            },
            "risk_assessment": "High",
            "risk_assessment_code": "HIGH",
            "score": 1
        },
        {
            "company_name": "TNT Holding DK ApS",
            "company_status": "Active",
            "company_status_code": "ACTIVE",
            "company_type": {
                "long": "Anpartsselskab",
                "short": "APS"
            },
            "functions": [
                {
                    "function": "MANAGEMENT",
                    "title": "Management",
                    "valid_from": "2018-01-23",
                    "valid_to": null
                },
                {
                    "function": "BENEFICIAL OWNER",
                    "title": "Beneficial Owner",
                    "valid_from": "2018-01-23",
                    "valid_to": "2018-02-07"
                }
            ],
            "local_organization_id": {
                "country": "DK",
                "id": "39276208"
            },
            "risk_assessment": "High",
            "risk_assessment_code": "HIGH",
            "score": 1
        }
    ],
    "type": "OTHER"
}

Rating

The rating end-points provide the credit scores and credit limits for the queried company. The credit score found here is the same as in /{country}/company/basics/{local_id}, but provides a historical perspective.

Credit

This endpoint provides a credit recomendation for the company you requested. The credit recommendation consists of a credit max, number of credit days and a recommended upfront payment.

The end-point has a optional credit parameter. If you specify credit, we will give a concrete credit recommendation. If you do not have a specific amount, we will give a generel recommendation for the company.

You can change the currency by specifying the optional parameter currency. The currency will be assumed for the input credit and the output credit max. You can get a complete list of supported currencies from List of Currencies. If no currency is specified, it defaults to DKK.

The given credit max does not depend on the amount of credit you specify. We use the credit to calculate how many days you should provide the specified amount of credit. If the credit you provided is greater than the credit max, we will recommend that you request the remaining payment upfront.

Expand Endpoint Description to see description and definitions.

Endpoint Description

The recommended credit max and credit days depends on the current risika score and equity of the company. Because of this it can happen that a company with a risika score of 5 gets a higher credit max than a company with a risika score of 7.

Changing between scoring products The standard product (collection of models) used by this end-point is called BOHR. It will default to BOHR to you don't specify the product, but you can also specify it explicitly by setting the GET parameter product to BOHR.

If you want to query for the Risika Scores generated by NEWTON (collection of models, including the Neutral Network scores), you set the GET parameter to NEWTON.

GET
/{country}/rating/credit/{local_id}?credit={amount}

Example request

r = requests.get("https://api.risika.dk/v1.2/dk/rating/credit/37677892",
                 params={"credit": 1000,
                         "currency": "DKK"},
                 headers={"Authorization": <access_token>,
                          "Content-Type": "application/json"})
print(r.json())

Example response

{
  "upfront": null,
  "credit_days": 7,
  "credit_max": 9000,
  "currency": "DKK"
}

Scores (Risika score)

This endpoint provides the historical Risika scores for the queried company. The most recent score is also shown in /{country}/company/basics/{local_id}.

If we're unable to score the company, score and risk_assessment will be null and the key error will explain why the report is not scored. The description language change with the Accept-Language header described in Headers.

The end-point works with Danish, Swedish and Norweigian companies.

Expand Endpoint Description to see description and definitions.

Endpoint Description

Risika score companies from 1-10 where 1 is the lowest score (highest risk) and 10 is the highest score (lowest risk). We deliver accurate credit ratings by analyzing financial statements and industry patterns together with indicators of fraud like the level of audit and connected bankruptcies.

Risika Score Risk
1-3 High Risk
4-7 Medium Risk
8-10 Low Risk

For more information about our model performance please don't hestitate to contact us.

Changing between scoring products The standard product (collection of models) used by this end-point is called BOHR. It will default to BOHR to you don't specify the product, but you can also specify it explicitly by setting the GET parameter product to BOHR.

If you want to query for the Risika Scores generated by NEWTON (collection of models, including the Neutral Network scores), you set the GET parameter to NEWTON.

Note: The list of scores are not sorted by date

Example request with no errors

r = requests.get("https://api.risika.dk/v1.2/dk/rating/scores/37677892",
                 headers={"Authorization": <access_token>,
                          "Content-Type": "application/json"})
print(r.json())

Example response (BOHR)

[
  {
    "date": "2020-06-17",
    "error": null,
    "probability_of_distress": null,
    "risk_assessment": "Middel",
    "risk_assessment_code": "MEDIUM RISK",
    "score": 4
  },
  {
    "date": "2020-04-30",
    "error": null,
    "probability_of_distress": null,
    "risk_assessment": "Middel",
    "risk_assessment_code": "MEDIUM RISK",
    "score": 4
  }
]

Example response (NEWTON)

[
  {
    "date": "2020-06-17",
    "error": null,
    "probability_of_distress": 0.0016828543739393353,
    "risk_assessment": "Low",
    "risk_assessment_code": "LOW RISK",
    "score": 8
  },
  {
    "date": "2020-04-30",
    "error": null,
    "probability_of_distress": 0.0036675294395536184,
    "risk_assessment": "Low",
    "risk_assessment_code": "LOW RISK",
    "score": 7
  },
]

Example request with errors

r = requests.get("https://api.risika.dk/v1.2/dk/rating/scores/10839238",
                 headers={"Authorization": <access_token>,
                          "Content-Type": "application/json"})
print(r.json())

Example response with errors

[
    {
        "date": "2018-06-30",
        "error": "We have decided not to score inactive companies. We consider companies under enforced closure or under bankrupcty as being inactive",
        "probability_of_distress": null,
        "risk_assessment": null,
        "risk_assessment_code": null,
        "score": null
    }
]

Credit Policy

These end-points allows you to set and get a credit policy. The policies are set globally for your organization and is enabled on the Dashboard and in the API at the same time. The policies are individual for each country you have access to.

The policy is only set and verified with these end-points. To apply the credit policy to a company, you enable the credit policy /account/credit_policy/set and then make a call to Company Basic, Company Search, or Monitor List. These end-points will return a key called credit_policy. If the credit policy is not enabled (disabled through /account/credit_policy/set or never set), it will show:

"credit_policy": null,

If the credit policy is set, but the company didn't have any conflicts, it will show the following object:

"credit_policy": {
    "allowed": true,
    "conflicts": []
}

If the credit policy is set and there is one or more conflicts with the company, it will show an object similar to this:

"credit_policy": {
    "allowed": false,
    "conflicts": [
        {
            "code": "POLICY_RISIKA_SCORE",
            "text": "The company has a lower credit score than accepted cf. your credit policy"
        }
    ]
}

code is always in English and uppercase. If you want to add logic to the returned Conflict Codes, you should only rely on these code. We may add new Conflict Codes in the future, when we add more options in the credit policy. We recommend that you make sure your program can handle unknown Conflict Codes. The possible Conflict Codes can be found in the table below.

text is describing the conflict in the langauge set in the request header. The exact wording of text may change without warning, so program logic should always be based on code.

Credit Policy parameter Conflict Code
exclude_risika_scores POLICY_RISIKA_SCORE
exclude_company_types POLICY_COMPANY_TYPE
exclude_level_of_auditor_assistances POLICY_AUDITOR_ASSISTANCE
exclude_industries POLICY_INDUSTRY
exclude_companies POLICY_LOCAL_ID
exclude_persons POLICY_ENTITY_ID
exclude_vat POLICY_VAT
bankruptcy_limit POLICY_BANKRUPTCIES
age_limit POLICY_AGE
negative_equity_limit POLICY_NEGATIVE_EQUITY
prepaid_phone_number POLICY_PREPAID_PHONE_NUMBER
phone_number_registry POLICY_PHONE_NUMBER_REGISTRY
distance_to_ceo POLICY_DISTANCE_TO_CEO

Set Credit Policy

You set the credit policy with a POST request to /account/credit_policy/set. The POST request must have all of the following keys:

Key Description
enabled Enable or disable the credit policy for country
country Choose which country the policy is for
policy A dictionary or "associative array" containing the policy

The key policy is a dictionary with these keys:

Key Example Availability
exclude_risika_scores [1, 2, 3, 4] DK, NO, SE
exclude_company_types ["APS", "IVS"] DK, NO, SE
exclude_level_of_auditor_assistances ["NO AUDITOR ASSISTANCE"] DK
exclude_industries ["841200"] DK, NO, SE
exclude_companies [{"local_organization_id": {"country": "DK", "id": "10404916"}}] DK, NO, SE
exclude_persons [{"local_person_id": {"country": "DK", "id": "4006873173"}}] DK
exclude_vat ["SHOULD_BE", "SHOULD_BE_AND_EXCEEDED"] DK, NO, SE
bankruptcy_limit 3 DK
age_limit 3 DK, NO, SE
negative_equity_limit 3 DK, NO, SE
prepaid_phone_number false DK
phone_number_registry false DK
distance_to_ceo 5 DK

Keys that are not set, will be set to null. We recommend that you send all keys and set the unused keys to null yourself, so you don't forget the values of the unset keys will be cleared.

For exclude_vat, you can set it to SHOULD_BE or SHOULD_BE_AND_EXCEEDED. SHOULD_BE means they are in an industry where companies typically are registered for VAT. The conflict is only triggered if the company isn't registered and they should be. SHOULD_BE_AND_EXCEEDED is an extension of SHOULD_BE, but only triggers if they also exceed the legal limit for revenue (limits depend on country).

For prepaid_phone_number, you can set it to true, false or null. The filter can allow or disallow the use of prepaid cards in the listed phone numbers for the company (aggregated over different sources). Prepaid cards may in some cases indicate fraudlent behavior, but is no guarantee of any wrongdoing. If the filter is set to true, it will allow the use of prepaid cards. If the filter is set to false, it will not allow prepaid cards. Having the filter set to null is the same as true - the filter is disabled and will allow prepaid cards.

POST
/account/credit_policy/set

Example request

r = requests.post(
    "https://api.risika.dk/v1.2/account/credit_policy/set",
    json={
        "enabled": True,
        "country": "DK",
        "policy": {
            "exclude_risika_scores": [1, 2, 3, 4],
            "exclude_company_types": ["APS"],
            "exclude_level_of_auditor_assistances": ["NO AUDITOR ASSISTANCE"],
            "exclude_industries": ["841200"],
            "exclude_companies": [
                {"local_organization_id": {"country": "DK", "id": "10404916"}}
            ],
            "exclude_persons": [
                {"local_person_id": {"country": "DK", "id": "4006873173"}}
            ],
            "exclude_vat": ["SHOULD_BE", "SHOULD_BE_AND_EXCEEDED"],
            "bankruptcy_limit": 3,
            "age_limit": 3,
            "negative_equity_limit": 3,
            "prepaid_phone_number": false,
            "phone_number_registry": false,
            "distance_to_ceo": 5,
        }
    },
    headers={"Authorization": access.token,
             "Content-Type": "application/json"}
)

print(r.json())

Example response

{
  "status": "ok"
}

Get Credit Policy

You can retrieve the credit policy you set with a POST request to /account/credit_policy/set using this end-point. You specify the country in the GET parameter by setting country e.g. country=DK.

The policy you get back will have the company name and person names included, so it is easier to display in a user interface.

It also has Unix timestamps for when the policy was created and updated (created and updated, respectively).

NB: The timestamps are 64-bit integers and are in milliseconds. A lot of systems still use 32-bit timestamps with seconds precision.

GET
/account/credit_policy/get

Example request

r = requests.get(
    "https://api.risika.dk/v1.2/account/credit_policy/get",
    params={"country": "DK"},
    headers={"Authorization": access.token,
             "Content-Type": "application/json"}
)

print(r.json())

Example response

{
    "created": 1603901311000,
    "enabled": true,
    "policy": {
        "exclude_risika_scores": [1, 2, 3, 4],
        "exclude_company_types": ["APS"],
        "exclude_level_of_auditor_assistances": ["NO AUDITOR ASSISTANCE"],
        "exclude_industries": ["841200"],
        "exclude_companies": [
            {
                "local_organization_id": {"country": "DK", "id": "10404916", "name": "TIVOLI A/S"}
            }
        ],
        "exclude_persons": [
            {
                "local_person_id": {"country": "DK", "id": "4006873173", "name": "Timm Jeppesen"}
            }
        ],
        "exclude_vat": ["SHOULD_BE", "SHOULD_BE_AND_EXCEEDED"],
        "bankruptcy_limit": 3,
        "age_limit": 3,
        "negative_equity_limit": 3,
        "prepaid_phone_number": false,
        "phone_number_registry": false,
        "distance_to_ceo": 5
    },
    "updated": 1603984239000
}

Notes

The "Notes" end-points let you manage and show the notes you have add for each company. The notes are stored in a JSON structure and you are free to put anything into this structure with a few limitations to size and some reserved variable names. At the time of writing, there is no actual size limit to the JSON structure as we expect our customers to only use it for legitimate purposes, but there is an indirect limit on the size, as our load balancer doesn't allow POST requests larger than 1 MB. We reserve the right to add any filters or limitations later with no warning, but all legitimate purposes should always work.

There is two reserved variable names that can be used for specific features in our API and on our Dashboard

Parameter Datatype Features
_internal_id String of 1 - 64 chars This data is shown in Company Basic and Monitoring under "Internal ID" and may help Dashboard users, so they can find your company's internal ID directly from the Dashboard
_phone_number String of 1 - 64 chars The phone number can be part of your Credit Policy, where you can set criteria for the phone numbers to mitigate fraud. This variable is in case your customer use a different phone number than the one that we have. The phone numbers must include the country code to work (e.g. +45xxxxxxxx for Denmark) and spaces must be omitted.

We will add more variables in the future, so to prevent any interference with your custom variables, the variables starting with underscore is reserved for features by Risika.

Add Note

To add notes to companies, you send a POST request to this end-point with a list with this data structure:

{
    "mode": "overwrite",
    "notes": [{"data": <JSON>, "local_organization_id": <Company ID>}]
}

The array should be between 1 and 500 elements. If you need to add more, you have to split the array into multiple parts and send a new POST request for each part.

mode must be hardcoded to overwrite, but will have other options later.

This end-point also makes to possible to remove multiple notes at the same time. If you send an empty JSON object ({}) for each of the companies you want to remove, the data will be cleared and no longer shown in /account/notes/list.

POST
/account/notes/add

Example request

r = requests.post(
    "https://api.risika.dk/v1.2/account/notes/add",
    json={
        "mode": "overwrite",
        "notes": [
            {
                "data": {"_internal_id": "1", "test": 1},
                "local_organization_id": {"country": "DK", "id": "54562519"}
            },
            {
                "data": {"_internal_id": "2", "test": 2},
                "local_organization_id": {"country": "NO", "id": "913829565"}
            },
            {
                "data": {"_internal_id": "4", "test": 4},
                "local_organization_id": {"country": "UK", "id": "00368236"}
            },
            {
                "data": {"_internal_id": "3", "test": 3},
                "local_organization_id": {"country": "SE", "id": "5560704131"}
            },
            {
                "data": {"_internal_id": "5", "test": 5},
                "local_organization_id": {"country": "SE", "hash": "eb50f772a2383d996df729370e2a38d5"}
            }
        ]
    },
    headers={"Authorization": access.token,
             "Content-Type": "application/json"}
)

print(r.json())

Example response

{
  "rejected": [],
  "status": "ok"
}

Get Note

To verify the note you wrote to a specific company, you can use this end-point. To retrive the full list of notes, please see /account/notes/list.

NB: This is a POST request, unlike what the name might suggest

POST
/account/notes/get

Example request

r = requests.post(
    "https://api.risika.dk/v1.2/account/notes/get",
    json={
        "local_organization_id": {"country": "DK", "id": "54562519"}
    },
    headers={"Authorization": access.token,
             "Content-Type": "application/json"}
)

print(r.json())

Example response

{
    "_internal_id": "1", "test": 1
}

List Notes

This end-point lists all notes you have added through /account/notes/add. You can only get 1000 notes at once, but you can control the pagination with rows and get chunks of 1000 at a time. You can use count to verify that you have downloaded everything.

POST
/account/notes/list

Example request

r = requests.post(
    "https://api.risika.dk/v1.2/account/notes/list",
    json={
        "rows": {
            "from": 0,
            "to": 10,
        }
    },
    headers={"Authorization": access.token,
             "Content-Type": "application/json"}
)

print(r.json())

Example response

{
    "count": 5,
    "notes": [
        {"data": {"_internal_id": "1", "test": 1}, "local_organization_id": {"country": "DK", "id": "54562519"}},
        {"data": {"_internal_id": "2", "test": 2}, "local_organization_id": {"country": "NO", "id": "913829565"}},
        {"data": {"_internal_id": "4", "test": 4}, "local_organization_id": {"country": "UK", "id": "00368236"}},
        {"data": {"_internal_id": "3", "test": 3}, "local_organization_id": {"country": "SE", "id": "5560704131"}},
        {"data": {"_internal_id": "5", "test": 5}, "local_organization_id": {"country": "SE", "hash": "eb50f772a2383d996df729370e2a38d5"}}
    ],
    "rows": {
        "from": 0,
        "to": 10
    }
}

Remove Note

You can use this end-point to remove a note from a single company. If you want to remove multiple company notes at a time, see /account/notes/list.

POST
/account/notes/remove

Example request

r = requests.post(
    "https://api.risika.dk/v1.2/account/notes/remove",
    json={
        "local_organization_id": {"country": "DK", "id": "54562519"}
    },
    headers={"Authorization": access.token,
             "Content-Type": "application/json"}
)

print(r.json())

Example response

{
    "status": "ok"
}

Highlights

This endpoint provides highlights that we have selected by analyzing the company, financial reports and the people associated with the company.

A highlight can be classified as either positive, neutral or negative. The classification is a tool for grouping similar highlights. To prioritize by seriousness, you can use the weight parameter. weight ranks the highlights on an arbitrary scale that indicates the relative seriousness to each highlight.

Each highlight carries a title, message and description. The title and message are generated specificly for the company and explains the situation that triggered the highlight. The description is general explaination of the highlight and doesn't change depending on the companies situation.

This end-point supports the Accept-Language header described in Headers.

Endpoint Description

Highlights

Highlight Description
address The company have changed address within the last couple of years.
age Warning of higher risk if the company is started within 5 years.
auditors The company have changed auditor within the last couple of years.
change_in_employees Number of employees has consistently changed over the last 3 years.
change_in_management There have been many changes in the management and/or the board within the last year.
company_type The information appears if the company is a sole proprietorship.
connected_bankruptcies Amount of historical bankruptcies with the people associated with the company (executives, board of directors etc.).
current_ratio If the current ratio is within the top or bottom decile in industry.
equity Information regarding whether the company has zero or negative equity.
foreign_currency Informing that the financial statement is stated in a foreign currency.
holding If the company is identified as a holding company.
industry Special industries (defined by industry codes) that are not graded.
industry_risk Informing if the company is in an industry with high or low bankruptcy risk.
intangible_assets Warning if the value of intellectual property represents over 50% of equity in the company. This is a potentially risk factor.
old_financialstatement The financial statement that the calculations are based upon is very old.
one_financial_statement Only one financial statement - can give uncertainty in the calculation.
pep If any political exposed persons are involved with the company.
powers_to_bind Warning if the company has changed powers to bind in the last year.
prior_distress If the company has been under bankruptcy or under enforced closure in the past.
profit_loss If profit or losses have increased or decreased with more than 20%.
proprietorship_age The information appears if the company is an older sole proprietorship.
return_on_assets If the return on assets is within the top or bottom decile in industry.
revenue If revenues have increased or decreased with more than 20%.
solidity_ratio If solidity ratio is within the top or bottom decile in industry.
three_years_profitloss If the profit or losses have a siginificant trend the last 3 years.
timely_delivery Warning about if the financial statement wasn''t handed in to the authorities in time.
type_of_auditor_assistance Warning about the level of involvement from an auditor in the creation of the financial statement.
vat_check Provides infomation on weather or not the company is registered for VAT

Temporary Highlights

Highlight Description
corona_exposure Highlights companies with stressed liquidity and within industries where demand is negatively affected by the crisis.

GET
/{country}/highlights/{local_id}

Example request

r = requests.get("https://api.risika.dk/v1.2/dk/highlights/37677892",
                 headers={"Authorization": <access_token>,
                          "Content-Type": "application/json"})
print(r.json())

Example response

{
  "highlights": {
    "age": {
      "title": "Ung virksomhed",
      "message": "Vær opmærksom på, at alderen på virksomheden er 3 år. Vores algoritme har vist, at det forøger risikoen, når virksomheder er under 5 år gamle og derfor har det påvirket den samlede score.",
      "description": "Advarsel om, at der er større risiko forbundet med denne virksomheden, da den en mindre end 5 år gammel.",
      "classification": "negative",
      "weight": 1900
    },
    "address": {
      "title": "Adresseskift",
      "message": "Virksomheden har skiftet adresse mere end 3 gange i løbet af de sidste 3 år.",
      "description": "Informationen fremkommer, hvis virksomheden har skiftet adresse inden for de sidste par år.",
      "classification": "neutral",
      "weight": 1850
    },
    "change_in_management": {
      "title": "Udskifting i ledelsen",
      "message": "Virksomheden har haft ændringer i direktionen og/eller bestyrelsen 3 eller flere gange sidste år.",
      "description": "Informationen fremkommer, hvis der har været udskiftninger i direktionen og/eller bestyrelsen det sidste 3 år.",
      "classification": "neutral",
      "weight": 1875
    },
    "powers_to_bind": {
      "title": "Ændring i tegningsregel",
      "message": "Virksomheden har ændret tegningsregel indenfor det sidste år.",
      "description": "Informationen fremkommer, hvis virksomheden har ændret tegningsregel inden for sidste år.",
      "classification": "neutral",
      "weight": 3750
    },
    "change_in_employees": {
      "title": "Ændring i antal ansatte",
      "message": "Virksomhedens antal ansatte er steget over de sidste 3 år.",
      "description": "Informationen fremkommer, hvis antallet af medarbejdere er steget eller faldet over de sidste 3 år.",
      "classification": "positive",
      "weight": 2500
    },
    "intangible_assets": {
      "title": "Stor andel immaterielle anlægsaktiver",
      "message": "Over 50% af egenkapitalen i selskabet består af immaterielle anlægsaktiver, hvilket kan betyde en øget finansiel risiko.",
      "description": "Informationen fremkommer, hvis virksomheden har en høj andel immaterielle anlægsaktiver, hvilket kan være en risiko-faktor.",
      "classification": "negative",
      "weight": 1950
    },
    "type_of_auditor_assistance": {
      "title": "Revisionsniveau",
      "message": "Virksomhedens seneste regnskab er blevet revideret af en revisor.",
      "description": "Informationen fremkommer, hvis virksomheden ikke har fået lavet fuld revision af seneste regnskab.",
      "classification": "neutral",
      "weight": null
    },
    "connected_bankruptcies": {
      "title": "Konkursanalyse",
      "message": "Der er 1 konkurs i blandt de personer der har relation til virksomheden. Det har ikke trukket ned i den samlede kreditscore.",
      "description": "Informationen fremkommer, hvis der har været konkurser blandt de personer, der har relation til virksomheden.",
      "classification": "neutral",
      "weight": 3200
    }
  }
}

If you don't have a specific Company ID or Personal ID, you can use search end-points to filter all companies by name, address, equity, Risika score, etc.

Search for a specific person only works by name at the moment and work only for Danish companies.

Search for Company

This endpoint enables you to search for companies by name and many other attributes defined under Search Filters instead of providing a local ID (e.g. CVR-number for Danish companies). You can search with two different modes: minimal or full:

It should be also noted that you can combine multiple search filters together to get a more specific result e.g. "filters: {"company_name": "Ikea", "city": "København"}

Minimal Limited to 25 search results. The results are also much simpler, contains only the name, local ID and country code. This is meant as "quick search" feature.

Full The full search returns much more information about the companies and allows you to set advanced search parameters. The values returned are: local_organization_id, company_name, score, company_type, employees_interval, active, advertisement_protected, date_of_incorporation, secondary_names, historical_names and address.

There is a max limit of 50,000 for search results, meaning you may only get top 50,000 results matching your criteria. Also you have to use pagination to get more than the first 1000 rows. To get more than the first 1000 rows (or to less than 1000 rows), you can specify the from and to parameters. If no from and to parameters are specified, it defaults to 100 rows. NB: We use a "half-closed interval" for from and to, which means that you should query "0-1000, 1000-2000, 2000-3000, ..." to get everything. If you query for "0-1000, 1001-2000, 2001-3000 ..." you will miss one company every time.

Explanation of search input parameters

Interpreting This Table

This table illustrates how each parameter is treated based on the end-point. If the entry e.g. active is unique in the Input Parameter column this means that it has the same behavior for all end-points /dk/.., /no/.., /se/... If entry e.g. company_type is duplicated several times this means it is localized for specific country and differs in structure or input data types. Super scripts likeNOO mean NO(Norway) + O(Only) = NOO and NO(Norway) + N(Non Supported) = NON. If Supported Input Types has something like List[integer] this means it's a list of integers and the data structure looks for example like this [1, 2, 4]. If the List[] item data-type is not a primitive: boolean, string, integer refer to the Input Types Explained section for information about that specific input type. A singleton in this context means that Input Parameter is just a simple immutable value e.g. {"active": True} is a singleton because boolean is not a list nor an object.

We added a filter called free_search, which is meant as an "omni bar" for web sites (available in both full and minimal search). As input data for free_search you can use use the following: name of the company, phone numberNON, full address, partial address, historicalDKO and secondary namesDKO.

Input Parameter Supported Input Types Description
"active": boolean Singleton boolean. Filters based on company being active(true) or inactive(false)
"advertising": boolean Singleton boolean. true means company can be contacted for advertising and false it can't
"company_name": string The name of the company. It is case-insensitive and supports partial names (name substrings)
"free_search": string Searches on multiple fields: name, address full and partial, zipcode, phone numberNON, emailDKO, historical and secondary nameDKO
"auditor":DKO string DK Only. Allows you to search based on the: auditing firm CVR, auditing firm name and the name of auditor
"company_type":DKO List[dk_company_type_enum] Enumerated company types. Find valid values at List Company Types
"company_type":NOO List[no_company_type_enum] Enumerated company types. See valid enum values at NO company types
"company_type":SEO List[se_company_type_enum] Enumerated company types. See valid enum values at SE company types
"employees":DKO, †† List[dk_employees_enum] Enumerated employee ranges. See valid enum values at enum values at List Employee Intervals
"employees":NOO string Integer passed as a string type e.g {employees: "99"}
"employees":SEO List[se_employees_enum] Enumerated employee ranges. See valid enum values at enum values at SE employee intervals
"industry":DKO dk_industry_enum, List[dk_industry_enum] Allows you to filter by industry code, special industry categories (singleton or list)
"industry":SEO se_industry_enum, List[se_industry_enum] Filters by exact industry code (singleton or list) only strings are accepted
"industry":NOO no_industry_enum, List[no_industry_enum] Filters by exact industry code (singleton or list) only strings are accepted
"city": string, List[string] Allows to search based on city name. Case Insensitive and city name has to be exact. It can be a simple string or list of strings.
"municipality": string, List[string] Allows to search based on municipality name. Case Insensitive and municipality name has to be exact. It can be a simple string or list of strings.
"zipcode": List[integer] List of zipcodes as integers (see full List of Zipcodes)
"solidity": range_basic, comparison_basic These values are expressed as the most recent integer percentages. e.g. an input of 10 is equal to 10%
"liquidity": range_basic, comparison_basic These values are expressed as the most recent integer percentages. e.g. an input of 10 is equal to 10%
"return_on_assets": range_basic, comparison_basic These values are expressed as the most recent integer percentages. e.g. an input of 10 is equal to 10%
"date_of_incorporation": range_date, comparison_date Date on which company was established
"score": risika_score, List[risika_score_enum], range_risika_score, comparison_risika_score Risika scores (integers from 1 to 10). They can be exact value, list of scores, range of scores or a comparison of scores
"assets": range_currency, comparison_currency Filters based on most recent company's profit loss calculations
"fixed_assets": range_currency, comparison_currency Filters based on most recent company's profit loss calculations
"equity": range_currency, comparison_currency Filters based on most recent company's profit loss calculations
"gross_result": range_currency, comparison_currency Filters based on most recent company's profit loss calculations
"profit_loss": range_currency, comparison_currency Filters based on most recent company's profit loss calculations
"share_capital": range_currency, comparison_currency Filters based on most recent company's share capital calculations
"total_debt": range_currency, comparison_currency Filters based on most recent company's total debt calculations
"balance": range_currency, comparison_currency Filters based on most recent company's balance calculations

Input Types Explained

All field/key values shown in the examples are mandatory and are of integer type (unless explicitly stated in the description).

Input Type Example Description
range_basic { "range_start": 200, "range_end": 600 } base range object type from which other range_ borrows structure
range_currency { "range_start": 900, "range_end": 900, "currency": "EUR" } currency is a enumerated string valid values found [here][list of currencies](#list-currencies)
range_date { "range_start": "2001-09-11", "range_end": "2020-01-04"} key values for all are of string type and have a format of YYYY-MM-DD
range_risika_score { "range_start": 3, "range_end": 10 } key values for all are integers in range [1, 10]
comparison_basic { "value": 20000, "operator": ">" } operator is one of: "(<, >, =, <=, >=)"
comparison_currency { "value": 20000, "operator": ">", "currency": "EUR" } operator is one of: "(<, >, =, <=, >=)" and currency is a enumerated string valid values found under List of Currencies
comparison_date { "value": "2001-09-11", "operator": ">" } value is of string type and has a format of YYYY-MM-DD , operator is one of: "(<, >, =, <=, >=)"
comparison_risika_score {"score": { "value": 3, "operator": ">" }} value is of integer type and is in range [1, 10], operator is one of: "(<, >, =, <=, >=)"
risika_score 9 values in range [1, 10]

DKO Only supported for Danish DK (dk/search/company, dk/export/company) endpoints

NOO Only supported for Norwegian NO (no/search/company, no/export/company) endpoints

NON Not supported for Norwegian NO (no/search/company, no/export/company) endpoints

SEO Only supported for Swedish SE (se/search/company, se/export/company) endpoints

†† For DK and SE it's a string that comes in the following format "5-9" where 5 and 9 are the lowest amount of employees and 9 is the max. DK and SE intervals are different and should be referred in List of Employee Interval. In the case of NO there are no intervals so you have to pass an exact number as a string e.g. employees: "911"

POST
/{country}/search/company

Example request (minimal)

r = requests.post("%s/dk/search/company" % url,
                  json={"mode": "minimal",
                        "filters": {"free_search": "Risika"}},
                  headers={"Authorization": access.token,
                           "Content-Type": "application/json"})
print(r.json())

Example response (minimal)

{
  "search_result": [
    {
      "local_organization_id": {
        "country": "DK",
        "id": "37677892"
      },
      "company_name": "RISIKA A/S"
    }
  ],
  "count": 1
}

Example request (full)

r = requests.post("%s/dk/search/company" % url,
                  json={"mode": "full",
                        "from": 0,
                        "to": 100,
                        "filters": {
                            "company_name": "risika",
                            "company_type": ["A/S"],
                            "score": [1, 2, 3, 4, 5],
                            "active": True
                        }},
                  headers={"Authorization": access.token,
                           "Content-Type": "application/json"})
print(r.json())

Example response (full)

{
    "count": 2,
    "rows": {
        "from": 0,
        "to": 5
    },
    "search_result": [
        {
            "active": true,
            "address": {
                "city": "København K",
                "coname": null,
                "country": "DK",
                "municipality": "København",
                "number": "26, st.",
                "postdistrict": "København K",
                "street": "Kronprinsessegade",
                "zipcode": 1306
            },
            "advertisement_protected": true,
            "company_name": "RISIKA A/S",
            "company_type": "A/S",
            "credit_policy": null,
            "date_of_incorporation": "2016-04-30",
            "employees_interval": "10-19",
            "historical_names": [
                {
                    "company_name": "Globus Platform ApS",
                    "valid_from": "2016-04-30",
                    "valid_to": "2016-12-30"
                },
                {
                    "company_name": "NEMKREDITVURDERING.DK ApS",
                    "valid_from": "2016-12-31",
                    "valid_to": "2017-05-17"
                },
                {
                    "company_name": "RISIKA ApS",
                    "valid_from": "2017-05-18",
                    "valid_to": "2019-01-13"
                },
                {
                    "company_name": "RISIKA A/S",
                    "valid_from": "2019-01-14",
                    "valid_to": null
                }
            ],
            "local_organization_id": {
                "country": "DK",
                "id": "37677892"
            },
            "score": 4,
            "secondary_names": [
                {
                    "company_name": "Global Business Platform ApS",
                    "valid_from": "2016-04-30",
                    "valid_to": "2017-05-17"
                },
                {
                    "company_name": "Globus Platform ApS",
                    "valid_from": "2017-01-14",
                    "valid_to": "2017-05-17"
                }
            ],
            "webpage": "www.risika.dk"
        },
        {
            "active": true,
            "address": {
                "city": "København K",
                "coname": null,
                "country": "DK",
                "municipality": "København",
                "number": "26, st.",
                "postdistrict": "København K",
                "street": "Kronprinsessegade",
                "zipcode": 1306
            },
            "advertisement_protected": true,
            "company_name": "TNT Holding DK ApS",
            "company_type": "APS",
            "credit_policy": null,
            "date_of_incorporation": "2018-01-23",
            "employees_interval": null,
            "historical_names": [
                {
                    "company_name": "Risika Group ApS",
                    "valid_from": "2018-01-23",
                    "valid_to": "2018-09-19"
                },
                {
                    "company_name": "TNT Holding DK ApS",
                    "valid_from": "2018-09-20",
                    "valid_to": null
                }
            ],
            "local_organization_id": {
                "country": "DK",
                "id": "39276208"
            },
            "score": 1,
            "secondary_names": null,
            "webpage": null
        }
    ],
    "time_elapsed": 91
}

Search for Person

The search for persons is limited to search by name. The name is case insensitive and may be partial (missing e.g. middle name). This search doesn't support pagination and will return at most 100 matches.

Parameter Description
personal_id The unique ID identifying the person (doesn't work cross-country)
name Full name of the person
alias Aliases of the person as a list of strings
functions Associative array with active and function indicating whether if the person still has this function
active_company_relations List of company names this person is currently involved in

Example request

r = requests.post("https://api.risika.dk/v1.2/dk/search/person",
                 params={"query": "Timm Jeppesen"},
                 headers={"Authorization": <access_token>,
                          "Content-Type": "application/json"})
print(r.json())

Example response

{
  "search_result": [
    {
      "personal_id": 4006873173,
      "name": "Timm Jeppesen",
      "aliases": [
        "Timm Jeppesen"
      ],
      "functions": [
        {
          "active": true,
          "function": "ADMINISTRERENDE DIREKT\u00d8R"
        },
        {
          "active": true,
          "function": "BESTYRELSE"
        },
        {
          "active": true,
          "function": "DIREKTION"
        },
        {
          "active": true,
          "function": "REEL EJER"
        },
        {
          "active": true,
          "function": "STIFTERE"
        }
      ],
      "active_company_relations": [
        "MoneyFlow Group ApS",
        "RISIKA A/S",
        "TJ Formueinvest ApS",
        "TNT Holding DK ApS"
      ]
    }
  ],
  "count": 1
}

Registration Information

The end-points that starts with /{country}/registration/ offers registration infomation (Tinglysning in Danish) where information from the Danish registration office is provided, information on e.g. properties.

Properties

To get a registration information about a property, you make a request to GET /{country}/registration/properties.

Expand Endpoint Description to see description and definitions.

Endpoint Description

The property end-point requires four values in the request, these are; zipcode, district, street and building_number. Additional parameters can also be given to narrow the returned list of properties if e.g. address is requested where many properties share same address and can be distinguished by floor. Then the additional parameters are; floor, suite, side_door and district_subdivision.

Table with brief descriptions of all variables delivered by Registration Properties:

Value Description
address The address of the requested property
data The data for the requested property address

Example request

r = requests.get("https://api.risika.dk/v1.2/dk/registration/property",
                 params ={"zipcode": "2200",
                          "district": "København N",
                          "street": "Jagtvej",
                          "building_number": "135"},
                 headers={"Authorization": <access_token>,
                          "Content-Type": "application/json"})
print(r.json())

Example response

[
    {
        "address": {
            "building_number": "135",
            "country": "DK",
            "district": "K\u00f8benhavn N",
            "floor": null,
            "municipality": "K\u00f8benhavn",
            "side_door": null,
            "street": "Jagtvej",
            "suite": null,
            "zipcode": "2200"
        },
        "data": {...}
    }
]

Export

The export end-points are meant for export of "lead lists" or similar CSV/Excel dumps. The result is returned in the same format as Company Search, but includes some extra fields with contact information. The filter of each end-point is compatible with their search counterparts for eaiser export.

Pagination is disable for export. If you need more than the standard amount, please contact your sales representative.

This end-points exports the information from a search. The difference between export and search is the number of columns returned and that pagination is disabled. The additional columns includes contact information, which makes it ideal for "lead lists".

The filter function of this end-points is identical to the filter found in Search for Company. The only exception being that you can't specify the from parameter. The to parameter goes to 5000 by default, but may be changed upon request. Please contact your sales representative if you need a larger export limit.

POST
/{country}/export/company

Example request

r = requests.post("%s/dk/export/company" % url,
                  json={"mode": "full",
                        "from": 0,
                        "to": 10,
                        "filters": {
                            "free_search": "risika",
                            "company_type": ["A/S"],
                            "score": [1, 2, 3, 4, 5],
                            "active": True
                        }},
                  headers={"Authorization": access.token,
                           "Content-Type": "application/json"})
print(r.json())

Example response

{
  "search_result": [
    {
      "local_organization_id": {
        "id": "37677892",
        "country": "dk"
      },
      "active": true,
      "company_name": "RISIKA A/S",
      "company_type": "A/S",
      "employees_interval": "10-19",
      "address": {
        "city": "K\u00f8benhavn K",
        "coname": null,
        "number": "26, st.",
        "street": "Kronprinsessegade",
        "country": "DK",
        "zipcode": 1306,
        "municipality": "K\u00f8benhavn",
        "postdistrict": "K\u00f8benhavn K"
      },
      "main_industry_code": {
        "code": "829100",
        "description": "Inkassovirksomhed og kreditoplysning"
      },
      "email": {
        "email": "contact@risika.dk",
        "hidden": false
      },
      "phone": {
        "phone": "42905757",
        "hidden": false
      },
      "advertisement_protected": true,
      "webpage": null,
      "management": ["Nicolai Rasmussen", "Timm Jeppesen"]
    }
  ],
  "rows": {
    "to": 1,
    "from": 0
  },
  "count": 1,
  "time_elapsed": 123
}

Monitoring

The monitoring end-points allow you to manage and subscribe to changes for all your clients. You can add companies to monitoring lists and poll them for changes with List Monitoring.

The level of monitoring varies between countries. The list below shows which tags are delivered on each country. We will continuously add more tags and extend support for each country.

Tag Country
status DK, SE NO
management DK, SE, NO
new_report DK, SE, NO
address DK, SE, NO
score DK, SE NO
employees_interval DK, SE
company_type DK, SE
industry DK, SE
name DK, SE
phone_number DK
email DK

Add Monitoring

You can add companies to your monitoring lists by sending a POST request with the Company IDs you want to subscribe to /monitor/add. It will not raise an error, if you're already subscribed to the company. If you an invalid Company ID, it will return the ID in the response under rejected.

If you only have the hash of a company (only applies for Swedish companies), you can add it to the monitoring list by replacing id with hash in the request (see example).

Monitoring supports having multiple lists, which can be managed by a list_id. list_id is optional and is assumed to be 0, if not declared. We recommend that you use list_id explicitly as we will make it required in future versions (will always be optional in v1.2).

The end-point works with Danish, Swedish and Norweigian companies ('DK', 'SE', 'NO').

POST
/monitor/add

Example request

r = requests.post("https://api.risika.dk/v1.2/monitor/add",
                  json={
                        "list_id": 0,
                        "subscribe": [
                            {"local_organization_id": {"country": "DK", "id": "37677892"}},
                            {"local_organization_id": {"country": "NO", "id": "985279721"}},
                            {"local_organization_id": {"country": "SE", "hash": "ef94e87c50dc9f200c16eac53e3050d4"}}
                        ]
                  },
                  headers={"Authorization": access.token,
                           "Content-Type": "application/json"})

print(r.json())

Example response

{
  "status": "ok",
  "rejected": []
}

Remove Monitoring

To remove companies from the monitoring list, call this end-point with a list of Company IDs to remove. Unlike Add Monitoring, this end-point will return an error, if you try to remove a company you haven't subscribed to.

If you only have the hash of a company (only applies for Swedish companies), you can add it to the monitoring list by replacing id with hash in the request (see example).

Monitoring supports having multiple lists, which can be managed by a list_id. list_id is optional and is assumed to be 0, if not declared. We recommend that you use list_id explicitly, as we will make it required in future versions (will always be optional in v1.2).

GET
/monitor/remove

Example request

r = requests.post("https://api.risika.dk/v1.2/monitor/remove",
                  json={
                        "unsubscribe": [
                            {"local_organization_id": {"country": "DK", "id": "37677892"}},
                            {"local_organization_id": {"country": "NO", "id": "985279721"}},
                            {"local_organization_id": {"country": "SE", "hash": "ef94e87c50dc9f200c16eac53e3050d4"}}
                        ]
                  },
                  headers={"Authorization": access.token,
                           "Content-Type": "application/json"})

print(r.json())

Example response

{
  "status": "ok",
  "rejected": []
}

Verify Monitoring

This end-point is used to verify if you have already subscribed to a company. Example of use is to change the subscribe button on the Risika Dashboard, if you already subscribed to the company.

Monitoring supports having multiple lists, which can be managed by a list_id. For this end-point it will search through all lists, if no list_id is declared. If you want to verify that a specific list is contains a company, you can query the specific list with list_id.

GET
/monitor/verify

Example request

r = requests.get("https://api.risika.dk/v1.2/monitor/verify",
                 params={"country": "DK", "local_id": 10404916, "list_id": 0},
                 headers={"Authorization": access.token,
                          "Content-Type": "application/json"})

Example response

{
    "monitoring": true
}

Get Monitoring Lists

Get a complete list of the companies you monitor together with the most recent changes. To indicate the type of change, every change is assigned a type. With the type, you will also get a weight, which may help you prioritize the change.

type weight
status 9999
score 9000
new_report 8000
company_type 5000
name 4500
industry 3500
employees_interval 3000
email 1500
address 1500
phone_number 1000

Monitoring supports having multiple lists, which can be managed by a list_id. The list_id can either be all or list_id (integer), which is set in the URI (see example). Querying for all returns an aggregated list of all lists. If you query by a specific list_id, it only returns the content of that list.

This end-point implements pagination. This means, that you have to specify which row you want to and from (at most 1000 rows at a time). No matter which interval you choose, you will always get the total number of rows available in count.

Because the API covers a lot of different usecases, you have to set date to limit how recent or old the changes can be. With to and from you can set the time interval for the changes. from can be set to at most 365 days from today and to can be set to today or earlier.

This end-point supports the Accept-Language header described in Headers.

Example request

r = requests.post("https://api.risika.dk/v1.2/monitor/list/all",
                  json={
                      "rows": {"from": 0, "to": 100},
                      "dates": {"from": "2019-06-05", "to": "2020-02-05"}
                  },
                  headers={"Authorization": access.token,
                           "Content-Type": "application/json"})

print(r.json())
r = requests.post("https://api.risika.dk/v1.2/monitor/list/0",
                  json={
                      "rows": {"from": 0, "to": 100},
                      "dates": {"from": "2019-06-05", "to": "2020-02-05"}
                  },
                  headers={"Authorization": access.token,
                           "Content-Type": "application/json"})

print(r.json())

Example response

{
    "count": 17281,
    "monitor_list": [
        {
            "address": {
                "city": "København V",
                "coname": null,
                "country": "DK",
                "municipality": "København",
                "number": "3",
                "postdistrict": "København V",
                "street": "Vesterbrogade",
                "zipcode": 1620
            },
            "changes": null,
            "company_name": "TIVOLI A/S",
            "company_type": "A/S",
            "credit_max": 25000000,
            "credit_policy": null,
            "date_of_incorporation": "0001-01-01",
            "employee_interval": "1000-999999",
            "financial_key_figures": {
                "currency": "DKK",
                "equity": 920400000.0,
                "liquidity": 0.6359,
                "profit_loss": 94200000.0,
                "solidity": 0.5735
            },
            "industry_code": "932100",
            "internal_id": null,
            "local_organization_id": {
                "country": "DK",
                "id": "10404916"
            },
            "risk_assessment": "Low",
            "risk_assessment_code": "LOW",
            "score": 10,
            "status": "Active",
            "status_code": "ACTIVE"
        },
        {
            "address": {
                "city": "Billund",
                "coname": null,
                "country": "DK",
                "municipality": "Billund",
                "number": "1",
                "postdistrict": "Billund",
                "street": "Åstvej",
                "zipcode": 7190
            },
            "changes": null,
            "company_name": "LEGO A/S",
            "company_type": "A/S",
            "credit_max": 15000000,
            "credit_policy": null,
            "date_of_incorporation": "1975-12-19",
            "employee_interval": "5-9",
            "financial_key_figures": {
                "currency": "DKK",
                "equity": 22183000000.0,
                "liquidity": 1.9325,
                "profit_loss": 8306000000.0,
                "solidity": 0.6348
            },
            "industry_code": "642020",
            "internal_id": null,
            "local_organization_id": {
                "country": "DK",
                "id": "54562519"
            },
            "risk_assessment": "Low",
            "risk_assessment_code": "LOW",
            "score": 10,
            "status": "Active",
            "status_code": "ACTIVE"
        }
    ]
}

Relevant Changes

This end-point is meant to show a brief overview of the 3 most important changes in a monitoring list. This is the end-point used in "Most relevant changes" on the Risika Dashboard.

GET
/monitor/list/most_relevant/{list_id}

Example request

r = requests.get("https://api.risika.dk/v1.2/monitor/list/most_relevant/0",
                 headers={"Authorization": <access_token>,
                          "Content-Type": "application/json"})
print(r.json())

Example response

[
    {
        "changes": [
            {
                "new": {
                    "valid_from": "2012-04-26",
                    "valid_to": "2020-04-23",
                    "value": {
                        "entity_id": 4004093344,
                        "function": "BESTYRELSE",
                        "name": "Per Christiansen"
                    }
                },
                "sentence": "Board Member Stepdown",
                "type": "management_stepdown",
                "weight": 6000
            }
        ],
        "date": "2020-05-06",
        "local_organization_id": {
            "country": "DK",
            "id": "10413494"
        },
        "name": "TV2/DANMARK A/S",
        "weight": 6000
    }
]

Rename Monitoring List

This end-point allows you to change the name of an existing monitoring list

POST
/monitor/list/rename

Example request

r = requests.post("https://api.risika.dk/v1.2/monitor/list/rename",
                  json={"list_id": 0, "title": "New Title"},
                  headers={"Authorization": access.token,
                           "Content-Type": "application/json"})

print(r.json())

Example response

{
  "status": "ok"
}

Show Monitoring List

Use this end-point to get a complete list of the IDs and names of your monitoring lists. It also gives a brief overview of the risk distribution for each list. The risk can be used to sort or prioritize the lists.

GET
/monitor/list/show

Example request

r = requests.get("https://api.risika.dk/v1.2/monitor/list/show",
                 headers={"Authorization": access.token,
                          "Content-Type": "application/json"})

Example response

[
    {
        "list_id": 0,
        "name": "Name of List 1",
        "risk_assessment": {
            "LOW": 27,
            "HIGH": 1,
            "NONE": 3,
            "MEDIUM": 0
        }
    },
    {
        "list_id": 91,
        "name": "Name of List 2",
        "risk_assessment": {
            "LOW": 5,
            "HIGH": 0,
            "NONE": 0,
            "MEDIUM": 0
        }
    }
]

Create Monitoring List

You always have one monitoring list with ID 0, which cannot be removed. If you need more lists, you can always create more with this end-point. When you first create a list, you can choose a name for it and you will get a unique ID of that list back. If you want to change the name after creation, see Rename Monitoring List

POST
/monitor/list/add

Example request

r = requests.post("https://api.risika.dk/v1.2/monitor/list/add",
                  json={"title": "New Title"},
                  headers={"Authorization": access.token,
                           "Content-Type": "application/json"})

print(r.json())

Example response

{
  "list_id": 1
}

Remove Monitoring List

This end-point will remove a monitoring list and all companies subscribed to it. It is not possible to recover a list, when it has been remove.

POST
/monitor/list/remove

Example request

r = requests.post("https://api.risika.dk/v1.2/monitor/list/remove",
                  json={"list_id": 0},
                  headers={"Authorization": access.token,
                           "Content-Type": "application/json"})

print(r.json())

Example response

{
    "status": "ok"
}

Export Monitoring

Export the list of the companies you monitor together with the most recent changes. It follows the same structure as List Monitoring, but will include more data fields in the future.

Monitoring supports having multiple lists, which can be managed by a list_id. The list_id can either be all or list_id (integer), which is set in the URI (see example). Querying for all returns an aggregated list of all lists. If you query by a specific list_id, it only returns the content of that list.

This end-point implements pagination. This means, that you have to specify which row you want to and from (at most 1000 rows at a time). No matter which interval you choose, you will always get the total number of rows available in count.

Because the API covers a lot of different usecases, you have to set date to limit how recent or old the changes can be. With to and from you can set the time interval for the changes. from can be set to at most 365 days from today and to can be set to today or earlier.

This end-point supports the Accept-Language header described in Headers.

Example request

r = requests.post("https://api.risika.dk/v1.2/monitor/export/all",
                  json={
                       "rows": {"from": 0, "to": 100},
                       "dates": {"from": "2019-06-05", "to": "2020-02-05"}
                   },
                  headers={"Authorization": access.token,
                           "Content-Type": "application/json"})

print(r.json())
r = requests.post("https://api.risika.dk/v1.2/monitor/export/0",
                  json={
                       "rows": {"from": 0, "to": 100},
                       "dates": {"from": "2019-06-05", "to": "2020-02-05"}
                   },
                  headers={"Authorization": access.token,
                           "Content-Type": "application/json"})

print(r.json())

Example response

{
    "count": 17281,
    "monitor_list": [
        {
            "address": {
                "city": "København V",
                "coname": null,
                "country": "DK",
                "municipality": "København",
                "number": "3",
                "postdistrict": "København V",
                "street": "Vesterbrogade",
                "zipcode": 1620
            },
            "changes": null,
            "company_name": "TIVOLI A/S",
            "company_type": "A/S",
            "credit_max": 25000000,
            "credit_policy": null,
            "date_of_incorporation": "0001-01-01",
            "employee_interval": "1000-999999",
            "financial_key_figures": {
                "currency": "DKK",
                "equity": 920400000.0,
                "liquidity": 0.6359,
                "profit_loss": 94200000.0,
                "solidity": 0.5735
            },
            "industry_code": "932100",
            "internal_id": null,
            "local_organization_id": {
                "country": "DK",
                "id": "10404916"
            },
            "risk_assessment": "Low",
            "risk_assessment_code": "LOW",
            "score": 10,
            "status": "Active",
            "status_code": "ACTIVE"
        },
        {
            "address": {
                "city": "Billund",
                "coname": null,
                "country": "DK",
                "municipality": "Billund",
                "number": "1",
                "postdistrict": "Billund",
                "street": "Åstvej",
                "zipcode": 7190
            },
            "changes": null,
            "company_name": "LEGO A/S",
            "company_type": "A/S",
            "credit_max": 15000000,
            "credit_policy": null,
            "date_of_incorporation": "1975-12-19",
            "employee_interval": "5-9",
            "financial_key_figures": {
                "currency": "DKK",
                "equity": 22183000000.0,
                "liquidity": 1.9325,
                "profit_loss": 8306000000.0,
                "solidity": 0.6348
            },
            "industry_code": "642020",
            "internal_id": null,
            "local_organization_id": {
                "country": "DK",
                "id": "54562519"
            },
            "risk_assessment": "Low",
            "risk_assessment_code": "LOW",
            "score": 10,
            "status": "Active",
            "status_code": "ACTIVE"
        }
    ]
}

Validation

We use local Company IDs (CVR in DK, Orgno in SE/NO, etc.) to identify companies in our databases and API, since that is the formal way of addressing a company. In some business cases, you also use the VAT number to identify a company, since that's also unique. We chose to only use Company IDs in the API to keep it streamlined and to avoid mixing the IDs in different end-points. Sometimes Company IDs are typed in by the user and there can be many ways to format these IDs. To make your integration simpler, we have this end-point to "search" for Company IDs and hopefully make it easier to spot typos and support different stylings of the same IDs.

The end-point takes a list of strings, where each string is a Company ID. The algorithms works like this:

  • Remove hypens and spaces from the strings
  • Set all characters to uppercase
  • Check if the first two letters is recognized as a country code:

    • If a country is given, we will verify that country + ID matches
    • If a country is not given, we will return the matches for all countries (this may yield multiple results)

Because the Company IDs are only unique in their own country, a lot of IDs are reused in other countries. Between Denmark, United Kingdom and Finland there are at least 1,203 identical IDs (you can test this with one of these IDs: 10046424, 10044162, 10039347, 10054117).

The result is always a list of matches to support the possiblity of multiple matches. To limit the countries we return to you, you have to set the key countries with a list of the countries you support.

You can send up to 1000 Company IDs as once.

The end-point works with Danish, Swedish, Norweigian, Finnish and UK companies ('DK', 'SE', 'NO', 'FI', 'UK').

You can see some examples of how Company IDs can be formatted here:

Country Company ID
DK 37677892
DK dk37677892
DK 37 67 78 92
DK DK 37 67 78 92
NO 923609016
NO NO-923609016
NO NO923609016
NO NO 923 609 016 MVA
SE 5561828459
SE SE5561828459
SE SE-5561828459
SE SE-5561828459-01
FI 0112038-9
FI 01120389
FI FI01120389
UK 05979619
UK UK-SC474114
POST
/validate/local_id

Example request

r = requests.post(
    "https://api.risika.dk/v1.2/validate/local_id",
    json={
        "countries": ["DK", "SE", "NO", "FI", "UK"],
        "local_ids": [
            "37 67 78 92",
            "NO 923 609 016 MVA",
            "SE-5561828459-01",
            "0112038-9"
        ]},
    headers={"Authorization": access.token, "Content-Type": "application/json"}
)

print(r.json())

Example response

{
    "matches": {
        "0112038-9": [
            {
                "country": "FI",
                "id": "01120389",
                "name": "Nokia Oyj"
            }
        ],
        "37 67 78 92": [
            {
                "country": "DK",
                "id": "37677892",
                "name": "RISIKA A/S"
            }
        ],
        "NO 923 609 016 MVA": [
            {
                "country": "NO",
                "id": "923609016",
                "name": "EQUINOR ASA"
            }
        ],
        "SE-5561828459-01": [
            {
                "country": "SE",
                "hash": "532eb6e2eb4271ffc064783fe3956b8f",
                "id": "5561828459",
                "name": "IKEA Industry AB"
            }
        ],
        "31246695": [
            {
                "country": "DK",
                "id": "31246695",
                "name": "Sanggruppen"
            },
            {
                "country": "FI",
                "id": "31246695",
                "name": "Suorsa Sourcing Oy"
            }
        ],
    }
}

Lists

The list end-points helps you validate requests and see the possible values for search end-points.

List Employee Intervals

This end-point provides a complete list of the employee intervals. These values are returned by end-points such as Company Basics, but can also be used in the search filters of Search for Company.

This end-point is available for: Denmark and Sweden.

NB: The intervals may not be identical in all countries

GET
/{country}/list/employee_interval/

Example request

r = requests.get("https://api.risika.dk/v1.2/dk/list/employee_interval",
                 headers={"Authorization": <access_token>,
                          "Content-Type": "application/json"})
print(r.json())

Example response (sample)

{
    "employee_interval": [
        "0", "1", "2-4", "5-9", "10-19", "20-49", "50-99", "100-199", "200-499", "500-999", "1000-999999"
    ]
}

List Currencies

Currencies are used by Search for Company, which makes it eaiser to pass the user's preferred currency without converting the value locally. Any currency not in the list will be rejected by the API.

GET
/list/currencies/

Example request

r = requests.get("https://api.risika.dk/v1.2/list/currencies",
                 headers={"Authorization": <access_token>,
                          "Content-Type": "application/json"})
print(r.json())

Example response (sample)

{
    "currencies": [
        "DKK", "SEK", "NOK", "EUR", "GBP", "USD", "HKD", "SGD", "QAR", "AUD", "HRK", "CHF", "RUB", "CZK", "CAD", "PLN"
    ]
}

List Company Types

The response is a list of strings containing all company types for the given country.

This end-point is available for: Denmark, Sweden and Norway.

GET
/{country}/list/company_types

Example request

r = requests.get("https://api.risika.dk/v1.2/dk/list/company_types",
                 headers={"Authorization": <access_token>,
                          "Content-Type": "application/json"})
print(r.json())

Example response

{
    "company_types": [
        {
            "code": "FAS",
            "title": "Filial af udenlandsk aktieselskab, kommanditakties"
        },
        {
            "code": "UDL",
            "title": "Anden udenlandsk virksomhed"
        },
        {
            "code": "PAR",
            "title": "Partrederi"
        },
        {
            "code": "ABA",
            "title": "Andelsselskab (-forening) med begrænset ansvar"
        },
        {
            "code": "MSS",
            "title": "Medarbejderinvesteringsselskab"
        },
        {
            "code": "APS",
            "title": "Anpartsselskab"
        },
        {
            "code": "UOP",
            "title": "Uoplyst virksomhedsform"
        },
        {
            "code": "FON",
            "title": "Fonde og andre selvejende institutioner"
        },
        {
            "code": "SOV",
            "title": "Selvstændig offentlig virksomhed"
        },
        {
            "code": "K/S",
            "title": "Kommanditselskab"
        },
        {
            "code": "STA",
            "title": "Statslig administrativ enhed"
        },
        {
            "code": "AMT",
            "title": "Amtskommune"
        },
        {
            "code": "SMA",
            "title": "Selskab med begrænset ansvar"
        },
        {
            "code": "KOM",
            "title": "Primærkommune"
        },
        {
            "code": "FMA",
            "title": "Forening med begrænset ansvar"
        },
        {
            "code": "ENK",
            "title": "Enkeltmandsvirksomhed"
        },
        {
            "code": "A/S",
            "title": "Aktieselskab"
        },
        {
            "code": "I/S",
            "title": "Interessentskab"
        },
        {
            "code": "EØF",
            "title": "Europæisk Økonomisk Firmagruppe"
        },
        {
            "code": "EFO",
            "title": "Erhvervsdrivende fond"
        },
        {
            "code": "PMV",
            "title": "Personligt ejet Mindre Virksomhed"
        },
        {
            "code": "FBA",
            "title": "Forening eller selskab med begrænset ansvar"
        },
        {
            "code": "IVS",
            "title": "Iværksætterselskab"
        },
        {
            "code": "FKI",
            "title": "Folkekirkelige Institutioner"
        },
        {
            "code": "FIV",
            "title": "Særlig finansiel virksomhed"
        },
        {
            "code": "SCE",
            "title": "SCE-selskab"
        },
        {
            "code": "FFO",
            "title": "Frivillig forening"
        },
        {
            "code": "GUS",
            "title": "Grønlandsk afdeling af udenlandsk selskab eller virksomhed"
        },
        {
            "code": "DØD",
            "title": "Dødsbo"
        },
        {
            "code": "REG",
            "title": "Region"
        },
        {
            "code": "FOR",
            "title": "Forening"
        },
        {
            "code": "FBA",
            "title": "Filial af udenlandsk virksomhed med begrænset ansv"
        },
        {
            "code": "ANS",
            "title": "Andelsselskab (-forening)"
        },
        {
            "code": "ØVR",
            "title": "Øvrige virksomhedsformer"
        },
        {
            "code": "FAP",
            "title": "Filial af udenlandsk anpartsselskab eller selskab"
        },
        {
            "code": "KAS",
            "title": "Kommanditaktieselskab/Partnerselskab"
        },
        {
            "code": "EUO",
            "title": "Enhed under oprettelse i Erhvervsstyrelsen"
        }
    ],
    "country": "DK",
    "last_updated": "2020-01-15 15:38:00"
}

List Company Statuses

The response is a list of strings containing all company statuses for the given country.

This end-point is available for: Denmark, Sweden and Norway.

GET
/{country}/list/company_statuses

Example request

r = requests.get("https://api.risika.dk/v1.2/dk/list/company_statuses",
                 headers={"Authorization": <access_token>,
                          "Content-Type": "application/json"})
print(r.json())

Example response

{
    "company_statuses": [
        {
            "code": "ACTIVE",
            "title": "Active"
        },
        {
            "code": "CEASED",
            "title": "Ceased"
        },
        {
            "code": "DELETED",
            "title": "Deleted"
        },
        {
            "code": "DISSOLVED",
            "title": "Dissolved"
        },
        {
            "code": "DISSOLVED AFTER BANKRUPTCY",
            "title": "Dissolved after bankruptcy"
        },
        {
            "code": "DISSOLVED AFTER CROSS-BORDER MERGER",
            "title": "Dissolved after cross-border merger"
        },
        {
            "code": "DISSOLVED AFTER CROSS-BORDER RELOCATION",
            "title": "Dissolved after cross-border relocation"
        },
        {
            "code": "DISSOLVED AFTER DECLARATION",
            "title": "Dissolved after declaration"
        },
        {
            "code": "DISSOLVED AFTER DEMERGER",
            "title": "Dissolved after demerger"
        },
        {
            "code": "DISSOLVED AFTER ENFORCED CLOSURE",
            "title": "Dissolved after enforced closure"
        },
        {
            "code": "DISSOLVED AFTER FUSION",
            "title": "Dissolved after fusion"
        },
        {
            "code": "DISSOLVED AFTER VOLUNTARY LIQUIDATION",
            "title": "Dissolved after voluntary liquidation"
        },
        {
            "code": "FUTURE",
            "title": "Future"
        },
        {
            "code": "UNDER BANKRUPTCY",
            "title": "Under bankruptcy"
        },
        {
            "code": "UNDER ENFORCED CLOSURE",
            "title": "Under enforced closure"
        },
        {
            "code": "UNDER REASSUMPTION",
            "title": "Under reassumption"
        },
        {
            "code": "UNDER RECONSTRUCTION",
            "title": "Under reconstruction"
        },
        {
            "code": "UNDER VOLUNTARY LIQUIDATION",
            "title": "Under voluntary liquidation"
        },
        {
            "code": "WITHOUT LEGAL EFFECT",
            "title": "Without legal effect"
        }
    ],
    "country": "DK",
    "last_updated": "2020-02-12 13:21:00"
}

List Industries

This list will display all the industries for the given country. In the search documentation the values are referred to as dk_industry_enum, se_industry_enum, no_industry_enum.

The example only shows a sample of the output, but it shows the recursive structure of the industry codes. The first object is a dictionary with the sections as keys and for each section, there is a tree-structure that follows the recursive pattern:

"A": {
    "group": {
        "010000": {
            "group": {
                ...
            },
            "level": 2,
            "title": "Plante- og husdyravl, jagt og serviceydelser i forbindelse hermed"
        },
    },
    "level": 1,
    "title": "Landbrug, jagt, skovbrug og fiskeri"
}

Every time the structure nests into group, it makes the industry more specific. Sometimes, you will see structures with null in the title. That is because the industry code doesn't exist, but is necessary to make the tree-structure. We chose this way to show that we didn't miss a level, but it is simply not there. If you are going to visualize it, you may consider to squash the tree (removing the empty levels), but be aware that 960100, 960200, 960300, 960400, 960900 and possibly others, needs the empty level to work.

This end-point is available for: Denmark, Sweden and Norway.

Expand Endpoint Description to see description and definitions.

Endpoint Description

Section Description
A Agriculture, forestry and fishing
B Mining and quarrying
C Manufacturing
D Electricity, gas, steam and air conditioning supply
E Water supply; sewerage, waste management and remediation activities
F Construction
G Wholesale and retail trade; repair of motor vehicles and motorcycles
H Transportation and storage
I Accommodation and food service activities
J Information and communication
K Financial and insurance activities
L Real estate activities
M Professional, scientific and technical activities
N Administrative and support service activities
N Public administration and defence; compulsory social security
P Education
Q Human health and social work activities
R Arts, entertainment and recreation
S Other service activities
T Activities of households as employers; undifferentiated goods- and services-producing activities of households for own use
U Activities of extraterritorial organisations and bodies
X Economic activity was not specified by tax authority

GET
/{country}/list/industries

Example request

r = requests.get("https://api.risika.dk/v1.2/dk/list/industries",
                 headers={"Authorization": <access_token>,
                          "Content-Type": "application/json"})
print(r.json())

Example response (sample)

{
    "A": {
        "group": {
            "010000": {
                "group": {
                    "011000": {
                        "group": {
                            "011600": {
                                "group": {},
                                "level": 4,
                                "title": "Dyrkning af tekstilplanter"
                            }
                        },
                        "level": 3,
                        "title": "Dyrkning af etårige afgrøder"
                    }
                },
                "level": 2,
                "title": "Plante- og husdyravl, jagt og serviceydelser i forbindelse hermed"
            },
        },
        "level": 1,
        "title": "Landbrug, jagt, skovbrug og fiskeri"
    },
    "X": {
        "group": {
            "990000": {
                "group": {
                    "999000": {
                        "group": {
                            "999900": {
                                "group": {
                                    "999990": {
                                        "group": {
                                            "999999": {
                                                "group": {},
                                                "level": 6,
                                                "title": "Uoplyst"
                                            }
                                        },
                                        "level": 5,
                                        "title": null
                                    }
                                },
                                "level": 4,
                                "title": null
                            }
                        },
                        "level": 3,
                        "title": null
                    }
                },
                "level": 2,
                "title": null
            }
        },
        "level": 1,
        "title": "Uoplyst"
    }
}

List Municipalities

The response is a list of strings containing all municipalities for the given country.

This end-point is available for: Denmark, Sweden and Norway.

GET
/{country}/list/municipalities

Example request

r = requests.get("https://api.risika.dk/v1.2/dk/list/municipalities",
                 headers={"Authorization": <access_token>,
                          "Content-Type": "application/json"})
print(r.json())

Example response

{
  "municipalities": [
    "Aabenraa", "Aalborg", "Aarhus", "Albertslund", "Allerød", "Assens", "Aulum-Haderup",
    "Avannaata", "Ballerup", "Billund", "Birkerød", "Bornholms Regionskommune", "Brædstrup",
    "Brøndby", "Brønderslev-Dronninglund", "Christiansø", "Dragør", "Ebeltoft", "Egedal",
    "Egedesminde", "Esbjerg", "Faaborg-Midtfyn", "Fanø", "Favrskov", "Faxe", "Fladså",
    "Fredensborg", "Fredericia", "Frederiksberg", "Frederikshavn", "Frederikssund", "Frederiksværk",
    "Furesø", "Gentofte", "Gladsaxe", "Glostrup", "Godthåb", "Greve", "Gribskov",
    "Guldborgsund", "Haderslev", "Halsnæs", "Hedensted", "Helsingør", "Herlev", "Herning",
    "Hillerød", "Hjørring", "Holbæk", "Holstebro", "Horsens", "Hvidovre", "Høje Taastrup",
    "Hørsholm", "Ikast-Brande", "Ishøj", "Jammerbugt", "Kalundborg", "Kerteminde", "Kolding",
    "Kujalleq", "København", "Køge", "Langeland", "Lejre", "Lemvig", "Lolland", "Lyngby-Taarbæk",
    "Læsø", "Mariagerfjord", "Middelfart", "Morsø", "Møn", "Norddjurs", "Nordfyns", "Nyborg",
    "Næstved", "Nørre Rangstrup", "Odder", "Odense", "Odsherred", "Qaasuitsup", "Qeqertalik",
    "Qeqqata", "Randers", "Rebild", "Ringkøbing-Skjern", "Ringsted", "Roskilde", "Rudersdal",
    "Rødovre", "Samsø", "Sermersooq", "Silkeborg", "Skagen", "Skanderborg", "Skive", "Slagelse",
    "Slangerup", "Solrød", "Sorø", "Stevns", "Struer", "Suså", "Svendborg", "Syddjurs",
    "Sønderborg", "Them", "Thisted", "Tårnby", "Tønder", "Udenfor Kommunal Inddeling",
    "Ulfborg-Vemb", "Vallensbæk", "Varde", "Vejen", "Vejle", "Vesthimmerlands", "Viborg",
    "Vordingborg", "Århus", "Ærø"
  ]
}

List Regions

List of all the regions in Denmark. Each region contains an array of all the zip codes within the area. Regions are not directly supported by Search for Company, but can done together with this mapping and the zip code filter.

This end-point is available for: Denmark.

GET
/{country}/list/regions

Example request

r = requests.get("https://api.risika.dk/v1.2/dk/list/regions",
                 headers={"Authorization": <access_token>,
                          "Content-Type": "application/json"})
print(r.json())

Example response (sample)

{
  "regions": {
    "Region Nordjylland": [7900, 7950, 7960, 7970, 7980, 7990, 7700, 7730, 7741, 7742, 7752, 7755, 7760, 7770, 9320, 9330, 9340],
    "Region Hovedstaden": [1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071]
  }
}

List Zip Codes

Complete list of valid zip codes. This is only meant for validation.

This end-point is available for: Denmark, Sweden and Norway.

GET
/{country}/list/zipcodes/

Example request

r = requests.get("https://api.risika.dk/v1.2/dk/list/zipcodes",
                 headers={"Authorization": <access_token>,
                          "Content-Type": "application/json"})
print(r.json())

Example response (sample)

{
    "zipcodes": [
        0, 800, 900, 1000, 1001, 1002, 1003, 1004, 1005,
        1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013,
        1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021,
        1022, 1023, 1050, 1051, 1052, 1053, 1054, 1055,
        ...
    ]
}

ID types

country: The two letter country code (ISO 3166-1 Alpha-2). Currently, we support the following countries: dk, se, no, uk, fi, de

local_id: The company's ID in the country (e.g. CVR in Denmark)

personal_id: An ID we have given so it's possible to lookup a person.

What is an EAN number?

The EAN number is an electronic address used primarily when a company has to send e-invoicing to the public. The EAN number can be obtained from the municipality or region in which the public institution is located.

What does EAN mean? EAN is an abbreviation for "European Article Numbering". The term is not completely recurring as the system has been extended to the whole world and no longer only covers Europe.

The international name is "global location numbers" and can be abbreviated to GLN. EAN is still used as the term for this number as it is the most commonly used name.

Electronic invoicing is the exchange of an electronic invoice document between a supplier and a buyer. An electronic invoice (eInvoice) is an invoice that has been issued, transmitted and received in a structured data format which allows for its automatic and electronic processing

Danish: Reklamebeskyttelse

Optional protection from solicitation: Entities that opt not to receive advertising inquiries, including unsolicited emails and canvassing, are identified as "Reklamebeskyttelse: Dette P-nummer/CVR-nummer er reklamebeskyttet," which translates to "Advertising Protection: This P-number/CVR-number is advertising protected."

Advertisers are required to identify themselves in such a way that is easily recognizable and accessible by the recipient. The name and address of the advertiser must be stated in the offer. Recipient of advertisements who state in writing that they do not want to receive advertising, the advertiser must abide, unconditionally, post haste, but no later than 3 months of receipt of the request.

Industry

Danish: Industri

An industry is the production of goods or related services within an economy. The major source of revenue of a group or company is the indicator of its relevant industry. When a large group has multiple sources of revenue generation, it is considered to be working in different industries. Manufacturing industry became a key sector of production and labour in European and North American countries during the Industrial Revolution, upsetting previous mercantile and feudal economies. This came through many successive rapid advances in technology, such as the production of steel and coal.

Sole Proprietorship

Danish: Enkeltmandsvirksomhed

A sole proprietorship, also known as the sole trader, individual entrepreneurship or proprietorship, is a type of enterprise that is owned and run by one person and in which there is no legal distinction between the owner and the business entity. A sole trader does not necessarily work 'alone'—it is possible for the sole trader to employ other people.

Registered Capital

Danish: Selskabskapital

Equity capital is based on investments that, unlike debt capital, do not need to be repaid. This can include private investment by business owners, as well as contributions derived from the sale of stock.

Holding Company

Danish: Holdingselskab

A holding company is a company that owns other companies' outstanding stock. A holding company usually does not produce goods or services itself; rather, its purpose is to own shares of other companies to form a corporate group. Holding companies allow the reduction of risk for the owners and can allow the ownership and control of a number of different companies.

Powers to Bind

Danish: Tegningsregel

En tegningsregel angiver de tegningsberettigede i en virksomhed. En tegningsberettiget er en fysisk person, der har ret til at afgive formueretligt bindende løfter og indgå gensidigt bebyrdende aftaler på et selskabs vegne. Ifølge aktieselskabsloven er alle bestyrelsesmedlemmer og direktører tegningsberettigede, men det er dog muligt for selskabet at enten udvide eller indskrænke dette udgangspunkt i selskabets vedtægter, f.eks. ved at kræve at mindst to af de nævnte personer i forening er en betingelse for at forpligte selskabet.

Company Status

Danish: Virksomhedsstatus

The code returned by the end-points can be translated by setting the header Accept-Language. Here is a complete overview of the codes and the translations.

Code English Text Danish Text Applicable Countries
ACTIVE Active Aktiv DK, SE, NO
CEASED Ceased Ophørt DK, SE, NO
DELETED Deleted Slettet DK, SE
DISSOLVED Dissolved Opløst DK
DISSOLVED AFTER BANKRUPTCY Dissolved after bankruptcy Opløst efter konkurs DK, SE
DISSOLVED AFTER CROSS-BORDER MERGER Dissolved after cross-border merger Opløst efter grænseoverskridende fusion DK
DISSOLVED AFTER CROSS-BORDER RELOCATION Dissolved after cross-border relocation Opløst efter grænseoverskridende hjemstedsflytning DK
DISSOLVED AFTER DECLARATION Dissolved after declaration Opløst efter erklæring DK
DISSOLVED AFTER DEMERGER Dissolved after demerger Opløst efter spaltning DK
DISSOLVED AFTER ENFORCED CLOSURE Dissolved after enforced closure Tvangsopløst DK
DISSOLVED AFTER FUSION Dissolved after fusion Opløst efter fusion DK
DISSOLVED AFTER VOLUNTARY LIQUIDATION Dissolved after voluntary liquidation Opløst efter frivillig likvidation DK, SE
FUTURE Future Fremtid DK
MERGED ANNOUNCED Merger announced Fusion annonceret DK, SE
UNDER BANKRUPTCY Under bankruptcy Under konkurs DK, SE
UNDER ENFORCED CLOSURE Under enforced closure Under tvangsopløsning DK, NO
UNDER REASSUMPTION Under reassumption Under reassumering DK
UNDER RECONSTRUCTION Under reconstruction Under rekonstruktion DK, SE
UNDER VOLUNTARY LIQUIDATION Under voluntary liquidation Under frivillig likvidation DK
WITHOUT LEGAL EFFECT Without legal effect Uden retsvirkning DK

Company Functions

Danish: Virksomhedsfunktioner

The code returned by the end-points can be translated by setting the header Accept-Language. Here is a complete overview of the codes and the translations.

Code English Text Danish Text Applicable Countries
ACTUARY Actuary Aktuar SE
ADMINISTRATION Administration Administration DK
AUDIT Audit Revision DK, SE
AUDITOR SUBSTITUTE Auditor Substitute Revisorsuppleant SE
AUTHORIZED TO SIGN Authorized to Sign Tegningsberettiget DK
BENEFICIAL OWNER Beneficial Owner Reel ejer DK
BOARD OF DIRECTORS Board of Directors Bestyrelse DK, SE
BRANCH MANAGER Branch Manager Filialbestyrer DK
CHAIRMAN Chairman Formand DK, SE
CHIEF AUDITOR Chief Auditor Hovedrevisor SE
CHIEF EXECUTIVE OFFICER Chief Executive Officer Administrerende direktør DK, SE
CONFIDENTIAL CLERK Confidential Clerk Prokurist SE
DEPOSITARY Depositary Depositar DK
DEPUTY Deputy Suppleant DK, SE
DEPUTY CHAIRMAN Deputy Chairman Næstformand DK, SE
DEPUTY CHIEF EXECUTIVE OFFICER Deputy Chief Executive Officer Underdirektør SE
EMPLOYEE REPRESENTATIVE Employee Representative Medarbejderrepræsentant SE
ERROR IN DECLARATION Error in Declaration Fejl i angivelse SE
EXECUTIVE COMMITTEE Executive Committee Forretningsudvalg DK, SE
EXTERNAL DEPUTY CHIEF EXECUTIVE OFFICER Chief Executive Officer Ekstern underdirektør SE
EXTERNAL SIGNATORY External Signatory Ekstern underskriver SE
FOUNDER Founder Stiftere DK
GENERAL AGENT General Agent Generalagent DK
GENERAL PARTNER General Partner Komplementar DK, SE
INSOLVENCY ADMINISTRATOR Insolvency Administrator Kurator DK
INSURANCE RESPRESENTATIVE Insurance Respresentative Forsikringsrepræsentant SE
LAWYER Lawyer Advokat DK
LAY AUDITOR Other Auditor Anden revisor SE
LAY AUDITOR SUBSTITUTE Other Auditor Anden revisor SE
LIQUIDATOR Liquidator Likvidator SE
MANAGEMENT Management Direktion DK, SE
OWNER Owner Ejer DK, SE
OWNER REGISTER Owner Register Ejerregister DK
SECRETARY-GENERAL Secretary-General Generalsekretær DK
STAKEHOLDER Stakeholder Interessent DK
SUPERVISORY BOARD Supervisory Board Tilsynsråd DK

Company Type

Danish: Virksomhedsformer

Company type Short Description Category
Enkeltmandsvirksomhed ENK Personlige virksomheder
Personligt ejet Mindre Virksomhed PMV Personlige virksomheder
Interessentskab I/S Personlige virksomheder
Anpartsselskab ApS Kapitalselskaber
Iværksætterselskab (Terminated) IVS Kapitalselskaber
Aktieselskab A/S Kapitalselskaber
Kommanditaktieselskab/Partnerselskab KAS Kapitalselskaber
Kommanditselskab K/S Kapitalselskaber
Region REG Offentlige myndigheder
Folkekirkelige institutioner FKI Offentlige myndigheder
Primærkommune KOM Offentlige myndigheder
Selvstændig offentlig virksomhed SOV Offentlige myndigheder
Statslig administrativ enhed STA Offentlige myndigheder
Forening med begrænset ansvar FMA Foreninger
Andelsselskab (-forening) ANS Foreninger
Frivillig forening FFO Foreninger
Forening FOR Foreninger
Forening eller selskab med begrænset ansvar FBA Foreninger
Fonde og andre selvejende institutioner FON Fonde
Erhvervsdrivende fond EFO Fonde
Filial af udenlandsk aktieselskab, kommanditaktieselskab FAS Filialer
Filial af udenlandsk anpartsselskab eller selskab FAP Filialer
Filial af udenlandsk virksomhed med begrænset ansvar FBA Filialer
Filial af SE-selskab Filialer
Grønlandsk afdeling af udenlandsk selskab eller virksomhed GUS Filialer
Øvrige virksomhedsformer ØVR Andre virksomhedsformer
Anden udenlandsk virksomhed UDL Andre virksomhedsformer
Europæisk Økonomisk Firmagruppe EØF Andre virksomhedsformer
Fast forretningssted af Europæisk økonomisk Firmagruppe Andre virksomhedsformer
Særlig finansiel virksomhed FIV Andre virksomhedsformer
Selskab med begrænset ansvar (Terminated) SMA Andre virksomhedsformer
SE-selskab (Terminated) Andre virksomhedsformer
Dødsbo DØD Andre virksomhedsformer
Medarbejderinvesteringsselskab MSS Andre virksomhedsformer
Partrederi PAR Andre virksomhedsformer
Uoplyst virksomhedsform UOP Andre virksomhedsformer

Shareholder

Danish: Aktionær

A shareholder is someone who owns shares in a corporation. Generally, corporations are owned by several shareholders. For example, Google is a publicly traded corporation with almost half a million shareholders. Other corporations are closely held, meaning that there are only a few shareholders

Types of Financial Statements

Danish: Typer af regnskaber

Reporting Period

Danish: Rapporterings periode

A reporting period is the span of time covered by a set of financial statements. The reporting period is typically either for a month, quarter, or year. Organizations use the same reporting periods from year to year, so that their financial statements can be compared to the ones produced for prior years.

Class of Reporting Entity

Danish: Regnskabsklasse

General Meeting

Danish: Generalforsamling

An annual general meeting is a meeting of the general membership of an organization. These organizations include membership associations and companies with shareholders. These meetings may be required by law or by the constitution, charter, or by-laws governing the body. The meetings are held to conduct business on behalf of the organization or company.

Auditor

Danish: Revisor

An auditor is a person or a firm appointed by a company to execute an audit. To act as an auditor, a person should be certified by the regulatory authority of accounting and auditing or possess certain specified qualifications. Generally, to act as an external auditor of the company, a person should have a certificate of practice from the regulatory authority.

The API has the following types of auditors, which is used in Financial Stats):

Code
NO AUDITOR ASSISTANCE
AUDITOR'S REPORT ON EXTENDED REVIEW
COMPILATION OF FINANCIAL STATEMENTS
AUDITOR'S REPORTS (OTHER NON-ASSURANCE REPORTS)
THE INDEPENDENT AUDITOR'S REPORTS (REVIEW)
AUDITOR'S REPORT

The API doesn't offer translations for auditors at this time.

Currency

Danish: Valuta

A currency is a system of money (monetary units) in common use, especially for people in a nation. Under this definition, US dollars (USD), Danish crowns (DKK), Swedish crowns (SEK), pounds sterling (GBP), European euros (EUR) and Norwegian crowns (NOK) are examples of currencies. These various currencies are recognized as stores of value and are traded between nations in foreign exchange markets, which determine the relative values of the different currencies. Currencies in this sense are defined by governments, and each type has limited boundaries of acceptance.

IFRS

Danish: IFRS

International Financial Reporting Standards, usually called IFRS, are standards issued by the IFRS Foundation and the International Accounting Standards Board (IASB) to provide a common global language for business affairs so that company accounts are understandable and comparable across international boundaries. They are a consequence of growing international shareholding and trade and are particularly important for companies that have dealings in several countries. They are progressively replacing the many different national accounting standards. They are the rules to be followed by accountants to maintain books of accounts which are comparable, understandable, reliable and relevant as per the users internal or external.

Shell Corporation

Danish: Stråmandsvirksomhed

A shell corporation is a company or corporation that exists only on paper and has no office and no employees, but may have a bank account or may hold passive investments or be the registered owner of assets, such as intellectual property, or ships. Shell companies may be registered to the address of a company that provides a service setting up shell companies, and which may act as the agent for receipt of legal correspondence (such as an accountant or lawyer). The company may serve as a vehicle for business transactions without itself having any significant assets or operations. Sometimes, shell companies are used for tax evasion, tax avoidance, and money laundering, or to achieve a specific goal such as anonymity. Anonymity may be sought to shield personal assets from others, such as a spouse when a marriage is breaking down, from creditors, from government authorities, besides others.

from wikipedia https://en.wikipedia.org/wiki/Shell_corporation

Show examples in: