Company Engagements
Displays all companies a person has board assignments in.
Company Engagements
[se]Documentation
The Company Engagements API provides detailed insights into an individual’s involvement across different companies. It identifies their roles, such as CEO, board member, auditor, or external signatory, and displays a complete list of the companies they are engaged with. This data is valuable for understanding an individual’s professional reach, governance roles, and potential conflicts of interest. It supports organizations in assessing risks, ensuring compliance with regulations, and mitigating reputational harm.
Key Features:
- Access a list of companies associated with an individual.
- Identify the roles an individual holds, including board member, CEO, or auditor.
- Streamline customer onboarding and enhance the quality of customer data.
- Ensure compliance by verifying roles for AML/KYC checks.
Use case:
-
A bank is onboarding a new B2B client. To ensure the individual representing the company is not involved with any high-risk entities, the bank uses the Company Engagements API to check the individual's directorships and board positions across other companies.
-
A municipality uses the company engagement API to track all board or executive roles of individuals affiliated with potential vendors. This helps uncover cross-company ties that could signal conflicts of interest in the procurement process.
Role Codes
Below is a list of available Role codes for roles that persons can have in a company. The information is displayed as a code with a descriptive text.
Code | Role (Sv) | Role |
|---|---|---|
| 0 | Innehavare | Holder |
| 1 | Arbetstagarrepresentant | Employee representatives |
| 2 | Extern firmatecknare | External signatory |
| 3 | Extern verkställande direktör | External CEO |
| 4 | Extern vice verkställande direktör | External Deputy CEO |
| 5 | Ledamot | Commissioner |
| 6 | Likvidator | Receiver in liquidation liquidator |
| 7 | Likvidatorssuppleant | Deputy Liquidator |
| 8 | Revisor | Auditor |
| 9 | Revisorssuppleant | Deputy Auditor |
Rows per page
History Endpoint — Pagination
The history endpoint now supports optional pagination. This solves timeouts and errors when fetching large histories (e.g., accountants with hundreds of engagement changes).
How to use it
Add page to your request to enable pagination:
GET /se/company/engagement/3.0/history/{personalNumber}?page=1&pageSize=10
The response includes a pagination object:
{
"records": [...],
"pagination": {
"page": 1,
"pageSize": 10,
"totalPages": 17,
"totalRecords": 167,
"maxPageSize": 30,
"paginationToken": "eyJpZCI6..."
},
"status": { "code": 0, "text": "records found" }
}
To get the next page for free (no additional billing), pass the paginationToken from the response:
GET /history/{personalNumber}?page=2&pageSize=10&paginationToken={token}
Parameters
Parameter | Type | Default | Description |
|---|---|---|---|
page | integer | - | Page number (starting at 1). Activates pagination. |
pageSize | integer | 20 | Records per page (min 1, max 500). See "Page Size" below. |
paginationToken | string | - | Token from a previous response. Makes the request free. |
fromDate | string | - | Start of date range (inclusive), ISO 8601. |
toDate | string | - | End of date range (exclusive), ISO 8601. |
Key points
- Only the first page is billed. All follow-up pages with a valid token are free (0 credits).
- The token works for any page — you can go forward, backward, or jump to any page number.
- Without
page, nothing changes — existing integrations are unaffected. - The token expires after 1 hour. Request a new first page to get a fresh token.
- Records are sorted newest first (most recent changes on page 1).
Page Size
You may specify pageSize (default: 20, max: 500). For most entities, your requested size is respected exactly. For entities with very large records (e.g., accountants with hundreds of company engagements per version), the server may reduce the effective pageSize to ensure response stability.
Guarantees:
pagination.pageSizealways shows the actual page size usedpagination.maxPageSizeshows the maximum the server will accept for this entitypagination.totalPagesis calculated from the effective page size — use it for loop termination- The effective pageSize is consistent for the entire session
Recommendation: Omit pageSize to use the safe default (20). If you need more records per round-trip, you may request up to maxPageSize. Always use pagination.totalPages to determine how many pages to iterate — do not use records.length < pageSize as a "last page" indicator.
When does the server reduce pageSize?
Rarely. Only entities with very high engagement counts per version (< 0.1% of persons) experience reduction when using the default pageSize. If you explicitly request a large pageSize, the table below shows when reduction occurs:
Entity type | Default (20) reduced? | pageSize=50 reduced? |
|---|---|---|
| Typical person (< 200 eng) | No | No |
| Moderate (200-400 eng) | No | Yes (→ ~10-20) |
| Heavy accountants (700+ eng) | No | Yes (→ ~5) |
| Very heavy (2400+ eng) | Yes (→ ~5) | Yes (→ ~1) |
Iterating all pages (integration example)
page = 1
token = None
all_records = []
while True:
params = {"page": page, "pageSize": 20}
if token:
params["paginationToken"] = token
response = api.get(f"/history/{pnr}", params=params)
data = response.json()
all_records.extend(data["records"])
token = data["pagination"]["paginationToken"]
if page >= data["pagination"]["totalPages"]:
break
page += 1
Errors
Condition | Status | Message |
|---|---|---|
page < 1 | 400 | "Page must be >= 1" |
pageSize < 1 | 400 | "pageSize must be >= 1" |
| Too large without pagination | 400 | "History contains N versions... Use pagination" |
| Invalid/expired token | 400 | Specific reason (expired, mismatch, etc.) |
| Token used with wrong entity/dates | 400 | "Entity ID mismatch" / "fromDate mismatch" |
Without pagination (existing behavior)
If you don't provide the page parameter, the endpoint behaves exactly as before — returning the full result set in a single response. For entities with large histories (e.g., accountants or board members with many company engagements), the server returns a 400 error recommending you use pagination instead.
Specifically, a 400 is returned when:
- The person has more than 500 history versions (always requires pagination), or
- The person has more than 100 versions with a combined payload exceeding the size limit
For these persons, simply add ?page=1 to your request to switch to paginated mode.
Endpoints
Fetch engagements for person
https://api.roaring.io/se/company/engagement/3.0/{personalNumber}Parameters path
personalNumberrequired | stringPerson identification |
Parameters query
asOfDate | stringDate on format yyyy-mm-dd |
includeWithRoleCode | arrayInclude engagements with roleCodes |
excludeWithRoleCode | arrayExclude engagements with roleCodes |
includeRoleCode | arrayInclude roles with roleCodes |
excludeRoleCode | arrayExclude roles with roleCodes |
Response schema: application/json
changeDatestring
No description provided.
engagementsarray of objects (Engagement)
No description provided.
firstNamestring
No description provided.
fullNamestring
No description provided.
hitCountinteger <int32>
No description provided.
paginationobject (PaginationInfo)
Pagination metadata for paginated history responses
personalNumberstring
No description provided.
statusobject (SearchResultStatus)
Description of search result
surNamestring
No description provided.
Find history engagements by personal number
https://api.roaring.io/se/company/engagement/3.0/history/{personalNumber}Parameters path
personalNumberrequired | stringNumber of person |
Parameters query
fromDate | stringbeginning of the date range (including), iso 8601 format |
toDate | stringending of the date range (excluding), iso 8601 format |
page | integerPage number (1-indexed). Enables paginated mode. |
pageSize | integerRecords per page (default 20, max 500). Server may reduce for entities with large records. |
paginationToken | stringToken from a previous paginated response. Pagination follow-ups are not billed. |