Shareholder Register Report

The Shareholder Register Report API allows you to preview, review, and submit shareholder register reports (aksjonaerregisteroppgaven / RF-1086) to the Norwegian tax authorities (Skatteetaten). The submission process uses Maskinporten authentication and submits both the main form (1086H) and individual shareholder sub-forms (1086U).

Endpoints

Preview Report

GET /api/v2/shareholder-register-report/preview

Generates a preview of the shareholder register report with auto-populated data from the company’s equity transactions. Use this to review data and identify validation issues before submission.

Query Parameters

Parameter Type Required Description
client_account_id integer Yes ID of the client account
reporting_year integer Yes The fiscal year to report for

Response

Returns a plain JSON object (not wrapped in data/meta). Share counts come from the equity transactions positions at the end of the previous and the reporting year; share capital and share premium come from the balances on accounts 2000 (Aksjekapital) and 2020 (Overkurs). Dividends are the year’s debits to accounts 8920 (Avsatt utbytte) and 8921 (Tilleggsutbytte), the declaration side of the resultatdisponering; credits to 2800 alone are not picked up. Every journal entry that is not cancelled counts, drafts included. The total is split by shares held at year end, with withholding tax worked out for foreign shareholders. is_foreign, shareholder_country, withholding_tax_rate and withholding_tax_amount are only filled in when the year has a dividend; otherwise they are false, null, 0 and 0. Amounts are in the client account’s accounting currency and truncated to whole units, so the per-shareholder dividend_amount values can add up to slightly less than total_dividend.

{
  "company": {
    "organization_number": "123456789",
    "name": "Eksempel AS",
    "address": "Storgata 1",
    "postal_code": "0155",
    "city": "Oslo"
  },
  "share_capital": {
    "share_type": "01",
    "previous_share_capital": 30000,
    "current_share_capital": 30000,
    "previous_class_capital": 30000,
    "current_class_capital": 30000,
    "previous_par_value": 30.0,
    "current_par_value": 30.0,
    "previous_num_shares": 1000,
    "current_num_shares": 1000,
    "previous_paid_capital": 30000,
    "current_paid_capital": 30000,
    "previous_premium": 0,
    "current_premium": 0,
    "total_dividend": 10000,
    "validation_issues": []
  },
  "shareholders": [
    {
      "business_partner_id": 56,
      "name": "Ola Nordmann",
      "is_person": true,
      "id_number": "01019012345",
      "id_number_valid": true,
      "previous_shares": 1000,
      "current_shares": 1000,
      "transactions": [],
      "dividend_amount": 10000,
      "is_foreign": false,
      "shareholder_country": "NO",
      "withholding_tax_rate": 0.0,
      "withholding_tax_amount": 0,
      "validation_issues": []
    }
  ],
  "summary": {
    "total_shareholders": 1,
    "shareholders_with_issues": 0,
    "can_submit": true,
    "validation_issues": []
  }
}

id_number is the national identity number for a person and the organization number for a company. Each shareholder’s transactions lists the acquisitions and sales in the reporting year:

Field Type Description
type string acquisition or sale
quantity integer Number of shares
acquisition_type string Acquisitions only: S (founding) or K (purchase)
sale_type string Sales only: S (sale)
date date Transaction date
cost integer Acquisitions only: quantity × price per share
value integer Sales only: quantity × price per share

A validation issue has field, code and message; in summary.validation_issues shareholder issues also carry shareholder_id. can_submit is true only when there are no issues.

Code Description
MISSING_ID_NUMBER The shareholder has no identity or organization number
INVALID_ID_NUMBER The identity or organization number fails validation
NEGATIVE_SHARES The shareholder’s share count at year end is negative
SHARE_MISMATCH The shareholders’ shares don’t add up to the total number of shares (reported under share_capital)

List Submissions

GET /api/v2/shareholder-register-report/submissions

Retrieves a paginated list of shareholder register report submissions, newest first.

Query Parameters

Parameter Type Required Description
client_account_id integer or comma-separated list No Client account(s) to list. Defaults to every client account the user can access
reporting_year integer No Filter by reporting year
order_by string No Sort as field:direction, e.g. reporting_year:desc. Default created_at:desc
page integer No Page number (default: 1)
page_size integer No Items per page (default: 100)

Response

{
  "data": [
    {
      "id": 1,
      "created_at": "2024-03-15T10:00:00Z",
      "updated_at": "2024-03-15T10:05:00Z",
      "created_by_id": 7,
      "client_account_id": 7,
      "reporting_year": 2023,
      "main_form_reference": "RF-1086H-2023-001",
      "main_form_submitted_at": "2024-03-15T10:01:00Z",
      "sub_forms_count": 3,
      "sub_forms_submitted_at": "2024-03-15T10:03:00Z",
      "confirmation_dialog_id": "dialog-123",
      "confirmation_shipment_id": "shipment-456",
      "confirmed_at": "2024-03-15T10:05:00Z",
      "status": "CONFIRMED",
      "error_message": null
    }
  ],
  "meta": {
    "page": 1,
    "pages": 1,
    "per_page": 100,
    "records": 1
  }
}

