---
title: "Updates a candidate"
method: PUT
path: "/Entity/Candidate"
tags: ["Entity"]
---

# Updates a candidate

`PUT /Entity/Candidate`

If valid, the candidate will be updated directly in Infinity.
            
NOTE: All fields will be replaced in the record even when they are not passed into the request. e.g If "Forename" is omitted it will be blank in Infinity
            
Comments, Summary and Insights must not exceed the max upload size configured in Infinity.
            
A Photo must not exceed the max upload size configured in Infinity.
            
The max upload size can be retrieved from the /Reference/MaxUploadSize method (In KB).
            
All id fields must match reference data from the /Reference methods.
            
EAA and RightToWork fields can only be changed if the system is not set up to auto-populate EAA/Right to Work information, and if the candidate's
right to work is not controlled by TrustID

The ContractualLegalLawfulBasis field can only be set to None, ContractualLegal or left blank.
            
The ConsentLegitimateInterestLawfulBasis field can only be set to None, DigitalConsent, VerbalConsent, LegitimateInterest, NotRequired or left blank.
When set, the LawfulBasisStatusId field must be set to a valid value for the type of consent which can be retrieved from the /Reference/LawfulBasisStatuses method.
            
The Financials.WorkerTypeId only supports worker types with a territory of 'United Kingdom'.
            
The Financials.BankAccountNumber must be 8 digits when set
            
The Financials.BankSortCode must be 6 digits when set
            
The Financials.IBANNumber must be in a valid format when set according to the following RegEx [A-Z]{2}[0-9]{2}[A-Z0-9]{1,30}
            
The Financials.SwiftCode must be in a valid format when set according to the following RegEx [A-Z]{6}[A-Z0-9]{2}[A-Z0-9]{0,3}
            
The Telecoms field can only contain one item set as IsPreferredTelecom
            
The Addresses field must have one item that is marked as SendByDefault if addresses are set. Each item must also have a unique address type.
            
Candidate StatusId must be set to a valid value. The /Reference/CandidateStatuses method will tell you if a status is a shortlist status or not. A
shortlist status is one which has work-flow behind it.

A Candidate's status can only be changed if: Its current value is not a shortlist status, and the new value is not a shortlist status, or the current status
is 'Placed By Us' or 'Placed By Us, But Looking' and the new value is also one of those, or the current status is 'Working For Us' or 'Working For Us, But Looking'
and the new value is also one of those.
            
In other cases, if the status values are different, the request will be rejected.

If passed, the CustomFieldData must adhere to the field definitions retrieved from the /Reference/CustomFields method especially
regarding item ids, in the case of combo boxes and multi-select lists, min/max values for dates and max length for text. Note that the Candidate
update request will fail if the custom data is not valid.

## Query parameters

- `id` integer, required

## Request body

