Skip to content
English - United Kingdom
  • There are no suggestions because the search field is empty.

Building an Integration with Konquest

This article is a technical guide for developers building third-party integrations with the Konquest API. It covers the four main integration workflows: syncing users, creating placements, updating placement data, and attaching timesheets. It also explains how custom fields work and why they matter for commission calculation.

Building an Integration with Konquest

Welcome to the Konquest integration guide. Before getting started, you'll need to authenticate with the API - see our Authentication Guide. The full API reference is also available in our API documentation.

 


1. Before You Start

Authentication

All API requests require a Bearer token in the Authorization header. See the Authentication Guide for details on obtaining a token using the Device Authorization Flow.

Understand the Account's Placement Configuration

Before processing placements, retrieve the account's placement settings. This tells you which placement rules are active and what modifier rulesets have been configured - information that is relevant when deciding which custom fields to include on your placements.

Endpoint Purpose
GET /api/placements/settings Returns placement rules, modifier rulesets, and associated configuration
GET /api/placements/custom-field-names Returns the names of all custom fields currently in use across placements

Note: Placement rules are configured by Konquest as part of account setup — you do not need to create or manage them. Retrieving them is useful for understanding which custom field values are expected. See Section 6 for more on custom fields.


2. Users (Beneficiaries)

Konquest users - referred to as beneficiaries in the context of placements - are the individuals who receive commission credit for placements. Before processing any placements, we recommend checking which users already exist in the account.

Recommended Workflow

  1. Fetch all existing users from the Konquest account.
  2. Match them against your own user records by ID or email address.
  3. For any users who do not exist in Konquest, decide whether to create them via the API, skip them, or pass their details and allow the system to handle missing users gracefully (see below).
  4. Complete all user synchronisation before processing placements.
Endpoint Purpose
GET /api/users List all users on the account
POST /api/users Create a new user
GET /api/users/{id} Retrieve a specific user by ID
PUT /api/users/{id} Update an existing user

Creating a User

The request body requires three fields: firstName, lastName, and email.

Handling Missing Users on Placements

When assigning beneficiaries to a placement, if you supply a user id that does not correspond to an existing Konquest user, the system will silently skip that beneficiary rather than returning an error. This means:

  • If the user needs to receive commission credit: create them in Konquest before processing the placement.
  • If you want to assign credit later: you can proceed without them — beneficiaries can be updated on a placement after creation.
  • If you are not managing users via the API: you can omit beneficiary assignment entirely; users can be added manually within Konquest.

3. Creating Placements

Placements are the core data entity in Konquest. A placement represents a hire — either a permanent placement (known as a direct hire in the US) or a contract placement (known as a temp in the US). The placement type determines how revenue and commission are calculated and what additional data is required.

Endpoint Purpose
POST /api/placements Create a new placement
GET /api/placements List placements (paginated, with optional search and cancel filters)
GET /api/placements/{id} Retrieve a specific placement by ID

Core Placement Fields

Field Type Notes
worker string Full name of the placed worker. Required.
company string Client company name. Required.
startDate date-time Start date of the placement (ISO 8601). Required.
boardedDate date-time Date the placement was recorded/boarded (ISO 8601). Required.
fee number Placement fee. For permanent placements this drives billing. For contract placements, set to 0 — billing comes from timesheets. Required.
currency string Currency code, e.g. GBP or USD. Required.
termsType integer Placement type: Permanent (direct hire) or Contract (temp).
beneficiaries array Optional. Array of beneficiary objects — see Section 2.

Permanent Placements (Direct Hire)

A permanent placement (US: direct hire) represents a one-time placement fee for a candidate moving into full-time employment. Revenue is recognised from the fee provided at creation. After creating the placement, set or update the terms using the dedicated endpoint:

Endpoint Purpose
PUT /api/placements/{id}/permanent-terms Set or update fee terms on a permanent placement

The permanent terms model accepts startDate (date-time) and fee, where fee is an object with currency (string) and value (number).

Contract Placements (Temp)

A contract placement (US: temp) represents an ongoing engagement billed periodically. Set fee to 0 at creation - all revenue is accumulated through timesheet entries (see Section 5). After creating the placement, set the contract terms:

Endpoint Purpose
PUT /api/placements/{id}/contract-terms Set or update contract terms

The contract terms model currently accepts startDate (date-time). Charge and pay rates are carried at the timesheet level - include chargeAmount, chargeCurrency, payAmount, and payCurrency on each timesheet entry rather than on the contract terms.

Checking for Duplicate Placements

Before creating a placement, you may want to verify it does not already exist. Use the search query parameter on the list endpoint to look up by worker name or company. The response includes pagination fields (skipped, taken, totalPlacements) to support iterating over large result sets.

Endpoint Purpose
GET /api/placements?search={term}&skip={n}&take={n} Search placements by worker or company name, with pagination

4. Updating Placements

Most placement fields can be updated individually after creation:

Endpoint Purpose
PUT /api/placements/{id}/permanent-terms Update fee terms on a permanent placement
PUT /api/placements/{id}/contract-terms Update contract start date
PUT /api/placements/{id}/beneficiaries Replace the full set of beneficiaries
PUT /api/placements/{id}/worker Update the worker name
PUT /api/placements/{id}/company Update the company name
PUT /api/placements/{id}/custom-fields Set or update a placement-level custom field
DELETE /api/placements/{id}/custom-fields/{index} Remove a placement-level custom field
PUT /api/placements/{id}/value-custom-fields Set or update a dated value custom field
DELETE /api/placements/{id}/value-custom-fields/{date}/{index} Remove a dated value custom field
PUT /api/placements/approved/{id} Approve a placement
DELETE /api/placements/approved/{id} Remove approval from a placement
PUT /api/placements/cancelled/{id} Cancel a placement