Submit Report

POST /api/v2/shareholder-register-report/submissions

Submits a complete shareholder register report to Skatteetaten in one call:

  1. Creates a draft report
  2. Submits the main form (RF-1086H) with the share capital
  3. Submits a sub-form (RF-1086U) for each shareholder
  4. Confirms the submission

The share_capital object and the shareholders array take the shape returned by Preview Report: fetch the preview, fix any validation issues, and send its share_capital and shareholders back. Dividends are not read from the request; they are recalculated from the year’s debits to accounts 8920 (Avsatt utbytte) and 8921 (Tilleggsutbytte), split between shareholders by their shares at year end.

Request Body

Field Type Required Description
client_account_id integer Yes The client account ID
reporting_year integer Yes The fiscal year to report for
contact_business_partner_id integer Yes Business partner in the same client account whose email is used as the contact for the submission. It must have an email address
share_capital object Yes Share capital, as in the preview’s share_capital
shareholders array Yes At least one shareholder, as in the preview’s shareholders

The fields read from share_capital are share_type (default 01), previous_share_capital, current_share_capital, previous_class_capital, current_class_capital, previous_par_value, current_par_value, previous_num_shares, current_num_shares, previous_paid_capital, current_paid_capital, previous_premium and current_premium. Missing numbers are sent as 0.

The fields read from each shareholder are business_partner_id, is_person (default true), id_number, previous_shares, current_shares and transactions. Every shareholder needs a valid id_number.

Example Request

{
  "client_account_id": 7,
  "reporting_year": 2023,
  "contact_business_partner_id": 56,
  "share_capital": {
    "share_type": "01",
    "previous_share_capital": 30000,
    "current_share_capital": 30000,
    "previous_class_capital": 30000,
    "current_class_capital": 30000,
    "previous_par_value": 30.0,
    "current_par_value": 30.0,
    "previous_num_shares": 1000,
    "current_num_shares": 1000,
    "previous_paid_capital": 30000,
    "current_paid_capital": 30000,
    "previous_premium": 0,
    "current_premium": 0
  },
  "shareholders": [
    {
      "business_partner_id": 56,
      "is_person": true,
      "id_number": "01019012345",
      "previous_shares": 1000,
      "current_shares": 1000,
      "transactions": []
    }
  ]
}

Response

Returns the submission with status 200 OK and status: "CONFIRMED", in the same shape as a list item.

Attributes

Attribute Type Description
id integer Unique identifier (read-only)
created_at datetime Creation timestamp (read-only)
updated_at datetime Last update timestamp (read-only)
created_by_id integer ID of the user who created the submission (read-only)
client_account_id integer ID of the client account
reporting_year integer The fiscal year reported
main_form_reference string Reference number for the main form
main_form_submitted_at datetime When the main form was submitted (read-only)
sub_forms_count integer Number of shareholder sub-forms submitted (read-only)
sub_forms_submitted_at datetime When sub-forms were submitted (read-only)
confirmation_dialog_id string Dialogporten dialog ID for confirmation (read-only)
confirmation_shipment_id string Dialogporten shipment ID for confirmation (read-only)
confirmed_at datetime When the submission was confirmed (read-only)
status string DRAFT, MAIN_FORM_SUBMITTED, SUB_FORMS_SUBMITTED, CONFIRMED or REJECTED (read-only)
error_message string Error details if submission failed (read-only)

Relationships

Relationship Type Description
created_by User The user who created the submission

Authentication Requirements

Submission requires Maskinporten system user authentication. The company must have an accepted system user registration in Altinn. If not configured, the API returns a 400 error with code shareholder_register_report.system_user_not_registered.

Error Responses

Status Code Error code Description
400 shareholder_register_report.reporting_year_required Missing reporting_year (preview and submit)
400 shareholder_register_report.json_body_required Submit without a JSON body
400 shareholder_register_report.contact_business_partner_required Submit without contact_business_partner_id
400 shareholder_register_report.contact_business_partner_not_found Contact business partner not found in the client account
400 shareholder_register_report.contact_email_missing Contact business partner has no email address
400 shareholder_register_report.share_capital_required Submit without share_capital
400 shareholder_register_report.shareholders_required Submit without shareholders
400 shareholder_register_report.preview_failed The preview could not be built (the message says why)
400 shareholder_register_report.submission_failed A shareholder with a missing or invalid id_number, or Skatteetaten rejected the main form, a sub-form or the confirmation (the message says which)
400 shareholder_register_report.system_user_not_registered System user not registered
403 shareholder_register_report.client_account_access_denied Missing client_account_id, or no access to the client account

Example Error Response

{
    "error": {
        "code": "shareholder_register_report.system_user_not_registered",
        "message": "System user not registered for this client account.",
        "request_id": "a1b2c3d4-5678-90ab-cdef-1234567890ab"
    }
}