- CandidateRequest — Model to create a Candidate
  - `TitleId` integer, nullable
  - `Forename` string, nullable
  - `Middlename` string, nullable
  - `Surname` string, nullable
  - `KnownAs` string, nullable
  - `GenderId` integer, nullable
  - `MaritalStatusId` integer, nullable
  - `DateOfBirth` string, date-time, nullable
  - `NationalityId` integer, nullable
  - `SecondNationalityId` integer, nullable
  - `ThirdNationalityId` integer, nullable
  - `FourthNationalityId` integer, nullable
  - `EthnicOriginId` integer, nullable
  - `CountryOfOriginId` integer, nullable
  - `ThirdPartyOptOut` boolean
  - `MaximumWeeklyWorkingHoursOptOut` boolean
  - `ContractualLegalLawfulBasis` 'None' | 'DigitalConsent' | 'VerbalConsent' | 'LegitimateInterest' | 'ContractualLegal' | 'LegalObligation' | 'VitalInterests' | 'PublicTask' | 'NotRequired'
  - `ConsentLegitimateInterestLawfulBasis` 'None' | 'DigitalConsent' | 'VerbalConsent' | 'LegitimateInterest' | 'ContractualLegal' | 'LegalObligation' | 'VitalInterests' | 'PublicTask' | 'NotRequired'
  - `LawfulBasisReasonId` integer, nullable
  - `LawfulBasisOtherReason` string, nullable
  - `LawfulBasisStatusId` integer, nullable
  - `OriginOfDataId` integer, nullable
  - `LinkedInUrl` string, nullable
  - `XingUrl` string, nullable
  - `FacebookProfileUrl` string, nullable
  - `TwitterProfileUrl` string, nullable
  - `ICaptureWebId` string, nullable
  - `Photo` string, byte, nullable — A Base64 image to display against the candidate The image cannot exceed the max upload size configured in Infinity.
  - `Telecoms` TelecomRequest[], nullable
    - `Description` string, nullable
    - `TelecomId` integer, required
    - `OkToMailShot` boolean, required
    - `OkToSMS` boolean, required
    - `CountryId` integer, nullable
    - `Value` string, nullable
    - `SendByDefault` boolean, required
    - `Extension` string, nullable
    - `IsPreferredTelecom` boolean, required
  - `Addresses` CandidateAddressRequest[], nullable
    - `Description` string, nullable
    - `AddressLine1` string, nullable
    - `AddressLine2` string, nullable
    - `AddressLine3` string, nullable
    - `Town` string, nullable
    - `County` string, nullable
    - `Postcode` string, nullable
    - `CountryId` integer, nullable
    - `OkToMailShot` boolean, required
    - `AddressTypeId` integer, required
    - `SendByDefault` boolean, required
  - `StatusId` integer, nullable
  - `AvailabilityDate` string, date-time, nullable
  - `Sources` integer[], nullable
  - `Alert` string, nullable
  - `IsPermanent` boolean
  - `PermanentExpectedRate` CandidateExpectedRateRequest
    - `Min` number
    - `Max` number
    - `RateIntervalId` integer, nullable
  - `IsContract` boolean
  - `ContractExpectedRate` CandidateExpectedRateRequest
    - `Min` number
    - `Max` number
    - `RateIntervalId` integer, nullable
  - `IsTemporary` boolean
  - `TemporaryExpectedRate` CandidateExpectedRateRequest
    - `Min` number
    - `Max` number
    - `RateIntervalId` integer, nullable
  - `ExpectedRateCurrencyId` integer, nullable
  - `PreferredLocation` string, nullable
  - `BasedIn` string, nullable
  - `Relocate` boolean
  - `Transport` boolean
  - `NoticePeriod` integer
  - `NoticePeriodIntervalId` integer, nullable
  - `StudentVisa` boolean
  - `OwningConsultants` OwningConsultant[], nullable
    - `ConsultantId` integer, required
    - `ConsultantRoleId` integer, nullable
  - `Consultants` integer[], nullable — Depreciated. OwningConsultants can be used instead to supply a list of consultants and their roles.
  - `AlternateCode` string, nullable
  - `RightToWork` boolean, nullable
  - `EAA` boolean, nullable
  - `EaaRightToWorkExpiry` string, date-time, nullable
  - `EaaRightToWorkNeverExpires` boolean, nullable
  - `FestiveMail` boolean
  - `Comments` string, nullable
  - `Summary` string, nullable
  - `Insights` string, nullable
  - `Financials` CandidateFinancialRequest
    - `WorkerTypeId` integer, nullable
    - `PaymentTypeId` integer, nullable
    - `PayIntervalId` integer, nullable
    - `AWRCandidate` boolean — Depreciated. Field has been removed from Infinity as they can no longer opt out.
    - `NINumber` string, nullable
    - `StartDate` string, date-time, nullable
    - `BankName` string, nullable
    - `BankAddressLine1` string, nullable
    - `BankAddressLine2` string, nullable
    - `BankAddressLine3` string, nullable
    - `BankTown` string, nullable
    - `BankCounty` string, nullable
    - `BankPostcode` string, nullable
    - `BankCountryId` integer, nullable
    - `BankAccountName` string, nullable
    - `BankAccountNumber` string, nullable
    - `BankSortCode` string, nullable
    - `BuildingSocietyReference` string, nullable
    - `IBANNumber` string, nullable
    - `SwiftCode` string, nullable
    - `PAYEDetails` CandidatePAYERequest
      - `HolidayYearStartDate` string, date-time, nullable
    - `NonPAYEDetails` CandidateNonPAYERequest
      - `Name` string, nullable
      - `AddressLine1` string, nullable
      - `AddressLine2` string, nullable
      - `AddressLine3` string, nullable
      - `Town` string, nullable
      - `County` string, nullable
      - `Postcode` string, nullable
      - `CountryId` integer, nullable
      - `RegistrationNumber` string, nullable
      - `VATNumber` string, nullable
      - `VATCodeId` integer, nullable
      - `NonUKTaxCode` string, nullable
    - `CISDetails` CandidateCISRequest
      - `CISPercentage` number, nullable
      - `UTRNumber` string, nullable
      - `VerificationNumber` string, nullable
    - `UmbrellaCompanyId` integer, nullable
  - `DrivingLicence` DrivingLicenceRequest
    - `DrivingLicenceNumber` string, nullable
    - `ExpiryDate` string, date-time, nullable
    - `LastCheckedDate` string, date-time, nullable
    - `Categories` DrivingLicenceCategoryRequest[], nullable
      - `Category` 'None' | 'AM' | 'P' | 'Q' | 'A1' | 'A2' | 'A' | 'B1' | 'B' | 'BAuto' | 'BE' | 'C1' | 'C1E' | 'C' | 'CE' | 'D1' | 'D1E' | 'D' | 'DE' | 'F' | 'G' | 'H' | 'K' | 'L' | 'M' | 'N', required
      - `From` string, date-time, nullable
      - `To` string, date-time, nullable
      - `Codes` DrivingLicenceCode[], nullable
    - `Endorsements` DrivingLicenceEndorsementRequest[], nullable
      - `Id` integer, required
      - `Points` integer, nullable
      - `Offence` string, date-time, nullable
      - `Conviction` string, date-time, nullable
      - `Expiry` string, date-time, nullable
  - `EmploymentHistory` CandidateEmploymentHistoryRequest[], nullable
    - `CompanyName` string, nullable
    - `Location` string, nullable
    - `JobTitle` string, nullable
    - `LineManager` string, nullable
    - `JobType` 'Unknown' | 'Permanent' | 'Contract' | 'Temporary' | 'TemporaryToPerm' | 'ContractToPermanent' | 'FixedTerm'
    - `StartDate` string, date-time, nullable
    - `EndDate` string, date-time, nullable
    - `CurrencyId` integer, nullable
    - `Pay` number
    - `IntervalPerId` integer, nullable
    - `Notes` string, nullable
  - `JobTitles` CandidateJobTitleRequest[], nullable
    - `Id` integer
    - `IsPreferred` boolean
    - `Experience` integer, nullable
    - `Period` 'Years' | 'Months', required
    - `Notes` string, nullable
    - `LastUsed` string, date-time, nullable
  - `Attributes` CandidateAttributeRequest[], nullable
    - `Id` integer
    - `ScoreId` integer, nullable
    - `Experience` integer, nullable
    - `Period` 'Years' | 'Months', required
    - `Notes` string, nullable
    - `LastUsed` string, date-time, nullable
  - `ChildAttributes` CandidateAttributeRequest[], nullable
    - `Id` integer
    - `ScoreId` integer, nullable
    - `Experience` integer, nullable
    - `Period` 'Years' | 'Months', required
    - `Notes` string, nullable
    - `LastUsed` string, date-time, nullable
  - `QualificationsAndCertifications` CandidateQualificationAndCertificationRequest[], nullable
    - `Id` integer
    - `TypeId` integer, nullable
    - `LevelId` integer, nullable
    - `Issued` string, date-time, nullable
    - `Expires` string, date-time, nullable
    - `Review` string, date-time, nullable
    - `DateCopied` string, date-time, nullable
    - `DateSeen` string, date-time, nullable
    - `Held` boolean, required
    - `Obtained` string, nullable
    - `Original` boolean, required
    - `Notes` string, nullable
    - `ReferenceNumber` string, nullable
  - `CallBacks` CallBackRequest[], nullable
    - `TypeId` integer, required
    - `DueDate` string, date-time, required
    - `DueTime` string, duration, nullable
    - `ForConsultantId` integer, required
    - `Details` string, nullable
  - `CustomFieldDetails` CustomFieldDetailRequest
    - `CategorisedMultiSelectFields` CategorisedMultiSelectFieldRequest[], nullable
      - `Id` integer, required
      - `ValueIds` integer[], required
    - `CheckBoxFields` CheckBoxFieldRequest[], nullable
      - `Id` integer, required
      - `Value` boolean, required
    - `ComboBoxFields` ComboBoxFieldRequest[], nullable
      - `Id` integer, required
      - `ValueId` integer, required
    - `DateTimePickerFields` DateTimePickerFieldRequest[], nullable
      - `Id` integer, required
      - `Value` string, date-time, required
    - `DecimalFields` DecimalFieldRequest[], nullable
      - `Id` integer, required
      - `Value` number, required
    - `IntegerFields` IntegerFieldRequest[], nullable
      - `Id` integer, required
      - `Value` integer, required
    - `MultiSelectListBoxFields` MultiSelectListBoxFieldRequest[], nullable
      - `Id` integer, required
      - `ValueIds` integer[], required
    - `NoteControlFields` NoteControlFieldRequest[], nullable
      - `Id` integer, required
      - `Value` string, required — The Notes Value must not exceed the max upload size configured in Infinity.
    - `TextBoxFields` TextBoxFieldRequest[], nullable
      - `Id` integer, required
      - `Value` string, required
  - `ShortlistJobCodes` string[], nullable — A list of valid job codes to shortlist the candidate against e.g. JO0000000112

## Response `200`

OK

## Other responses

- `400` — BadRequest
- `401` — Unauthorized
- `404` — NotFound
- `409` — Conflict

---

[API](https://skmtc.dev/vslcloud/apis/infinity-api.md) · [All operations](https://skmtc.dev/vslcloud/apis/infinity-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/vslcloud/infinity-api/revisions/54661781612a/schema)
