# Annual Reports Source: https://docs.tic.io/api-core/annual-reports How to use the simple API to display and use financial data and metrics. Our API endpoint for financial and annual reports has been built to simplify for any developer working with either charts or sheet like data. The annual reports contains the result- and balancesheet, key metrics, footnotes and any additional information. ## Schema description Each record contains an order which means which row you should display the data at, think like an Excel sheet. The localized field name contains a description in the given language. The display format can be used to simplify the presentation by using the format for almost any given number and formatting library. Notes and highlight are specifically if you want to highlight data with color and a note describing something. If something needs highlighting our API will output it so it's easy for you to use. ```json Schema for a record theme={null} { "order": 123, "localizedFieldName": "", "enFieldName": "", "displayFormat": "", "type": "", "value": "", "notes": "", "highlight": "green" } ``` ## Example request ```bash cURL theme={null} curl https://api.tic.io/datasets/companies/1893055/financial-reports?key=your_api_key ``` # Addresses Source: https://docs.tic.io/api-core/companies/addresses get /datasets/companies/{companyId}/addresses Lists all known addresses of a company # Authorizations Source: https://docs.tic.io/api-core/companies/authorizations get /datasets/companies/{companyId}/authorizations Gets the authorizations # Bank accounts Source: https://docs.tic.io/api-core/companies/bank-accounts get /datasets/companies/{companyId}/bank-accounts Get associated bank accounts of the company by it's id # Bankgironumbers Source: https://docs.tic.io/api-core/companies/bankgironumbers get /datasets/companies/{companyId}/se/bankgironumbers Lists bankgironumbers belonging to the company This endpoint replaces the older [bank accounts](bank-accounts) endpoint. # Beneficial owners Source: https://docs.tic.io/api-core/companies/beneficial-owners-SE get /datasets/companies/{companyId}/se/beneficial-owners Gets current and historic beneficial owner records and any exempts from registration of beneficial owners This endpoint is specific for Swedish companies since it contain details about current and historic beneficial owners and any exempts from registration of beneficial owners. # Bonus issue Source: https://docs.tic.io/api-core/companies/bonus-issue get /datasets/companies/{companyId}/bonus-issue Gets the company bonus issues # Business mortgages Source: https://docs.tic.io/api-core/companies/business-mortgages get /datasets/companies/{companyId}/se/business-mortgages Get the companys business mortgages # Credit Report Source: https://docs.tic.io/api-core/companies/credit-report post /datasets/companies/{companyId}/credit-report Get a full credit report hosted on a temporary URL This endpoint will create a fully hosted credit report (time limited) for the given company and return the URL including incurred costs. You can post also a E.164 formatted mobile phone number and we will send a text message including the full credit report to the user Also you can add an e-mail address that will receive an e-mail containing the link to the report. Remember the model that you need to post needs at minimum contain ConsentToPricing set to true. Example: ```json theme={null} { "consentToPricing": true, "sendSMSToE164MobileNumber": "+46xxxxxx", "sendEmailToEmailAddress": "some@email.tld" } ``` ## iframe You can embed the report into an iframe on your page. ```html theme={null} ``` # Credit Score Source: https://docs.tic.io/api-core/companies/credit-score get /datasets/companies/{companyId}/credit-score Gets details information about the credit score for the company This endpoint delivers the credit score for the company ranging from 0 to 100 where 1 should be interpreted as the lowest and 100 the highest. 0 means that the credit score cannot be determined since there are to many negative factors. The credit score includes an array of strings containing a description of reasons of negative and positive points. Expect response times around 250 - 1000 ms because credit scoring happens in real-time based on many parameters. # Debtor summary Source: https://docs.tic.io/api-core/companies/debtor-summary get /datasets/companies/{companyId}/se/debtor-summary Get the most recent summary of debtor record of payment applications, non payment and debt balance ### Details This endpoint will return the most recent debtors summary for companies registered in Sweden. If the response is 404, Not Found, it means there are no debt cases. A successful response code 200 will include a debt balance (debtBalance) which contains the current debts to public vs private entities. A public entity includes debt cases, referred in Sweden as A-mål (A-case), regarding debts to the central government, municipality, regions and various authorities. Example of a public debt are taxes. Private debt cases, referred in Sweden as E-mål (E-case), are debts to individuals and companies. For public debt cases additional information is included in the description property which holds information about the case type and the creditor. The debt balance is the actual balance on the date and time supplied in the property lastUpdated (Unix epoch). The update frequency is described in the table below. | Property | Contains | | --------------------------- | ------------------------------------------------------------------------------------------- | | debtBalance | Weekly updated debt balance for public vs. private debt cases | | recordOfPaymentApplications | Daily updated contains payment applications made by creditors | | recordOfNonPayment | Daily updated contains records of non payment () | | foreclosure | Daily updated information if there is a current foreclousre (Swedish: utmätning) | | debtRestructuring | Daily updated information if there is a current debt restructuring (Swedish: skuldsanering) | ### Caution ! The four properties recordOfPaymentApplications, recordOfNonPayment, foreclosure, debtRestructuring may not be identical between credit reference agencies until second quarter of 2025. The reason is that the central authority, Kronofogdemyndigheten, which are the source of this information closed down their so called initial data loading for new actors until second quarter 2025. To solve that problem we had to acquired the current state of record of payment applications and record of non payment from another source and use the daily partial updates from Kronofogdemyndigheten from 2024-12-11 and onwards. This could technically cause a slight deviation in registration entries. To cirumvent that issue we have decided to keep a more relaxed approch in credit scoring of such records until second quarter of 2025. Meanwhile this does not affect debtBalance since that data is delivered weekly to all credit reference agencies. # Public documents Source: https://docs.tic.io/api-core/companies/documents get /datasets/companies/{companyId}/documents Gets documents associated with the company # Domains Source: https://docs.tic.io/api-core/companies/domains get /datasets/companies/{companyId}/domains Lists all domains associated with a company # Email Source: https://docs.tic.io/api-core/companies/email get /datasets/companies/{companyId}/email-addresses Gets the email addresses of the company # Employee contributions Source: https://docs.tic.io/api-core/companies/employee-contributions get /datasets/companies/{companyId}/se/contributions-employement-service Lists contributions from Swedish employment service for the company Deprecated and replaced with [salary contributions endpoint](salary-contributions) # Financial report file Source: https://docs.tic.io/api-core/companies/financial-report-file get /datasets/companies/{companyId}/financial-report-summaries/{financialReportSummaryId}/files/{financialReportFileId} Gets the file for the financial report summary This endpoint delivers the actual file requested for the financial report. ## ReportFileFormat The available files depends on the source format but here is list of all available types, ReportFileType, present in the response. The default file to use for presentation in web applications are OriginalPDFImage or OriginalPDFSearchable. | Enum | Swedish | English | | --------------------- | ------------------------------------------------------ | ----------------------------------------------------------- | | XBRL | XBRL format | XBRL format | | XBRL\_RB | XBRL format av revisionsberättelsen | XBRL format of the audit report | | iXBRL | iXBRL format (xhtml) | iXBRL format (xhtml) | | iXBRL\_RB | iXBRL format (xhtml) av revisionsberättelsen | iXBRL format (xhtml) of the audit report | | TIFF | Orginal multi-page tiff | Orginal multi-page tiff | | EnhancedPDFSearchable | IDP bearbetad PDF med skarpare text och fritext sökbar | IDP processed PDF with sharper text and freetext searchable | | OriginalPDFImage | Orginal PDF | Orginal PDF | | OriginalPDFSearchable | Orginal PDF fritext sökbar | Orginal PDF freetext searchable | | EntityJson | JSON format av rapporten | JSON format of the report | | OCRJson | hOCR format av rapporten | hOCR format of the report | | TIFF\_RB | Orginal multi-page tiff av revisionsberättelsen | Orginal multi-page of the audit report | # Financial report files Source: https://docs.tic.io/api-core/companies/financial-report-files get /datasets/companies/{companyId}/financial-report-summaries/{financialReportSummaryId}/files Gets all files available for a financial report summary This endpoint delivers all present available files in the financial report. Please note that this endpoint is redundant since the files are delivered in the [financial-report-summary](financial-report-summaries). # Financial report summaries Source: https://docs.tic.io/api-core/companies/financial-report-summaries get /datasets/companies/{companyId}/financial-report-summaries Gets a summary of registered financial reports and their metadata This endpoint delivers available financial reports and their metadata and files available, more called annual reports but also interim reports can be present. The data includes all available files for the financial report. After getting the response you can simply download the files from [here](financial-report-files). # Financial reports table Source: https://docs.tic.io/api-core/companies/financial-reports get /datasets/companies/{companyId}/financial-reports Retrieves all or specific financial report for period in a table format suited for simple visualization. If no language code is specificed Swedish is assumed. ### Details This endpoint is suited for localized views where you intend to visualize the response in a table like format. It automatically organize the result into cells with rows and columns with the language you provide. It also returns formatting helpers to help automatically styling the result. Please note that the order field is used to sort the correct order when outputting the grid for the income statement, balance sheet, key metrics, footnotes and other additional information. Here is a simple javascript example you can use to visualize the response with the help of [Handsontable](https://handsontable.com/). ```html index.html theme={null}
``` Include the following code in the body of your HTML file. ```HTML theme={null}
``` ## Draw additional details Property borders and buildings are by default included in the style but if you wish to draw areas and greater details about building numbers, usage type etc you can download the property details from [https://api.tic.io/datasets/properties/se/uuid](/api-core/properties/details). This endpoint gives you additional data and areas. In the example below we are adding four(4) layers: * Areas * Building parts (already included in the default style) * Building parts text (number) * Areas text (number) Result will look like the example below where the area is filled with light blue opacity and buildings are drawn in yellow adding the text number. Vector map with areas and building numbers For simplicity we are using Lodash. Include the JavaScript and CSS files in the head of your HTML file. ```HTML theme={null} ``` ```HTML theme={null}
``` ## Custom Styles You can copy the style that we provide and make your own adjustments. We recommend using [Maputnik](https://maputnik.github.io/) which is a visual editor for MapLibre and MapBox style specifiation. It allows you to make modifications to your style and save the json style sheet and host it yourself. Each source object in the style reference our tileserver, tiles2.tic.io, which requires CORS. Therefore ensure you have added your domain to the API. Each URL consists of the following format which contains four(4) parts in the URL that should be replaced [https://tiles2.tic.io/database.schema.table.column](https://tiles2.tic.io/database.schema.table.column) e.g database, schema, table and column. You have access to the following databases that are updated daily and runs on PostGIS with PostgreSQL. The tile server serves tiles cached and it's extremley fast | Database | Description | | ----------------------- | ---------------------------------------------------------------------------------------------- | | lm\_belagenhetsadress | Contains all information relating to an address | | lm\_fastighetsindelning | Contains all information relating to an property | | lm\_top1m | Contains topography 1:1M | | lm\_top10 | Contains topography 1:10 | | lm\_top10 | Contains topography 1:10 | | naturalearth | Contains [Natural Earth](https://www.naturalearthdata.com/) | | ormeo | Contains extended databases such as the EBH which is a national database of contaminated areas | Check next section for a full data dictionary. ## Data Dictionary Each databases consists of geometric tables and in total they are 248. Each table then contains a range of columns that can be used to be displayed on the map. For simplicity we are adding a full data dictionary in PDF (582 pages) that you can download and easier search in and pick the fields you want to display. [Download the data dictionary here](https://content.tic.io/tic/DataDictionary_20250720201303.pdf) Adding a source layer is very simple in the style sheet and we have made an example below. Let's say you want to show railroads in the map (enabled by default in our stylesheet), you check the PDF-dictionary and find that there is a table called ralstrafik (English: rail roads) and the column geom contains the geometry of the railroads. Just add a source object with the nickname "ralstrafik" and you are done: ```json theme={null} "ralstrafik": { "type": "vector", "url": "https://tiles2.tic.io/lm_top10.table.public.ralstrafik.geom" }, ``` This should be interpreted as Database = lm\_top10 Schema = public Table = ralstrafik Column = geom Please note that the data directory contains a suffix on the databases in the format \_YYYYMMDD which should NOT be included in the URL. It just shows when the table was most recentley updated # MCP Server Source: https://docs.tic.io/mcp/introduction Use the TIC MCP (Model Context Protocol) server in AI applications - prompts, resources, and tools for Claude, OpenAI, and other LLMs. We provide an MCP (Model Context Protocol) server with prompts, resources and tools that you can use for building AI-applications. The server uses streamable HTTP transport providing real-time communication with Server-Sent Events (SSE) streaming support. ## Getting Started Our MCP server is located at [https://mcp.tic.io](https://mcp.tic.io). It accepts your TIC API key via either of two headers: * `x-api-key: ` - same scheme as our REST API * `Authorization: Bearer ` - for clients (such as the Anthropic Messages API connector) that only forward an OAuth-style bearer token Either form authenticates the same way against the same key. Pick whichever your MCP client supports. ## Example of using OpenAI Responses API OpenAI Responses API is the most advanced interface for generating model responses. Full documentation for the API is available [here](https://platform.openai.com/docs/api-reference/responses). Endpoint: [https://api.openai.com/v1/responses](https://api.openai.com/v1/responses) Note you need to include Bearer authentication for the OpenAI to work. An example of the request body follows below that is using flagship gpt-5 model. ```json theme={null} { "model": "gpt-5", "input": [ { "role": "developer", "content": [ { "type": "input_text", "text": "Talk like a chief financial officer" } ] }, { "role": "user", "content": [ { "type": "input_text", "text": "Get company information for Bahnhof AB (publ)." } ] } ], "text": { "format": { "type": "text" }, "verbosity": "medium" }, "reasoning": { "effort": "medium", "summary": "auto" }, "tools": [ { "type": "mcp", "allowed_tools": [ "get_company_by_registration_number", "get_company_by_name", "get_company_by_company_id", "get_companies_by_sni_code", "get_financial_reports", "get_annual_reports", "get_risk_and_intelligence", "get_credit_score", "get_company_risk_summary", "get_company_debt_cases", "get_company_penalties", "get_company_lansstyrelsen_decisions", "get_company_kammarkollegiet_sanctions", "get_company_tax_deferrals", "get_company_business_mortgages", "get_company_payroll_history", "get_company_share_structure", "get_company_address_history", "get_company_name_history", "get_company_vehicles", "get_company_bankruptcies" ], "headers": { "x-api-key": "your_api_key" }, "require_approval": "never", "server_label": "TIC", "server_url": "https://mcp.tic.io" } ], "store": true, "include": ["reasoning.encrypted_content"] } ``` ## Example of using Anthropic Messages API Anthropic's Messages API can call remote MCP servers directly through its MCP connector. Full documentation is available [here](https://docs.claude.com/en/docs/agents-and-tools/mcp-connector). Endpoint: `https://api.anthropic.com/v1/messages` You need three headers on the request: * `x-api-key: ` - your Anthropic API key * `anthropic-version: 2023-06-01` * `anthropic-beta: mcp-client-2025-11-20` The `authorization_token` field on the MCP server entry is forwarded by Anthropic to our server as `Authorization: Bearer ` - pass your **TIC** API key there. An example request body: ```json theme={null} { "model": "claude-opus-4-7", "max_tokens": 1024, "messages": [ { "role": "user", "content": "Get company information for Bahnhof AB (publ)." } ], "mcp_servers": [ { "type": "url", "url": "https://mcp.tic.io", "name": "tic", "authorization_token": "your_tic_api_key" } ], "tools": [ { "type": "mcp_toolset", "mcp_server_name": "tic" } ] } ``` To restrict which TIC tools the model can see, use the `mcp_toolset` allowlist pattern - disable everything by default, then enable specific tools: ```json theme={null} { "tools": [ { "type": "mcp_toolset", "mcp_server_name": "tic", "default_config": { "enabled": false }, "configs": { "get_company_by_registration_number": { "enabled": true }, "get_company_risk_summary": { "enabled": true }, "get_company_debt_cases": { "enabled": true }, "get_company_penalties": { "enabled": true } } } ] } ``` ## Example of LibreChat configuration If you wish to use our MCP in LibreChat you simply add a block inside mcpServers section in yaml configuration file: ```yaml librechat.yaml theme={null} mcpServers: tic: type: streamable-http url: https://mcp.tic.io headers: x-api-key: 'your_api_key' ``` ## Example of prompt and response This shows an example of a user input prompt and the response. The request is using gpt-4.1. Clean page ## Prompts Prompts are user-invokable workflow templates that combine multiple tools into a single investigation flow with explicit framing and a named deliverable. Pick one from your MCP client's prompt menu to kick off an end-to-end analysis. Most prompts take `registrationNumber` (Swedish organisationsnummer, e.g. `556519-9493`) and resolve identity to the internal companyId as their first step. `build_prospect_list` is the exception - it starts from a free-text brief rather than a known company. | Prompt | Parameters | What it does | | -------------------------- | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | investigate\_company | `registrationNumber` | Full company workup: identity, risk, debts, penalties, addresses, naming, share structure. Deliverable: red-flag report grouped by category. | | liquidity\_stress\_check | `registrationNumber` | Combines credit risk, Skatteverket tax deferrals, Kronofogden debts, and payroll trend. Deliverable: stress score (Low/Medium/High/Critical) with evidence. | | due\_diligence\_check | `registrationNumber` | Know-Your-Business check. Resolves identity then runs the full workup. Deliverable: KYB verdict (Proceed / Conditions / Decline). | | shell\_company\_indicators | `registrationNumber` | Screens for shell-company / fraud signals: name churn, address intelligence, missing payroll, share-capital anomalies. Deliverable: shell likelihood + indicators. | | build\_prospect\_list | `brief` | Turns a free-text ideal-customer brief into firmographic search filters, calibrates on the result count, and returns a qualified, contactable lead list. | ## Resources Resources are static reference data the model reads once into context - no tool call required. They decode the codes that appear in tool responses. | URI | What it contains | | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | | ormeo://reference/codes | Decoder for `LocalCompanyCode` (Swedish legal-form codes: AB, HB, KB, BRF, EK, SF, FL, …) and Kronofogden `KFM_DebtCaseType` (A vs E debt cases). | ## Tools Functions the model invokes to retrieve company, property, or vehicle data. Tools are grouped below by purpose. ### Company search & identity | Tool | Description | | -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | | get\_company\_by\_name | Find a company by current or historical name | | get\_company\_by\_registration\_number | Find a company by Swedish registration number (organisationsnummer) | | get\_company\_by\_company\_id | Get the core company record by internal companyId | | get\_companies\_by\_sni\_code | List companies matching a 5-digit SNI industry code. Supports both SNI 2007 and SNI 2025 - pass `sniStandard="2007"` (default) or `"2025"`. | ### Company financials & risk | Tool | Description | | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | get\_financial\_reports | Income statement and balance sheet across all available periods (TKR, SEK) | | get\_annual\_reports | List of available annual reports in PDF with metadata and download URLs | | get\_credit\_score | Current credit score and the descriptions used as the basis of the calculation | | get\_company\_risk\_summary | Numeric risk scores: credit score, forward risk forecast/class, board score, beneficial-owners score, financial-discrepancy score, other-intelligence score, intelligence aggregates, and ORB network-risk aggregate counts. Scores only - no per-person details. 4-hour cache. | | get\_risk\_and\_intelligence | Raw company-intelligence records (flags and signals collected over time) | ### Company enforcement & compliance | Tool | Description | | ---------------------------------------- | -------------------------------------------------------------------------------------------------- | | get\_company\_debt\_cases | Kronofogden enforcement: debtor summary, debt summary, current cases, weekly aggregates | | get\_company\_penalties | Consolidated penalties (Skatteverket, Kammarkollegiet, Länsstyrelsen, Försäkringskassan, fees) | | get\_company\_lansstyrelsen\_decisions | Länsstyrelsen (County Administrative Board) decisions and penalty fees | | get\_company\_kammarkollegiet\_sanctions | Kammarkollegiet sanction cases grouped by diary number, with current balance and full case history | | get\_company\_tax\_deferrals | Skatteverket TF-ANST temporary tax-payment deferrals (liquidity-stress signal) | | get\_company\_bankruptcies | Bankruptcies initiated on a given date | ### Company structure & history | Tool | Description | | --------------------------------- | ---------------------------------------------------------------------------------------------- | | get\_company\_business\_mortgages | Bolagsverket-registered business mortgages (företagsinteckningar) - collateral encumbrance | | get\_company\_payroll\_history | Skatteverket MOMS-AG (VAT/employer tax) filings and aggregated CompanyPayroll2 history | | get\_company\_share\_structure | Registered share capital over time and share-class structure (A/B/C, …) from Bolagsverket | | get\_company\_address\_history | All addresses (visiting, mailing, registered) enriched with active AddressIntelligence signals | | get\_company\_name\_history | Current and historical legal names plus trade names (bifirma) | ### Vehicles | Tool | Description | | -------------------------------- | -------------------------------------------------------- | | get\_company\_vehicles | Vehicles owned or operated by a company | | get\_vehicle\_by\_license\_plate | Look up a vehicle by license plate | | get\_vehicle\_by\_vin | Look up a vehicle by VIN (vehicle identification number) | ### Property | Tool | Description | | --------------------------- | -------------------------------------------------------------------------------------- | | get\_property\_by\_label | Find a property by its label (property designation / fastighetsbeteckning) | | get\_orthophoto\_by\_year | Get an orthophoto for a property; leave year empty for the most recent year | | list\_property\_orthophotos | List every available orthophoto for a property, optionally filtered to one flight year | | get\_property\_by\_location | Find the property at a latitude/longitude position (WGS84) | ### Prospecting & registers | Tool | Description | | ----------------------------- | ---------------------------------------------------------------------------------------------------- | | search\_companies\_for\_leads | Firmographic company search for building sales lead lists. See below for the filter set. | | search\_lei | Search the LEI register (Legal Entity Identifiers) by name, LEI code or national registration number | #### search\_companies\_for\_leads The broadest tool on the server. It combines free-text matching against company name, business purpose (verksamhet) and SNI industry names with structured firmographic filters, and returns a paged lead list. | Filter group | Parameters | | --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Text & industry | `purposeOrKeywords`, `sniCode` - the SNI filter matches SNI 2025 **or** SNI 2007, so a company is found whether or not it has been reclassified yet | | Geography | `county`, `municipality` - by official name (e.g. `"Stockholm"`, `"Skane"`) or SCB numeric code | | Size | `minNetSalesThousandSEK`, `maxNetSalesThousandSEK`, `minEmployees`, `maxEmployees` - matched against SCB size-class bands, which cover far more companies than filed annual reports | | Contactability | `requireEmailAddress`, `requirePhoneNumber`, `requireWebsite` | | Registrations | `onlyVATRegistered`, `onlyFTaxRegistered`, `onlyEmployers`, `legalForm` | | Risk | `excludeCompaniesWithKfmRecord` - drops any company with a Kronofogden debtor record | | Incorporation | `registeredAfter`, `registeredBefore` | | Paging & sort | `pageNumber`, `pageSize` (max 250), `sortBy` - one of `registrationDateNewest`, `registrationDateOldest`, `debtBalance` | Size filters are bucketed: pass a number and it maps to the SCB band containing it. Sorting by turnover or employee count is not available, because the SCB size-class field is not sortable - filter on it instead. #### search\_lei | Parameter | Description | | ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | | `query` | Free text matched against legal name, LEI code and national registration number | | `jurisdiction` | ISO 3166 country code, e.g. `"SE"`, `"FI"`, `"DE"`. US entities are registered per state, e.g. `"US-DE"` | | `registrationStatus` | `ISSUED`, `LAPSED`, `PENDING_VALIDATION`, `PENDING_TRANSFER`, `PENDING_ARCHIVAL`, `TRANSFERRED`, `DUPLICATE`, `RETIRED`, `ANNULLED`, `CANCELLED`, `MERGED` | | `entityStatus` | `ACTIVE` or `INACTIVE` | | `sortBy` | `registrationDateNewest` or `registrationDateOldest` | | `pageNumber`, `pageSize` | Paging; `pageSize` maxes out at 250 | We will continuously add new tools - check back here for new additions. # Search Source: https://docs.tic.io/search Lightning-fast search across companies, persons, workplaces, properties, vehicles, bankruptcies, and annual reports - with search-as-you-type, autocomplete, geo-search, and LLM augmentation. This page is a shared introduction to our Typesense-backed search. For **LENS (v2)** deep examples - geo-search, SNI codes, intelligence filters, stock-listed companies, and the full parameter reference - see [Search in the v2 API](/api-lens/search). We provide an easy to use search API based on [Typesense](https://typesense.org) lightning-fast search database. That means that all features described in [Typesense API version 29](https://typesense.org/docs/29.0/api/) is available in our API. Search index is stored on RAM memory meaning requests to our search serves very fast and you can use it for search-as-you-type, autocomplete and other applications. We today provide five rich search collections: * **Company search (you are here)** * [Workplace search](/datasets/search-workplaces) * [Financial reports search](/datasets/search-reports-se) * [Bankruptcies](/datasets/search-bankruptcies-se) * [Vehicles](/datasets/search-vehicles) ## Company search In companies search you can query and filter by more than **187 fields** listed in the next chapter. Examples on what you can query on: * Company Id (our system wide identifier for global companies used across all API calls) * Country code (ISO 2 letters) * Registrationnumber (For local region) * Most recent purpose * Names (all historic and current names) * Phonenumbers * Email addresses * Hyperlinks * Bankaccounts * Addresses (registered, visting and mailing address) * Document and case history * Stock * LEI * PIC (European Commission) * Franchises and licences * Involvement by representatives * Company representatives * Beneficial owners * Property tax * Vehicles The response model (schema) depends on your query and if you use faceting. If you do plain search we have added to our OpenAPI Schema the default response model namned TypesenseCompanyDocument. Look for the model name TypesenseCompanyDocument in the schema definition. ## Important about redacted properties Depending on price plan certain properties may not be included. For simplicity we add an object called redacted which contains a list of redacted properties. An example below shows how the JSON response would look like if you for example don't have AUDITOR\_ACCOUNTING\_ISSUES to the properties mostRecentDebtorSummary and currentBeneficialOwners. ```bash json theme={null} "redacted": ['mostRecentDebtorSummary','currentBeneficialOwners']... ``` ## Important about changes from SNI 2007 to 2025 On december 10 the Statistics Sweden (SCB) started to change SNI codes for companies. This means that from that time we output the most recent SNI 2007 code, name, rank and section but also include the most recent SNI 2025 code, name, rank and section. This means that if you use the SNI code to provide searches you should as an interim solution provide search for both SNI 2025 and SNI 2007 or pick rather 2025 than the earlier. If you continue to search for only SNI 2007 codes you will not be able to track changes of SNI codes since the SNI 2007 code is the last known record for SNI 2007 and not necessarily the most recent. ## Fields indexed The following fields are currently indexed in memory. These can be used in the query\_by parameter and filter\_by. Remember this is not the schema of the JSON response since it contains a large number of additional properties. | Field | Type | Description | | ------------------------------------------------------------ | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | | companyId | Int32 | Our global internal company identifier | | registrationNumber | String | The local registration number in the country | | legalEntityType | String | Type of legal entity as described in local market | | localCompanyCode | String | The local company code as known by the market (for example Aktiebolag = AB) | | elfCode | String | ISO Standard 20275 Entity Legal Form (ELF) | | registrationDate (unix epoch) | Int64 | Unix time (epoch) seconds since 1st January 1970 | | ceasedDate (unix epoch) | Int64 | Unix time (epoch) seconds since 1st January 1970, when the company ceased to exist (note date may be unknown by the flag isCeased will be set) | | isCeased | Bool | A flag indicating the business have ceased | | mostRecentPurpose | String | The last purpose registered for the business | | names.nameOrIdentifier | String | Current and former names of the business (could be legalname, particularName etc) | | isRegisteredForVAT | Bool | If the business is registered for VAT | | isRegisteredForFTax | Bool | If the business is registered for F-tax | | isRegisteredForPayroll | Bool | If the business is registered for payroll | | ftaxTerminationReason | String | If the termination of F-tax is known a description | | phoneNumbers.e164PhoneNumber | String | E164 formatted phone number | | phoneNumbers.numberPlanServiceType | String | Service type as described in local number plan | | phoneNumbers.orginalOperator | String | The original operator that held the number | | phoneNumbers.priorOperator | String | Last prior operator before the porting | | phoneNumbers.currentOperator | String | Current operator | | phoneNumbers.lastPortingDate | Int64 | Last porting date in Unix time (epoch) seconds since 1st January 1970 | | emailAddresses.emailAddress | String | E-mail addresses to the business | | hyperlinks.hyperlink | String | Hyperlinks to the business | | sniCodes.sni\_2007Name | String | SNI 2007 name | | sniCodes.sni\_2007Code | String | SNI 2007 code | | sniCodes.sni\_2007Section | String | SNI 2007 section | | sniCodes.sni\_2025Name | String | SNI 2007 name | | sniCodes.sni\_2025Code | String | SNI 2007 code | | sniCodes.sni\_2025Section | String | SNI 2025 section | | sniCodes.rank | String | SNI 2007/2025 order | | bankAccounts.accountNumber | String | Bank accounts | | mostRecentRegisteredAddress.co | String | C/O = care of address | | mostRecentRegisteredAddress.streetAddress | String | Street address | | mostRecentRegisteredAddress.postalCode | String | The postalcode | | mostRecentRegisteredAddress.city | String | City | | mostRecentRegisteredAddress.countryCodeAlpha3 | String | Country code 3 char alpha | | mostRecentRegisteredAddress.location | GeoPoint | Allows geosearch | | mostRecentMailingAddress.co | String | C/O = care of address | | mostRecentMailingAddress.streetAddress | String | Street address | | mostRecentMailingAddress.postalCode | String | The postalcode | | mostRecentMailingAddress.city | String | City | | mostRecentMailingAddress.countryCodeAlpha3 | String | Country code 3 char alpha | | mostRecentMailingAddress.location | GeoPoint | Allows geosearch | | mostRecentVisitingAddress.co | String | C/O = care of address | | mostRecentVisitingAddress.streetAddress | String | Street address | | mostRecentVisitingAddress.postalCode | String | The postalcode | | mostRecentVisitingAddress.city | String | City | | mostRecentVisitingAddress.countryCodeAlpha3 | String | Country code 3 char alpha | | mostRecentVistingAddress.location | GeoPoint | Allows geosearch | | registeredOffices.municipality | String | The registered office municipality (säte) | | registeredOffices.municipalityCode | String | The registered office municipality code (säte) | | registeredOffices.county | String | The registered office county (säte) | | registeredOffices.countyCode | String | The registered office county code (säte) | | documents.documentTitle | String | Title of the document | | documents.documentVersion | String | Version of the document | | documents.documentValue3 | String | Used to provide additional data about the document | | intelligence.companyIntelligenceType | String | The specific enum (int) that you want to query by | | intelligence.companyIntelligenceSubType | String | A text enum describing the sub-type of the intelligence type (see documentation) | | intelligence.notes | String | The description of the discrepancy | | intelligence.score | Int32 | A score rank between 0-255 where 0 means only for information and 255 is a serious mark | | intelligence.externalId | Int32 | A reference for the intelligence type used to find the associated underlying document | | mostRecentFinancialSummary.annualReportPeriod | Int32 | The endpoint report of the annual report in YYYYMM as Int32 | | mostRecentFinancialSummary.periodStart | Int64 | Start period epoch seconds | | mostRecentFinancialSummary.periodEnd | Int64 | End period epoch seconds | | mostRecentFinancialSummary.rs\_NetSalesK | Int32 | Net sales in K (thousands) | | mostRecentFinancialSummary.rs\_OtherOperatingIncomeK | Int32 | Other operating income in K (thousands) | | mostRecentFinancialSummary.rs\_OperatingProfitOrLossK | Int32 | Operating profit or loss in K (thousands) | | mostRecentFinancialSummary.rs\_SumFinancialItemsK | Int32 | Sum of financial items in K (thousands) | | mostRecentFinancialSummary.rs\_ProfitAfterFinancialItemsK | Int32 | Profit after financial items in K (thousands) | | mostRecentFinancialSummary.bs\_TotalAssetsK | Int32 | Total assets in balance sheet in K (thouands) | | mostRecentFinancialSummary.fn\_NumberOfEmployees | Float | Number of employees with one decimal | | mostRecentFinancialSummary.km\_OperatingMargin | Float | Operating margin with four decimals | | mostRecentFinancialSummary.km\_NetProfitMargin | Float | Net profit margin with four decimals | | mostRecentFinancialSummary.km\_EquityAssetsRatio | Float | Equity asset ratio with four decimals | | mostRecentFinancialSummary.km\_GrossMargin | Float | Gross margin with four decimals | | mostRecentFinancialSummary.software | String | Software used to generate the financial report (if known) | | mostRecentSignatory.signatureDescription | String | Description of the signature rights | | currentRepresentatives.personId | Int32 | An internal id representing the person which makes it simpler to query | | mostRecentDebtorSummary.debtBalance.totalAmountInSEK | Float | Holds the total amount, currency SEK, out outstanding debts of public- vs. private debt cases in Sweden | | mostRecentDebtorSummary.debtBalance.public.description | String | The public case debt type and creditor | | mostRecentDebtorSummary.debtBalance.public.numberOfCases | Int32 | Number of public debt cases relating to public debt | | mostRecentDebtorSummary.debtBalance.public.totalAmountInSEK | Float | Total amount outstanding debt for public debt cases | | mostRecentDebtorSummary.debtBalance.private.numberOfCases | Int32 | Number of private debt cases relating to public debt | | mostRecentDebtorSummary.debtBalance.private.totalAmountInSEK | Float | Total amount private debt for public debt cases | | currentRepresentatives.personalIdentityNumber | String | The local market personal identity number | | currentRepresentatives.positionType | String | The position of the representative | | currentRepresentatives.positionDescription | String | Text description of the position | | currentRepresentatives.fullName | String | Fullname of the person | | currentRepresentatives.roleByCompanyName | String | If the position is held by a company | | currentRepresentatives.roleByCompanyRegistrationNumber | String | If the position is held by a company | | currentRepresentatives.auditorType | String | Auditor type | | currentRepresentatives.bornYearMonthDay | String | For foreign persons | | currentBeneficialOwners.personId | Int32 | An internal id representing the person which makes it simpler to query | | currentBeneficialOwners.personalIdentityNumber | String | The local market personal identity number | | currentBeneficialOwners.fullName | String | Fullname of the person | | currentBeneficialOwners.countryOfResidenceCode | String | ISO3166 Country code 2-char | | currentBeneficialOwners.citizenshipCountryCode | String | ISO3166 Country code 2-char | | currentBeneficialOwners.extentDescription | String | Description of the extent | | currentBeneficialOwners.governDescription | String | Description of the govern | | currentBeneficialOwners.throughName | String | If managed through a name / company | | currentBeneficialOwners.throughRegistrationNumber | String | If managed through a name / company | | currentBeneficialOwners.bornYearMonthDay | String | For foreign persons | | mostRecentSignatory.signatureDescription | String | The signature description | | mostRecentShareCapital.shareCapitalAmount | Float | The current share capital amount | | franchisesOrLicences.linkedToName | String | From which company name is the franchise, licence or permit given | | franchisesOrLicences.actingUnderName | String | Under which name is the business providing services or sales of goods | | franchisesOrLicences.linkedToCompanyId | Int32 | From which company id is the franchise, licence or permit given | | franchisesOrLicences.description | String | Description of the franchise, licence or permit given | | franchisesOrLicences.companyFranchiseOrLicenceType | String | Type of franchise, licence or permit (franchise, licence, membership, agent, other) | | currentWorkplaces.companyWorkplaceId | Int32 | Our worldwide identifier for the workplace | | currentWorkplaces.workplaceCode | Int32 | A code for the workplace | | currentWorkplaces.mostRecentName | Int32 | The name of workplace | | currentWorkplaces.labelAddress | String | A label containing the street address, postalcode and city | | currentWorkplaces.location | GeoPoint | Allows geosearch | | trademarks.word | String | The word representing a word-trademark | | trademarks.expire | Int64 | When the trademark expire in Unix time (epoch) seconds since 1st January 1970 | | stock.isin | String | ISIN | | stock.ticker | String | Ticker symbol on market | | stock.marketName | String | Market name | | stock.marketExchangeName | String | Market exchange name | | stock.sectorName | String | Business sector as provided on market | | stock.branchName | String | Business branch as provided on market | | stock.enterpriseValue | String | Enterprise value last closing day | | stock.nextReportDate | String | Next report date for the listed company | | stock.dividendExDate | String | Next X-date to receive the dividend | | stock.yahooSymbol | String | The Yahoo finance symbol | | lei.leiCode | String | LEI Code | | lei.registrationStatus | String | RETIRED, DUPLICATE, LAPSED, ANNULLED, PENDING\_TRANSFER, ISSUED, PENDING\_ARCHIVAL | | lei.initialRegistrationDate | Int64 | Initial registration date in Unix time (epoch) seconds since 1st January 1970 | | lei.nextRenewalDate | Int64 | Initial registration date in Unix time (epoch) seconds since 1st January 1970 | | lei.managingLOU | String | LEI of the managing LOU | | lei.managingLOULegalName | String | Legal name of the LOU | | ecParticipant.pic | String | Participant Identification Code (PIC) as registered with European Commission | | ecParticipant.validationStatus | String | Declared, Validated, Sleeping, Suspended, Blocked, Deprecated (see further documentation) | | ecParticipant.numberOfProjects | Int32 | Number of projects where the organization has been present with the PIC | | franchisesOrLicences.linkedToName | String | The name of the licencee or company providing the franchise | | franchisesOrLicences.actingUnderName | String | The name/s under which the company is acting under | | franchisesOrLicences.linkedToCompanyId | Int32 | The company id if exists for which the licence or franchise was given | | salesToPublicActors.actorName | String | The name of the public actor | | salesToPublicActors.actorType | String | The name of the public actor | | salesToPublicActors.actorCode | String | The code of the actor, e.g municipality = municipality code | | hasSalesToPublicActors | Bool | Helper flag for knowing if the company has sold to public actors | | hasPhoneNumbers | Bool | Helper flag for knowing if the company has phone numbers present | | hasEmailAddresses | Bool | Helper flag for knowing if the company has email addresses present | | hasHyperlinks | Bool | Helper flag for knowing if the company has hyperlinks present | | hasIntelligence | Bool | Helper flag for knowing if the company has intelligence records present | | hasStatus | Bool | Helper flag for knowing if the company has status records present | | hasBankAccounts | Bool | Helper flag for knowing if the company has bank accounts present | | hasAddresses | Bool | Helper flag for knowing if the company has addresses present | | hasDocuments | Bool | Helper flag for knowing if the company has documents present | | hasStock | Bool | Helper flag for knowing if the company has stock data present | | hasLEI | Bool | Helper flag for knowing if the company has LEI information present | | hasECParticipant | Bool | Helper flag for knowing if the company has EU participant information present | | hasFranchisesOrLicences | Bool | Helper flag for knowing if the company has franchises or licences present | | hasTrademarks | Bool | Helper flag for knowing if the company has trademarks | | hasMostRecentDebtorSummary | Bool | Helper flag for knowing if the company has summary of debts | | cNbrEmployeesInterval.categoryCode | Int32 | The code for the employee interval | | cNbrEmployeesInterval.categoryCodeDescription | String | Description of the interval | | cVATInterval.categoryCode | Int32 | The code representing the VAT reporting | | cVATInterval.categoryCodeDescription | String | Description of the interval | | cTurnoverInterval.categoryCode | Int32 | The code for the turnover interval | | cTurnoverInterval.categoryCodeDescription | String | Description of the interval | | cPropertyTaxationInterval.categoryCode | Int32 | The code for the employee interval | | cPropertyTaxationInterval.categoryCodeDescription | String | Description of the interval | | cSector.categoryCode | Int32 | The code for the sector | | cSector.categoryCodeDescription | String | Description of the sector | | cTradeAfrica.categoryCode | Int32 | A code (0 or 1) representing if the company is exporting/importing from the continent. | | cTradeAfrica.categoryCodeDescription | String | Description of the interval | | cTradeAsia.categoryCode | Int32 | A code (0 or 1) representing if the company is exporting/importing from the continent. | | cTradeAsia.categoryCodeDescription | String | Description of the interval | | cTradeEU.categoryCode | Int32 | A code (0 or 1) representing if the company is exporting/importing from the continent. | | cTradeEU.categoryCodeDescription | String | Description of the interval | | cTradeFarEast.categoryCode | Int32 | A code (0 or 1) representing if the company is exporting/importing from the continent. | | cTradeFarEast.categoryCodeDescription | String | Description of the interval | | cTradeNorthCentralAmerica.categoryCode | Int32 | A code (0 or 1) representing if the company is exporting/importing from the continent. | | cTradeNorthCentralAmerica.categoryCodeDescription | String | Description of the interval | | cTradeNordics.categoryCode | Int32 | A code (0 or 1) representing if the company is exporting/importing from the continent. | | cTradeNordics.categoryCodeDescription | String | Description of the interval | | cTradeSouthAmerica.categoryCode | Int32 | A code (0 or 1) representing if the company is exporting/importing from the continent. | | cTradeSouthAmerica.categoryCodeDescription | String | Description of the interval | | cTradeOtherEurope.categoryCode | Int32 | A code (0 or 1) representing if the company is exporting/importing from the continent. | | cTradeOtherEurope.categoryCodeDescription | String | Description of the interval | | cTradeExportInterval.categoryCode | Int32 | A code representing the export interval | | cTradeExportInterval.categoryCodeDescription | String | Description of the interval | | cTradeImportInterval.categoryCode | Int32 | A code representing the import interval | | cTradeImportInterval.categoryCodeDescription | String | Description of the interval | | cGenderRatioFemale.categoryCode | Int32 | Gender ratio females in percentage (no fraction) | | cGenderRatioFemale.categoryCodeDescription | String | Gender ratio females with percentage sign | | cPrivPubl.categoryCode | Int32 | Code representing if the company is private/public/listed etc | | cPrivPubl.categoryCodeDescription | String | Description of the type of company | | cOwnership.categoryCode | Int32 | Code representing the kind of ownership | | cOwnership.categoryCodeDescription | String | Description of ownership type | ## Category fields Fields starting with the letter c are category fields. They contain typical intervals across all company types. Category fields are objects with the same type containing categoryCode, categoryCodeDescription and categoryCode2. categoryCode is the actual code used to describe the category and categoryCodeDescription contains a formatted string describing the categoryCode. categoryCode2 typically contains for example the year and month (formatted YYYYMM) or year (YYYY) for the various categories. Example: cTurnoverInterval contains is an object containing the turnover interval. cTradeImportInterval contains is an object containing the import interval (e.g how much the company is importing per year). Category fields are efficient when you query across multiple company types since only limited companies (Aktiebolag) typically submit annual reports (some exceptions other legal types may be required to submit an annual report). Therefore the goverment agency, Statistics Sweden, weekly compiles data across all legal entities types that we acquire and makes it easier to search within. ## Unix time only Typesense only allows unix timestamps to be indexed so search will only present time by the number of non-leap seconds that have elapsed since 00:00:00 UTC on 1st January 1970, the Unix epoch. Since we may have timestamps earlier than 1st January 1970 negative number of seconds may appear. ## European Commission and participant status ecParticipant.validationStatus can contain the following statuses: **Declared** Organisation registered by self-registrant. Will remain in this status if the validation is done decentrally by the National Agency. **Validated** Organisation validated centrally by REA (Research Executive Agency). **Suspended** The legal entity is "frozen" because of an external reason (Bankruptcy, etc.) as a result of central validation by REA (Research Executive Agency). **Sleeping** Some data was passed, but the contact person does not react on any demands from the REA (Research Executive Agency) validation team. **Deprecated** When duplication is identified by REA (Research Executive Agency), the validity will be Deprecated and the master PIC will be associated. Will not be published in the search. **Blocked** Blocked during the validation process by REA (Research Executive Agency). ## Enums Enums have been stored as plain text in search making it easier to service and not having to remember their numeric values. ## Intelligence types Intelligence records contains information about various discrepancies that we find in data. A record contains a score between 0 and 255 representing the significance of the discrepancy. If the score equals 0 is means it's just for information while 255 means the discrepancy is very significant. Each intelligence record also comes with a human English text describing the discrepancy called intelligence.notes. List of intelligence.companyIntelligenceType below in the table. Please note that while searching you need to enter the value (Int32) and not the name itself. Value 2,4 and 6 are unused currently. They may appear in search result currently just for testing. | Enum | Value | Description | | ---------------------------- | ----- | ------------------------------------------------------------------------------------------------- | | CreatedAsShelfCompany | 0 | The company was created as shelf company | | SuspectedForQuickLiquidation | 1 | The company was seems to be going into "quick liquidation" | | AffliatedWithArticle | 3 | The company is affiliated with one or multiple articles | | SuspectedAddress | 5 | The address has earlier been known | | PresentOnWarningList | 7 | The company is present on certain warning lists | | AnnualReportDiscrepancies | 8 | One or multiple annual reports contains discrepancies | | AuditorResignation | 9 | Auditor has resigned from their duties | | Registration | 10 | One or more issues about registration | | RegisterChanges | 11 | A change in a registry triggered an intelligence policy | | PenaltyFees | 12 | The company has been penalized by a fee | | BeneficialOwner | 13 | The registration office have indicated issues relating to registration of beneficial owners | | Claims | 14 | Claims from various goverment agencies e.g company is required to repay for example contributions | The intelligence.externalId is used to reference an id containing the orgin of the intelligence record. If for example the intelligence record is of type: AnnualReportDiscrepancies (8) it means the external id represents the id of the annual report. ## Intelligence subtypes Certain intelligence types have subtypes to further describe what has been found. The intelligence.companyIntelligenceSubType is an enum text to make it easier to filter based on search. List of subtypes. Please note you need to filter by string when using intelligence.companyIntelligenceSubType. | Enum | Description | | ------------------------------- | ----------------------------------------------------------------------------------------------------- | | BS\_MISMATCH | The balance sheet doesn't balance | | AGM\_TO\_LATE | The annual general meeting was held to late | | AR\_TO\_LATE | The annual report was submitted to late | | AGM\_WRONG\_DATE | Suspected wrong date of annual general meeting date | | MISSING\_MULTIYEAR | The multi-year overview is missing | | MISSING\_CHANGEEQUITY | The table showing change of equity is missing | | WRONG\_SIGNATUREDATE | Signature date (last signature) seems to be wrong | | WRONG\_EQUITYASSETSRATIO | The given equity asset ratio doesn't match the calculation | | MISSING\_AUDITOR | The company is passing the thresholds requiring an auditor (check response for mandatory requirement) | | DUPLICATE | The annual report is a duplicate for another company | | NO\_SHARECAPITAL | The balance sheet is missing share capital | | POSSIBLE\_MISSINGASSETS | | | NEGATIVE\_SHARECAPITAL | The balance sheet contains negative share capital | | NEGATIVE\_ASSETS | The balance sheet total assets are negative | | MISSING\_BS\_ASSETS | Missing part of the balance sheet (assets) | | MISSING\_BS\_EQUITY | Missing part of the balance sheet (equity) | | MISSING\_RS | Missing result sheet | | LIQUIDATION\_REQUIRED | The company is subject to liquidation requirements | | WRONG\_SHARECAPITAL | The share capital is wrong in the balance sheet | | MISSING\_NUMBEREMPLOYEES | Missing number of employees but required | | MISMATCH\_PL\_RS\_BS | Mismatch of profit/loss in result sheet and balance sheet | | MISMATCH\_PL\_CE | Mismatch of profit/loss in change of equity | | SUSPECT\_YEAR\_DUPLICATE | Suspected annual report for duplicated data from last year | | PROPOSED\_DIVIDEND\_ERR | Proposed dividend contains a too high number | | MANAGEMENT\_REPORT\_ERR | The management report contains errors | | MANAGEMENT\_REPORT\_UNCERTAINTY | The management report mention uncertainty in the business | | FORBIDDEN\_LOAN | The management report mention a forbidden loan | | CONTROL\_BS | The management report mention a control balance sheet | | AUDITOR\_CONTROL\_BS | Auditor mentions a control balance sheet | | AUDITOR\_LIQUIDATION\_REQUIRED | Auditor mentions liquidation requirements | | AUDITOR\_FORBIDDEN\_LOAN | Auditor mentions forbidden loan | | AUDITOR\_DISCOURGES | Auditor discourges the balance/or/and result sheet | | AUDITOR\_ACCOUNTING\_LAG | Auditor mentions lag in the accounting of the company | | AUDITOR\_MISSING\_EVIDENCE | Auditor is missing documentation / evidence for transactions | | AUDITOR\_TAXES\_LATE | Auditor mentions taxes have been paid late | | AUDITOR\_UNAUTH\_VALUETRANSFER | Auditor mentions unauthorized value transfers | | AUDITOR\_ACCOUNTING\_ISSUES | Auditor mentions accounting issues | | AUDITOR\_UNCERTAINTY | Auditor mentions uncertainty in the business | | AUDITOR\_ACCOUNTING\_ERR | Auditor mentions errors in accounting | | AUDITOR\_REMARK | Auditor report contains a remark | | COMPARATIVE\_FIGURES\_ERR | There is an error in compartative figures for the year | | AUDITOR\_EARLY\_RESIGNATION | An auditor has made an early resignation leaving certain remarks | | SUSPECTED\_AR | One or multiple discrepancies have been found in the annual report | | K3\_REQUIRED | Company is using K2 ruleset but is required to use K3 ruleset | | ISSUE\_WITH\_REGISTRATION | The annual report was registered with a discrepancy indicating one or multiple issues | | F\_TAX\_REVOKED | The F-tax registration of the company have been revoked | | AFFILIATION | The business is affiliated with external data | | CEO\_MISSING | Company is missing a CEO registered but required to have one registered | | AR\_MISSING | Annual report is missing for a period | | UNAUTH\_BOARD | Board is unauthorized and doesn't meet the terms | | AUDITOR\_MISSING | Company is missing an auditor | | REPR\_MISSING | Company is missing a special recipient of service | | BR\_SURPLUS | Bankruptcy terminated with surplus and is subject to liquidation | | AR\_SHORTAGE | Shortage listed by Bolagsverket to the company | | PENALTY\_FEE | The company has been penalized with a fee, see more in the description data | Check back continuously since we are adding more subtypes. ## Examples We have put together a few example of how you can use search to efficiently query the millions of companies we track. ### Search for companies at at specific street ```bash cURL theme={null} curl https://api.tic.io/search/companies?q=Fabriksgatan&query_by=addresses.street&key=your_api_key { { "facet_counts": [], "found": 1563, "hits": [ { "document": { "id": "3427183", "companyId": 3427183, "iso3166CountryCode": "SE", "registrationNumber": "5564228509", "registrationDate": 669510000.... } ``` ### Search for a specific phone number in E164 format What is E.164? E164 format is an international format for phone numbers. E.164 numbers are formatted \[+] \[country code] \[subscriber number including area code] and can have a maximum of fifteen digits. ```bash cURL theme={null} curl https://api.tic.io/search/companies?q=+46850565800&query_by=phoneNumbers.e164PhoneNumber&key=your_api_key ``` ### Search for companies within a certain geographic area Search for companies covering a 300 meters radius around the provided location by latitude and longitude in WGS84 format. Read more about geosearch [here](https://typesense.org/docs/26.0/api/geosearch.html). ```bash cURL theme={null} curl https://api.tic.io/search/companies?q=*&query_by=addresses.street&filter_by=addresses.location:(57.6799,12.09162, 0.300 km)&sort_by=addresses.location(57.6799,12.09162):asc&key=your_api_key ``` ### Filter for a specific companyId Filters allows you to narrow down your search. This example shows how to specifically match only the company with id 3508351. Read more about filters [here](https://typesense.org/docs/26.0/api/search.html#filter-parameters). ```bash cURL theme={null} curl https://api.tic.io/search/companies?q=*&query_by=registrationNumber&filter_by=companyId:[3508351]&key=your_api_key ``` ### Search for companies with specific industry names or codes Searches for companies that have a number of specific industry codes as defined in [SNI 2007 standard](https://www.scb.se/en/documentation/classifications-and-standards/swedish-standard-industrial-classification-sni). You can search either for the name as described in the standard or the code itself. ```bash cURL theme={null} curl https://api.tic.io/search/companies?q=Handel%20med%20personbilar%20och%20l%C3%A4tta%20motorfordon&query_by=sniCodes.sni_2007Name&key=your_api_key" ``` ### Search for stock listed companies Searches for companies listed on market exchange name, OMX Stockholm, ```bash cURL theme={null} curl https://api.tic.io/search/companies?q=OMX+Stockholm&query_by=stock.marketExchangeName&key=your_api_key ``` ### Search for companies that have sold to public actors Searches for companies that have sold to Gävle municipality. ```bash cURL theme={null} curl https://api.tic.io/search/companies?q=gävle&query_by=salesToPublicActors.actorName&key=your_api_key { { "facet_counts": [], "found": 1563, "hits": [ { "document": { "id": "3427183", "companyId": 3427183, "iso3166CountryCode": "SE", "registrationNumber": "5564228509", "registrationDate": 669510000.... } ``` ### Search for intelligence records Searches for companies that have passed auditor requirements by third consecutive year. Note that the score should exceed 254. ```bash cURL theme={null} curl https://api.tic.io/search/companies?q=*&query_by=registrationNumber&filter_by=intelligence.companyIntelligenceSubType:['MISSING_AUDITOR']&&intelligence.score:>254&key=your_api_key ``` ### Multi search Multi search enables you to carry out multi searches in one request by posting a json model to the search endpoint. Typesense have a description of the feature in their [documentation](https://typesense.org/docs/26.0/api/federated-multi-search.html). Here is an example of how to use multisearch while searching for a company registration number, e-mail, stock ticker and LEI code. ```bash cURL theme={null} curl \ --request POST --header "Content-Type: application/json" --header "x-api-key:your_api_key" --data '{ "searches": [ { "collection": "companies", "query_by": "registrationNumber", "q": "5565199493" }, { "collection": "companies", "query_by": "emailAddresses.emailAddress", "q": "kundtjanst@tibroenergi.se" }, { "collection": "companies", "query_by": "stock.ticker", "q": "SBB" }, { "collection": "companies", "query_by": "lei.leiCode", "q": "549300YECS8HKCIMMB67" } ] }' https://api.tic.io/search/companies ``` ### Response model The search response for example when you search for our company would look like the example below for our company. The registrationDate is in Unix epoch seconds e.g the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT). Same applies for various dates since Typesense requires dates to be serialized to epoch. For example listingDate (stock) and nextRenewalDate (lei) are both epoch. ```json Search response for companies theme={null} { "results": [ { "facet_counts": [], "found": 1, "hits": [ { "document": { "addresses": [ { "addressType": "mailAddress", "city": "BORLÄNGE", "postalCode": "78129", "street": "Box 930" }, { "addressType": "mailAddress", "city": "Stockholm", "countryCodeAlpha3": "SWE", "houseNumber": "41", "location": [59.33876, 18.06013], "postalCode": "11134", "street": "Sveavägen" }, { "addressType": "registeredAddress", "city": "STOCKHOLM", "co": "Bahnhof AB", "countryCodeAlpha3": "SE ", "postalCode": "10395", "street": "Box 7702" } ], "bankAccounts": [ { "accountNumber": "1746635", "bankAccountType": "bankgiro" }, { "accountNumber": "51365088", "bankAccountType": "bankgiro" }, { "accountNumber": "56117526", "bankAccountType": "bankgiro" }, { "accountNumber": "59219212", "bankAccountType": "bankgiro" }, { "accountNumber": "7859291", "bankAccountType": "bankgiro" } ], "companyId": 1893055, "currentBeneficialOwners": [ { "beneficialOwnerId": 1651253, "personalIdentityNumber": "redacted for privacy reasons", "personId": 2954253, "citizenshipCountryCode": "SE", "countryOfResidenceCode": "SE", "extentCode": "INTERVALL2", "extentDescription": "Mer än 25 % men inte mer än 50 %", "fromDate": 1506866424, "fullName": "redacted for privacy reasons", "governDescription": "Personen har kontroll genom aktier, andelar, medlemskap, avtal eller bestämmelse i exempelvis bolagsordning eller stadgar." } ], "currentRepresentatives": [ { "fullName": "redacted for privacy reasons", "personalIdentityNumber": "redacted for privacy reasons", "personId": 2954253, "positionDescription": "STYRELSELEDAMOT", "positionStart": 1723161600, "positionType": "LE" }, { "fullName": "redacted for privacy reasons", "personalIdentityNumber": "redacted for privacy reasons", "personId": 2954253, "positionDescription": "VERKSTÄLLANDE DIREKTÖR", "positionStart": 1723161600, "positionType": "VD" } ], "documents": [ { "companyDocumentId": 13036521, "companyDocumentType": "minutes", "documentDate": 1723161600, "documentTitle": "Minutes registered on 2024-08-09", "documentUrl": "https://api.tic.io/company-documents/13036521/order", "documentVersion": "219870278", "grossPriceIfAny": 2.0 }, { "companyDocumentId": 10801798, "companyDocumentType": "annualReport", "documentDate": 1719360000, "documentTitle": "Annual report submitted by mail on 2024-06-26 for 2023-01-01 to 2023-12-31 and registered on 2024-08-08", "documentUrl": "https://api.tic.io/financial-documents/se/520470", "documentValue1": "2023-01-01", "documentValue2": "2023-12-31", "documentVersion": "9392305/2024" }, { "companyDocumentId": 13036522, "companyDocumentType": "minutes", "documentDate": 1715731200, "documentTitle": "Minutes registered on 2024-05-15", "documentUrl": "https://api.tic.io/company-documents/13036522/order", "documentVersion": "214580527", "grossPriceIfAny": 2.0 }, { "companyDocumentId": 8894711, "companyDocumentType": "case", "documentDate": 1715644800, "documentTitle": "Change of representative/company signature", "documentValue1": "FÖR", "documentValue2": "2024-05-15", "documentVersion": "263117/2024" }, { "companyDocumentId": 16922683, "companyDocumentType": "case", "documentDate": 1694476800, "documentTitle": "Change of the company's representative address", "documentValue1": "FÖRP", "documentValue2": "2023-09-12", "documentVersion": "476753/2023" }, { "companyDocumentId": 16922684, "companyDocumentType": "case", "documentDate": 1694476800, "documentTitle": "Change of the company's representative address", "documentValue1": "FÖRP", "documentValue2": "2023-09-12", "documentVersion": "476744/2023" }, { "companyDocumentId": 13036523, "companyDocumentType": "minutes", "documentDate": 1684108800, "documentTitle": "Minutes registered on 2023-05-15", "documentUrl": "https://api.tic.io/company-documents/13036523/order", "documentVersion": "197346117", "grossPriceIfAny": 2.0 }, { "companyDocumentId": 23646449, "companyDocumentType": "annualReport", "documentDate": 1672444800, "documentTitle": "Annual report for period ending 2022-12-31 registered", "documentUrl": "https://api.tic.io/company-documents/23646449/order", "documentValue2": "2022-12-31", "documentVersion": "202977827", "grossPriceIfAny": 40.0 }, { "companyDocumentId": 16922685, "companyDocumentType": "case", "documentDate": 1661731200, "documentTitle": "Change relating to auditors", "documentValue1": "REV", "documentValue2": "2022-08-29", "documentVersion": "432632/2022" }, { "companyDocumentId": 13036524, "companyDocumentType": "minutes", "documentDate": 1653350400, "documentTitle": "Minutes registered on 2022-05-24", "documentUrl": "https://api.tic.io/company-documents/13036524/order", "documentVersion": "182079292", "grossPriceIfAny": 2.0 }, { "companyDocumentId": 23646450, "companyDocumentType": "annualReport", "documentDate": 1640908800, "documentTitle": "Annual report for period ending 2021-12-31 registered", "documentUrl": "https://api.tic.io/company-documents/23646450/order", "documentValue2": "2021-12-31", "documentVersion": "185126852", "grossPriceIfAny": 40.0 }, { "companyDocumentId": 13036525, "companyDocumentType": "minutes", "documentDate": 1636588800, "documentTitle": "Minutes registered on 2021-11-11", "documentUrl": "https://api.tic.io/company-documents/13036525/order", "documentVersion": "173834528", "grossPriceIfAny": 2.0 }, { "companyDocumentId": 16922686, "companyDocumentType": "case", "documentDate": 1635897600, "documentTitle": "Change of representative/company signature,Change of subject's mailing address", "documentValue1": "FÖR,PA", "documentValue2": "2021-11-11", "documentVersion": "624165/2021" }, { "companyDocumentId": 23646451, "companyDocumentType": "annualReport", "documentDate": 1609372800, "documentTitle": "Annual report for period ending 2020-12-31 registered", "documentUrl": "https://api.tic.io/company-documents/23646451/order", "documentValue2": "2020-12-31", "documentVersion": "164060402", "grossPriceIfAny": 40.0 }, { "companyDocumentId": 13036526, "companyDocumentType": "minutes", "documentDate": 1590624000, "documentTitle": "Minutes registered on 2020-05-28", "documentUrl": "https://api.tic.io/company-documents/13036526/order", "documentVersion": "144379934", "grossPriceIfAny": 2.0 }, { "companyDocumentId": 16922687, "companyDocumentType": "case", "documentDate": 1589414400, "documentTitle": "Change of representative/company signature", "documentValue1": "FÖR", "documentValue2": "2020-05-28", "documentVersion": "272195/2020" }, { "companyDocumentId": 23646452, "companyDocumentType": "annualReport", "documentDate": 1577750400, "documentTitle": "Annual report for period ending 2019-12-31 registered", "documentUrl": "https://api.tic.io/company-documents/23646452/order", "documentValue2": "2019-12-31", "documentVersion": "148605084", "grossPriceIfAny": 40.0 }, { "companyDocumentId": 13036527, "companyDocumentType": "minutes", "documentDate": 1564358400, "documentTitle": "Minutes registered on 2019-07-29", "documentUrl": "https://api.tic.io/company-documents/13036527/order", "documentVersion": "140284912", "grossPriceIfAny": 2.0 }, { "companyDocumentId": 13036528, "companyDocumentType": "minutes", "documentDate": 1564358400, "documentTitle": "Minutes registered on 2019-07-29", "documentUrl": "https://api.tic.io/company-documents/13036528/order", "documentVersion": "140284911", "grossPriceIfAny": 2.0 }, { "companyDocumentId": 16922688, "companyDocumentType": "case", "documentDate": 1561593600, "documentTitle": "Change of representative/company signature", "documentValue1": "FÖR", "documentValue2": "2019-07-29", "documentVersion": "344374/2019" }, { "companyDocumentId": 23646570, "companyDocumentType": "annualReport", "documentDate": 1546214400, "documentTitle": "Annual report for period ending 2018-12-31 registered", "documentUrl": "https://api.tic.io/company-documents/23646570/order", "documentValue2": "2018-12-31", "documentVersion": "134135352", "grossPriceIfAny": 40.0 }, { "companyDocumentId": 16922689, "companyDocumentType": "case", "documentDate": 1527120000, "documentTitle": "Change of representative/company signature", "documentValue1": "FÖR", "documentValue2": "2018-06-13", "documentVersion": "273061/2018" }, { "companyDocumentId": 23646571, "companyDocumentType": "annualReport", "documentDate": 1514678400, "documentTitle": "Annual report for period ending 2017-12-31 registered", "documentUrl": "https://api.tic.io/company-documents/23646571/order", "documentValue2": "2017-12-31", "documentVersion": "106264065", "grossPriceIfAny": 40.0 }, { "companyDocumentId": 13036520, "companyDocumentType": "articlesOfAssociation", "documentDate": 1507680000, "documentTitle": "Articles of association stated on 2017-10-11", "documentUrl": "https://api.tic.io/company-documents/13036520/order", "documentVersion": "116345562", "grossPriceIfAny": 40.0 }, { "companyDocumentId": 23646572, "companyDocumentType": "annualReport", "documentDate": 1483142400, "documentTitle": "Annual report for period ending 2016-12-31 registered", "documentUrl": "https://api.tic.io/company-documents/23646572/order", "documentValue2": "2016-12-31", "documentVersion": "36159320", "grossPriceIfAny": 40.0 }, { "companyDocumentId": 23646573, "companyDocumentType": "annualReport", "documentDate": 1451520000, "documentTitle": "Annual report for period ending 2015-12-31 registered", "documentUrl": "https://api.tic.io/company-documents/23646573/order", "documentValue2": "2015-12-31", "documentVersion": "30454182", "grossPriceIfAny": 40.0 }, { "companyDocumentId": 23646574, "companyDocumentType": "annualReport", "documentDate": 1419984000, "documentTitle": "Annual report for period ending 2014-12-31 registered", "documentUrl": "https://api.tic.io/company-documents/23646574/order", "documentValue2": "2014-12-31", "documentVersion": "26697277", "grossPriceIfAny": 40.0 }, { "companyDocumentId": 23646575, "companyDocumentType": "annualReport", "documentDate": 1388448000, "documentTitle": "Annual report for period ending 2013-12-31 registered", "documentUrl": "https://api.tic.io/company-documents/23646575/order", "documentValue2": "2013-12-31", "documentVersion": "22762254", "grossPriceIfAny": 40.0 }, { "companyDocumentId": 16922690, "companyDocumentType": "case", "documentDate": 1369785600, "documentTitle": "Change of representative/company signature", "documentValue1": "FÖR", "documentValue2": "2013-06-17", "documentVersion": "193232/2013" }, { "companyDocumentId": 23646576, "companyDocumentType": "annualReport", "documentDate": 1356912000, "documentTitle": "Annual report for period ending 2012-12-31 registered", "documentUrl": "https://api.tic.io/company-documents/23646576/order", "documentValue2": "2012-12-31", "documentVersion": "20035600", "grossPriceIfAny": 40.0 }, { "companyDocumentId": 16922691, "companyDocumentType": "case", "documentDate": 1349913600, "documentTitle": "Change of representative/company signature", "documentValue1": "FÖR", "documentValue2": "2012-10-16", "documentVersion": "390371/2012" }, { "companyDocumentId": 16922692, "companyDocumentType": "case", "documentDate": 1338163200, "documentTitle": "Change of representative/company signature", "documentValue1": "FÖR", "documentValue2": "2012-05-30", "documentVersion": "208178/2012" }, { "companyDocumentId": 23646577, "companyDocumentType": "annualReport", "documentDate": 1325289600, "documentTitle": "Annual report for period ending 2011-12-31 registered", "documentUrl": "https://api.tic.io/company-documents/23646577/order", "documentValue2": "2011-12-31", "documentVersion": "18120881", "grossPriceIfAny": 40.0 }, { "companyDocumentId": 16922693, "companyDocumentType": "case", "documentDate": 1304553600, "documentTitle": "Change of mailing address of representative and/or auditor in several companies", "documentValue1": "MPA", "documentValue2": "2011-05-09", "documentVersion": "171354/2011" }, { "companyDocumentId": 16922694, "companyDocumentType": "case", "documentDate": 1294790400, "documentTitle": "Change of representative/company signature", "documentValue1": "FÖR", "documentValue2": "2011-01-27", "documentVersion": "12506/2011" }, { "companyDocumentId": 23646578, "companyDocumentType": "annualReport", "documentDate": 1293753600, "documentTitle": "Annual report for period ending 2010-12-31 registered", "documentUrl": "https://api.tic.io/company-documents/23646578/order", "documentValue2": "2010-12-31", "documentVersion": "15944944", "grossPriceIfAny": 40.0 }, { "companyDocumentId": 16922695, "companyDocumentType": "case", "documentDate": 1288656000, "documentTitle": "Resignation from the board of directors", "documentValue1": "FÖRU", "documentValue2": "2010-11-03", "documentVersion": "560174/2010" }, { "companyDocumentId": 16922696, "companyDocumentType": "case", "documentDate": 1282608000, "documentTitle": "Change of representative/company signature", "documentValue1": "FÖR", "documentValue2": "2010-09-06", "documentVersion": "399206/2010" }, { "companyDocumentId": 23646579, "companyDocumentType": "annualReport", "documentDate": 1262217600, "documentTitle": "Annual report for period ending 2009-12-31 registered", "documentUrl": "https://api.tic.io/company-documents/23646579/order", "documentValue2": "2009-12-31", "documentVersion": "13522725", "grossPriceIfAny": 40.0 }, { "companyDocumentId": 16922697, "companyDocumentType": "case", "documentDate": 1243209600, "documentTitle": "Authorisation to increase share capital through the issue of new shares,Change of representative/company signature,Change of subject's mailing address", "documentValue1": "BENY,FÖR,PA", "documentValue2": "2009-06-01", "documentVersion": "225051/2009" }, { "companyDocumentId": 23646580, "companyDocumentType": "annualReport", "documentDate": 1230681600, "documentTitle": "Annual report for period ending 2008-12-31 registered", "documentUrl": "https://api.tic.io/company-documents/23646580/order", "documentValue2": "2008-12-31", "documentVersion": "11901777", "grossPriceIfAny": 40.0 }, { "companyDocumentId": 16922698, "companyDocumentType": "case", "documentDate": 1222300800, "documentTitle": "Change of information for legal person registered as representative/auditor", "documentValue1": "BVEJUR", "documentValue2": "2008-09-25", "documentVersion": "414260/2008" }, { "companyDocumentId": 16922699, "companyDocumentType": "case", "documentDate": 1213574400, "documentTitle": "Change of representative/company signature", "documentValue1": "FÖR", "documentValue2": "2008-06-17", "documentVersion": "275101/2008" }, { "companyDocumentId": 23646581, "companyDocumentType": "annualReport", "documentDate": 1199059200, "documentTitle": "Annual report for period ending 2007-12-31 registered", "documentUrl": "https://api.tic.io/company-documents/23646581/order", "documentValue2": "2007-12-31", "documentVersion": "10193935", "grossPriceIfAny": 40.0 }, { "companyDocumentId": 16922700, "companyDocumentType": "case", "documentDate": 1191542400, "documentTitle": "Change of business name,Change of representative/company signature,Change of limits for the number of board members,Amendment of Articles of Association,Change of category from private to public company,Change relating to auditors,Issue or change of warrants,Ökning av aktiekapitalet genom nyemission", "documentValue1": "FIRM,FÖR,FÖRGR,ORDN,PUBL,REV,TOPT,ÖKNY", "documentValue2": "2007-11-16", "documentVersion": "308663/2007" }, { "companyDocumentId": 23646582, "companyDocumentType": "annualReport", "documentDate": 1167523200, "documentTitle": "Annual report for period ending 2006-12-31 registered", "documentUrl": "https://api.tic.io/company-documents/23646582/order", "documentValue2": "2006-12-31", "documentVersion": "8619003", "grossPriceIfAny": 40.0 }, { "companyDocumentId": 23646765, "companyDocumentType": "annualReport", "documentDate": 1135987200, "documentTitle": "Annual report for period ending 2005-12-31 registered", "documentUrl": "https://api.tic.io/company-documents/23646765/order", "documentValue2": "2005-12-31", "documentVersion": "6930943", "grossPriceIfAny": 40.0 }, { "companyDocumentId": 16922701, "companyDocumentType": "case", "documentDate": 1117065600, "documentTitle": "Registration of secondary name or change in the business conducted under the secondary name.,Change of business name,Change of representative/company signature,Amendment of Articles of Association,Change of subject's mailing address", "documentValue1": "BIF,FIRM,FÖR,ORDN,PA", "documentValue2": "2005-06-01", "documentVersion": "142782/2005" }, { "companyDocumentId": 16922702, "companyDocumentType": "case", "documentDate": 1105488000, "documentTitle": "Change relating to auditors", "documentValue1": "REV", "documentValue2": "2005-01-15", "documentVersion": "8175/2005" }, { "companyDocumentId": 23646766, "companyDocumentType": "annualReport", "documentDate": 1104451200, "documentTitle": "Annual report for period ending 2004-12-31 registered", "documentUrl": "https://api.tic.io/company-documents/23646766/order", "documentValue2": "2004-12-31", "documentVersion": "5584259", "grossPriceIfAny": 40.0 }, { "companyDocumentId": 16922703, "companyDocumentType": "case", "documentDate": 1095724800, "documentTitle": "Change of representative/company signature", "documentValue1": "FÖR", "documentValue2": "2004-10-11", "documentVersion": "256580/2004" }, { "companyDocumentId": 23646767, "companyDocumentType": "annualReport", "documentDate": 1072828800, "documentTitle": "Annual report for period ending 2003-12-31 registered", "documentUrl": "https://api.tic.io/company-documents/23646767/order", "documentValue2": "2003-12-31", "documentVersion": "4371486", "grossPriceIfAny": 40.0 }, { "companyDocumentId": 16922704, "companyDocumentType": "case", "documentDate": 1067644800, "documentTitle": "Conversion of objects to the Swedish Companies Registration Office's data system", "documentValue1": "KONV", "documentValue2": "2003-11-01", "documentVersion": "1093215/2003" }, { "companyDocumentId": 23646768, "companyDocumentType": "annualReport", "documentDate": 1041292800, "documentTitle": "Annual report for period ending 2002-12-31 registered", "documentUrl": "https://api.tic.io/company-documents/23646768/order", "documentValue2": "2002-12-31", "documentVersion": "3339325", "grossPriceIfAny": 40.0 }, { "companyDocumentId": 23646769, "companyDocumentType": "annualReport", "documentDate": 1009756800, "documentTitle": "Annual report for period ending 2001-12-31 registered", "documentUrl": "https://api.tic.io/company-documents/23646769/order", "documentValue2": "2001-12-31", "documentVersion": "2621768", "grossPriceIfAny": 40.0 }, { "companyDocumentId": 23646770, "companyDocumentType": "annualReport", "documentDate": 978220800, "documentTitle": "Annual report for period ending 2000-12-31 registered", "documentUrl": "https://api.tic.io/company-documents/23646770/order", "documentValue2": "2000-12-31", "documentVersion": "323673", "grossPriceIfAny": 40.0 }, { "companyDocumentId": 23646771, "companyDocumentType": "annualReport", "documentDate": 962323200, "documentTitle": "Annual report for period ending 2000-06-30 registered", "documentUrl": "https://api.tic.io/company-documents/23646771/order", "documentValue2": "2000-06-30", "documentVersion": "176529", "grossPriceIfAny": 40.0 }, { "companyDocumentId": 23646772, "companyDocumentType": "annualReport", "documentDate": 930700800, "documentTitle": "Annual report for period ending 1999-06-30 registered", "documentUrl": "https://api.tic.io/company-documents/23646772/order", "documentValue2": "1999-06-30", "documentVersion": "1094929", "grossPriceIfAny": 40.0 }, { "companyDocumentId": 16922705, "companyDocumentType": "case", "documentDate": 917481600, "documentTitle": "Åtgärd av Bolagsverket på grund av personlig konkurs,Change of representative/company signature", "documentValue1": "PRVK,ST", "documentValue2": "1999-01-29", "documentVersion": "18651/1999" }, { "companyDocumentId": 16922706, "companyDocumentType": "case", "documentDate": 898041600, "documentTitle": "Amendment of Articles of Association,Change of business name,Change of financial year,Change of representative/company signature,Change relating to auditors,Auditor's commisssion terminated early", "documentValue1": "ORDN,FIRM,RÄK,ST,REV,REVF", "documentValue2": "1998-06-24", "documentVersion": "115524/1998" }, { "companyDocumentId": 23646773, "companyDocumentType": "annualReport", "documentDate": 883526400, "documentTitle": "Annual report for period ending 1997-12-31 registered", "documentUrl": "https://api.tic.io/company-documents/23646773/order", "documentValue2": "1997-12-31", "documentVersion": "529477", "grossPriceIfAny": 40.0 }, { "companyDocumentId": 16922707, "companyDocumentType": "case", "documentDate": 804297600, "documentTitle": "New registration,Registrering av ärende utan avgift", "documentValue1": "NYB,UP", "documentValue2": "1995-07-14", "documentVersion": "132365/1995" } ], "elfCode": "XJHM", "emailAddresses": [ { "emailAddress": "ekonomi@bahnhof.se", "emailAddressType": "general" } ], "franchisesOrLicences": [], "hasAddresses": true, "hasBankAccounts": true, "hasDocuments": true, "hasECParticipant": false, "hasEmailAddresses": true, "hasFranchisesOrLicences": false, "hasHyperlinks": true, "hasIntelligence": false, "hasLEI": true, "hasMostRecentFinancialSummary": true, "hasPhoneNumbers": true, "hasSalesToPublicActors": true, "hasStatus": false, "hasStock": true, "hasTrademarks": true, "hyperlinks": [ { "hyperlink": "https://bahnhof.se/", "hyperlinkType": "homepage" }, { "hyperlink": "https://se.linkedin.com/company/bahnhof", "hyperlinkType": "linkedIn" } ], "id": "1893055", "intelligence": [], "isCeased": false, "isRegisteredForFTax": true, "isRegisteredForPayroll": true, "isRegisteredForVAT": true, "iso3166CountryCode": "SE", "legalEntityType": "Aktiebolag", "lei": { "initialRegistrationDate": 1477533600, "leiCode": "213800K7LQU3H85KCU96", "managingLOU": "549300O897ZC5H7CY412", "managingLOULegalName": "Nordic Legal Entity Identifier AB", "nextRenewalDate": 1745795880, "registrationStatus": "ISSUED" }, "localCompanyCode": "AB", "mostRecentFinancialSummary": { "bs_TotalAssetsK": 1101530, "fn_NumberOfEmployees": 290.0, "isAudited": true, "km_EquityAssetsRatio": 0.4946, "km_GrossMargin": 0.2893, "km_NetProfitMargin": 0.1264, "km_OperatingMargin": 0.1254, "periodEnd": 1672444800, "periodStart": 1640995200, "rs_NetSalesK": 1730020, "rs_OperatingProfitOrLossK": 216943, "rs_OtherOperatingIncomeK": 691, "rs_ProfitAfterFinancialItemsK": 218657, "rs_SumFinancialItemsK": 1714 }, "mostRecentPurpose": "Aktiebolaget ska bedriva försäljning av mjukvaror, hårdvaror samt tjänster inom datakommunikation, produktion och försäljning av mediaprodukter och mediatjänster samt därmed förenlig verksamhet.", "mostRecentRegisteredAddress": { "addressType": "registeredAddress", "city": "STOCKHOLM", "co": "Bahnhof AB", "countryCodeAlpha3": "SE ", "postalCode": "10395", "street": "Box 7702" }, "mostRecentShareCapital": { "firstSeenAt": 1723209756, "numberOfShares": 107565130, "numberOfSharesHigherLimit": 400000000, "numberOfSharesLowerLimit": 100000000, "shareCapitalAmount": 1075651.0, "shareCapitalHigherLimitAmount": 4000000.0, "shareCapitalISO4217CurrencyCode": "SEK", "shareCapitalLowerLimitAmount": 1000000.0 }, "mostRecentSignatory": { "firstSeenAt": 1723209756, "signatureDescription": "Firman tecknas av styrelsen Firman tecknas i förening av >Karlung, Jon >Norman, Bengt Staffan Andreas Dessutom har verkställande direktören rätt att teckna firman beträffande löpande förvaltningsåtgärder" }, "names": [ { "companyNamingType": "legalName", "firstSeenAt": 1195171200, "nameOrIdentifier": "Bahnhof AB (publ)" }, { "companyNamingType": "particularName", "firstSeenAt": 1117584000, "nameOrIdentifier": "Komintern" } ], "phoneNumbers": [ { "e164PhoneNumber": "+46105100000", "numberPlanServiceType": "Geografiskt oberoende tjänster", "orginalOperator": "Bahnhof AB", "phoneNumberType": "fixedLine" } ], "registeredOffices": [ { "county": "Stockholms län", "countyCode": "01", "firstSeenAt": 1723209756, "municipality": "Stockholm", "municipalityCode": "0180" } ], "registrationDate": 805680000, "registrationNumber": "5565199493", "salesToPublicActors": [ { "actorCode": "2260", "actorName": "Ånge", "actorType": "Municipality", "invoicedApprox2022K": 90, "invoicedApprox2023K": 59 }, { "actorCode": "1765", "actorName": "Årjäng", "actorType": "Municipality", "invoicedApprox2022K": 14, "invoicedApprox2023K": 8 } { "actorName": "Got Event AB", "actorType": "MunicipalityCompany", "invoicedApprox2022K": 153, "invoicedApprox2023K": 179 }, { "actorName": "Region Halland", "actorType": "Region", "invoicedApprox2022K": 0, "invoicedApprox2023K": 59 }, { "actorName": "Västra Götalandsregionen", "actorType": "Region", "invoicedApprox2022K": 52, "invoicedApprox2023K": 40 }, { "actorName": "Sveriges lantbruksuniversitet", "actorType": "University", "invoicedApprox2022K": 0, "invoicedApprox2023K": 448 }, { "actorName": "Kungliga biblioteket", "actorType": "Authority", "invoicedApprox2022K": 23, "invoicedApprox2023K": 0 }, { "actorName": "Statens konstråd", "actorType": "Authority", "invoicedApprox2022K": 35, "invoicedApprox2023K": 34 }, { "actorName": "Institutet för rymdfysik", "actorType": "Authority", "invoicedApprox2022K": 0, "invoicedApprox2023K": 18 }, { "actorName": "Trafikverket", "actorType": "Authority", "invoicedApprox2022K": 0, "invoicedApprox2023K": 8 } ], "sniCodes": [ { "sni_2007Code": "61100", "sni_2007Name": "Trådbunden telekommunikation" }, { "sni_2007Code": "63110", "sni_2007Name": "Databehandling, hosting o.d." }, { "sni_2007Code": "69201", "sni_2007Name": "Redovisning och bokföring" } ], "status": [], "stock": { "branchName": "Bredband & Telefoni", "dividendAmount": 2.0, "dividendCurrency": "SEK", "dividendExDate": 1715731200, "dividendsPerYear": 1, "enterpriseValue": 5163.99, "enterpriseValueUpdated": 1731043862, "isin": "SE0010442418", "listingDate": 1198022400, "marketCountryCodeAlpha3": "SWE", "marketExchangeName": "OMX Stockholm", "marketName": "First North", "nextReportDate": 1739836800, "nextReportType": "ANNUAL", "sectorName": "Telekommunikation", "stockQuote": 52.0, "stockQuoteUpdated": 1731087908, "ticker": "BAHN B", "yahooSymbol": "BAHN-B.ST" }, "trademarks": [ { "applicationNumber": "2007-05003", "feature": "Figurative", "mediaUrl": "https://api.tic.io/media/trademarks/se/415329", "registeredCountryCode": "SE", "status": "Applicationrefused", "trademarkId": 415329, "word": "B BAHNHOF" }, { "applicationNumber": "2009-06701", "expire": 1574812800, "feature": "Word", "registered": 1259280000, "registeredCountryCode": "SE", "status": "Expired", "trademarkId": 447292, "word": "Comptainer" }, { "applicationNumber": "2009-06702", "expire": 1574812800, "feature": "Word", "registered": 1259280000, "registeredCountryCode": "SE", "status": "Expired", "trademarkId": 447293, "word": "Servtainer" }, { "applicationNumber": "2012-04739", "expire": 1982361600, "feature": "Word", "registered": 1351209600, "registeredCountryCode": "SE", "status": "Registered", "trademarkId": 482096, "word": "Thule Data Center" }, { "applicationNumber": "2013-00692", "expire": 1996876800, "feature": "Word", "registered": 1365724800, "registeredCountryCode": "SE", "status": "Registered", "trademarkId": 488573, "word": "IKAPP Finans" }, { "applicationNumber": "2013-00975", "expire": 1997481600, "feature": "Word", "registered": 1366329600, "registeredCountryCode": "SE", "status": "Registered", "trademarkId": 489078, "word": "OpenGiga" }, { "applicationNumber": "2013-02106", "expire": 2001110400, "feature": "Word", "registered": 1369958400, "registeredCountryCode": "SE", "status": "Registered", "trademarkId": 490365, "word": "DCDH - Data Center for District Heating" }, { "applicationNumber": "2013-04191", "expire": 1697587200, "feature": "Word", "registered": 1382054400, "registeredCountryCode": "SE", "status": "Expired", "trademarkId": 492972, "word": "NoLeaks" }, { "applicationNumber": "2013-05251", "expire": 2027116800, "feature": "Word", "registered": 1395964800, "registeredCountryCode": "SE", "status": "Registered", "trademarkId": 494265, "word": "Based in Sweden" }, { "applicationNumber": "2014-03224", "feature": "Word", "registeredCountryCode": "SE", "status": "Applicationrefused", "trademarkId": 502301, "word": "Kraftwerk" }, { "applicationNumber": "2014-08132", "expire": 1749081600, "feature": "Word", "registered": 1433462400, "registeredCountryCode": "SE", "status": "Registered", "trademarkId": 508011, "word": "Triple Green" }, { "applicationNumber": "2016-05296", "expire": 1793664000, "feature": "Word", "registered": 1478131200, "registeredCountryCode": "SE", "status": "Registered", "trademarkId": 525052, "word": "Northern Light" }, { "applicationNumber": "2016-05808", "expire": 1795392000, "feature": "Word", "registered": 1479859200, "registeredCountryCode": "SE", "status": "Registered", "trademarkId": 525563, "word": "Spridningskollen" }, { "applicationNumber": "2017-05526", "expire": 1827014400, "feature": "Word", "registered": 1511481600, "registeredCountryCode": "SE", "status": "Registered", "trademarkId": 536066, "word": "Climate+" }, { "applicationNumber": "2017-07191", "feature": "Word", "registeredCountryCode": "SE", "status": "Applicationrefused", "trademarkId": 537998, "word": "Big City" }, { "applicationNumber": "2017-08630", "expire": 1836777600, "feature": "Word", "registered": 1521158400, "registeredCountryCode": "SE", "status": "Registered", "trademarkId": 539770, "word": "VXDC" }, { "applicationNumber": "2018-02465", "feature": "Word", "registeredCountryCode": "SE", "status": "Applicationrefused", "trademarkId": 543262, "word": "Streama lagligt" }, { "applicationNumber": "2018-02507", "feature": "Word", "registeredCountryCode": "SE", "status": "Applicationrefused", "trademarkId": 543304, "word": "Öppet Spektrum" }, { "applicationNumber": "2019-06976", "feature": "Word", "registeredCountryCode": "SE", "status": "Applicationrefused", "trademarkId": 558152, "word": "Quantum Cloud" }, { "applicationNumber": "2020-01310", "expire": 1898121600, "feature": "Word", "registered": 1599609600, "registeredCountryCode": "SE", "status": "Registered", "trademarkId": 561236, "word": "Bahnhof" }, { "applicationNumber": "2020-03102", "expire": 1904342400, "feature": "Figurative", "mediaUrl": "https://api.tic.io/media/trademarks/se/563313", "registered": 1591056000, "registeredCountryCode": "SE", "status": "Registered", "trademarkId": 563313, "word": "B BAHNHOF INTERNET MED SEKRETESS" }, { "applicationNumber": "2020-03106", "expire": 1904342400, "feature": "Word", "registered": 1590537600, "registeredCountryCode": "SE", "status": "Registered", "trademarkId": 563317, "word": "Elementica Data Center Construction" }, { "applicationNumber": "2020-03596", "expire": 1906070400, "feature": "Word", "registered": 1592438400, "registeredCountryCode": "SE", "status": "Registered", "trademarkId": 563926, "word": "GothCom" }, { "applicationNumber": "2021-04259", "feature": "Word", "registeredCountryCode": "SE", "status": "Applicationrefused", "trademarkId": 574763, "word": "FOLIE" }, { "applicationNumber": "2021-06328", "expire": 1947196800, "feature": "Word", "registered": 1634860800, "registeredCountryCode": "SE", "status": "Registered", "trademarkId": 577183, "word": "Foliehatt" }, { "applicationNumber": "2022-01324", "expire": 1962316800, "feature": "Word", "registered": 1648425600, "registeredCountryCode": "SE", "status": "Registered", "trademarkId": 581448, "word": "Nord Stream 3" } ] }, "highlight": { "registrationNumber": { "matched_tokens": ["5565199493"], "snippet": "5565199493" } }, "highlights": [ { "field": "registrationNumber", "matched_tokens": ["5565199493"], "snippet": "5565199493" } ], "text_match": 578730123365711993, "text_match_info": { "best_field_score": "1108091339008", "best_field_weight": 15, "fields_matched": 1, "num_tokens_dropped": 0, "score": "578730123365711993", "tokens_matched": 1, "typo_prefix_score": 0 } } ], "out_of": 1840750, "page": 1, "request_params": { "collection_name": "companies_se_20241215202246", "first_q": "5565199493", "per_page": 10, "q": "5565199493" }, "search_cutoff": false, "search_time_ms": 2 } ] } ``` # AI Annual Report Intelligence Source: https://docs.tic.io/technology/ai-annual-report-intelligence How TIC detects discrepancies, anomalies, and potential financial-statement fraud in Swedish annual reports using AI. Credit reference agencies gives lenders and others a range of information about the potential borrower, customer or vendor. A significant part of this information is based on annual reports and other financial statements belonging to the business. The same set of financial data is also exposed in business information services provided by a large number of actors in the market. In countries such as Sweden the statutory audit requirements for companies was abolished in 2010 which since then allows businesses under certain size to reduce administrative burden by not having an auditor. This has created new challenges which has remained unsolved by our competitors. Companies can submit financial statements and annual reports that contains forged financial data and authorities have very little to no possibility to detect these. The Swedish National Audit Office, NAO, wrote in the [report 12 december 2017 - Abolition of audit obligation for small limited companies](https://www.riksrevisionen.se/download/18.26c2548c1616574394b157/1518435480894/RiR_2017_35_REVISIONSPLIKT_SUMMARY.PDF): *One consequence is that the registered annual reports risk containing incorrect totals, which contravenes the requirement that annual reports must give a true and fair view of the companies’ finances. The deficient annual reports are passed on unchanged to various stakeholders, such as other authorities in criminal investigations and credit rating companies, which risk making assessments on incorrect grounds. For example, a company can record incorrect financial information in the balance or income statement to present the company's finances as better or worse.* ## Solution Together with AI intelligent document processing (IDP), we detect a large number of discrepancies in annual reports such as these examples: * Similarities in annual reports based on historic annual reports for all businesses, e.g has the annual report been copied from another business or part of the data been modified * Summary errors * Unrestricted equity doesn't balance between the years * The annual report doesn't adhere to requirement per local regulations for example in Sweden Annual Accounts Act according to K2 (BFNAR 2016:10) / K3 (BFNAR 2012:1) * Visually aligning with known accounting systems that typically produce annual reports These discrepancies are registered on each document with links to which similarities exists with other documents. The discrepancies are summed up and expressed in words what is wrong with a score discrepancy ranking between 0-255 where 0 means just a note while 255 means something very a significant discrepancy. You will find examples in our API when we return for example: ```json Search response for companies theme={null} { "intelligence": [ { "companyIntelligenceType": "annualReportDiscrepancies", "notes": "The annual report for 2021-01-01 to 2021-12-31 is similar to one or many more annual reports that has been submitted for other companies", "score": 255, "firstSeenAt": 1711843200 } ] } ``` ## Example A business with an auditor submits an annual report for the year ending 2020-12-31. The following year another business without an auditor submits a copy of the same annual report but the multi-year overview is wrong and one of the digits in the organizational number has been removed. Visually comparing the result sheet for both businesses you can notice that the rows and amounts are the same with the difference for the year. resultsheet Visually comparing the balance sheet for both businesses you can notice that the rows and amounts are the same with the difference for the year. balancesheet The business that made a copy of the annual report report has also copied the overview with the other business change of equity. The following image shows that the outgoing balance should be 372,707 SEK in unrestricted equity. change of equity The following year the summary with change of equity doesn't match with the prior year. For the year ending 2022-12-31 the business reports that the ingoing unrestricted equity balance is 1,245,154 SEK while the prior year had an outgoing balance of 372,707 SEK. There are no remarks regarding the changes of the unrestricted equity. change of equity following year In the balance sheet of the business it's reporting a change in credit facility debt of 1,467,157 SEK. ## How common are financial statement frauds We have learned by looking at discrepancies for the last ten years that financial statement frauds are more common in businesses that has no auditor but they do exist in both. It's easy to create a new business, submit a fradulent financial report with good looking numbers and get a descent credit score ranking by existing credit reference agencies. The companies may then be used to receive contributions and borrow money and then eventually they go bankrupt. Often we see networks of companies using the same set of financial records but with no links between the company representatives. They exist in various industries and cities. This anonymized example shows a small portion of a network of such companies where eight businesses uses two set of different financial reports but there are no links between the yellow company representatives. These companies could ultimatley be controlled by other individuals. example network financial statement fraud # AI Anomaly Detection Source: https://docs.tic.io/technology/ai-anomaly-detection How TIC uses artificial intelligence and machine learning to detect hidden patterns and anomalies across company, financial, and behavioural data. Credit reference agencies typically uses fixed credit scoring models that are applied based on a set on instructions. Companies that files their annual report seven months after the year ended would typically take up to ten months before credit assessment is carried out by these agencies. We, The Intelligence Company AB (publ), are changing the industry by providing an anomaly detection engine that looks at continous flow of data relating to a business or individual. Similar to network traffic in cybersecurity, changes surrounding a business triggers an anomaly detection to determine the impact of the change. ## Abnormal or suspicious behaviors Events that falls outside the normal range called deviations are collected and stored as intelligence metrics. ## Early warning A sudden change in data from previous behavior could signal increased risks. With us you receive early and accurate data. ## Financial statement frauds By combining AI intelligent document processing (IDP) and anomaly detection we process financial statements and annual reports for businesses to identity risks and thereby offering credit scoring models that efficiently targets any discrepancies. In [our solution we describe](/technology/ai-annual-report-intelligence) we describe how the techniques are used to identity and score discrepancies. # Domain & social-media monitoring Source: https://docs.tic.io/technology/domain-and-social-media-monitoring How TIC uses domain and social-media signals to enrich company intelligence - verifying activity, surfacing reputation data, and spotting dormant shell entities. As a credit reference agency we believe rich trusted data is important to make the right decisions and can also be used to detect anomalies and increase sales by delivering better prospecting tools. We continuously monitor domains belonging to a business, their subdomains, issued certificates, DNS records and actual content on the pages including usage of payment methods and other services. ## Domains We have a distributed large network of crawlers that monitors both zone files for selected domains and [certificate transparency](https://en.wikipedia.org/wiki/Certificate_Transparency) entries. Certificate transparency logs contains issued certificates and allows us to detect some of the used subdomains and other important metrics. ## Certificate Logs Certificate transparency logs contains the entries for issued certificate which reveals information about subdomains. It can also reveal which companies are using services which can be used for anomaly analysis and prospecting. ```json Example Certificate Log Entries theme={null} [ { "issuer_ca_id": 183267, "issuer_name": "C=US, O=Let's Encrypt, CN=R3", "common_name": "aimn.eng.kb.kundo.se", "name_value": "aimn.eng.kb.kundo.se", "id": 4621048740, "entry_timestamp": "2021-05-31T09:49:11.019", "not_before": "2021-05-31T08:49:10", "not_after": "2021-08-29T08:49:10", "serial_number": "03960b69bbef9f16051fc886795165302746", "result_count": 1 }, { "issuer_ca_id": 183267, "issuer_name": "C=US, O=Let's Encrypt, CN=R3", "common_name": "k2a.kb.kundo.se", "name_value": "k2a.kb.kundo.se", "id": 4616950227, "entry_timestamp": "2021-05-30T16:12:00.294", "not_before": "2021-05-30T15:12:00", "not_after": "2021-08-28T15:12:00", "serial_number": "04fe8b238d0ab13e6f63e67e40949ca528af", "result_count": 2 } ] ``` ## DNS records We monitor DNS records and their changes daily and make it simple to consume anomalies in modifications such as try to hide the destination IP-address by proxying calls. ## HTML content In comparison to traditional web crawling technology that visits web pages periodically and crawls content and links we use a distributed network of headless browsers to simulate real users and allows crawling HTML generated by front-end frameworks such as React, Vue, Svelte, Angular and many more. We also automatically detect front-end APIs and tech stack. Last we also detect usage of Stripe tokens and other payment gateways. It's similar to [Wayback Machine](https://en.wikipedia.org/wiki/Wayback_Machine) which is an archive of homepages found on the internet but our method is tailored for anomaly analysis. ## Social media We continuously search for social media accounts and pages linked to companies such as Facebook, LinkedIn, X, Instagram and many more. We look for example at number of posts, last date of post, reviews which is bundled into anomaly metrics for businesses. ## Payment gateways HTML pages leaves tracks of usage of payment gateways which is used to determine how they are used across multiple pages. # Graph Intelligence Solutions Source: https://docs.tic.io/technology/graph-visualization TIC's graph intelligence - traverse ownership, representation, and relationship networks to combat financial crime with intuitive graph visualization. Use our lightning fast graph API to create stunning user-friendly and intuitive graph visualization for complex relationships in high-velocity environments. Tailored made for fraud and network risk detection. Based on C++ graph databases we offer an API that runs an in-memory graph with low latency query times and employs graph algorithms to make sense of our rich datasets, find critical nodes and detect anomalies. Compatible with the query language [openCypher](https://opencypher.org/), the open source specification of query language Cypher® originally developed by Neo4j, and Bolt protocol. ## Fraud risk detection Use our graph analytics to enhance fraud detection and analyze complex relations. Use ready to use REST endpoints or access our graph API by using Cypher queries. With Cyper you are able to quickly find and visualize over 100 million nodes and over 50 million edges representing our large ecosystem of sources. ```Cypher query example theme={null} MATCH (c:Company) WHERE c.id = 3503318 OPTIONAL MATCH path1=(c)-[r1:REPRESENTATIVE_OF]-(:Person)-[r2:REPRESENTATIVE_OF]-(:Company)-[r3:REPRESENTATIVE_OF]-(:Person)-[r4:REPRESENTATIVE_OF]-(:Company) RETURN c,path1; ``` Example of company and persons and their relationships as both board members and beneficial owners. Graph example ## Visualizations in the browser Our API is compatible with all major visualization software such as: * [Linkurious Ogma](https://resources.linkurious.com/ogma-overview) * [Cambridge Intelligence Keylines](https://cambridge-intelligence.com/keylines-javascript-graph-visualization/) * [Sigma.js](https://www.sigmajs.org/) * [Memgraph Orb](https://github.com/memgraph/orb) ## How to get started We have made a few simple steps showing how to integrate with our API and the visualization software [Orb](https://github.com/memgraph/orb). ### Create an html page This short example is everything you need, just replace the your\_api\_key with your key and pick the company you want to analyze (the company id). If you wish to use npm just install the Orb library by: ```shell theme={null} npm install @memgraph/orb ``` ```html theme={null} Orb | Simple graph
``` ### Apply styling You can apply styling based on various nodes and edge properties. This example just illustrates how simple it is to set size, color and title of the nodes. ```html theme={null} Orb | Simple graph
``` # Introduction Source: https://docs.tic.io/technology/introduction Intelligence at the Speed of Business. LENS - TIC's AI-powered platform for real-time credit, compliance, and risk decisions. **Intelligence at the Speed of Business.** TIC's **LENS** platform delivers real-time intelligence across credit, compliance, and risk - so your teams can make smarter, faster decisions without waiting for stale reports. **LENS** is the TIC intelligence platform. The **LENS API** (v2) gives you programmatic access. A **v1 API** remains available for existing integrations. TIC is a **licensed credit reference agency** - we go beyond the traditional credit bureau model by combining authoritative public-source data, AI anomaly detection, and intelligent document processing into a single live platform. ## What you can do with LENS Traverse ownership, representation, and relationship networks across companies, persons, properties, and vehicles. Track entities you care about and receive webhooks, emails, or SMS the moment something changes. Detect document and image fraud with AI-driven forensic analysis - upload a file, get a full report. Resolve UBOs, verify KYC chains, and spot hidden control structures across jurisdictions. Surface unusual patterns in financials, filings, and activity before they become incidents. ## Built for ## Choose your API **The new standard.** Modern, fully-annotated endpoints with typed schemas, watchlists, Sentinel forensics, and unified search. OpenAPI 3.1. Start here for new integrations. **Stable and supported.** The original TIC API - still fully supported for existing integrations. Broad dataset coverage across companies, persons, properties, and vehicles. ## Get started API-key and JWT flows. Works for both APIs. Lightning-fast Typesense-backed search across companies, persons, properties, vehicles. Generate typed SDKs for 60+ languages from our OpenAPI specs. ## Datasets Companies, persons, addresses, properties, and vehicles - the foundation of the platform. European Commission, Finansinspektionen, ICA, and other industry-specific sources. ## About TIC The Intelligence Company AB (publ) is a licensed credit reference agency. We aggregate authoritative public and commercial data, apply credit scoring and continuous credit assessment, and turn it into actionable intelligence - powered by AI anomaly detection and our IDP engine. # Rate limits & throttling Source: https://docs.tic.io/throttling How TIC protects the API from abuse. Both LENS (v2) and the legacy v1 API use per-IP and per-API-key sliding-window rate limits, with 429 responses when exceeded. This page is the shared overview for both APIs. For **LENS (v2)** specifics - exact windows, every response header, and the full error reference - see [Rate limits in the v2 API](/api-lens/rate-limits). TIC rate-limits every request to protect the service from abuse and keep response times fast for everyone. When you hit a limit, the API responds with **HTTP 429** and tells you exactly when you can retry via the `Retry-After` header. ## How limits are enforced Both APIs enforce rate limits at two levels, using sliding windows: | Level | Purpose | | ------------------ | ----------------------------------------------------------------------------------------------------- | | **Per IP address** | Applied to every request regardless of authentication. Protects the platform from anonymous flooding. | | **Per API key** | Applied on top of IP limits for authenticated requests. Your plan determines the quotas. | Defaults are below. Actual quotas depend on your plan. | Level | Per minute | Per day | Per month | Unique IPs (per key) | | --------------------------- | ---------- | ------- | --------- | -------------------- | | **Per IP** (both APIs) | 600 | 15,000 | - | - | | **Per API key** (both APIs) | 60 | - | 3,000 | 20 | For LENS (v2) specifics including all response headers and error messages, see **[Rate limits in the v2 API Reference](/api-lens/rate-limits)**. ## Response headers Every response includes rate-limit headers so you can track your usage and throttle proactively. | Header | Meaning | | ------------------------------ | ---------------------------------------------- | | `X-RateLimit-Limit` | Quota for the current period | | `X-RateLimit-Remaining` | Requests remaining in the period | | `X-RateLimit-Reset` | Seconds until the period resets | | `X-RateLimit-Limit-Minute` | Per-minute quota | | `X-RateLimit-Remaining-Minute` | Requests remaining in the current minute | | `X-RateLimit-Limit-IP` | Maximum unique source IPs allowed for the key | | `X-RateLimit-Remaining-IP` | Unique IPs remaining | | `Retry-After` | Seconds to wait before retrying (set when 429) | ## 429 response body When you're throttled, you receive an HTTP 429 with a JSON body describing which window tripped and when it resets. ```json theme={null} { "status": 429, "detail": "Too many requests, buy more or upgrade your subscription, check header X-RateLimit-Reset. Will reset at 2024-11-17 07:10:53.", "urlForDocumentation": "https://docs.tic.io/throttling" } ``` **Always read `Retry-After` (or `X-RateLimit-Reset`) and back off.** Do not retry in a tight loop. A well-behaved client reads these headers on every response and adapts pre-emptively. ## IP-based limits Each API key is capped at a number of unique source IPs per month (default: **20**). This protects you if a key is leaked - an attacker's IP would count against the limit. The downstream IP is read from `X-Real-IP` or `X-Forwarded-For`. If you run behind a load balancer or a pool of NAT'd outbound IPs, size your quota accordingly. ## Best practices * **Use exponential backoff** when you get a `429`. * **Monitor `X-RateLimit-Remaining-Minute`** to throttle proactively rather than reactively. * **Consolidate traffic through few IPs** to stay under the unique-IP cap. * **Prefer POST multi-search** where available to combine queries into fewer requests. # Webhooks & notifications Source: https://docs.tic.io/webhooks Receive real-time notifications when monitored entities change. TIC supports webhook, email, and SMS delivery. This page explains the shared notification model and the **v1 API** URL examples. For the full **LENS (v2)** watchlist surface - CRUD, members, subscriptions, event types, dashboard, and bulk acknowledge - see [Watchlists in the v2 API](/api-lens/watchlists). ## Concepts TIC uses three concepts for change notifications. Keeping them straight makes the rest of this page easier to follow. | Term | Meaning | | ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Watchlist** | A list of entities you want to monitor (companies, persons, addresses, properties, vehicles). | | **Notification trigger** | A destination attached to a watchlist that receives notifications. A trigger has a **type** (`webhook`, `email`, or `sms`) and a **destination** (URL, email address, or mobile phone number). | | **Event** | A detected change to a watchlist member (e.g. new address, new beneficial owner). Events are delivered to every enabled trigger on the watchlist. | A webhook is one *type* of notification trigger - specifically, one whose destination is an HTTPS URL. Email and SMS triggers carry a narrower summary; **only webhook triggers receive the full event payload**. Use webhook triggers when you need the full event data. Use email/SMS when a human just needs to be alerted that *something* changed. ## Creating a notification trigger Before a trigger becomes active it must be **confirmed**. Confirmation behavior depends on the trigger type: ### Webhook trigger (URL) Auto-confirms when the destination URL responds with a successful HTTP status code to the initial confirmation request. Retries up to three times. ### Email trigger An email is sent to the destination address with a confirmation link. The trigger activates once the recipient clicks it. ### SMS trigger A text message is sent to the destination mobile number with a confirmation link. The trigger activates once the recipient clicks it. ## Example - creating a webhook trigger The example below adds a webhook trigger to watchlist `6` that reacts to changes in address, annual reports, intelligence, representatives, and status. ```bash cURL theme={null} curl \ --request POST \ --header "Content-Type: application/json" \ --header "x-api-key: your_api_key" \ --data ' { "Destination": "https://webhook.site/cf728358-1738-4ffe-be04-f14a9d28a4de", "DestinationType": "webhook", "Address": true, "AnnualReport": true, "Intelligence": true, "Representatives": true, "Status": true } ' \ https://api.tic.io/watchlists/6/triggers ``` ```json Response theme={null} { "teamWatchListTriggerId": 2, "destination": "https://webhook.site/cf728358-1738-4ffe-be04-f14a9d28a4de", "destinationType": "webhook", "address": true, "annualReport": true, "intelligence": true, "representatives": true, "status": true, "hasBeenValidated": false, "lastMessageSentAtUtc": null, "lastUpdatedAtUtc": "2024-12-22T10:29:39.1746639Z" } ``` A confirmation notification is then POSTed to the destination URL using the same payload format shown below. ```json Webhook payload theme={null} [ { "teamWatchListMemberEventId": 1, "teamWatchListMemberId": 1, "teamWatchListId": 1, "externalId": "EXTERNAL ID 1", "companyId": 3503318, "watchListMemberEventType": "companyAddress", "eventDate": "2024-02-02T10:49:24", "lastUpdatedAtUtc": "2025-05-02T11:30:09" } ] ``` ## Testing a webhook trigger You can test webhook triggers to verify your endpoint handles the payload correctly. ```bash cURL theme={null} curl \ --request POST \ --header "Content-Type: application/json" \ --header "x-api-key: your_api_key" \ https://api.tic.io/watchlists/6/triggers/test ``` The test POST carries an array of sample events. Since **2025-05-02**, every event in the array includes the source of the change. ```json Test payload theme={null} [ { "teamWatchListMemberEventId": 1, "teamWatchListMemberId": 9029, "teamWatchListId": 18, "externalId": "MY_NUMBER_1", "companyId": 12345678, "watchListMemberEventType": "companyAddress", "eventDate": "2024-02-02T10:49:24", "lastUpdatedAtUtc": "2025-05-02T11:30:09" }, { "teamWatchListMemberEventId": 2, "teamWatchListMemberId": 9029, "teamWatchListId": 18, "externalId": "MY_NUMBER_2", "companyId": 12345678, "watchListMemberEventType": "companyRegistration", "eventDate": "2025-04-09T15:21:04", "lastUpdatedAtUtc": "2025-05-02T11:30:09" }, { "teamWatchListMemberEventId": 3, "teamWatchListMemberId": 9029, "teamWatchListId": 18, "externalId": "MY_NUMBER_3", "companyId": 12345678, "watchListMemberEventType": "companyIntelligence", "eventDate": "2025-04-13T15:47:27", "lastUpdatedAtUtc": "2025-05-02T11:30:09" }, { "teamWatchListMemberEventId": 4, "teamWatchListMemberId": 9029, "teamWatchListId": 18, "externalId": "MY_NUMBER_4", "companyId": 12345678, "watchListMemberEventType": "companyFinancialDocument", "eventDate": "2025-02-25T08:51:23", "lastUpdatedAtUtc": "2025-05-02T11:30:09" } ] ``` ## Event types The `watchListMemberEventType` field identifies what changed. Valid values: | Type | Description | | ------------------------ | ------------------------------------------------------------------- | | companyAddress | New information about one or more company addresses | | companyName | New information about the company's legal or trade names | | companyStatus | New information about company status | | companyRegistration | New information about registration (VAT, payroll, tax, etc.) | | companyIntelligence | New intelligence flags or signals | | companyBeneficialOwner | New information about beneficial owners | | companyWorkplace | New information about one or more workplaces owned by the company | | companyPerson | New information about company representatives | | companyRegisteredOffice | New information about the registered office | | companyShareCapital | New information about share capital | | companyPurpose | New information about the company's registered purpose | | companyDebtBalance | Changes to the debt balance | | companyOrderToPayCase | New information about one or more order-to-pay cases | | companyFinancialDocument | New financial documents such as annual reports | | companyCase | New information about cases (*inneliggande ärenden*) | | personAddress | New information about person addresses | | personName | New information about person names | | personStatus | New information about person status | | personCompany | New information about the person's role as a company representative |