Skip to content

Assessment inputs

An Assessment is a case for checking one worker’s details and documents. Use inputs to send the information your application already knows, such as a name, date of birth, or assignment dates. Every identity, employment, assignment, project, and payment field is optional. You can create an empty case with {} and add details later.

Dockt compares the details your application sends with information from documents and external sources. If a check still needs a detail, the response lists it in input_requests. Each entry includes the field code, value type, reason, and allowed options. Your application can use this list to find missing details in its own records.

Create an Assessment with POST /v1/assessments:

{
"external_id": "worker-case-1042",
"job": {
"namespace": "contract_management",
"external_id": "site-electrician"
},
"inputs": [
{
"code": "person.name.first",
"value": "Amina",
"source": {
"kind": "integration",
"reference": "contract_management:worker:1042"
}
},
{
"code": "person.name.last",
"value": "Diallo",
"source": {
"kind": "integration",
"reference": "contract_management:worker:1042"
}
},
{
"code": "person.date_of_birth",
"value": "1990-05-17",
"source": {
"kind": "integration",
"reference": "contract_management:worker:1042"
}
},
{
"code": "person.nationality",
"value": "FR",
"source": {
"kind": "integration",
"reference": "contract_management:worker:1042"
}
},
{
"code": "employment.relationship",
"value": "employee",
"source": {
"kind": "integration",
"reference": "contract_management:worker:1042"
}
},
{
"code": "employment.employer_country",
"value": "FR",
"source": {
"kind": "integration",
"reference": "contract_management:worker:1042"
}
},
{
"code": "assignment.start_date",
"value": "2026-09-01",
"source": {
"kind": "integration",
"reference": "contract_management:worker:1042"
}
},
{
"code": "assignment.end_date",
"value": "2026-11-30",
"source": {
"kind": "integration",
"reference": "contract_management:worker:1042"
}
}
]
}

external_id and job are optional. Use external_id to link the Assessment to a record in your system. Send job when its namespace and external_id identify a job mapped to an active Job Profile in your Workspace. A Job Profile defines the qualification requirements for that job.

To reuse a case when several people or processes might request it, send reuse_existing: true with a nonblank external_id. Dockt performs the lookup and creation as one operation in the active Workspace. It returns the existing case without updating its inputs, or creates one if none exists. Multiple matches return 409. Omit reuse_existing to create a new case.

Send identity details in inputs. Each value includes its source, just like the other fields. Dockt calls a value from your application, a person, or a document a Claim: information to evaluate, rather than proof that the value is correct. You can supply a name, date of birth, or nationality independently.

Code Type Meaning
person.name string Full legal name when the source does not separate names.
person.name.first string Legal given names.
person.name.last string Legal family names.
person.date_of_birth date Unambiguous calendar date in YYYY-MM-DD.
person.nationality country code or list One code or up to eight codes, such as ["FR", "MA"]. Dockt preserves all nationalities.
person.residence_country country code Residence country, distinct from nationality and employer country.
organization.legal_name string Legal employer name, distinct from the selected worker.

Read resolved_inputs to see which values Dockt can use and where they came from. The response’s worker is a read-only identity summary. To add or change a value, send it through inputs.

Every input contains code, value, and source: { kind, reference }. Use integration for information imported from another system and operator for information entered by a person. Keep reference stable for the same source record so Dockt can track corrections.

A request may contain up to 64 inputs. The same code can appear from different sources, but one source cannot submit the same code twice in a request. Only nationality accepts a list. Dockt determines whether information is verified; your application cannot set that verification level.

Use the following JSON types for input values:

Value type JSON value Rules
string string A non-empty value. Surrounding whitespace is removed.
integer number A whole number greater than or equal to zero. Don’t send a quoted number.
boolean boolean JSON true or false, not the strings "true" or "false".
date string A valid calendar date in YYYY-MM-DD format.
country_code string A two-letter ISO 3166-1 alpha-2 code. Dockt normalizes it to uppercase.
single_select string One exact value from the options listed for that code.

Employment and posting describe different parts of the case. employment.relationship identifies an employee or a self-employed worker. employment.posting_status identifies a local assignment or one posted from abroad. Self-employed workers can also be posted.

