---
title: "Creates a new candidate"
method: POST
path: "/Entity/Candidate"
tags: ["Entity"]
---

# Creates a new candidate

`POST /Entity/Candidate`

If valid, the candidate will be created directly 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 passed if the system is not set up to auto-populate EAA/Right to Work information

The auto-populate EAA/Right to Work setting can be retrieved from the /Reference/AutoPopulateCandidateEaaRightToWork method

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.

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
creation request will fail if the custom data is not valid.

## 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

- integer

## Other responses

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

---

[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)