Important: PUT /api/placements/{id}/beneficiaries replaces all existing beneficiaries on the placement. Your request must include every beneficiary you want to retain, not just newly added ones.

Beneficiary Object

Each beneficiary in the array uses the following structure:

Field Notes
id The Konquest user ID (from GET /api/users). Silently skipped if no matching user exists.
email The user's email address.
role The contribution type. Use GET /api/placements/beneficiary-contribution-types to retrieve valid values for the account.
percentage The beneficiary's share as a decimal, e.g. 1.0 for 100%, 0.5 for 50%.

5. Attaching Timesheets

Timesheets are the mechanism through which contract/temp placements accumulate revenue over time. Each entry represents a billing period and carries the amount charged to the client and the amount paid to the worker.

Endpoint Purpose
POST /api/placements/{id}/timesheets Add a timesheet entry to a placement
DELETE /api/placements/{id}/timesheets/{timesheetId} Remove a specific timesheet entry

Timesheet Fields

Field Type Notes
date date-time The period end date for this timesheet entry (ISO 8601). Required.
chargeAmount number The amount billed to the client for this period. Required.
chargeCurrency string Currency of the charge amount, e.g. GBP or USD. Required.
payAmount number The amount paid to the worker. Set to 0 if only one value is available. Required.
payCurrency string Currency of the pay amount. Required.

Note: If your source system provides only a single figure per period (e.g. a charge value only), pass it as chargeAmount and set payAmount to 0.


6. Custom Fields

Custom fields allow you to attach additional metadata to placements. They are not just labels — in Konquest they can act as drivers for accumulation rules, payment calculations, and burdens (employer costs such as payroll taxes, pension contributions, or National Insurance). Getting custom fields right is therefore important to ensure commission and billing calculations are correct.

Two Types of Custom Field

Type Scope Description
Placement custom field Placement-level A single value applying to the placement as a whole. Examples: job title, division, region, employment type. Set via PUT /api/placements/{id}/custom-fields.
Value custom field Per-timesheet (dated) A value tied to a specific date, corresponding to a timesheet entry. Examples: hours worked, overtime, allowances. Set via PUT /api/placements/{id}/value-custom-fields. The valueDate must match the date of the associated timesheet.

Custom Field Request Bodies

Placement custom field (SetCustomFieldModel): name (string) and value (string).

Value custom field (SetValueCustomFieldModel): name (string), value (string), and valueDate (date-time, must match the associated timesheet date).

Custom Fields as Rule Drivers

Placement rules in Konquest can evaluate custom field values to determine which commission rates, accumulation logic, or burden calculations apply to a placement. For example, a rule might apply a different commission percentage when a custom field called division equals Technology, or calculate an employer burden only when employment_type equals PAYE.

Incorrect, missing, or misspelled custom field values will result in the wrong rules being applied, which can mean incorrect commission calculations. Before going live, we recommend:

  • Retrieving placement settings (GET /api/placements/settings) to understand active rules.
  • Retrieving custom field names in use (GET /api/placements/custom-field-names) to ensure correct field names.
  • Confirming expected values with the account owner, particularly for any fields that drive accumulation or burden rules.

7. Quick Reference: Endpoint Summary

Endpoint Purpose
GET /api/users List all users/beneficiaries
POST /api/users Create a new user
GET /api/users/{id} Get a user by ID
PUT /api/users/{id} Update a user
GET /api/placements/settings Retrieve placement rules and settings
GET /api/placements/custom-field-names List custom field names in use
GET /api/placements/beneficiary-contribution-types List valid beneficiary role values
GET /api/placements List/search placements (paginated)
POST /api/placements Create a new placement
GET /api/placements/{id} Get a specific placement
PUT /api/placements/{id}/permanent-terms Set/update permanent placement fee terms
PUT /api/placements/{id}/contract-terms Set/update contract placement start date
PUT /api/placements/{id}/beneficiaries Replace all beneficiaries on a placement
PUT /api/placements/{id}/worker Update worker name
PUT /api/placements/{id}/company Update company name
POST /api/placements/{id}/timesheets Add a timesheet entry
DELETE /api/placements/{id}/timesheets/{timesheetId} Remove a timesheet entry
PUT /api/placements/{id}/custom-fields Set a placement-level custom field
DELETE /api/placements/{id}/custom-fields/{index} Remove a placement-level custom field
PUT /api/placements/{id}/value-custom-fields Set a dated value custom field
DELETE /api/placements/{id}/value-custom-fields/{date}/{index} Remove a dated value custom field
PUT /api/placements/approved/{id} Approve a placement
DELETE /api/placements/approved/{id} Remove approval
PUT /api/placements/cancelled/{id} Cancel a placement

8. Integration Review

Before going live, all third-party integrations must be submitted to Konquest for review and validation. To do this, send the following details to support@konquest.io:

  • The endpoints your integration calls, and the purpose of each call
  • The placement type(s) you are creating (permanent, contract, or both)
  • Which custom fields you are setting
  • Whether your integration creates users, or relies on users already existing in Konquest

This allows the Konquest team to verify that your integration is using the API correctly and that custom fields are aligned with the account's commission rules before any data is processed in a live environment.


9. Further Support

If you have questions not covered in this article, or if you believe your integration requires endpoints not listed above, please contact us before proceeding: support@konquest.io