These fields describe the worker, employer, and assignment. EEA refers to the European Economic Area.

Code Type Meaning and accepted values
employment.relationship single_select Whether the worker is an employee or self_employed.
employment.posting_status single_select Whether this assignment is posted from abroad or local.
assignment.worksite_country country_code Country where this assignment is performed.
employment.social_security_country country_code Country whose social-security legislation applies; not inferred from nationality.
employment.employer_country country_code Country in which the employer is established.
employment.social_security_regime single_select Social-security regime that applies: eu_eea_swiss_coordination, uk_withdrawal_or_tca, bilateral_agreement, third_country_no_agreement, belgian_social_security, or unknown.
employment.non_eea_temporary_services_exemption boolean Whether a temporary-services exemption is claimed for a non-EEA self-employed worker.
employment.limosa_exemption_claimed boolean Whether the case claims an exemption from the Limosa declaration requirement.
employment.limosa_exemption_reason string Reason supplied for the claimed Limosa exemption.
employer.has_belgian_vat boolean Whether the employer has a Belgian VAT number or KBO registration.
employer.established_in_eea_swiss boolean Whether the posting employer is genuinely established in the EEA or Switzerland.
employer.has_belgian_establishment boolean Whether the employer has an establishment in Belgium.
employer.is_temporary_agency boolean Whether the employer operates as a temporary-employment agency.
assignment.start_date date First date on which the worker is expected to perform the assignment. Periodic monitoring can run before this date and schedules a fresh reassessment on it.
assignment.end_date date Last date on which the worker is expected to perform the assignment. The date is inclusive, and periodic reassessment stops after it.
assignment.duration_days integer Expected total length of the assignment in calendar days.
assignment.residency_duration_days integer Relevant period of legal residence, in days.
assignment.be.stay_duration_days integer Expected number of days the worker will stay in Belgium.
assignment.be.duration_days_in_180 integer Number of assignment days that fall within the relevant rolling 180-day window.
assignment.is_cleaning_sector boolean Whether the worker’s assignment is in the cleaning sector.

If you provide both assignment dates, assignment.start_date must be on or before assignment.end_date.

These fields describe the evaluation date and the project:

Code Type Meaning and accepted values
assessment.evaluation_date date Date on which Dockt should evaluate the case. This value makes the Assessment point-in-time, so Dockt doesn’t periodically reassess it.
project.be.worksite_region single_select Belgian region of the worksite: flanders, brussels, wallonia, german_community, or unknown.
project.is_construction boolean Whether the project is a construction project.
project.be.activity_30bis boolean Whether the work is immovable work covered by the Belgian 30bis rules.
project.be.activity_ready_mixed_concrete boolean Whether the project includes ready-mixed concrete activity.
project.be.activity_meat_30ter boolean Whether the activity falls under the meat-sector 30ter rules.
project.be.activity_guarding_30ter boolean Whether the activity is guarding or surveillance covered by 30ter rules.
project.is_cleaning_for_third_party boolean Whether cleaning work is performed for a third party.
project.temporary_mobile_construction_site boolean Whether the worksite is a temporary or mobile construction site.
project.asbestos_hazardous_works boolean Whether the project includes asbestos or other hazardous works.
project.contract_value_ex_vat integer Contract value excluding VAT, expressed as the whole-number amount used by your workflow.
project.site_total_cost_ex_vat integer Total site cost excluding VAT, expressed as a whole-number amount.
project.subcontractor_count integer Number of subcontractors involved in the project.
project.subcontract_chain_depth integer Number of levels in the subcontracting chain.
project.customer_role single_select Your organization’s role: principal, main_contractor, intermediate_contractor, subcontractor, or unknown.
project.relationship_to_contractor single_select Whether the relationship to the relevant contractor is direct, indirect, or unknown.
project.direct_contractor_risk_sector boolean Whether the direct contractor operates in a sector subject to the evaluated risk rules.
project.contractor_uses_third_country_nationals boolean Whether the contractor uses workers who are nationals of countries outside the applicable free-movement area.

Configure payment-withholding, posted-worker inspection-file, and technical health-and-safety requirements through Workspace Assessment Policy. They are policy choices, not facts about one Assessment.

