Get an AI analysis of a company's signatory rules
curl --request GET \
--url https://lens-api.tic.io/companies/{id}/signatory/analysis \
--header 'x-api-key: <api-key>'import requests
url = "https://lens-api.tic.io/companies/{id}/signatory/analysis"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://lens-api.tic.io/companies/{id}/signatory/analysis', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://lens-api.tic.io/companies/{id}/signatory/analysis",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://lens-api.tic.io/companies/{id}/signatory/analysis"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://lens-api.tic.io/companies/{id}/signatory/analysis")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://lens-api.tic.io/companies/{id}/signatory/analysis")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"companyId": 123,
"companySignatoryId": 123,
"signatureDescription": "<string>",
"analysis": {
"summary": "<string>",
"rules": [
{
"description": "<string>",
"type": "<string>",
"requiredSignatories": 123,
"requiredRoles": [
"<string>"
]
}
],
"eligiblePersons": [
{
"personId": 123,
"personalIdentityNumber": "<string>",
"identityNumberType": "none",
"name": "<string>",
"nameInSignatoryText": "<string>",
"matchType": "unmatched",
"roles": [
"<string>"
],
"canSignAlone": true,
"applicableRules": [
"<string>"
]
}
]
}
}Companies
Get an AI analysis of a company's signatory rules
Reads the company’s current signatory rule (firmateckning) from Bolagsverket, interprets it, and matches it against the company’s active board members and officers. Returns a plain-language summary, the individual signing rules, and the persons eligible to sign. The result is cached per signatory record: if an analysis already exists for the current signatory text it is returned immediately, otherwise a new one is generated.
GET
/
companies
/
{id}
/
signatory
/
analysis
Get an AI analysis of a company's signatory rules
curl --request GET \
--url https://lens-api.tic.io/companies/{id}/signatory/analysis \
--header 'x-api-key: <api-key>'import requests
url = "https://lens-api.tic.io/companies/{id}/signatory/analysis"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://lens-api.tic.io/companies/{id}/signatory/analysis', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://lens-api.tic.io/companies/{id}/signatory/analysis",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://lens-api.tic.io/companies/{id}/signatory/analysis"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://lens-api.tic.io/companies/{id}/signatory/analysis")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://lens-api.tic.io/companies/{id}/signatory/analysis")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"companyId": 123,
"companySignatoryId": 123,
"signatureDescription": "<string>",
"analysis": {
"summary": "<string>",
"rules": [
{
"description": "<string>",
"type": "<string>",
"requiredSignatories": 123,
"requiredRoles": [
"<string>"
]
}
],
"eligiblePersons": [
{
"personId": 123,
"personalIdentityNumber": "<string>",
"identityNumberType": "none",
"name": "<string>",
"nameInSignatoryText": "<string>",
"matchType": "unmatched",
"roles": [
"<string>"
],
"canSignAlone": true,
"applicableRules": [
"<string>"
]
}
]
}
}Enterprise+ tier
The analysis interprets the company’s signatory rule (firmateckning) and lists the persons who can sign. The model reads the rule; whether an eligible person really is a current board member is decided by us afterwards, from the registered board, and returned in
matchType.
Matching eligible persons to the board
matchType | Meaning | How to use it |
|---|---|---|
exact | Tied to a current board member by identity number, and either eligible through their role (e.g. “styrelsen”, “verkställande direktören”) or named in the rule with a name that fits only that member. | Safe to treat as that board member. |
fuzzyName | Tied to a current board member by identity number, but the name in the rule does not fit the member’s registered names (name change, spelling, middle names) or fits more than one member. The link is the model’s inference. | Show it, but let a person confirm it. |
unmatched | Not tied to any current board member: no identity number, one that is not on the current board, or a birth date shared by several board members. | Do not treat as a board member. |
nameInSignatoryText is the name exactly as written in the rule, or null when the person is eligible through their role only.
Identity numbers
identityNumberType says what personalIdentityNumber holds:
identityNumberType | Meaning |
|---|---|
personalIdentityNumber | Swedish personnummer or samordningsnummer. |
birthDate | Only a birth date (YYYYMM, YYYYMMDD or YYYYMMDD0000), which is what Bolagsverket registers for a person without a Swedish number, for example a Norwegian board member. Not unique - never use it alone as an identity. |
unknown | Some other format. |
none | No identity number. |
personId is set only when the person is tied to a current board member.