These fields describe payments associated with the case:

Code Type Meaning
payment.planned boolean Whether a payment is planned for the evaluated case.
payment.invoice_amount_ex_vat integer Invoice amount excluding VAT, expressed as a whole-number amount.
payment.invoice_payment_date date Planned or actual invoice payment date.
payment.contractor_or_subcontractor boolean Whether the payment is made to a contractor or subcontractor.

Resolve context gaps through your integration

Section titled “Resolve context gaps through your integration”

An Assessment response may include an input_requests entry for a detail that Dockt could not determine:

{
"code": "project.customer_role",
"label": "Customer role",
"reason": "The applicable requirement depends on your role in the contracting chain.",
"value_type": "single_select",
"options": [
{ "value": "principal", "label": "principal" },
{ "value": "main_contractor", "label": "main contractor" }
]
}

For a value your system already knows, use code unchanged and match value_type. If options is non-empty, use one of those values. Keep this list in your backend; don’t turn it into a form for users to complete.

Send known values through inputs with PATCH /v1/assessments/{assessmentId}. Don’t guess missing values. You can upload documents while details are still missing, and Dockt can continue checks that have enough information. Dockt adds conditional evidence requirements only after it can determine whether they apply.

In your application, show Dockt’s result and the missing or incorrect evidence it identifies. If Dockt has too little information to check the worker, explain that in one short summary. Let users add documents instead of asking them to fill in every missing detail.

The Dockt console and browser extension follow this approach. They show the result, the available details, and differences between sources without asking users to supply answers.

Once usable document or qualification evidence satisfies an applicable requirement, Dockt stops reporting missing values for its other accepted options.

A new value for the same code and source replaces that source’s current value. Dockt keeps the earlier value in the history and preserves values from other sources. Send value: null to withdraw this source’s value. Sending an identical input doesn’t change the case.

Optional valid_from and valid_until limit when a value applies. Both dates are inclusive. The response’s inputs keeps the original values, normalized values used for comparison, recording dates, and links to the values that replaced them.

resolved_inputs shows each field’s value, sources, and status:

  • established: Dockt has a value it can use.
  • insufficient_information: Dockt doesn’t have enough information to establish a value.
  • conflicting_information: The available sources disagree.

The field’s assurance describes how the value is supported:

  • declared: A person or connected system provided the value.
  • document_supported: Document evidence supports the value.
  • authority_verified: An independent external source verified the value.

Dockt calls a value established by an external source an Assertion, and a value it resolves for evaluation a Fact. Extraction confidence describes how confidently Dockt read a document; it doesn’t verify that the information is true.

When comparing names, Dockt normalizes Unicode, case, and whitespace and preserves punctuation. It never guesses dates. It keeps all nationalities from the sources rather than treating an additional nationality as a conflict.

Worker-specific documents must match the selected worker and assignment before Dockt uses their employment information. A valid document for another worker can still be unsuitable for this case. Copies of the same credential count as one source. Document coverage dates don’t set the actual assignment dates.

To record a person’s review of a conflict, submit an operator input with reconciliation: { claim_ids, reason }. Include all current source Claim IDs for that field and the reason for choosing the value.

The reviewed value remains declared; a manual review doesn’t verify it with an external source. Dockt preserves the other sources and returns the field to an unresolved state if new conflicting evidence appears. A review based on outdated sources returns 409. Keep Claim IDs in your integration’s requests rather than showing them in the worker-facing interface.

Dockt derives age, nationality-based rule selection, and calendar assignment duration from the available information. Don’t submit worker.origin, age, or calculated legal-route flags. Assignment duration and residence duration describe different periods.

When Dockt has usable assignment start and end dates, it counts the calendar days, including both dates. It uses this result for assignment.duration_days if no duration was supplied. The result keeps both date sources and their assurance.

A supplied duration takes precedence, including zero. Conflicting duration Claims require review. Assignment dates don’t establish how long the worker stays in Belgium, their period of legal residence, or totals for a rolling 180-day period.

This reference lists all input codes accepted by the current API contract. If a future input_requests entry is unfamiliar, preserve it without rejecting the entire Assessment response or guessing a value.