# Worksome GraphQL API schema # Source: https://api.worksome.com/graphql (unauthenticated introspection) schema { query: Query mutation: Mutation } "The type of account a user can have." enum AccountType { "A Worker account type." WORKER "A Company account type." COMPANY "A Recruiter account type." RECRUITER "An Organisation account type." ORGANISATION "A Partner account type." PARTNER } "The contexts that the AI chat can be used in." enum AiChatContext { "The context for a hire." HIRE "The context for a dialog." DIALOG } "The job description context types" enum AiJobDescriptionContext { "Job Post" JOB_POST "Direct Hire" DIRECT_HIRE } "The columns that the approvables list can be ordered by." enum ApprovalApprovableOrderByColumn { "The approvable created at date" CREATED_AT } "The state of an approval request or an action taken by an approver." enum ApprovalApprovableState { "The approval state could not be determined." UNKNOWN "The approval has been requested and is waiting for an approver to act. The item (e.g. hire) is blocked until reviewed." REQUESTED "The approver has approved the request. If all approvers in the sequence have approved, the item proceeds." APPROVED "The approver has rejected the request. For hires, this results in the hire being cancelled." REJECTED "The approver has requested changes before they can approve. The item remains blocked until the changes are made and the request is re-evaluated." NEEDS_CHANGE "The approval request was automatically cancelled — for example, the hire was cancelled, the job was closed, or the workflow was re-triggered." CANCELLED } "The reason an approval request was automatically cancelled before completion." enum ApprovalCancellationReason { "The hire reached its end date or was otherwise ended, making the pending approval unnecessary." HIRE_ENDED "The hire was cancelled by the company before the approval could be completed." HIRE_CANCELLED "The job associated with the approval was closed, invalidating the pending request." JOB_CLOSED "Another approval in the same workflow was rejected, causing this request to be cancelled as a consequence." APPROVAL_REJECTED "A new classification was triggered, replacing the one this approval was for." CLASSIFICATION_RETRIGGERED "The approval workflow was re-triggered (e.g. after a contract change), replacing this request with a new one." WORKFLOW_RETRIGGERED "The item that required approval was removed from the system." APPROVABLE_REMOVED } "The operational status of an approval flow. Only active approvals are evaluated when trigger events occur." enum ApprovalStatus { "The approval flow is live and will be evaluated when its trigger event fires." ACTIVE "The approval flow is paused and will not be evaluated. Can be reactivated later." INACTIVE "The approval flow has been retired and is kept for historical reference only." ARCHIVED } "The event that triggers an approval flow. All triggers currently apply to hires only — jobs, payment requests, and other entities are not supported." enum ApprovalTrigger { "No trigger — the approval flow will not be automatically evaluated." NONE "Triggered when a new hire is created. Evaluates conditions like rate and budget against the new hire details." HIRE_CREATED "Triggered when a hire contract is changed (e.g. rate or end date updated). Evaluates conditions against the updated contract terms." HIRE_CHANGED "Triggered when a worker classification (e.g. IR35 or US worker classification) is completed. Evaluates conditions against the classification result." CLASSIFICATION_CREATED } "The estimated commitment of a job." enum Association { "Small task" SMALL_TASK "Project" PROJECT "Big project" BIG_PROJECT "Part time" PART_TIME "Full time" FULL_TIME } "The action to run on a batch." enum BatchActionType { "Process items in the batch." PROCESS "Export items in the batch." EXPORT "Undo processing for items in the batch." UNDO } "The status of an item in a batch." enum BatchItemStatus { "Item is processing." PROCESSING "Item has been processed." PROCESSED } "The type of items grouped in a batch for bulk processing." enum BatchType { "Partner payment requests batch." PARTNER_PAYMENT_REQUESTS "Invoices batch for processing by the Integrations Service." INVOICES_FOR_INTEGRATIONS_SERVICE "Customer invoices exported to an accounting system." CUSTOMER_INVOICES "Self-bill journal entries exported to an accounting system." SELF_BILL_JOURNAL "Accruals journal entries exported to an accounting system." ACCRUALS_JOURNAL "Journal entries for self-bills that have reached a payment file." PAYMENT_JOURNAL } "The columns that the bids list can be ordered by." enum BidOrderByColumn { "The date and time that the bid was created." CREATED_AT "The status of the bid." STATUS } "The status of a bid." enum BidStatus { "Offer was created." OPEN "Offer was accepted." ACCEPTED "Offer was rejected." REJECTED "Offer was cancelled." CANCELLED } "The legal structure of a worker's business, which varies by market and determines payment and compliance requirements." enum BusinessEntityType { "Common" COMMON "No Setup" NO_SETUP "Personal" PERSONAL "AU: Ltd" AU_LTD "AU: Sole Trader" AU_SOLE_TRADER "DE: Freelancer" DE_FREELANCER "DE: Tradesperson" DE_TRADESPERSON "DE: Entrepreneurial" DE_ENTREPRENEURIAL "DE: Limited" DE_LTD "NL: Limited" NL_LTD "NL: Sole Trader" NL_SOLE_TRADER "NL: General Partnership" NL_GENERAL_PARTNERSHIP "NL: Professional Partnership" NL_PROFESSIONAL_PARTNERSHIP "B-income" B_INCOME "FR: Limited" FR_LTD "FR: Sole Trader" FR_SOLE_TRADER "IE: Limited" IE_LTD "IE: Sole Trader" IE_SOLE_TRADER "SG: Limited" SG_LTD "SG: Sole Trader" SG_SOLE_TRADER "UK: Limited" LTD "UK: Sole Trader" SOLE_TRADER "UK: Umbrella" UMBRELLA } "Describes how a supplier relates to the candidate submitted in a pitch." enum CandidateSubmissionType { "The supplier directly manages the candidate." MANAGED "The supplier is referring an independent candidate they do not manage." REFERRED } "Determination result" enum ClassificationResult { "Employee" EMPLOYEE "Likely employee" LIKELY_EMPLOYEE @deprecated(reason: "This value is deprecated and should not be used. Use EMPLOYEE instead.") "Unknown" UNKNOWN "Likely independent" LIKELY_INDEPENDENT @deprecated(reason: "This value is deprecated and should not be used. Use INDEPENDENT instead.") "Independent" INDEPENDENT } "The status of a worker classification (e.g. IR35) on a hire, from initial questionnaire through to acceptance." enum ClassificationStatus { "No answers filled yet" INCOMPLETE "Answers submitted, awaiting classification" SUBMITTED "Classification created, awaiting acceptance" PENDING_ACCEPTANCE "Accepted and finalized" ACCEPTED } "Determination" enum ClassificationType { "Ir35" IR35 "Uk sole trader classification" UK_SOLE_TRADER_CLASSIFICATION "Us worker classification" US_WORKER_CLASSIFICATION "Global worker classification" GLOBAL_WORKER_CLASSIFICATION "Nl worker classification" NL_WORKER_CLASSIFICATION } "Indicates whether a hire uses Worksome Classify or not, and if the classification has been overridden." enum ClassificationUsage { "The hire does not use Worksome Classify." NOT_USING "The hire uses Worksome Classify." USING "The hire uses Worksome Classify and the classification result has been overridden." USING_WITH_OVERRIDE } "The outcome of an external validation check (e.g. KvK, VAT/VIES)." enum CompanyNumberValidationStatus { "Validation has not been attempted yet." PENDING "The external authority confirmed the number is valid." VALID "The external authority confirmed the number is not registered." INVALID "Validation was attempted but the external authority was unavailable or returned an error." NOT_VERIFIED } "The actor needed to complete a compliance." enum ComplianceActorTypes { "Worker" WORKER "Company" COMPANY "Recruiter" RECRUITER "Worksome" WORKSOME } "Answer outcomes for a classification question." enum ComplianceClassificationAnswer { "The worker answered the question affirmatively." YES "The worker answered the question negatively." NO "The worker did not know, or chose not to answer." UNKNOWN } "Compliance name identifier." enum ComplianceName { "Address compliance" ADDRESS "Bank account compliance" BANK_ACCOUNT "Background checks compliance" BACKGROUND_CHECKS "Common business entity compliance" COMMON_BUSINESS_ENTITY @deprecated(reason: "Use `COMPANY_COMMON_BUSINESS_ENTITY` or `FREELANCER_COMMON_BUSINESS_ENTITY` instead.") "Company common business entity compliance" COMPANY_COMMON_BUSINESS_ENTITY "Freelancer common business entity compliance" FREELANCER_COMMON_BUSINESS_ENTITY "Recruiter common business entity compliance" RECRUITER_COMMON_BUSINESS_ENTITY "Company address compliance" COMPANY_ADDRESS "Australian company business entity compliance" COMPANY_AU_BUSINESS_ENTITY "Canadian company business entity compliance" COMPANY_CA_BUSINESS_ENTITY "German company business entity compliance" COMPANY_DE_BUSINESS_ENTITY "Dutch company business entity compliance" COMPANY_NL_BUSINESS_ENTITY "Singapore company business entity compliance" COMPANY_SG_BUSINESS_ENTITY "US company business entity compliance" COMPANY_US_BUSINESS_ENTITY "Contract changes compliance" CONTRACT_CHANGES "Contract document compliance" CONTRACT_DOC "Employment cost compliance" EMPLOYMENT_COST "Australian freelancer business entity compliance" FREELANCER_AU_BUSINESS_ENTITY "Canadian freelancer business entity compliance" FREELANCER_CA_BUSINESS_ENTITY "German freelancer business entity compliance" FREELANCER_DE_BUSINESS_ENTITY "Danish freelancer business entity compliance" FREELANCER_DK_BUSINESS_ENTITY "French freelancer business entity compliance" FREELANCER_FR_BUSINESS_ENTITY "Irish freelancer business entity compliance" FREELANCER_IE_BUSINESS_ENTITY "Dutch freelancer business entity compliance" FREELANCER_NL_BUSINESS_ENTITY "Singapore freelancer business entity compliance" FREELANCER_SG_BUSINESS_ENTITY "UK freelancer business entity compliance" FREELANCER_UK_BUSINESS_ENTITY "US freelancer business entity compliance" FREELANCER_US_BUSINESS_ENTITY "FLSA compliance" FLSA "Full name compliance" FULL_NAME "Hire acceptance gate compliance" GATE_HIRE_ACCEPT "Hire create bill gate compliance" GATE_HIRE_CREATE_BILL "Hire offer gate compliance" GATE_HIRE_OFFER "Hire progress gate compliance" GATE_HIRE_PROGRESS "Global contract type compliance" GLOBAL_CONTRACT_TYPE "Global contract type hire compliance" GLOBAL_CONTRACT_TYPE_HIRE "IR35 compliance" IR35 "IR35 company settings compliance" IR35_COMPANY_SETTINGS "Onsite presence compliance" ONSITE_PRESENCE "PAYE accept compliance" PAYE_ACCEPT "US recruiter business entity compliance" RECRUITER_US_BUSINESS_ENTITY "Netherlands recruiter business entity compliance" RECRUITER_NL_BUSINESS_ENTITY "German recruiter business entity compliance" RECRUITER_DE_BUSINESS_ENTITY "UK contract type compliance" UK_CONTRACT_TYPE "UK contract type sole trader compliance" UK_CONTRACT_TYPE_SOLE_TRADER "UK PAYE employment compliance" UK_PAYE_EMPLOYMENT "UK PAYE required contract dates compliance" UK_PAYE_REQUIRED_CONTRACT_DATES "UK payroll compliance" UK_PAYROLL "UK payroll contract period compliance" UK_PAYROLL_CONTRACT_PERIOD "UK sole trader compliance" UK_SOLE_TRADER "UK sole trader classification compliance" UK_SOLE_TRADER_CLASSIFICATION "UK statement of work compliance" UK_STATEMENT_OF_WORK "UK tax compliance" UK_TAX "US contract type compliance" US_CONTRACT_TYPE "US tax compliance" US_TAX "US worker classification compliance" US_WORKER_CLASSIFICATION "US worker location compliance" US_WORKER_LOCATION "US W-2 retroactive start date compliance" US_W2_RETROACTIVE_START_DATE "UK valid contract setup compliance" UK_VALID_CONTRACT_SETUP "W2 hire compliance" W2_HIRE "Global worker classification compliance" GLOBAL_WORKER_CLASSIFICATION "NL insurance compliance" NL_INSURANCE "NL contract type compliance" NL_CONTRACT_TYPE "NL worker classification compliance" NL_WORKER_CLASSIFICATION "Valid VAT compliance" VALID_VAT "Employer of record" EMPLOYER_OF_RECORD "WCR acceptance" WCR_ACCEPTANCE "Contract end date" CONTRACT_START_AND_END_DATE "Payroll currency compliance" PAYROLL_CURRENCY "Statement of Work confirmation compliance" SO_W_CONFIRMATION "NL WAADI registration compliance for staffing agencies" NL_WAADI_REGISTRATION "NL SNA quality mark certification for staffing agencies" NL_SNA_CERTIFICATION "NL KvK (Chamber of Commerce) registration for staffing agencies" NL_KVK_REGISTRATION "NL BTW (VAT) identification for staffing agencies" NL_BTW_IDENTIFICATION "Business entity type validity compliance" BUSINESS_ENTITY_TYPE_VALIDITY "Business entity type update compliance (dashboard alert)" BUSINESS_ENTITY_TYPE_UPDATE "NL G-Account (Geblokkeerde Rekening) for staffing agency tax liability reserves" NL_G_ACCOUNT "NL BSN (Burgerservicenummer) for workers in the Netherlands" NL_BSN "NL KvK certificate upload compliance for freelancers" FREELANCER_NL_KVK_CERTIFICATE "NL KvK certificate upload compliance for staffing agencies" RECRUITER_NL_KVK_CERTIFICATE "NL supplier employment confirmation for staffing agencies" NL_SUPPLIER_EMPLOYMENT_CONFIRMATION "Client review of NL supplier employment confirmation" NL_SUPPLIER_EMPLOYMENT_CONFIRMATION_REVIEW "Verified worker compliance — company verification of a worker" VERIFIED_WORKER_COMPLIANCE "Worker onboarding — review of onboarding documents and required custom fields" WORKER_ONBOARDING "Required identification details" IDENTIFICATION "Verified staffing-agency compliance — company verification of a staffing agency" VERIFIED_RECRUITER_COMPLIANCE "Staffing-agency onboarding — review of onboarding documents and required custom fields" RECRUITER_ONBOARDING "End client input for supplier-managed worker classification" DETERMINATION_SUPPLIER_HIRE_CLIENT_INPUT "Supplier awaiting end client classification input" DETERMINATION_SUPPLIER_HIRE_AWAITING_CLIENT "Downstream supplier-mirror hire is out of draft and prepared by the staffing agency" SUPPLIER_HIRE_PREPARED } "The status of a contact." enum ContactStatus { "Contact was invited." INVITED "Contact is active." ACTIVE "Contact was declined." DECLINED "Contact applied." APPLIED "Contact application was blocked." BLOCKED } "The status for filtering contacts." enum ContactStatusFilter { "The status is either INVITED or ACTIVE." AVAILABLE "The status is not INVITED or ACTIVE." UNAVAILABLE } "The type of contract document." enum ContractDocType { "Key Information Document." KID "Generic contract document." GENERIC "Worker onboarding document." ONBOARDING "Staffing agency onboarding document." STAFFING_AGENCY_ONBOARDING } "The lifecycle status of a contract within a hire — draft, active, or archived." enum ContractStatus { "Draft" DRAFT "Active" ACTIVE "Archived" ARCHIVED } "The reasons for terminating an active contract with a worker." enum ContractTerminationReason { "The worker is no longer able to fulfil the contract." WORKER_UNAVAILABILITY "The project was finished ahead of schedule." PROJECT_COMPLETED_EARLY "Both the client and the worker agree to end the contract." MUTUAL_AGREEMENT_TO_TERMINATE "Financial limitations necessitate ending the contract early." BUDGET_CONSTRAINTS "Significant alterations in project requirements or objectives." CHANGE_IN_PROJECT_SCOPE "The work delivered does not meet expected standards." PERFORMANCE_ISSUES "Challenges in effective communication between parties." COMMUNICATION_ISSUES "Personal circumstances affecting the Worker’s ability to work." PERSONAL_REASONS "Legal matters or compliance regulations require termination." LEGAL_OR_COMPLIANCE_ISSUES "Breach of agreed-upon terms by one of the parties." VIOLATION_OF_CONTRACT_TERMS "Events beyond control, such as natural disasters or emergencies." UNFORESEEN_CIRCUMSTANCES "The quality of work is not satisfactory to the client." DISSATISFACTION_WITH_QUALITY_OF_WORK "A conflict has arisen that affects the working relationship." CONFLICT_OF_INTEREST "Any reason not covered above." OTHER } "The engagement model of a contract, which determines payment method and compliance requirements (e.g. PSC Contractor, PAYE, Statement of Work)." enum ContractType { "PSC" CONTRACT_TYPE_CONTRACTOR "SoW" CONTRACT_TYPE_SOW "PAYE" CONTRACT_TYPE_FT "Sole Trader" CONTRACT_TYPE_SOLE_TRADER "W2" CONTRACT_TYPE_W_2 "Unknown" CONTRACT_TYPE_UNKNOWN "Undetermined" CONTRACT_TYPE_UNDETERMINED "Default" CONTRACT_TYPE_DEFAULT "Classify" CONTRACT_TYPE_WORKSOME_CLASSIFY "Payroll" CONTRACT_TYPE_GLOBAL_PAYROLL "NL Payroll" CONTRACT_TYPE_NL_PAYROLL } "An ISO 3166-1 alpha-2 country code" enum CountryCode { "Andorra" AD "United Arab Emirates" AE "Afghanistan" AF "Antigua & Barbuda" AG "Anguilla" AI "Albania" AL "Armenia" AM "Angola" AO "Antarctica" AQ "Argentina" AR "American Samoa" AS "Austria" AT "Australia" AU "Aruba" AW "Åland Islands" AX "Azerbaijan" AZ "Bosnia & Herzegovina" BA "Barbados" BB "Bangladesh" BD "Belgium" BE "Burkina Faso" BF "Bulgaria" BG "Bahrain" BH "Burundi" BI "Benin" BJ "St. Barthélemy" BL "Bermuda" BM "Brunei" BN "Bolivia" BO "Caribbean Netherlands" BQ "Brazil" BR "Bahamas" BS "Bhutan" BT "Bouvet Island" BV "Botswana" BW "Belarus" BY "Belize" BZ "Canada" CA "Cocos (Keeling) Islands" CC "Congo - Kinshasa" CD "Central African Republic" CF "Congo - Brazzaville" CG "Switzerland" CH "Côte d’Ivoire" CI "Cook Islands" CK "Chile" CL "Cameroon" CM "China" CN "Colombia" CO "Costa Rica" CR "Cuba" CU "Cape Verde" CV "Curaçao" CW "Christmas Island" CX "Cyprus" CY "Czechia" CZ "Germany" DE "Djibouti" DJ "Denmark" DK "Dominica" DM "Dominican Republic" DO "Algeria" DZ "Ecuador" EC "Estonia" EE "Egypt" EG "Western Sahara" EH "Eritrea" ER "Spain" ES "Ethiopia" ET "Finland" FI "Fiji" FJ "Falkland Islands" FK "Micronesia" FM "Faroe Islands" FO "France" FR "Gabon" GA "United Kingdom" GB "Grenada" GD "Georgia" GE "French Guiana" GF "Guernsey" GG "Ghana" GH "Gibraltar" GI "Greenland" GL "Gambia" GM "Guinea" GN "Guadeloupe" GP "Equatorial Guinea" GQ "Greece" GR "South Georgia & South Sandwich Islands" GS "Guatemala" GT "Guam" GU "Guinea-Bissau" GW "Guyana" GY "Hong Kong SAR China" HK "Heard & McDonald Islands" HM "Honduras" HN "Croatia" HR "Haiti" HT "Hungary" HU "Indonesia" ID "Ireland" IE "Israel" IL "Isle of Man" IM "India" IN "British Indian Ocean Territory" IO "Iraq" IQ "Iran" IR "Iceland" IS "Italy" IT "Jersey" JE "Jamaica" JM "Jordan" JO "Japan" JP "Kenya" KE "Kyrgyzstan" KG "Cambodia" KH "Kiribati" KI "Comoros" KM "St. Kitts & Nevis" KN "North Korea" KP "South Korea" KR "Kuwait" KW "Cayman Islands" KY "Kazakhstan" KZ "Laos" LA "Lebanon" LB "St. Lucia" LC "Liechtenstein" LI "Sri Lanka" LK "Liberia" LR "Lesotho" LS "Lithuania" LT "Luxembourg" LU "Latvia" LV "Libya" LY "Morocco" MA "Monaco" MC "Moldova" MD "Montenegro" ME "St. Martin" MF "Madagascar" MG "Marshall Islands" MH "North Macedonia" MK "Mali" ML "Myanmar (Burma)" MM "Mongolia" MN "Macao SAR China" MO "Northern Mariana Islands" MP "Martinique" MQ "Mauritania" MR "Montserrat" MS "Malta" MT "Mauritius" MU "Maldives" MV "Malawi" MW "Mexico" MX "Malaysia" MY "Mozambique" MZ "Namibia" NA "New Caledonia" NC "Niger" NE "Norfolk Island" NF "Nigeria" NG "Nicaragua" NI "Netherlands" NL "Norway" NO "Nepal" NP "Nauru" NR "Niue" NU "New Zealand" NZ "Oman" OM "Panama" PA "Peru" PE "French Polynesia" PF "Papua New Guinea" PG "Philippines" PH "Pakistan" PK "Poland" PL "St. Pierre & Miquelon" PM "Pitcairn Islands" PN "Puerto Rico" PR "Palestinian Territories" PS "Portugal" PT "Palau" PW "Paraguay" PY "Qatar" QA "Réunion" RE "Romania" RO "Serbia" RS "Russia" RU "Rwanda" RW "Saudi Arabia" SA "Solomon Islands" SB "Seychelles" SC "Sudan" SD "Sweden" SE "Singapore" SG "St. Helena" SH "Slovenia" SI "Svalbard & Jan Mayen" SJ "Slovakia" SK "Sierra Leone" SL "San Marino" SM "Senegal" SN "Somalia" SO "Suriname" SR "South Sudan" SS "São Tomé & Príncipe" ST "El Salvador" SV "Sint Maarten" SX "Syria" SY "Eswatini" SZ "Turks & Caicos Islands" TC "Chad" TD "French Southern Territories" TF "Togo" TG "Thailand" TH "Tajikistan" TJ "Tokelau" TK "Timor-Leste" TL "Turkmenistan" TM "Tunisia" TN "Tonga" TO "Türkiye" TR "Trinidad & Tobago" TT "Tuvalu" TV "Taiwan" TW "Tanzania" TZ "Ukraine" UA "Uganda" UG "U.S. Outlying Islands" UM "United States" US "Uruguay" UY "Uzbekistan" UZ "Vatican City" VA "St. Vincent & Grenadines" VC "Venezuela" VE "British Virgin Islands" VG "U.S. Virgin Islands" VI "Vietnam" VN "Vanuatu" VU "Wallis & Futuna" WF "Samoa" WS "Yemen" YE "Mayotte" YT "South Africa" ZA "Zambia" ZM "Zimbabwe" ZW } "Currency" enum Currency { "CAD" CAD "DKK" DKK "EUR" EUR "GBP" GBP "NOK" NOK "SEK" SEK "USD" USD "AED" AED "SGD" SGD "AUD" AUD } "A custom fields type." enum CustomFieldType { "Single Select input field. Used to collect value from single select dropdown." SINGLE_SELECT "Free Text input field. This can be used to receive any text value" FREE_TEXT "Multi Select input field. Used to collect values from multi select dropdown." MULTI_SELECT "File Upload input field. Used to attach an uploaded file as the field value." FILE_UPLOAD } "Enum of available validation rules applicable to CustomFields" enum CustomFieldValidationRules { "Indicated that a CustomField is obligated to have a value when applied to a supporting entity" REQUIRED "Indicated that a CustomField is not obligated to have a value" NULLABLE } "The visibility of a custom field — whether it is hidden from the worker or editable by them." enum CustomFieldVisibility { "Custom field with this visibility will not be seen by the worker." INTERNAL "Custom field with this visibility will be available to the worker for input." WORKER } "The reason a timesheet registration was rejected by Worksome." enum CustomTimesheetRejectionReason { "One or more required fields were missing or had the wrong type." MISSING_REQUIRED_FIELD "The hireId did not resolve to a hire the authenticated account can submit timesheets for." HIRE_NOT_FOUND "The reportedDate falls outside the hire's contract start/end dates." DATE_OUTSIDE_CONTRACT_PERIOD } "The status of the employer record setup for a payroll employment, tracking whether required information has been provided." enum EmployerRecordStatus { "Incomplete" INCOMPLETE "Changes requested" CHANGES_REQUESTED "Processing" PROCESSING "Complete" COMPLETE } "The category grouping for an employment cost on a payroll engagement." enum EmploymentCostCategory { "General" GENERAL } "How often an employment cost is applied — ongoing (every pay period) or as a one-time charge." enum EmploymentCostFrequency { "Ongoing" ONGOING "One time" ONE_TIME } "How an employment cost is calculated — as a percentage of the worker's pay or as a fixed amount." enum EmploymentCostType { "Percentage" PERCENTAGE "Fixed" FIXED } "The columns that the employments list can be ordered by." enum EmploymentOrderByColumn { "The hire start date" START_DATE "The hire end date" END_DATE "The worker name" WORKER_NAME "The company that created the hire" COMPANY_NAME "The hire job name" JOB_NAME } "The lifecycle status of a payroll employment record associated with a hire." enum EmploymentStatus { "Draft" DRAFT "Active" ACTIVE "Ended" ENDED } "How a worker is engaged on a hire — as a contractor (direct payment), on payroll, via an external arrangement, or pending classification." enum EngagementType { "The engagement is payroll." PAYROLL "The engagement is a contractor." CONTRACTOR "The engagement is managed via an external source." EXTERNAL "The associated hire is awaiting an engagement type selection or classification result." PENDING } "The specific setup type of an engagement type." enum EngagementTypeSetup { "The engagement is W-2." W2 "The engagement is PAYE." PAYE "The engagement is Inside IR35." INSIDE_IR35 "The engagement is employee on payroll." GLOBAL_PAYROLL "The engagement is W-2 (via Worksome Classify)." W2_CLASSIFY "The engagement is PAYE (via Worksome Classify)." PAYE_CLASSIFY "The engagement is Inside IR35 (via Worksome Classify)." INSIDE_IR35_CLASSIFY "The engagement is Employee (via Worksome Classify)." GLOBAL_EMPLOYEE_CLASSIFY "The engagement is 1099." IC1099 "The engagement is Outside IR35." OUTSIDE_IR35 "The engagement is Sole Trader." SOLE_TRADER "The engagement is Statement of Work." STATEMENT_OF_WORK "The engagement is ZZP (Netherlands independent contractor)." CONTRACTOR_ZZP "The engagement is Default." DEFAULT "The engagement is 1099 (via Worksome Classify)." IC1099_CLASSIFY "The engagement is Outside IR35 (via Worksome Classify)." OUTSIDE_IR35_CLASSIFY "The engagement is Sole Trader (via Worksome Classify)." SOLE_TRADER_CLASSIFY "The engagement is Independent Contractor (via Worksome Classify)." GLOBAL_CONTRACTOR_CLASSIFY "The engagement is ZZP (via Worksome Classify)." CONTRACTOR_ZZP_CLASSIFY "The worker is engaged via an umbrella company." UMBRELLA "The associated hire is managed via a staffing agency." STAFFING_AGENCY "The engagement type setup is pending." PENDING } "The evaluation period selection indicates how quickly a company expects to evaluate candidates and reply to bids on their job posts." enum EvaluationPeriod { "Monthly" MONTH "Weekly" WEEK "Quickly and ongoing" QUICK } "Expected experience level of the worker." enum ExpectedExperienceLevel { "Student" STUDENT "Junior" JUNIOR "Mid level" MID_LEVEL "Senior" SENIOR "Expert" EXPERT } "Experience level" enum ExperienceLevel { "None" NONE "Student" STUDENT "New" NEW "One to four" ONE_TO_FOUR "Five to nine" FIVE_TO_NINE "Ten to fourteen" TEN_TO_FOURTEEN "Fifteen to twenty four" FIFTEEN_TO_TWENTY_FOUR "Twenty five plus" TWENTY_FIVE_PLUS "Senior" SENIOR } "The status of the export." enum ExportResponseStatus { "The export was successful." SUCCESS "The export experienced one or more errors." ERROR } "How a fee is applied when calculating or explaining an amount." enum FeeApplication { "The fee is added on top of the base amount." ADDITIVE "The fee is a constituent part of an already agreed amount." CONSTITUENT } "The basis on which a fee is calculated." enum FeeBasis { "A percentage of the total amount." PERCENTAGE "A fixed monetary rate per hour." HOURLY "A fixed monetary rate per day." DAILY "A fixed monetary rate per week." WEEKLY "A fixed monetary rate per month." MONTHLY } "The type of fee being applied." enum FeeType { "A referral fee paid to a staffing agency for sourcing a worker." REFERRAL } "The fluency of a language." enum Fluency { "Good." GOOD "Fluent." FLUENT } "The types of export that can be generated." enum GeneratorType { "Comma-separated values (CSV)." CSV } "The lifecycle status of a hire, from initial creation through completion or early termination. Draft: created but not yet offered, may be pending approval. Offered: awaiting worker acceptance. Ready: accepted but start date not yet reached. Active: engagement in progress. Ended: concluded naturally or job removed. Cancelled: cancelled before becoming active (includes approval rejections). Terminated: ended early by the company with a termination reason." enum HireActiveStatus { "Draft" DRAFT "Offered" OFFERED "Ready" READY "Active" ACTIVE "Ended" ENDED "Cancelled" CANCELLED "Terminated" TERMINATED } "The columns that the hires list can be ordered by." enum HireOrderByColumn { "The hire start date" START_DATE "The hire end date" END_DATE "The company that created the hire" COMPANY_NAME "The worker name" WORKER_NAME "The hire job name" JOB_NAME "The hire id" HIRE_ID "The hire created at date" CREATED_AT "The hire engagement type" ENGAGEMENT_TYPE "The date the worker last submitted a payment request" LAST_PAYMENT_REQUEST_DATE } "The type of identification document a worker has provided for compliance." enum IdentificationDocumentType { "A government-issued passport." PASSPORT "A government-issued national identity card." NATIONAL_ID_CARD "A residence permit issued by the worker's country of residence." RESIDENCE_PERMIT } "The type of insurance for a worker." enum InsuranceType { "General liability insurance" GENERAL_LIABILITY "Umbrella insurance" UMBRELLA_INSURANCE "Professional indemnity insurance" PROFESSIONAL_INDEMNITY "Workers compensation insurance" WORKERS_COMPENSATION } "The payment status of an invoice issued to a company." enum InvoiceStatus { "Invoice has been paid." PAID "Invoice has not been paid." UNPAID "Invoice has not been paid and is overdue." OVERDUE "Invoice has been credited." CREDITED } "The transaction type of an invoice to use." enum InvoiceTransactionType { "Invoice" INVOICE "Credit Note" CREDIT_NOTE "Batch Invoice" BATCH_INVOICE } "The columns that invoices can be ordered by." enum InvoicesOrderByColumn { "The date the invoice was created." DATE "The due date." DUE_DATE "The invoice number." NUMBER "The net total." TOTAL_AMOUNT } "An enum representing the step a JobCandidate is at in the hiring process" enum JobCandidateHiringStep { "A JobCandidate in the shortlisted (they have been added as a candidate) hiring step" SHORTLISTED "A JobCandidate in the invited to apply (the job has been shared with them) hiring step" INVITED_TO_APPLY "A JobCandidate in the applied (they have submitted an offer) hiring step" APPLIED "A JobCandidate in the (they have a hire for the job) hiring step" HIRING "The supplier has uploaded a candidate. No action has been taken by the MSP yet." SELECTION_SUBMITTED "The MSP is reviewing the CV and assessing the candidate against the hard requirements of the request." SELECTION_UNDER_REVIEW "The MSP has shortlisted the candidate with another runner-up." SELECTION_SHORTLISTED "The candidate does not meet the requirements. A reason should be provided (e.g., rate, skills)." SELECTION_DECLINED_BY_MSP "The candidate has withdrawn themselves from the process." SELECTION_WITHDRAWN "The MSP has approved the candidate and presented them to the client." SELECTION_PRESENTED_TO_CLIENT "The client has indicated that they want to speak with the candidate." INTERVIEW_SELECTED "The date and time have been confirmed and recorded in the system." INTERVIEW_SCHEDULED "The interview is completed; we are waiting for feedback from the client or candidate." INTERVIEW_COMPLETED "The candidate or supplier has withdrawn themselves from the process." INTERVIEW_WITHDRAWN "The MSP is hesitant or is comparing the candidate with another runner-up." INTERVIEW_SHORTLISTED "The client does not choose this candidate after the interview." COMPLETION_REJECTED_BY_CLIENT "The MSP decides to not accept candidate anymore." COMPLETION_DECLINED_BY_MSP "The candidate/supplier has withdrawn themselves from the process." COMPLETION_WITHDRAWN "The client wants the candidate; the contract proposal is with the supplier." COMPLETION_OFFER_EXTENDED "The supplier/freelancer is to provide all documents and information." COMPLETION_CANDIDATE_ONBOARDING "The MSP's turn to screen all documents and information." COMPLETION_BACKGROUND_CHECK "The contract is signed. Recruitment for this request is closed." COMPLETION_HIRED "Candidates on hold until interviews with other candidates have taken place." COMPLETION_ON_HOLD "Link a candidate to a talent pool across organizations." COMPLETION_TALENTPOOL } "The columns that the job candidates list can be ordered by." enum JobCandidateOrderByColumn { "The name of the worker." WORKER_NAME "The job candidate hiring step" HIRING_STEP "The job candidate updated at timestamp" UPDATED_AT } "A job candidate may be in several statuses depending on decision taken during hiring process." enum JobCandidateStatus { "Indicates a job candidate still eligible for a Job." ELIGIBLE "Indicates a job candidate not being eligible for the Job anymore." NON_ELIGIBLE "Indicates a job candidate which was submitted while already being submitted by someone else." DUPLICATE } "Specific reason for having made a JobCandidate non-eligible to be a candidate anymore" enum JobCandidateStatusReason { "Skills or experience" SKILLS_OR_EXPERIENCE "Specific job criteria" SPECIFIC_JOB_CRITERIA "Availability" AVAILABILITY "Market eligibility" MARKET_ELIGIBILITY "Budget" BUDGET "Accepted other job" ACCEPTED_OTHER_JOB "Other candidate accepted" OTHER_CANDIDATE_ACCEPTED "Added by mistake" ADDED_BY_MISTAKE "Existing application through other channels" EXISTING_APPLICATION_THROUGH_OTHER_CHANNELS } "The expected duration or end date of a job engagement." enum JobEndTimeframe { "1 month" ONE_MONTH "Three months" THREE_MONTHS "Six months" SIX_MONTHS "On date" ON_DATE "Open" OPEN } "The columns that the jobs list can be ordered by." enum JobOrderByColumn { "The job created at" CREATED_AT "The expected start date" EXPECTED_START_DATE "The published date" PUBLISHED_DATE "Order by the number of candidates on the job." CANDIDATES } "The columns that the job shares list can be ordered by." enum JobShareOrderByColumn { "The date and time that the job share was created." CREATED_AT } "When the company expects the job engagement to start." enum JobStartTimeframe { "As soon as possible (ASAP)" ASAP "Next month" NEXT_MONTH "On Date" ON_DATE } "The lifecycle status of a job posting. Draft jobs are not yet published — use updateJob to complete details and publish. Active jobs are visible and accepting bids. Completed jobs have been closed after filling or manually. Removed jobs were discarded before any hires." enum JobStatus { "Draft" DRAFT "Active" ACTIVE "Completed" COMPLETED "Removed" REMOVED } "Who can see a job posting — trusted contacts in the Talent Pool, staffing agencies, or all workers on the marketplace." enum JobVisibility { "The job is visible to trusted contacts." VISIBLE_FOR_TRUSTED_CONTACTS "The job is visible to recruiters." VISIBLE_FOR_RECRUITERS "The job is visible on the marketplace." VISIBLE_FOR_MARKETPLACE } "The name of a language." enum LanguageName { "Arabic" ARABIC "English" ENGLISH "French" FRENCH "Spanish" SPANISH "German" GERMAN "Italian" ITALIAN "Danish" DANISH "Swedish" SWEDISH "Norwegian" NORWEGIAN "Finnish" FINNISH "Dutch" DUTCH "Russian" RUSSIAN "Lithuanian" LITHUANIAN "Greek" GREEK "Polish" POLISH "Portuguese" PORTUGUESE "Chinese (Mandarin)" CHINESE_MANDARIN } "The format of a timesheet submission — structured sheet, uploaded file, free-text entry, or standard timesheet." enum LegacyTimesheetType { "File" FILE "Sheet" SHEET "Text" TEXT "Timesheet" TIMESHEET } "A locale identifier." enum Locale { "English." ENGLISH "Danish." DANISH "French." FRENCH "German." GERMAN "Dutch." DUTCH } "The location preference." enum LocationPreference { "Onsite" ONSITE_ONLY "Hybrid" ONSITE_SOME "Remote" REMOTE_ONLY } "The market code." enum MarketCode { "Us" US "Uk" UK "Ie" IE "Eu" EU "Ca" CA "Fr" FR "De" DE "Dk" DK "No" NO "Se" SE "Fi" FI "Lt" LT "Uae" UAE "Sg" SG "Au" AU "Nl" NL "Ww" WW } "The status of a deliverable-based milestone, tracking whether payment has been requested and completed." enum MilestoneStatus { "Milestone is pending completion." PENDING "Payment has been requested for the milestone." PAYMENT_REQUESTED "Milestone has been completed." COMPLETED } enum MultiFactorChannel { EMAIL SMS TOTP } enum MultiFactorStatus { APPROVED PENDING CANCELLED FAILED } "SNA certification status for Dutch staffing agencies. Determines G-Account split percentage." enum NlSnaStatus { "Agency holds valid SNA quality mark (NEN 4400-1)." CERTIFIED "Agency does not hold SNA certification." NOT_CERTIFIED "SNA certification does not apply." NOT_APPLICABLE } "Aggregate functions when ordering by a relation without specifying a column." enum OrderByRelationAggregateFunction { "Amount of items." COUNT } "Aggregate functions when ordering by a relation that may specify a column." enum OrderByRelationWithColumnAggregateFunction { "Average." AVG "Minimum." MIN "Maximum." MAX "Sum." SUM "Amount of items." COUNT } "The overtime calculation period — daily, weekly, or based on sixth/seventh consecutive working days." enum OvertimeType { "Daily" DAILY "Weekly" WEEKLY "Sixth Day" SIXTH_DAY "Seventh Day" SEVENTH_DAY } "The columns that the payment requests list can be ordered by." enum PaymentRequestOrderByColumn { "The date and time that the payment request was submitted" ISSUED_AT "Pending requests first, then by issued date" PRIORITY "The name of the worker associated with the payment request" WORKER "The total amount of the payment request" TOTAL_AMOUNT } "The approval status of a payment request from the company's perspective." enum PaymentRequestStatus { "Approved" APPROVED "Cancelled" CANCELLED "Unapproved" UNAPPROVED "Rejected" REJECTED } "The basis for a payment request — time-based (hours/days), a fixed amount, or expenses." enum PaymentRequestType { "Time based payment request." TIME "Amount based payment requests." AMOUNT "Expenses added to a payment request." EXPENSES } "Which side of a payment request the viewer is being asked about." enum PaymentRequestViewerRole { "The viewer is the one paying." PAYER "The viewer is the one being paid." PAYEE "Either side." ANY } "The worker payout status for a payment request, as seen by the company." enum PaymentRequestWorkerPayoutStatus { "The worker has been paid." PAID "The worker has been prepaid (paid in advance)." PREPAID "The payment is due but not yet overdue." DUE "The payment is overdue." OVERDUE "The payment request has not been paid yet." UNPAID } "The status of a payment request as seen by the worker who submitted it." enum PaymentRequestWorkerStatus { "Draft" DRAFT "Rejected" REJECTED "Cancelled" CANCELLED "Processing" PROCESSING "Completed" COMPLETED "Requested" REQUESTED "Approved" APPROVED } "The payment scheme." enum PaymentScheme { "Any" ANY "Company" COMPANY "Global payroll" GLOBAL_PAYROLL "Uk paye" UK_PAYE "Uk paye ir35" UK_PAYE_IR35 "Us payroll" US_PAYROLL "Us payroll ws" US_PAYROLL_WS "Dk payroll" DK_PAYROLL "Dk b income" DK_B_INCOME "Au payroll" AU_PAYROLL "Partner eor" PARTNER_EOR } "The different days supported as payment terms." enum PaymentTermDays { "Indicates an eight day payment term." EIGHT "Indicates an fourteen day payment term." FOURTEEN "Indicates an twenty one day payment term." TWENTY_ONE "Indicates an thirty day payment term." THIRTY "Indicates an forty five day payment term." FORTY_FIVE "Indicates an fifty three day payment term." FIFTY_THREE "Indicates an sixty day payment term." SIXTY "Indicates an seventy five day payment term." SEVENTY_FIVE "Indicates an ninety day payment term." NINETY } "The method of payment over a specified term." enum PaymentTermMethod { "End of the month." END_OF_MONTH "Net." NET } "The status for filtering projects." enum ProjectStatusFilter { "Project is open." OPEN "Project has been ended." ENDED } "The billing frequency for a hire or payment request — hourly, daily, weekly, monthly, or a fixed amount." enum RateType { "Hourly" HOURLY "Daily" DAILY "Weekly" WEEKLY "Monthly" MONTHLY "Fixed" FIXED "Unknown" UNKNOWN } "Rolled-up label describing a staffing agency's commercial relationship with a candidate." enum RecruiterCandidateRelationshipLabel { "Staffing agency fully manages at least one engagement for this worker." MANAGED "Staffing agency has at least one referral-fee engagement for this worker, none managed." REFERRAL "Worker is on the staffing agency's candidate list with no engagement yet." LISTED } "The compliance review status of a staffing agency, mirroring the status pill shown on the compliance tracker row." enum RecruiterComplianceStatus { "The staffing agency hasn't started or completed all sub-compliances yet." INCOMPLETE "All sub-compliances are complete and the staffing agency is awaiting review." READY_TO_REVIEW "The reviewer requested changes from the staffing agency." CHANGES_REQUESTED "The reviewer has cleared the staffing agency." CLEARED } "The onboarding status of a staffing agency." enum RecruiterOnboardingStatus { "Staffing agency has pending onboarding requirements." PENDING "Staffing agency onboarding is completed." COMPLETED } "The columns that the recruiters list can be ordered by." enum RecruiterOrderByColumn { "The name of the recruiter." RECRUITER_NAME "The market the recruiter is on." RECRUITER_MARKET "The recruiter fee." RECRUITER_FEE "The recruiter ownership days." RECRUITER_OWNERSHIP_DAYS "The recruiter invite status." RECRUITER_STATUS "The date the staffing agency was invited." RECRUITER_INVITED_AT "The date the staffing-agency compliance was last updated." COMPLIANCE_UPDATED_AT } "The outcome of a staffing-agency compliance review." enum RecruiterReviewDecision { "The reviewer marks the staffing agency's compliance as cleared." CLEARED "The reviewer asks the staffing agency to supply or correct information. A note is delivered to the staffing agency." CHANGES_REQUESTED } "Status for recruiter invites." enum RecruiterStatus { "Recruiter active status." ACTIVE "Recruiter invited status." INVITED } "The columns that the skills list can be ordered by." enum SkillOrderByColumn { "The skill name localized to current user local." NAME } "The types that the skills can be applied to." enum SkillableType { "Skills applying to Workers" WORKER "Skills applying to TrustedContacts" TRUSTED_CONTACT "Skills applying to Jobs" JOB } "Directions for ordering a list of records." enum SortOrder { "Sort records in ascending order." ASC "Sort records in descending order." DESC } "A job candidate sourcing channel origin." enum SourcingChannel { "A job candidate originated from trusted contact." TRUSTED_CONTACT "A job candidate originated from recruiter candidate submission." CANDIDATE_SUBMISSION "A job candidate originated from recruiter attribution." RECRUITER_ATTRIBUTION "A job candidate originated from Marketplace." MARKETPLACE } "Tracks a pending choice for a job's sourcing deadline while it is still unresolved (sourcing_end_date is null and the job is not yet published). Cleared once sourcing_end_date is set, either by resolving "use default" at publish time or by the user picking a custom date directly." enum SourcingDeadlineChoice { "Use the company's configured default number of hours, resolved when the job is published." USE_DEFAULT "Explicitly no sourcing deadline." NONE } "The unit of a duration for a timesheet registration." enum TimesheetRegistrationDurationUnit { "Hours." HOURS "Days." DAYS } "The type of an individual entry within a timesheet — a full day, a break period, or a line item." enum TimesheetRegistrationType { "Day." DAY "Break." BREAK "Line." LINE } "Specify if you want to include or exclude trashed results from a query." enum Trashed { "Only return trashed results." ONLY "Return both trashed and non-trashed results." WITH "Only return non-trashed results." WITHOUT } "The options representing the hire history of a Trusted contact" enum TrustedContactHireHistory { "The contact has been previously hired by the company" PREVIOUSLY_HIRED "The contact has never been hired by the company" NOT_PREVIOUSLY_HIRED } "The options representing the hire status of a Trusted contact" enum TrustedContactHireStatus { "The contact is currently hired in one of the given companies" CURRENTLY_HIRED "The contact is not currently hired in one of the given companies" NOT_CURRENTLY_HIRED } "Who currently manages a trusted contact's profile — the worker themselves, a staffing agency, or no one (unmanaged)." enum TrustedContactManagedStatus { "The Trusted Contact profile is currently managed by a staffing agency." STAFFING_AGENCY "The Trusted Contact profile is managed by the worker themselves." WORKER "A staffing agency's ownership has expired and the worker has not yet claimed the account." UNMANAGED } "The onboarding status of a trusted contact." enum TrustedContactOnboardingStatus { "Trusted contact has pending onboarding requirements (documents or custom fields)." PENDING "Trusted contact onboarding is completed." COMPLETED } "The columns that the trusted contacts list can be ordered by." enum TrustedContactOrderByColumn { "The name of the worker." WORKER_NAME "The number of jobs taken by the worker with the viewing company." WORKER_JOBS_COUNT "The market the worker is on." WORKER_MARKET "The country the worker is in." WORKER_COUNTRY "The business setup of the worker." WORKER_BUSINESS_SETUP "The name of the company the worker belongs to." WORKER_COMPANY_NAME "The point in time the relationship was created" WORKER_DATE_ADDED "The last time the relationship status was updated" WORKER_STATUS_UPDATED "Sort by the right to work verification status on the worker." WORKER_RTW_VERIFICATION "The date the worker compliance was last updated." COMPLIANCE_UPDATED_AT } "The origin of the Trusted contact" enum TrustedContactOrigin { "The contact was invited by the company" INVITED "The contact was automatically added" ADDED } "The channel the trusted contact arrived from" enum TrustedContactOriginChannel { "Existing setup." EXISTING_SETUP "Invited directly by the company" DIRECT_INVITE "Invited through a personal invite link" PERSONAL_INVITE "Added through recruiter submission or Staffing agency hire" CANDIDATE_SUBMISSION "Added after hire from marketplace" MARKETPLACE_HIRE "Signed up through invite link" EXTERNAL_LINK "Added after hired through Organisation Talent pool" ORGANISATION_HIRE } "The staffing agency assignment status for a worker." enum TrustedContactStaffingAgencyStatus { "A staffing agency has ownership of the worker." HAS_OWNERSHIP "A staffing agency does not have ownership of the worker." NO_OWNERSHIP } "A type that can have an custom field applied to it." enum TypeSupportingCustomFieldValues { "A Job" JOB "A Contract" CONTRACT "A Trusted Contact" TRUSTED_CONTACT "A Payment request" PAYMENT_REQUEST "A Company Recruiter relationship" COMPANY_RECRUITER } "The status of a user group used in approval workflows — active groups can be assigned as approvers." enum UserGroupStatus { "Active" ACTIVE "Inactive" INACTIVE "Archived" ARCHIVED } "The compliance review status of a worker, mirroring the status pill shown on the compliance tracker row." enum VerifiedWorkerComplianceStatus { "The worker hasn't started or completed all sub-compliances yet." INCOMPLETE "All sub-compliances are complete and the worker is awaiting review." READY_TO_REVIEW "The reviewer requested changes from the worker." CHANGES_REQUESTED "The reviewer has cleared the worker." CLEARED } "Sds supersede type" enum WcrSupersedeType { "Dispute" DISPUTE "Override" OVERRIDE } "The types of events that can trigger a webhook." enum WebhookEventType { "Triggered when a contract is accepted by a worker." CONTRACT_ACCEPTED "Triggered when a hire ends." HIRE_ENDED "Triggered when a hire is accepted." HIRE_ACCEPTED "Triggered when a hire is cancelled." HIRE_CANCELLED "Triggered when a hire is updated." HIRE_UPDATED "Triggered when a trusted contact is updated." TRUSTED_CONTACT_UPDATED "Triggered when a hire is terminated." HIRE_TERMINATED "Triggered when a payment request is issued." PAYMENT_REQUEST_ISSUED "Triggered when a payment request is approved." PAYMENT_REQUEST_APPROVED "Triggered when a payment request is rejected." PAYMENT_REQUEST_REJECTED "Triggered when a payment request is paid by the company." PAYMENT_REQUEST_PAID "Triggered when a payment request is cancelled." PAYMENT_REQUEST_CANCELLED "Triggered when a worker has been paid out for a payment request." PAYMENT_REQUEST_WORKER_PAID_OUT "Triggered when a recruiter has been paid out for a payment request." PAYMENT_REQUEST_RECRUITER_PAID_OUT "Triggered when an invoice is created." INVOICE_CREATED "Triggered when an invoice is paid." INVOICE_PAID "Triggered when a credit note is created." CREDIT_NOTE_CREATED } "The outcome of a worker compliance review." enum WorkerReviewDecision { "The reviewer marks the worker's compliance as cleared." CLEARED "The reviewer asks the worker to supply or correct information. A note is delivered to the worker." CHANGES_REQUESTED } """ This enum defines operators for use with approval rules. Should be used as VariableValue WorkflowVariableOperator RuleValue """ enum WorkflowVariableOperator { "Variable value is less than rule value" LESS "Variable value is greater than rule value" GREATER "Variable value is less than or equals rule value" LESS_OR_EQUALS "Variable value is greater than or equals rule value" GREATER_OR_EQUALS "Variable value equals rule value" EQUALS "Variable value does not equal rule value" NOT_EQUALS "Variable value contains rule value" CONTAINS "Variable value does not contain rule value" DOES_NOT_CONTAIN "Variable value changed" CHANGED } "The input used for hiring." input AcceptBidInput { "The ID of the bid which the hire should be based on." bid: ID! """ The ID of the person in the company which is responsible for the contact. If not supplied, the currently authenticated user will be used. """ contactPerson: ID """ The ID of the person in the company which is responsible for the billing. If not supplied, the currently authenticated user will be used. """ billingContactPerson: ID """ The date that the contract should start. This date is used on the draft contract. """ startDate: Date """ The date that the contract should end. This date is used on the draft contract. """ endDate: Date """ The title of the job the person will be hired to do. If not filled out, the job title from the job of the bid will be used. This title is used on the draft contract. """ jobTitle: String """ The description of the hire job. If not filled out, the job description from the job of the bid will be used. This title is used on the draft contract. """ jobDescription: String "The payment term method for the contract." paymentTermMethod: PaymentTermMethod "The amount of days to use with the payment term method for the contract." paymentTermDays: PaymentTermDays "The Purchaser Order Number for the contract." purchaseOrderNumber: String """ Any additional terms to the contract. The contract is always subject to the terms and conditions for Worksome's platform. """ additionalTerms: String """ The address for where the work will be taken place. This will be part of the contract also. The Address should be a full address, with city and postal code. """ workplaceAddress: String """ Any text which should be included in all invoices that are part of this hire. This text will be shown on the top of each invoice once they are created. """ customInvoiceText: String """ The company name used on the contract. If not set the current company name will be used instead. """ companyName: String """ The company address used on the contract. If not set the current company address will be used instead. """ companyAddress: String """ The company zip code used on the contract. If not set the current company zip code will be used instead. """ companyZipCode: String """ The company city used on the contract. If not set the current company city will be used instead. """ companyCity: String """ The company country used on the contract. If not set the current company country will be used instead. """ companyCountry: String "The recruiter for which will be attributed to the hire." recruiter: RecruiterInput "Close other conversations if true." closeOtherConversations: Boolean "Message to send when closing other conversations." closingMessage: String "Attached documents." attachments: [ID!] "An identifier associated with the hire from an external system." externalIdentifier: String } "The input for taking action on an approval request." input ActionApprovalApprovableInput { "The ID of the approval request to act on." id: ID! "The action to take: `APPROVED`, `REJECTED`, or `NEEDS_CHANGE`." status: ApprovalApprovableState "An optional message explaining the decision (required when rejecting or requesting changes)." reason: String } "An input for storing the given address." input AddressInput { "The address." address: String "The post code (ZIP code)." postCode: String "The city." city: String "The country alpha2-code." country: String "The state alpha2-code, if applicable." state: String } "The input for sorting approval requests." input ApprovalApprovablesOrderByClauseInput { "The field to sort by." field: ApprovalApprovableOrderByColumn "The sort direction." order: SortOrder } "Input for approving employment changes." input ApproveEmploymentChangesInput { "The ID of the employment to approve changes for." employment: ID! } "The details for approving a trusted contact." input ApproveTrustedContactInput { "The ID of the trusted contact to be deleted." id: ID! } "An input for additional arguments for the export." input ArgsInput { "A list of company IDs to include in the export." companies: [Int!]! "The date for the start of the export." dateFrom: Date "The date for the end of the export." dateTo: Date "Additional information and metadata." meta: String } "The input used for attaching one or more jobs to a project." input AttachJobsToProjectInput { "Jobs to be added to the project." jobs: [ID!]! "The project containing jobs." project: ID! } "The input used for attaching one or more users to a group." input AttachUsersToUserGroupInput { "The user group containing users." userGroup: ID! "Users to be attached to the group." users: [ID!] } "The input object used for attributing a recruiter to a hire." input AttributeRecruiterToHireInput { "The ID of the hire." hire: ID! "The ID of the recruiter." recruiter: ID! """ The fee the recruiter is taking as a percentage. Prefer `feeRate`, which also supports a fixed amount per unit of time. """ fee: StrictPercentage """ The recruiter's fee as a rate and basis. Supports a percentage or a fixed amount per unit (hourly, daily, weekly, monthly). Takes precedence over `fee` when both are provided. The currency is taken from the hire. """ feeRate: FeeInput """ The amount of days the recruiters ownership period exist in. A null value indicates the staffing agency's ownership never expires. """ ownershipDays: Int "The date that the ownership starts." ownershipStartDate: Date! } "The input object used for attributing a supplier (Company or Recruiter) to a hire." input AttributeSupplierToHireInput { "The ID of the hire." hire: ID! "The global ID of the supplier account (Company or Recruiter)." supplier: ID! "The fee the supplier takes as a percentage." fee: StrictPercentage } "Scope for selecting which items in the batch to target." input BatchActionScopeInput { "Only operate on these item IDs." ids: [ID!] "Exclude these item IDs from the operation." excludeIds: [ID!] "Only operate on items with this status." status: BatchItemStatus } "The BBAN input details." input BbanInput { "The Bank-State-Branch or BSB number." bsb: String "The bank ID." bankId: String "The bank code." bankCode: String "The bank branch ID." branchId: String "The bank branch code." branchCode: String "The bank account number." accountNumber: String "The bank account suffix." accountSuffix: String "The bank institution number" institutionNumber: String "The bank transit number." transitNumber: String "The bank registration number." registrationNumber: String "The bank routing code." routingCode: String "The bank sort code." sortCode: String "The bank purpose of payment code." purposeOfPayment: String } "An input for ordering bids." input BidOrderByClauseInput { "The field to order by." field: BidOrderByColumn! "The direction to order by." order: SortOrder! } "The details for blocking a trusted contact." input BlockTrustedContactInput { "The ID of the trusted contact to be blocked." id: ID! "The account performing the block." account: ID! } "The input object used for all the information required to cancel a hire." input CancelHireInput { "The ID of the hire." hire: ID! "The reason for canceling the hire." message: String! } "The details required for changing the email." input ChangeEmailInput { """ The ID of the user whose email address should be updated. If this is `null` or excluded, the currently authenticated user's email will be changed. """ user: ID "The new email for the user." email: String! } """ The input for creating a new approval flow. After creating the approval, use `createApprovalRule` to add conditions and then `createApprover` to assign user groups who will review matching items. Alternatively, use `createWorkflow` to create the entire approval flow (root, rules, and approvers) in a single operation. """ input CreateApprovalInput { "The display name for the approval flow." name: String! """ Whether the approval should be active immediately. Only `ACTIVE` approvals are evaluated when triggering events occur. """ status: ApprovalStatus! "The event that triggers this approval flow (e.g. hire created, contract changed)." trigger: ApprovalTrigger! "A human-readable description of the approval flow's purpose." description: String "The company that the approval flow belongs to." company: ID! } "The input for adding a rule to an approval flow." input CreateApprovalRuleInput { "The ID of the approval flow to add this rule to." approval: ID! """ The conditions that determine when this rule triggers. Each condition compares a workflow variable against a threshold value. """ rules: [CreateWorkflowVariableFieldInput!]! } "The input for assigning a user group as an approver on an approval rule." input CreateApproverInput { "The ID of the approval rule to assign this approver to." approvalRule: ID! "The ID of the user group whose members will review approval requests." userGroup: ID! "The position in the approval sequence (1-based). Lower positions are notified first." position: Int! } "The input used for creating batches." input CreateBatchInput { "The account that the batch is for." account: ID! "The type of batch to create." type: BatchType! "A list of items to add to the batch." items: [ID!] } "The details for adding and inviting a recruiter." input CreateCompanyRecruiterInput { "The company that the recruiter relationship is for." company: ID! "The invited recruiter name." name: String! "The recruiter email." email: String! "The recruiter fee." recruiterFee: Float "The ownership days of the recruiter." recruiterOwnershipDays: Int "The message that will be sent to the recruiter." message: String "The tags to associate with the recruiter." tags: [String!] "An identifier associated with the company recruiter from an external system." externalIdentifier: String """ Whether the recruiter manages workers for this company relationship. When null, the company-level default is used. """ managesWorkers: Boolean "The custom fields for the company recruiter." customFieldValues: [CustomFieldTypeValueInput!] } "The input for creating a custom field." input CreateCustomFieldInput { "The account that will own the custom field." account: ID! "The custom field type." fieldType: CustomFieldType! = SINGLE_SELECT "The type to which the custom field is applying to." appliesTo: TypeSupportingCustomFieldValues! "The title or label of the custom field." title: String! """ A unique human-readable key for the custom field, preferably in a slug format with lowercase and hyphens to replace spaces. The key is only unique within the same account. """ slug: String "The description of the custom field." description: String "The settings to apply to the custom field." settings: CustomFieldSettingsInput! "The visibility of the custom field." visibility: CustomFieldVisibility! = INTERNAL "Whether the field is enabled for approval workflows." approval: Boolean "Configures the field to be enabled for api updates only." apiOnly: Boolean """ Configures the field to allow worker input. When enabled, workers can provide values for this field through the worker API. """ workerInputAllowed: Boolean """ Configures the field to allow recruiter (staffing agency) input. When enabled, recruiters can provide values for this field through the recruiter API. """ recruiterInputAllowed: Boolean "Configures the field to surface its values on client invoices." showOnInvoice: Boolean """ Configures the field to be shared with client companies. When enabled, clients of the supplier that owns this field will see it during job sharing. """ sharedWithClients: Boolean "Configures the field's values to be visible to staffing agencies the company shares the job with." sharedWithStaffingAgencies: Boolean """ The list of options which will be available for custom field values. Only applies to some custom field types (e.g. `SINGLE_SELECT`) """ options: [CustomFieldCustomFieldOptionInput!] } "An input for creating a custom timesheet." input CreateCustomTimesheetInput { """ The schema for the data format of the submitted timesheet data. Contact Worksome to obtain information on supported schemas. """ schema: String! "The custom data for the timesheet." data: String! } "An input for creating an export." input CreateExportInput { "The ID of the user to create an export for." userId: Int! "The ID of the impersonator that is creating the export." impersonatorId: Int "The ID of the account to create an export for." accountId: Int! "The type of account to create an export for." accountType: String! "The type of processor to use for the export." type: String! "The type of generator (format) that is creating the export." generatorType: String! "The methods and locations that the export should be delivered to." deliveries: [String!]! "Additional arguments to record for the export." args: ArgsInput! } "The details for creating a job candidate." input CreateJobCandidateInput { "The job for which the candidates are for." job: ID! "The workers that should be candidates for the specified job." workers: [ID!]! "The sourcing channel that the candidates are from." sourcingChannel: SourcingChannel! } """ The input for creating a new job. `createJob` is a minimal first step that creates the job in `DRAFT` status with only the required fields. Use `updateJob` afterwards to set the full job details (description, rates, dates, location, visibility, etc.) and to publish the job when it is ready. """ input CreateJobInput { "The company that the job is for." company: ID! "The title of the job." name: String! "The owners of the job posting. If omitted, the authenticated user becomes the owner." owners: [ID!] "The skills required for the job." skills: [String!]! """ **Experimental.** Marks the job as a lightweight brief rather than a full job post. """ isBrief: Boolean } "An input for creating a job share." input CreateJobShareInput { "The job that the job share is for." job: ID! "The accounts to share the job with." accounts: [ID!]! } "The input for creating a milestone." input CreateMilestoneInput { "The name of the milestone." name: String! "The Purchase Order (PO) number for the milestone." purchaseOrderNumber: String "The due date for the milestone." dueDate: Date! "The total cost for the milestone." amount: Float! "The ID of the hire that the milestone is for." hire: ID! } "The input for creating one or more milestones." input CreateMilestonesInput { "The milestones to create." milestones: [CreateMilestoneInput!]! } "An input for creating a note." input CreateNoteInput { "The body of the note." body: String! "The title of the note." title: String = "" "The account that the note is related to." accountId: ID! "The entity that the note is for." notableId: ID! } "The details required for creating a password." input CreatePasswordInput { "The password which will be set on the user." password: String! } "An input for creating a payment request." input CreatePaymentRequestInput { "The worker that is creating the payment request." worker: ID! "The job that the payment request is for." job: ID! "The company that the payment request is for." company: ID! "The hire that the payment request is for." hire: ID! "The date that the payment request started." startDate: Date! "The date that the payment request ended (if applicable)." endDate: Date "The expense reports for the payment request." expenseReports: [ID!] "The rate for the payment request." rate: Float "The billable time for the payment request." billableTime: Float "The billable total for the payment request." billableTotal: Float "Comments related to the payment request." comments: String! "A list of tax lines." taxLines: [TaxLineInput!] "The timesheet to link to the payment request." timesheet: ID } "The input used for projects." input CreateProjectInput { "The name of the project." name: String! "The description of the project." description: String "The internal budget of the project." internalBudget: Float "The company that the project is for." company: ID! "The owners of the project." owners: [ID!] "An identifier associated with the project from an external system." externalIdentifier: String } "The details for adding and inviting a recruiter candidate." input CreateRecruiterCandidateInput { "The recruiter that the recruiter candidate relationship is for." recruiter: ID! "The invited candidate first name" firstName: String! "The invited candidate middle name" middleName: String "The invited candidate last name" lastName: String! "The candidate email." email: String! "The invited candidate country of residence." country: String "The invited candidate country state, if applicable." state: String "The candidate job title." jobTitle: String "The candidates currency." currency: String! "The hourly rate of the candidate." hourlyRate: Float "The daily rate of the candidate." dailyRate: Float "The monthly rate of the candidate." monthlyRate: Float "The tags to associate to the candidate." tags: [String!]! "The links related tot he candidate." links: [String!]! "The files attached to the relationship." files: [ID!] } "An input for creating a new SMS multi-factor authentication implementation." input CreateSmsMultiFactorInput { "An optional name for the SMS multi-factor authentication implementation." name: String } "The details for adding and inviting a supplier candidate." input CreateSupplierCandidateInput { "The supplier account that owns this candidate (Company or Recruiter)." supplier: ID! "The invited candidate first name." firstName: String! "The invited candidate middle name." middleName: String "The invited candidate last name." lastName: String! "The candidate email." email: String! "The invited candidate country of residence." country: String "The invited candidate country state, if applicable." state: String "The candidate job title." jobTitle: String "The candidate currency." currency: String "The hourly rate of the candidate." hourlyRate: Float "The daily rate of the candidate." dailyRate: Float "The monthly rate of the candidate." monthlyRate: Float "The tags to associate to the candidate." tags: [String!] "The links related to the candidate." links: [String!] "The files attached to the candidate." files: [ID!] } "The input used for creating timesheets." input CreateTimesheetInput { "The worker that the timesheet is for." worker: ID! "The hire that the timesheet is for." hire: ID! "The start date of the timesheet." startDate: Date! "The end date of the timesheet." endDate: Date! "A list of registrations to add to the timesheet." registrations: [TimesheetRegistrationInput!] "A list of files to add to the timesheet." files: [ID!] } "An input for creating a new TOTP multi-factor authentication implementation." input CreateTotpMultiFactorInput { "An optional name for the TOTP multi-factor authentication implementation." name: String } "The details for adding & inviting a trusted contact." input CreateTrustedContactInput { "The company that the trusted contact is for." company: ID! "The invited trusted contact first name." firstName: String! "The invited trusted contact middle name." middleName: String "The invited trusted contact last name." lastName: String! "The invited trusted contact email." email: String! "The invited trusted contact country." country: String "The invited trusted contact country state, if applicable." state: String "The invited trusted contact links." links: [String!]! "The invited trusted contact attachments." attachments: [ID!]! "The skills to associate with the trusted contact." skills: [String!]! "The message that will be sent to the trusted contact." message: String "Whether the worker should be notified that they have been added to the platform." notifyWorker: Boolean! = true "An identifier associated with the trusted contact from an external system." externalIdentifier: String "The origin of the trusted contact" origin: TrustedContactOrigin! "The channel of origin of the trusted contact" originChannel: TrustedContactOriginChannel! """ The custom fields for the trusted contact. BETA. Custom fields on Workers are currently available for a subset of users. """ customFieldValues: [CustomFieldTypeValueInput!] } "The input used for groups." input CreateUserGroupInput { "The name of the group." name: String! "The description of the group." description: String "The status of the user group." status: UserGroupStatus! "The company that the group is for." company: ID! "The users of the group." users: [ID!] } "The input used for creating a webhook." input CreateWebhookInput { "The title of the webhook." title: String! "The description of the webhook." description: String "The URL of the webhook." url: String! "The secret of the webhook. If using OAuth this is the client secret" secret: String "Whether the webhook is active or not." isActive: Boolean "The client ID of the webhook, when using OAuth." clientId: String "The client URL of the webhook, when using OAuth." clientUrl: String """ The event types that this webhook should be subscribed to. If null or not provided, the webhook will be subscribed to all event types. If an empty array, the webhook will not receive any events. """ subscribedEvents: [WebhookEventType!] "The company that the webhook is for." company: ID! } "An approver node in the workflow tree — assigns user groups to a rule." input CreateWorkflowApproverInput { "A temporary ID for this node." id: ID "The temporary ID of the parent rule node." parent: ID "The temporary IDs of any child nodes." children: [ID!] "The user groups whose members will review approval requests matching the parent rule." data: [ID!]! } """ The input for creating a complete workflow tree (approval + rules + approvers) in one operation. The tree is structured using temporary node IDs: each node has an `id` that its children reference via `parent`, and the node references its children via `children`. This allows the entire approval structure to be submitted as a flat list of connected nodes. """ input CreateWorkflowInput { "The root node — defines the approval flow (name, trigger, status)." root: CreateWorkflowRootInput! """ The rule nodes — each defines conditions that determine when approval is needed. Connected to the root via `parent`. """ rules: [CreateWorkflowRuleInput!] """ The approver nodes — each assigns user groups to review matching items. Connected to rules via `parent`. """ approvers: [CreateWorkflowApproverInput!] } "The root node of a workflow tree — contains the approval flow definition." input CreateWorkflowRootInput { "A temporary ID for this node, used by child nodes to reference it via `parent`." id: ID "The temporary IDs of rule nodes that are direct children of this root." children: [ID!] "The approval flow details (name, trigger, status, company)." data: CreateApprovalInput! } "A rule node in the workflow tree — defines conditions for when approval is required." input CreateWorkflowRuleInput { "A temporary ID for this node, used by child nodes to reference it via `parent`." id: ID "The temporary ID of the parent node (the root or another rule)." parent: ID "The temporary IDs of approver nodes that are children of this rule." children: [ID!] "The conditions for this rule — each compares a workflow variable against a threshold." data: [CreateWorkflowVariableFieldInput!] } """ A condition to add to an approval rule, pairing a variable with a comparison. Use the `workflowVariables` query to discover available variables for a given trigger type. """ input CreateWorkflowVariableFieldInput { """ The identifier of the workflow variable or custom field to evaluate. Use the `workflowVariables` query to find valid identifiers for the approval's trigger type. """ id: String! "The comparison operator and threshold value for this condition." rule: WorkflowVariableFieldRuleInput! } "The settings input for custom fields." input CustomFieldCustomFieldOptionInput { "The ID of the custom field option to update." option: ID """ The custom field option representation value that is likely shown to the user for selection. For example: "title", "label", "number" """ value: String! "Specify a display order for use later in." displayOrder: Int! = 0 } "The settings input for custom fields." input CustomFieldSettingsInput { "A list of validation rules to be applied when using custom fields." validation: [CustomFieldValidationRules!] } """ An input representing a custom field value, tailored to the field type. All input fields are mutually exclusive. """ input CustomFieldTypeValueInput { "The input custom field values representation of the `SINGLE_SELECT` field type." singleSelect: SingleSelectCustomFieldValueInput "The input custom field values representation of the `FREE_TEXT` field type." freeText: FreeTextCustomFieldValueInput "The input custom field values representation of the `MULTI_SELECT` field type." multiSelect: MultiSelectCustomFieldValueInput "The input custom field values representation of the `FILE_UPLOAD` field type." fileUpload: FileUploadCustomFieldValueInput } "An input for a custom field value." input CustomFieldValueInput { "The entity that supports custom fields to which the value should be attached." appliesTo: ID! "The representation of the value." value: CustomFieldTypeValueInput! } "An input for a date range." input DateRangeInput { "The start date of the range." from: Date "The end date of the range." to: Date } "The details for deleting a recruiter relationship." input DeleteCompanyRecruiterInput { "The recruiter relationship to delete." id: ID! } "The input for the deletion of a custom field." input DeleteCustomFieldInput { "The ID of the custom field to delete." customField: ID! } "The input for deleting a milestone." input DeleteMilestoneInput { "The ID of the milestone to delete." id: ID! } "The input for deleting one or more milestones." input DeleteMilestonesInput { "The milestones to delete." milestones: [DeleteMilestoneInput!]! } "An input for deleting a note." input DeleteNoteInput { "The ID of the note to be deleted." id: ID! } "The input used for deleting a payment request." input DeletePaymentRequestInput { "The ID of the payment request to delete." id: ID! } "An input for deleting an existing project." input DeleteProjectInput { "The ID of the project." id: ID! } "The details for deleting a recruiter candidate relationship." input DeleteRecruiterCandidateInput { "The recruiter candidate relationship to delete." id: ID! } "The details for deleting a supplier candidate." input DeleteSupplierCandidateInput { "The supplier candidate to delete." id: ID! } "The input used for deleting a timesheet." input DeleteTimesheetInput { "The ID of the timesheet to delete." id: ID! } "The input used for deleting a timesheet registration." input DeleteTimesheetRegistrationInput { "The ID of the timesheet registration to delete." id: ID! } "The details for deleting a trusted contact." input DeleteTrustedContactInput { "The ID of the trusted contact to be deleted." id: ID! "The account performing the delete." account: ID! } "An input for deleting an existing group." input DeleteUserGroupInput { "The ID of the group." id: ID! } "The input for deleting a webhook." input DeleteWebhookInput { "The ID of the webhook to be deleted." id: ID! } "The input for deleting an existing workflow." input DeleteWorkflowInput { "The ID of the workflow to delete (same as the approval ID)." id: ID! } "The input used for attaching one or more jobs to a project." input DetachJobFromProjectInput { "Jobs to be detached from the project." job: ID! "The project containing jobs." project: ID! } "The input used for detaching one or more users from a group." input DetachUsersFromUserGroupInput { "The user group containing users." userGroup: ID! "Users to be detached from the group." users: [ID!] } "The input for duplicating an existing job." input DuplicateJobInput { "The ID of the job to duplicate." id: ID! """ Optional title for the duplicated job. If not provided, the original job title will be used with "[Copy]" prepended. """ title: String } "Input for employment costs." input EmploymentCostsInput { "Fixed amount cost." fixedAmount: Float "Percentage cost." percentage: Float "One-time amount cost." oneTimeAmount: Float } "Input for ordering employments." input EmploymentsOrderByClauseInput { "The field to order by." field: EmploymentOrderByColumn "The direction to order by." order: SortOrder! } "An input for ending (aka closing) an existing job." input EndJobInput { "The ID of the job." id: ID! "The ID of the account performing the action." accountId: ID! } "An input for ending an existing project." input EndProjectInput { "The ID of the project." id: ID! } "Input payload describing a fee's rate and basis." input FeeInput { """ The rate value of the fee. For percentage-based fees this is a decimal fraction (e.g. 0.125 = 12.5%). For hourly fees this is the monetary rate per hour. """ rate: DecimalFour! "The basis on which the rate is expressed." basis: FeeBasis! } """ An input for a file-upload custom field. Two shapes are accepted; the input must use exactly one: - `fileId: ID` (single file) — kept for backward compatibility with clients generated against the original schema. - `fileIds: [ID!]` (zero or more files) — preferred shape for new clients. An empty array deletes all attached files. Sending both `fileId` and `fileIds` is rejected by the validator. """ input FileUploadCustomFieldValueInput { "The ID of the field to attach files to." id: ID """ A unique human-readable key for the custom field, preferably in a slug format with lowercase and hyphens to replace spaces. The key is only unique within the same account. """ slug: String """ The ID of the previously-uploaded file (see the `uploadFiles` mutation) to attach. Singular form. A null value indicates that the field value will be deleted. Mutually exclusive with `fileIds`. """ fileId: ID """ The IDs of the previously-uploaded files (see the `uploadFiles` mutation) to attach. Plural form. An empty array deletes all attached files. Mutually exclusive with `fileId`. """ fileIds: [ID!] } "The details for forwarding (presenting) a candidate to a linked client job." input ForwardCandidateInput { "The source candidate to present." sourceCandidate: ID! "The MSP markup fee to apply on top of the worker rate." fee: FeeInput! "An optional brief describing the candidate." brief: String "File IDs to attach. When omitted, files are copied from the source candidate's offer." files: [ID!] "External links to include. When omitted, links are copied from the source candidate's offer." links: [String!] } "An input for a free-text custom field." input FreeTextCustomFieldValueInput { "The ID of the field to create a free text for." id: ID """ A unique human-readable key for the custom field, preferably in a slug format with lowercase and hyphens to replace spaces. The key is only unique within the same account. """ slug: String "This is the value for the field. A null value indicates that the field value will be deleted." value: String } "The input used to generate the company invite link token." input GenerateInviteLinkInput { "The company that the link token is for." company: ID! } "The input used to generate the personal invite link token." input GeneratePersonalInviteLinkInput { "The company that the link token is for." company: ID! } "Catch-all compliance input — matches the legacy `updateCompliance` shape." input GenericComplianceInput { "The compliance to update." name: ComplianceName! "The raw form data for the compliance." data: JSON! } "Trusted contact hire history filter input." input HireHistoryFilterInput { "The hire history filter value." status: TrustedContactHireHistory "Supply which accounts to filter hire history for." accounts: [ID!] } """ The input used for direct hires (hiring a worker without a bid). Direct hires require the worker to be a trusted contact of the hiring company. If `job` is omitted, a new job will be created automatically using the provided `name`, `description`, and related fields. If `job` is provided, the hire will be associated with that existing job. """ input HireInput { """ The trusted contact to hire directly. The worker must already exist as a trusted contact of the hiring company. Use `createTrustedContact` first if the worker is not yet in the company's Talent Pool. """ trustedContact: ID """ The ID of an existing job to associate with this hire. Optional — if omitted, a new job will be created automatically from the `name`, `description`, and other job-related fields provided in this input. """ job: ID "The title for the auto-created job. Only used when `job` is not provided." name: String "The description for the auto-created job. Only used when `job` is not provided." description: String "The message to send the trusted contact." message: String "The rate type that is due." rateType: RateType "The rate that is due." rate: Float "The location preference of the job." locationPreference: LocationPreferenceInput """ The date that the contract should start. This date is used on the draft contract. """ startDate: Date """ The date that the contract should end. This date is used on the draft contract. """ endDate: Date """ Whether to include the standard contract. The default is to include a standard contract. """ includeStandardContract: Boolean "A Purchase Order (PO) number to attribute to the direct hire." purchaseOrderNumber: String "The conversation that the direct hire should be attributed to." conversation: ID "The recruiter that the hire should be attributed to." recruiter: RecruiterInput """ Additional custom fields for the direct hire. Details specified here are never shown to workers. Depending on each field's sharing settings, some may be visible outside your team. Note: Passing an empty array `[]` will skip custom field syncing entirely. If you have required custom fields configured, you must provide values for them or validation will fail. """ customFieldValues: [CustomFieldTypeValueInput!] "The company that the direct hire is for." company: ID! "An identifier associated with the hire from an external system." externalIdentifier: String """ The users who should own this hire. If not provided, the authenticated user will be set as the owner. """ owners: [ID!] """ The description for the hire. If not provided and a job is provided, the job description will be used. This description is used on the draft contract. """ hireDescription: String } "Trusted contact hire status filter input." input HireStatusFilterInput { "The hire status filter value." status: TrustedContactHireStatus "Supply which accounts to filter the hire status for." accounts: [ID!] } "The input object used to sort hires." input HiresOrderByClauseInput { "The field to sort hires by." field: HireOrderByColumn "The order to sort hires by." order: SortOrder } "The details for inviting a candidate to begin onboarding." input InviteCandidateToOnboardInput { "The job candidate (with a draft hire) to invite to onboard." jobCandidate: ID! } "The details for inviting a recruiter." input InviteCompanyRecruiterInput { "The recruiter to invite." id: ID! "The company inviting the recruiter." company: ID! "The recruiter fee." recruiterFee: Float "The ownership days of the recruiter." recruiterOwnershipDays: Int "The message that will be sent to the recruiter." message: String "The tags to associate with the recruiter." tags: [String!] """ Whether the recruiter manages workers for this company relationship. When null, the company-level default is used. """ managesWorkers: Boolean } """ Trusted contact invited by users filter input. If `null`, all trusted contacts will be returned. """ input InvitedByInput { "User IDs by which to filter by." users: [ID!]! = [] "Whether or not to include TCs that have been invited via automation." includeAutomation: Boolean! = false } "Trusted contact sorting clause input." input JobCandidateOrderByClauseInput { "The column by which trusted contacts should be sorted." column: JobCandidateOrderByColumn! "The sorting order for the associated sorting column." order: SortOrder! = ASC } "An input for ordering job shares." input JobShareOrderByClauseInput { "The field to order by." field: JobShareOrderByColumn! "The direction to order by." order: SortOrder! } "The input object used to sort jobs." input JobsOrderByClauseInput { "The field to sort jobs by." field: JobOrderByColumn "The order to sort jobs by." order: SortOrder } "An input for a language." input LanguageInput { "The name of the language." name: LanguageName! "The experience level required for the language." experience: Fluency! } "An input for the location preferences." input LocationPreferenceInput { "The location preference." preference: LocationPreference! """ The address for the job. This is not required when `location` is set to `REMOTE_ONLY`. """ address: String } "The input used to manage onboarding documents." input ManageOnboardingDocumentsInput { "The company that the onboarding documents are for." company: ID! "The documents to be added for onboarding." documents: [ID!]! } "The input used to manage staffing agency onboarding documents." input ManageRecruiterOnboardingDocumentsInput { "The company that the onboarding documents are for." company: ID! "The documents to be added for staffing agency onboarding." documents: [ID!]! } "The input used for marking one or more files as uploaded." input MarkFilesAsUploadedInput { "The list of files to mark as uploaded." files: [ID!]! } "Input for filtering recruiters by market and optionally by specific regions." input MarketRegionInput { "The market codes to filter by (e.g. "nl", "dk", "uk")." markets: [String!] "Optional region IDs to narrow results within the selected markets." regionIds: [Int!] } "An input for a multi-select custom field." input MultiSelectCustomFieldValueInput { "The ID of the field to create selections for." id: ID """ A unique human-readable key for the custom field, preferably in a slug format with lowercase and hyphens to replace spaces. The key is only unique within the same account. """ slug: String "The IDs of the options to select. An empty array indicates that all field values will be deleted." values: [ID!]! } "Input for onboarding an employment." input OnboardEmploymentInput { "The ID of the employment to onboard." employment: ID! "Optional employment costs to apply." employmentCosts: EmploymentCostsInput } "An input for opening an existing project." input OpenProjectInput { "The ID of the project." id: ID! } "Allows ordering a list of records." input OrderByClause { "The column that is used for ordering." column: String! "The direction that is used for ordering." order: SortOrder! } "Payment request sorting clause input." input PaymentRequestOrderByClauseInput { "The field to sort payment requests by." field: PaymentRequestOrderByColumn "The order to sort payment requests by." order: SortOrder } "Order by clause for Query.invoices.orderBy." input QueryInvoicesOrderByOrderByClause { "The column that is used for ordering." column: InvoicesOrderByColumn! "The direction that is used for ordering." order: SortOrder! } "An input for the rate." input RateInput { "The unit of time when payment is due." type: RateType! "The payment amount per specified rate type." rate: Float "The payment amount as a range per specified rate type." range: RateRangeInput } "An input for the rate as a range." input RateRangeInput { "The minimum payment amount per specified rate type." minimum: Float! "The maximum payment amount per specified rate type." maximum: Float! } "The input object used for all the information required to attribute a recruiter." input RecruiterInput { "The ID of the recruiter." recruiter: ID! "The fee the recruiter is taking as a percentage." fee: StrictPercentage! """ The amount of days the recruiters ownership period exist in. A null value indicates the staffing agency's ownership never expires. """ ownershipDays: Int "The date that the ownership starts." ownershipStartDate: Date! } "Recruiter sorting clause input." input RecruiterOrderByClauseInput { "The field to sort recruiters by." field: RecruiterOrderByColumn "The order to sort recruiters by." order: SortOrder = ASC } "The input for resending an invitation to a Trusted Contact." input ReinviteTrustedContactInput { "The ID of the Trusted Contact to re-invite. (Note, this is different from the Worker ID)" id: ID! } "The input used to reject a hire." input RejectHireInput { "The account that is rejecting the hire." account: ID! "The ID of the hire to be rejected." hire: ID! } "An input for removing a job share." input RemoveJobShareInput { "Which job share ids to remove job shares for." ids: [ID!]! } "An input for removing a multi-factor authentication implementation." input RemoveMultiFactorInput { "The ID of the multi-factor authentication implementation to remove." id: ID! } "The input used to remove onboarding documents." input RemoveOnboardingDocumentsInput { "The company that the onboarding documents are for." company: ID! "The document IDs to be removed from onboarding." documents: [ID!]! } "The input object used for removing a recruiter from a hire." input RemoveRecruiterFromHireInput { "The ID of the hire." hire: ID! } "The input used to remove staffing agency onboarding documents." input RemoveRecruiterOnboardingDocumentsInput { "The company that the onboarding documents are for." company: ID! "The document IDs to be removed from staffing agency onboarding." documents: [ID!]! } "The input for retrying a webhook event." input RetryWebhookEventInput { "The ID of the webhook event to be retried." id: ID! } """ Input for recording a company's compliance review of a staffing agency. The reviewer is the authenticated user; the company is the user's active account. The review record is scoped to (recruiter, company). """ input ReviewRecruiterInput { "The staffing agency being reviewed." recruiterId: ID! "The review outcome." decision: RecruiterReviewDecision! """ When the next review is due. If omitted, defaults to today plus the viewing company's configured review interval (12 months by default). """ nextReviewAt: Date """ Optional message delivered to the staffing agency as an in-app notification. Also shown to the reviewer on subsequent reviews for continuity. """ recruiterMessage: String } """ Input for recording a company's compliance review of a worker. The reviewer is the authenticated user; the company is the user's active account. The review record is scoped to (worker, company). """ input ReviewWorkerInput { "The worker being reviewed." workerId: ID! "The review outcome." decision: WorkerReviewDecision! """ When the next review is due. If omitted, defaults to today plus the viewing company's configured review interval (12 months by default). """ nextReviewAt: Date """ Optional message delivered to the worker as an in-app notification. Also shown to the reviewer on subsequent reviews for continuity. """ workerMessage: String } "The input used for running an action on a batch." input RunBatchActionInput { "The ID of the batch to operate on." batch: ID! "The action to perform." action: BatchActionType! "Limits which items in the batch are affected." scope: BatchActionScopeInput "If true and the action results in zero items remaining in the batch, delete the batch." deleteIfEmptied: Boolean = false } "The input used for setting the internal budget on a job." input SetInternalBudgetOnJobInput { "The job that the budget is for." job: ID! """ The amount for the internal budget. Up to 2 decimal points are stored, the rest is omitted. """ amount: Float! } "The details for sharing candidates with the linked partner account." input ShareCandidatesWithPartnerInput { "The candidates to share." jobCandidates: [ID!]! } "The input object used for sharing a hire." input ShareHireInput { "The ID of the hire." hire: ID! "Optional message to include when sharing the hire." message: String } "An input for a single-select custom field." input SingleSelectCustomFieldValueInput { "The ID of the field to create a selection for." id: ID """ A unique human-readable key for the custom field, preferably in a slug format with lowercase and hyphens to replace spaces. The key is only unique within the same account. """ slug: String "The ID of the option to select. A null value indicates that the field value will be deleted." value: ID } "Skill sorting clause input." input SkillOrderByClauseInput { "Column by which trusted contacts should be sorted" column: SkillOrderByColumn! "Sorting order for the associated sorting column" order: SortOrder! = ASC } "The details for updating a bank account details." input StoreBankDetailsInput { "The account that the bank account is related to." accountId: ID! "The display name for this bank account." name: String "The address of this bank account." bankAddress: String! "The country of this bank account." bankCountry: String! "The name of this bank account." bankName: String! "The beneficiary name of this bank account." beneficiaryName: String! "The BBAN information (if applicable)." bban: BbanInput "The bank account IBAN (if applicable)." iban: String "The bank account SWIFT code (if applicable)." swift: String } """ Compliance action variants. Exactly one field must be set — the resolver rejects requests with zero or more than one populated variant. """ input SubmitComplianceInput { "Record the authenticated company's compliance review of a worker." reviewWorker: ReviewWorkerInput "Record the authenticated company's compliance review of a staffing agency." reviewRecruiter: ReviewRecruiterInput """ Catch-all for compliances without a dedicated typed input shape. The `data` JSON must match the compliance's expected form structure. """ generic: GenericComplianceInput } "An input for a tax line." input TaxLineInput { "The rate of tax." rate: Float! "The terminology for the tax line." terminology: String! } "The input object used for all the information required to terminate a hire." input TerminateHireInput { "The ID of the hire." hire: ID! "The reason for terminating a hire." reason: ContractTerminationReason! "Additional comments to explain why a hire is being terminated." comments: String "The date that the termination should take effect." date: Date! "An optional message to the worker." message: String } "An input representing a timesheet registration as part of the timesheet creation flow." input TimesheetRegistrationInput { "The type of the timesheet registration." type: TimesheetRegistrationType! "The date of the timesheet registration." date: Date! "The start time of the timesheet registration." startTime: Time "The end time of the timesheet registration." endTime: Time "The duration of the timesheet registration." duration: Float! "The unit of measurement for the timesheet registration." unit: TimesheetRegistrationDurationUnit! "The comments for the timesheet registration." comments: String "An identifier associated with the timesheet registration from an external system." externalIdentifier: String "An invoice reference number associated with the timesheet registration." invoiceReferenceNumber: String "Whether the timesheet registration is billable." isBillable: Boolean "The custom fields for the timesheet registration." customFieldValues: [CustomFieldTypeValueInput!] } "Trusted contact sorting clause input." input TrustedContactOrderByClauseInput { "The field to order by." field: TrustedContactOrderByColumn! "The direction to order by." order: SortOrder! } "The updatable fields on an approval flow when updating via the workflow tree." input UpdateApprovalDataInput { "The updated display name." name: String "The updated status (`ACTIVE`, `INACTIVE`, or `ARCHIVED`)." status: ApprovalStatus "The updated trigger event." trigger: ApprovalTrigger "The updated description." description: String } """ The input for updating an existing approval flow. All fields except `id` are optional — only provided fields are updated. Updates create a new version of the approval. """ input UpdateApprovalInput { "The ID of the approval flow to update." id: ID! "The updated display name." name: String "The updated status. Set to `INACTIVE` to pause the approval without deleting it." status: ApprovalStatus "The updated trigger event." trigger: ApprovalTrigger "The updated description." description: String } "The input for updating an existing approval rule." input UpdateApprovalRuleInput { "The ID of the approval rule to update." id: ID! "The ID of the parent approval flow." approval: ID! "The updated conditions for this rule." fields: [CreateWorkflowVariableFieldInput!]! } "The input for updating an approver assignment." input UpdateApproverInput { "The ID of the approver assignment to update." id: ID! "The updated user group." userGroup: ID "The updated position in the approval sequence." position: Int } "The details for updating a recruiter relationship." input UpdateCompanyRecruiterInput { "The recruiter relationship to update." id: ID! "The updated recruiter fee." recruiterFee: Float "The updated recruiter ownership." recruiterOwnershipDays: Int "The updated tags to associate the recruiter with." tags: [String!] "An identifier associated with the company recruiter from an external system." externalIdentifier: String """ Whether the recruiter manages workers for this company relationship. When null, the company-level default is used. """ managesWorkers: Boolean "The custom fields for the company recruiter." customFieldValues: [CustomFieldTypeValueInput!] } "The input for updating a custom field." input UpdateCustomFieldInput { "The ID of the custom field to update." customField: ID! """ The custom field type. Updating a field type is restricted if the custom field already has values. """ fieldType: CustomFieldType! = SINGLE_SELECT "The title or label of the custom field." title: String! """ A unique human-readable key for the custom field, preferably in a slug format with lowercase and hyphens to replace spaces. The key is only unique within the same account. """ slug: String "The description of the custom field." description: String "The settings to apply to the custom field." settings: CustomFieldSettingsInput! = {validation: [NULLABLE]} "The visibility of the custom field." visibility: CustomFieldVisibility! "Whether the field is enabled for approval workflows." approval: Boolean "Configures the field to be enabled for api updates only." apiOnly: Boolean """ Configures the field to allow worker input. When enabled, workers can provide values for this field through the worker API. """ workerInputAllowed: Boolean """ Configures the field to allow recruiter (staffing agency) input. When enabled, recruiters can provide values for this field through the recruiter API. """ recruiterInputAllowed: Boolean "Configures the field to surface its values on client invoices." showOnInvoice: Boolean """ Configures the field to be shared with client companies. When enabled, clients of the supplier that owns this field will see it during job sharing. """ sharedWithClients: Boolean "Configures the field's values to be visible to staffing agencies the company shares the job with." sharedWithStaffingAgencies: Boolean """ The list of options which will be available for custom field values. Only applies to some field types (e.g. `SINGLE_SELECT`). """ options: [CustomFieldCustomFieldOptionInput!] } "The details for updating the "preferred" status of a job candidate." input UpdateJobCandidatePreferredInput { "The job candidate to update." jobCandidate: ID! "Whether the candidate is preferred or not." isPreferred: Boolean! } "The details for updating a job candidate status." input UpdateJobCandidateStatusInput { "The job candidate to update." jobCandidate: ID! "The status to update the job candidate to." status: JobCandidateStatus! "The reason for changing the status of the job candidate." statusReason: JobCandidateStatusReason "Open text to leave internal additional information on the status reason" statusComment: String "The shared feedback in case the candidate already had a hire." feedback: String } "The details for updating the hiring step of a job candidate." input UpdateJobCandidateStepInput { "The job candidate to update." jobCandidate: ID! "The step to set for the job candidate. Only manual steps are accepted." step: JobCandidateHiringStep! } """ The input for updating an existing job. Use this after `createJob` to set the complete job details — description, rates, dates, location, visibility, and more. All fields are optional; only provided fields are updated. Setting `published` to `true` publishes the job and makes it visible according to its `visibility` settings. Publication cannot be undone. """ input UpdateJobInput { "The ID of the job." id: ID! """ An optional locale for the job. If set, skills and industries will use the locale's spelling. """ locale: Locale "The name of the job." name: String "The description required for the job." description: String "The skills required for the job." skills: [String!] "The files to be attached to the job." attachments: [ID!] "The project type of the job." association: Association "The expected experience level required for the job." expectedExperienceLevel: [ExpectedExperienceLevel!] "The location preference of the job." locationPreference: LocationPreferenceInput "The location information of the job." location: AddressInput "The rate unit, amount, and range for the job." rateType: RateInput """ The start date of the job. If this is set to `null`, we will assume that the job should start as soon as possible. """ startDate: Date """ The end date of the job. If this is set to `null`, we will assume that the job's end date is undetermined. """ endDate: Date "The timeframe of the job start." startDateTimeframe: JobStartTimeframe "The timeframe of the job end." endDateTimeframe: JobEndTimeframe "If the job will extend." isExtensionAvailable: Boolean "The period of time required to reply to candidates." evaluationPeriod: EvaluationPeriod "The date and time by which candidates should be submitted for this job." sourcingEndDate: DateTime """ A pending choice for the sourcing deadline, while sourcingEndDate is still unresolved. Only meaningful when sourcingEndDate is null. """ sourcingDeadlineChoice: SourcingDeadlineChoice "The deadline for candidate submission, formatted as "YYYY-MM-DDTHH:mm:ss" in the account's market timezone." sourcingEndDateLocal: String "The languages required for the job." languages: [LanguageInput!] "The industries that the worker requires experience in." industries: [ID!] "The owners of the job posting." owners: [ID!] "The number of required workers." requiredWorkers: Int """ This controls via which channels the job can be shared. It is therefore important to select which audiences should be allowed to see the job listing. """ visibility: [JobVisibility!] """ Additional custom fields for the job. Details specified here are never shown to workers. Depending on each field's sharing settings, some may be visible outside your team. """ customFieldValues: [CustomFieldTypeValueInput!] """ Whether the job should be published. Note: Job publication cannot be undone. """ published: Boolean "Whether the job has been removed/discarded while being published and before having any hires." removed: Boolean """ Optionally specify a reason for removing a Job. Note: This field is only relevant when the removed field is set to true, meaning it will not be used if provided on its own. """ removedCause: String "An identifier associated with the job from an external system." externalIdentifier: String "The full name of the client contact for this job." contactName: String "The email address of the client contact for this job." contactEmail: String "The phone number of the client contact for this job." contactPhone: String } "The input for updating a single milestone." input UpdateMilestoneInput { "The ID of the milestone." id: ID! "The name of the milestone." name: String "The Purchase Order (PO) number for the milestone." purchaseOrderNumber: String "The due date for the milestone." dueDate: Date "The total cost for the milestone." amount: Float } "The input for updating one or more milestones." input UpdateMilestonesInput { "The milestones to update." milestones: [UpdateMilestoneInput!]! } "An input for updating a note." input UpdateNoteInput { "The ID of the note to be updated." id: ID! "The body of the note to be updated." body: String "The title of the note to be updated." title: String } "The details required to update a user's password." input UpdatePasswordInput { "The current password for the user." currentPassword: String! "The new password for the user." password: String! "The confirmation of the password for the user." passwordConfirmation: String! } "The input used for updating a payment request." input UpdatePaymentRequestInput { "The ID of the payment request to update." id: ID! "The date that the payment request started." startDate: Date "The date that the payment request ended (if applicable)." endDate: Date "The expense reports for the payment request." expenseReports: [ID!] "The rate for the payment request." rate: Float "The billable time for the payment request." billableTime: Float "The billable total for the payment request." billableTotal: Float "Comments related to the payment request." comments: String "A list of tax lines." taxLines: [TaxLineInput!] "The timesheet to link to the payment request." timesheet: ID "The purchase order number for the payment request." purchaseOrderNumber: String } "An input for updating an existing project." input UpdateProjectInput { "The ID of the project." id: ID! "The name of the project." name: String "The description of the project." description: String "The internal budget of the project." internalBudget: Decimal "The owners of the project." owners: [ID!] "An identifier associated with the project from an external system." externalIdentifier: String } "The details for updating a recruiter candidate relationship." input UpdateRecruiterCandidateInput { "The recruiter relationship to update." id: ID! "The job title to update." jobTitle: String "The candidate's country of residence to update." country: String "The candidate's country state to update, if applicable." state: String "The currency to update." currency: String "The hourly rate to update." hourlyRate: Float "The daily rate to update." dailyRate: Float "The monthly rate to update." monthlyRate: Float "The updated tags to associate the relationship with." tags: [String!] "The updated links to associate the relationship with." links: [String!] "The updated files to associate the relationship with." files: [ID!] } "The details for updating a supplier candidate." input UpdateSupplierCandidateInput { "The supplier candidate to update." id: ID! "The job title to update." jobTitle: String "The currency to update." currency: String "The hourly rate to update." hourlyRate: Float "The daily rate to update." dailyRate: Float "The monthly rate to update." monthlyRate: Float "The updated links to associate with the candidate." links: [String!] "The updated files to associate with the candidate." files: [ID!] } "The input used for updating a timesheet." input UpdateTimesheetInput { "The ID of the timesheet to update." id: ID! "The start date of the timesheet." startDate: Date "The end date of the timesheet." endDate: Date "A list of registrations to add to the timesheet." registrations: [TimesheetRegistrationInput!] "A list of files to add to the timesheet." files: [ID!] } "The input used for updating a timesheet registration." input UpdateTimesheetRegistrationInput { "The ID of the timesheet registration to update." id: ID! "The start time of the timesheet registration." startTime: Time "The end time of the timesheet registration." endTime: Time "The duration of the timesheet registration." duration: Float "The unit of measurement for the timesheet registration." unit: TimesheetRegistrationDurationUnit "The comments for the timesheet registration." comments: String "The invoice reference number associated with the timesheet registration." invoiceReferenceNumber: String "An identifier associated with the timesheet registration from an external system." externalIdentifier: String "Whether the timesheet registration is billable." isBillable: Boolean } "The details for editing a trusted contact." input UpdateTrustedContactInput { "The ID of the trusted contact to be edited." id: ID! "The trusted contact links." links: [String!] "The trusted contact attachments." attachments: [ID!] "The skills to associate with the trusted contact." skills: [String!] "An identifier associated with the trusted contact from an external system." externalIdentifier: String """ The custom fields for the trusted contact. BETA. Custom fields on Workers are currently available for a subset of users. """ customFieldValues: [CustomFieldTypeValueInput!] } "An input for updating an existing group." input UpdateUserGroupInput { "The ID of the group." id: ID! "The name of the group." name: String "The description of the group." description: String "The status of the user group." status: UserGroupStatus "The users of the group." users: [ID!] } "The input used for updating a webhook." input UpdateWebhookInput { "The webhook to be updated." id: ID! "The title of the webhook." title: String! "The description of the webhook." description: String "The URL of the webhook." url: String! "The secret of the webhook. If using OAuth this is the client secret. If you are not updating the secret, set it to null." secret: String "Whether the webhook is active or not." isActive: Boolean "The client ID of the webhook, when using OAuth." clientId: String "The client URL of the webhook, when using OAuth." clientUrl: String """ The event types that this webhook should be subscribed to. If null, the subscribed events will not be changed. If an empty array, the webhook will not receive any events. """ subscribedEvents: [WebhookEventType!] } "The input for updating custom field values as a worker." input UpdateWorkerCustomFieldValuesInput { "The entity that supports custom fields (e.g., TrustedContact)." appliesTo: ID! "Collection of custom field values to update." values: [CustomFieldTypeValueInput!]! } "The details for persisting a worker's identification." input UpdateWorkerIdentificationInput { "Worker to save details for. Omit for the authenticated worker." workerId: ID "The worker's date of birth." dateOfBirth: Date! "ISO 3166-1 alpha-2 country code of the worker's nationality." nationality: String! "The kind of identification document the worker has provided." documentType: IdentificationDocumentType! "The full document number." documentNumber: String! "When the document expires." documentExpiresAt: Date! } "The details for updating a worker." input UpdateWorkerInput { "The ID of the worker." id: ID! "The job title that the worker has." jobTitle: String "The links the worker has. Omit to leave unchanged." links: [String!] "The skills to associate with the worker. Omit to leave unchanged." skills: [String!] "Worker first name. Omit or pass null to leave unchanged. Can't be empty." firstName: String "Worker middle name. Omit or pass null to leave unchanged. Pass "" to clear." middleName: String "Worker last name. Omit or pass null to leave unchanged. Can't be empty." lastName: String "The address of the worker. Omit to leave unchanged." address: AddressInput } "An approver node in the update workflow tree." input UpdateWorkflowApproverInput { "A temporary ID for this node." id: ID "The temporary ID of the parent rule node." parent: ID "The temporary IDs of any child nodes." children: [ID!] "The user groups to assign as approvers for the parent rule." data: [ID!]! } "The input for updating an existing workflow tree. Replaces the entire structure." input UpdateWorkflowInput { "The updated root node (approval flow details)." root: UpdateWorkflowRootInput! "The updated rule nodes (conditions)." rules: [UpdateWorkflowRuleInput!] "The updated approver nodes (user group assignments)." approvers: [UpdateWorkflowApproverInput!] } "The root node of an update workflow tree." input UpdateWorkflowRootInput { "A temporary ID for this node, used by child nodes to reference it." id: ID "The temporary IDs of rule nodes that are direct children of this root." children: [ID!] "The updated approval flow details." data: UpdateApprovalDataInput! } "A rule node in the update workflow tree." input UpdateWorkflowRuleInput { "A temporary ID for this node." id: ID "The temporary ID of the parent node." parent: ID "The temporary IDs of child approver nodes." children: [ID!] "The updated conditions for this rule." data: [UpdateWorkflowVariableFieldInput!] } "The input for updating a condition on an approval rule." input UpdateWorkflowVariableFieldInput { "The identifier of the workflow variable or custom field." id: String! "The updated comparison operator and threshold value." rule: WorkflowVariableFieldRuleInput! } "An input for updating user consent to Worksome Intelligence." input UpdateWorksomeIntelligenceConsentInput { "Whether or not to consent to Worksome Intelligence." consent: Boolean! } "The input used for uploading a file." input UploadFileInput { "The ID of the account that owns this file." owner: ID! "The name of the file that will be uploaded." name: String! "The size of the file that will be uploaded in bytes." size: Int! "The mime of the file that will be uploaded." mimeType: String! } """ Filter staffing agencies by their VerifiedRecruiterCompliance review state. All facets are combined with AND; omit a facet to skip it. """ input VerifiedRecruiterReviewFilterInput { "Filter by approved/blocked review status." status: RecruiterComplianceStatus "Filter by the users who last reviewed compliance." updatedBy: [ID!] } """ Filter contacts by their VerifiedWorkerCompliance review state. All facets are combined with AND; omit a facet to skip it. """ input VerifiedWorkerReviewFilterInput { "Filter by approved/blocked review status." status: VerifiedWorkerComplianceStatus "Filter by the users who last reviewed compliance." updatedBy: [ID!] } "An input for verifying a newly-created SMS multi-factor authentication implementation." input VerifySmsMultiFactorInput { "The ID of the SMS multi-factor authentication implementation to verify." id: ID! "The current SMS authentication code to verify the implementation with." code: String! } "An input for verifying a newly-created TOTP multi-factor authentication implementation." input VerifyTotpMultiFactorInput { "The ID of the TOTP multi-factor authentication implementation to verify." id: ID! "The current TOTP authentication code to verify the implementation with." code: String! } "The details for withdrawing a forwarded candidate." input WithdrawForwardedCandidateInput { "The supplier-side job candidate to withdraw." jobCandidate: ID! } "The details for withdrawing a submitted candidate." input WithdrawJobCandidateInput { "The job candidate to withdraw." jobCandidate: ID! } """ A condition definition specifying a variable, comparison operator, and threshold value. For example, to create a condition "hourly rate greater than 100", set `id` to the hourly rate variable identifier, `operator` to `GREATER_THAN`, and `value` to `"100"`. """ input WorkflowVariableFieldRuleInput { "The threshold value to compare against (as a string)." value: String! "The comparison operator (e.g. equals, greater than, less than)." operator: WorkflowVariableOperator! } """ A Worksome account. An account represents an entity that can interact with the platform. Account types include Company (the hiring entity), Organisation (a parent grouping of companies), Partner (an employment or compliance partner), Worker (a freelancer or contractor), and Staffing Agency (recruiter). """ interface Account { "The ID of the account." id: ID! "The name of the account." name: String! "The avatar (or profile picture) for the account." avatar: URL } "An interface requiring company-specific fields." interface HasCompanyInformation { "The name of the account." name: String! "The market that the account is in." market: MarketCode! } "An interface requiring custom fields specific data." interface HasCustomFields { "A list of owned custom fields." customFields( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): CustomFieldPaginator! } "The consistent data for a multi factor implementation." interface HasMultiFactorMetadata { "The ID of the multi-factor authentication implementation." id: ID! "The name of the multi-factor authentication implementation." name: String! "The status of the multi-factor authentication implementation." status: MultiFactorStatus! "The owner of the multi-factor authentication implementation." owner: User! "When the SMS multi-factor authentication implementation was verified." verifiedAt: DateTime "When the SMS multi-factor authentication implementation was created." createdAt: DateTime! "When the SMS multi-factor authentication implementation was updated." updatedAt: DateTime! } "An interface requiring a URL field." interface HasURL { "The URL for the resource." url: URL! } """ A variable that can be used in approval rule conditions. Workflow variables represent the data points available for building conditions in approval rules. They include system variables (e.g. hourly rate, daily rate, budget) and company-configured custom fields. Each variable defines which comparison operators it supports. """ interface WorkflowVariable { "The ID for this variable, used when creating rule conditions." id: ID! "The human-readable title of the variable (e.g. "Hourly Rate", "Budget")." title: String! "A description of what the variable represents." description: String "The comparison operators that can be used with this variable (e.g. equals, greater than)." operators: [WorkflowVariableOperator!]! } "An address." type Address { "The address." address: String "The post code (ZIP code)." postCode: String "The city." city: String "The state." state: String "The country object." country: Country "The formatted address string." formattedAddress( "The locale to use for a given language (e.g., 'en', 'da', etc.)." locale: String = "en" "Whether to return the address with line breaks or as a single line." multiline: Boolean = true ): String } """ An approval flow that defines a review process triggered by specific events on hires. Approvals are configured by companies to require sign-off before certain actions take effect. Currently, approval flows can only be applied to **hires**. The supported automatic triggers are: - `HIRE_CREATED` — require approval when a new hire is created (e.g. rate exceeds a budget threshold). - `HIRE_CHANGED` — require approval when an existing hire's contract is modified (e.g. rate or end date changes). - `CLASSIFICATION_CREATED` — require approval when a worker classification (e.g. IR35, US worker classification) is completed on a hire. A trigger of `NONE` means the approval flow will not be automatically evaluated. Approval flows cannot currently be applied to jobs, payment requests, or other entities. Each approval has a trigger (the event that starts the flow), one or more rules (conditions that determine when approval is needed), and approvers (user groups who must review and approve). When a matching event occurs, an approval request is created and the action is blocked until all required approvers have acted. The outcome of rejection depends on the trigger: for `HIRE_CREATED`, the hire is cancelled; for `HIRE_CHANGED`, the pending contract change is reverted; for `CLASSIFICATION_CREATED`, the classification result is discarded. Use the `Workflow` type and its mutations (`createWorkflow`, `updateWorkflow`) to manage approvals as a complete tree structure (root + rules + approvers) in a single operation. """ type Approval { "The ID of the approval flow." id: ID! "The display name of the approval flow." name: String! "The version number. Each update to an approval creates a new version." version: Int! """ Whether this approval flow is currently active, inactive, or archived. Only `ACTIVE` approvals are evaluated when triggering events occur. """ status: ApprovalStatus! """ The event that triggers this approval flow. All triggers currently apply to hires only. Possible values: - `HIRE_CREATED` — evaluated when a new hire is created. - `HIRE_CHANGED` — evaluated when a hire's contract terms are modified. - `CLASSIFICATION_CREATED` — evaluated when a worker classification completes on a hire. Approval flows for jobs, payment requests, or other entities are not currently supported. """ trigger: ApprovalTrigger! "A human-readable description of the approval flow's purpose." description: String "The company that owns this approval flow." company: Company! """ The rules that define conditions and approvers for this approval flow. Each rule specifies conditions (e.g. "rate > 100") and a sequence of approver groups. When the trigger fires, the system evaluates rules to determine which approval path applies. """ approvalRules: [ApprovalRule!]! "The date and time that the approval was created." createdAt: DateTime! "The date and time that the approval was last updated." updatedAt: DateTime! """ The ID of the latest version of this approval flow. Approvals are versioned — when updated, a new version is created. Use this to navigate to the most recent version. """ latestVersionId: String! } """ An approval request — a runtime instance created when a triggering event on a hire matches an approval rule. Approval requests are currently only created for **hires**. The supported triggering events are: - A hire is created (`HIRE_CREATED`) - A hire's contract is changed (`HIRE_CHANGED`) - A worker classification is completed on a hire (`CLASSIFICATION_CREATED`) Jobs, payment requests, and other entities do not go through approval workflows. When a trigger fires and an active approval rule's conditions match, the system creates an `ApprovalApprovable` linking the hire to the matched rule. The outcome of rejection depends on the trigger: for `HIRE_CREATED`, the hire is cancelled; for `HIRE_CHANGED`, the pending contract change is reverted; for `CLASSIFICATION_CREATED`, the classification result is discarded. Each approval request tracks its history of actions through `approvalStates` — showing who approved, rejected, or requested changes and when. """ type ApprovalApprovable { "The ID of the approval request." id: ID! "The approval flow that generated this request." approval: Approval! "The specific rule whose conditions matched to create this request." approvalRule: ApprovalRule! """ The history of actions taken on this request (approvals, rejections, change requests). States are recorded in chronological order as each approver acts. """ approvalStates: [ApprovalState!]! "The item that requires approval (e.g. a hire)." approvable: Approvable """ Whether the authenticated user can take action on this approval request. Returns `true` when the user is a member of the next approver group in the sequence and the request is still pending their review. """ viewerCanAction: Boolean! } "A paginated list of ApprovalApprovable items." type ApprovalApprovablePaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of ApprovalApprovable items." data: [ApprovalApprovable!]! } "A paginated list of Approval items." type ApprovalPaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of Approval items." data: [Approval!]! } """ A rule within an approval flow that defines when approval is required and who must approve. Each rule belongs to an approval and contains two key parts: 1. **Conditions** (`rules`): Variable comparisons that determine whether this rule applies. For example, "hourly rate > 100" or "budget >= 50000". Conditions use workflow variables (system fields like rate/budget, or custom fields configured on the company). 2. **Approvers**: An ordered sequence of user groups who must review and approve items that match this rule's conditions. Approvers are processed in `position` order. When a triggering event occurs (e.g. a hire is created), the system evaluates each active rule's conditions against the item. If a rule matches, approval requests are sent to its approvers. """ type ApprovalRule { "The ID of the approval rule." id: ID! "The approval flow that this rule belongs to." approval: Approval! """ The custom fields referenced by this rule's conditions. These are the company-configured fields used as variables in the rule's conditions. """ fields: [CustomField!]! """ The variable conditions that determine when this rule applies. Each condition compares a workflow variable (e.g. hourly rate, budget, or a custom field) against a value using an operator (e.g. greater than, equals). All conditions must be met for the rule to trigger. """ rules: [WorkflowVariableRule!]! "The user groups assigned to review items that match this rule, in approval order." approvers: [Approver!]! "The number of approver groups assigned to this rule." approverCount: Int! "The date that the approval rule was created." createdAt: Date! "The date that the approval rule was updated." updatedAt: Date! } "A paginated list of ApprovalRule items." type ApprovalRulePaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of ApprovalRule items." data: [ApprovalRule!]! } """ A recorded action on an approval request — an entry in the approval audit trail. Each time an approver acts on an approval request (approves, rejects, or requests changes), an `ApprovalState` is created to record the decision, the user who made it, and any message. The system also creates states when an approval is automatically cancelled (e.g. the hire was cancelled or the job was closed). """ type ApprovalState { "The ID of this approval action record." id: ID! "The action that was taken: `REQUESTED`, `APPROVED`, `REJECTED`, `NEEDS_CHANGE`, or `CANCELLED`." state: ApprovalApprovableState! "The user who took this action." actionedBy: User! "An optional message provided by the reviewer explaining their decision." message: String """ The reason the approval was automatically cancelled, if applicable. Only present when `state` is `CANCELLED`. For example, the hire may have been cancelled or the associated job closed before the approval was completed. """ cancellationReason: ApprovalCancellationReason "The approver group that this action was taken on behalf of." approver: Approver! "The approval request that this action belongs to." approvalApprovable: ApprovalApprovable! "The date and time that this action was recorded." createdAt: DateTime } "A paginated list of ApprovalState items." type ApprovalStatePaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of ApprovalState items." data: [ApprovalState!]! } """ An approver assignment — a user group assigned to review items that match an approval rule. Approvers are ordered by `position` within a rule. When an approval request is created, the system notifies the first approver group (position 1). Once they approve, the next group (position 2) is notified, and so on. All approvers in the sequence must approve for the overall request to be approved. """ type Approver { "The ID of the approver assignment." id: ID! "The approval rule this approver is assigned to." approvalRule: ApprovalRule! "The user group whose members can act on approval requests for this rule." userGroup: UserGroup! "The position in the approval sequence (1-based). Lower positions are asked to approve first." position: Int! "The date that the approver assignment was created." createdAt: Date! "The date that the approver assignment was last updated." updatedAt: Date! } "A paginated list of Approver items." type ApproverPaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of Approver items." data: [Approver!]! } "A market that an account is available to work in, including the specific regions within that market." type AvailableMarket { "The market." market: Market! "The regions within the market that the account is available in." regions: [AvailableRegion!]! } "A specific region within a market that an account is available to work in." type AvailableRegion { "The unique identifier for the region." id: Int! "The name of the region." name: String! "Whether the account is available for on-site work in this region." isOnSite: Boolean! "Whether the account is available for remote work in this region." isRemote: Boolean! } "Bank account details." type BankDetail { "The ID of the bank account details." id: ID! "The display name for this bank account." name: String! "The address of this bank account." bankAddress: String! "The country of this bank account." bankCountry: String! "The name of this bank account." bankName: String! "The beneficiary name of this bank account." beneficiaryName: String! "The BBAN information, if applicable." bban: Bban "The bank account IBAN, if applicable." iban: String "The bank account SWIFT code, if applicable." swift: String } """ A batch of items for processing. Batches are a way to group multiple items (such as payment requests) together so that you can perform bulk actions on them. They're mainly intended for operational workflows inside the platform (e.g., approving or processing large sets of items at once). For most external integrations, batches are not usually needed – you'll likely want to work directly with the individual items instead. """ type Batch { "The ID of the batch." id: ID! "The name of the batch." name: String! "The type of batch." type: BatchType! "The account that owns the batch." account: Account! "The number of items in the batch that have the specified statuses." itemsCountByStatus( "The statuses to count items for." status: [BatchItemStatus!]! ): Int! "The date and time when the batch was created." createdAt: DateTime! "The date and time when the batch was last updated." updatedAt: DateTime! "The date and time when the batch was deleted (if soft deleted)." deletedAt: DateTime "The items in the batch." items( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): BatchItemPaginator! } "A paginated list of BatchItem items." type BatchItemPaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of BatchItem items." data: [BatchItem!]! } "A paginated list of Batch items." type BatchPaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of Batch items." data: [Batch!]! } "The BBAN type details." type Bban { "The Bank-State-Branch or BSB number." bsb: String "The bank ID." bankId: String "The bank code." bankCode: String "The bank branch ID." branchId: String "The bank branch code." branchCode: String "The bank account number." accountNumber: String "The bank account suffix." accountSuffix: String "The bank institution number" institutionNumber: String "The bank transit number." transitNumber: String "The bank registration number." registrationNumber: String "The bank routing code." routingCode: String "The bank sort code." sortCode: String "The bank purpose of payment code." purposeOfPayment: String } "Represents a bid sent on a job." type Bid { "The ID of the bid." id: ID! "The status of the bid." status: BidStatus! "The job which the bid was made on." job: Job! "The conversation which contains the bid." conversation: Conversation! "The message with the bid." message: Message! "The worker that this bid belongs to." worker: Worker! "The supplier account for this bid, if applicable." supplier: Account "The rate proposed by the worker." rate: Float "The rate type for the bid." rateType: RateType "The currency of the bid." currency: String! "The brief / cover text submitted with the bid." brief: String "External links submitted with the bid." links: [String!]! "Files attached to the bid." files: [File!]! "The fees associated with this bid." fees: [Fee!]! """ Whether the supplier directly manages the worker (Managed) or is referring an independent worker they do not manage (Referred). Null on bids made before this distinction was tracked. """ workerType: CandidateSubmissionType } "A paginated list of Bid items." type BidPaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of Bid items." data: [Bid!]! } "A business entity." type BusinessEntity { "The ID of the business entity." id: ID! "The business entity type." type: BusinessEntityType! "The name of the business entity type." name: String! "The localised friendly name of the business entity type." localisedName: String! "The company name for the business entity." companyName: String "The company number for the business entity." companyNumber: String "The tax number for the business entity." taxNumber: String "The national identifier for the business entity (e.g. Canadian SIN)." nationalIdentifier: String """ The validation status of the company number against the relevant external authority (e.g. KvK for NL). Null when the business entity type is not subject to external validation in its market. """ companyNumberValidationStatus: CompanyNumberValidationStatus } "A paginated list of BusinessEntity items." type BusinessEntityPaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of BusinessEntity items." data: [BusinessEntity!]! } """ A classification represents a worker classification (SDS/WCR) for a hire. This can be various types of classifications like IR35, US Worker Classification, etc. """ type Classification { "The unique identifier of the classification" id: ID! "The user who created this classification" user: User! "The hire this classification belongs to" hire: Hire! "The company that requested this classification" company: Company! "The worker this classification is for." freelancer: Worker! "The type of classification (e.g., IR35, US Worker Classification)" type: ClassificationType! "Describes this classification type" description: String "The name of the compliance this classification is using" complianceName: String! "The current status of the classification" status: ClassificationStatus! "Whether this classification has been accepted by the company" acceptedStatus: Boolean! "The result of the classification with detailed outcome information" result: ClassificationResultDetails! "URL to download the PDF version of this classification (WCR/SDS)" pdfUrl: String! "Whether this classification overrides another classification" overridesAnother: Boolean! "The reason provided when this classification was overridden (null if not overridden)" overrideReason: String "The user who performed the override (null if not overridden)" overrideUser: User "Whether this classification is the result of a dispute on another classification (when applicable)" disputesAnother: Boolean! "Whether there are any questions with an unknown answer in the classification questionnaire" hasUnknownAnswers: Boolean! "Whether there are questions with an updated answer from the Worker in the classification questionnaire." hasUpdatedAnswers: Boolean! "Whether all questions for the worker has been resolved." hasWorkerCompletedAnswers: Boolean! "Whether this classification is allowed to be changed" canChange: Boolean! "Whether this classification can be overridden" canOverride: Boolean! "Whether the hire has blocking conditions that prevent the classification from continuing" hasHireBlockingCondition: Boolean! "The overall state for approvals on the classification with a given trigger." currentApprovalState( "The approval trigger to check the state for." trigger: ApprovalTrigger ): ApprovalState "Whether there is an approval request pending for the classification on the hire" hasPendingApproval: Boolean! "The user-friendly title for this classification" title: String! "The WCR term used in the UI for this classification" wcrTerm: String! "Whether the hire has been updated since the determination input was provided" hasUpdatedHire: Boolean! @deprecated(reason: "Use `isReclassificationRequired` instead. This will be removed in a future version.") "Whether the hire requires a reclassification" isReclassificationRequired: Boolean! "Whether the current classification requires action from the user to be completed." isClassificationActionRequired: Boolean! "Whether the end client has completed their classification input (always true for non-supplier hires)" endClientInputComplete: Boolean! "The date and time the classification was created." createdAt: DateTime "The date and time the classification was last updated." updatedAt: DateTime } "A paginated list of Classification items." type ClassificationPaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of Classification items." data: [Classification!]! } "Detailed information about a classification result including outcome, label, and title." type ClassificationResultDetails { "Canonical enum value (business logic)" outcome: ClassificationResult! "Short, user-friendly single-word/phrase" label: String! "Longer descriptive title of outcome" title: String! } """ The relationship between a worker and a company as seen from the workers perspective. An equivalent relationship can be found for companies called TrustedContacts. """ type Client { "The ID of the client." id: ID! "The client company account." company: Company! "Status of the client relationship." status: ContactStatus! "The date that the status of the contact was last updated." statusUpdatedAt: Date! "The date that an invite as a contact was sent." invitedAt: Date! "The unique invite token used to accept invites from clients." token: String! "The origin of the contact." origin: TrustedContactOrigin! "The channel of origin of the contact." originChannel: TrustedContactOriginChannel! "If the client has onboarding steps that need to be completed as part of the relationship." requiresOnboarding: Boolean! "Whether it’s possible at this time for the worker to end their relationship with the client." canLeaveClient: Boolean! "The onboarding documents associated with the client relationship." onboardingDocuments: [OnboardingDocument!]! "The onboarding status of the client relationship." onboardingStatus: TrustedContactOnboardingStatus "Whether all required worker-editable custom fields have been filled." requiredCustomFieldsComplete: Boolean! "The custom field values for the client relationship." customFieldValues: [CustomFieldValue!]! } """ A company account — the primary hiring entity on Worksome. Companies create jobs, manage a Talent Pool of trusted contacts, make hires, and process payments. A company may belong to one or more organisations and can work with staffing agencies and partners. """ type Company implements Account & HasCompanyInformation & HasCustomFields { "The ID of the company." id: ID! "The name of the company." name: String! "The company preferred currency." currency: String! "The market that the company is in." market: MarketCode! "The avatar (or profile picture) for the company." avatar: URL "The profile that the company has." profile: Profile "The company full invite url." contactInviteUrl: String """ The personal invite URL for the authenticated user. This link allows auto-approval to the company's Talent Pool. """ personalInviteUrl: String "The settings for the company." settings: CompanySettings "The address of the company." address: Address "If the account has active webhooks." hasActiveWebhooks: Boolean! "If the account has multiple business entities." hasMultipleBusinessEntities: Boolean! "All engagement type setups that the company has ever used when engaging with workers." usedEngagementTypeSetups: [EngagementTypeSetup!]! "An identifier associated with the company from an external system." externalIdentifier: String """ Whether staffing agency relationships can be individually configured as managed or referral. When true, each SA relationship can override the company default (staffingAgencyManagesWorker). When false, the company default applies uniformly to all SA relationships. """ recruiterManagesMixedMode: Boolean! "The trusted contacts that the company has." trustedContacts( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): TrustedContactPaginator! "The team members that the company has." teamMembers( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): UserPaginator! "The team members and owners that the company has." teamMembersAndOwners( "Search users by name." search: String """ Limit results to users whose team role grants the given permission key (e.g. "manage-compliance-tracker"). Owners are included only when the owner role grants the permission. """ permission: String "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): UserPaginator! "The organisations that a company is a part of." organisations( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): OrganisationPaginator! "The custom fields that the company owns." customFields( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): CustomFieldPaginator! "The staffing agencies that the company has relationships with." staffingAgencies( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): CompanyRecruiterPaginator! } "A paginated list of Company items." type CompanyPaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of Company items." data: [Company!]! } "A company recruiter relationship." type CompanyRecruiter { "The ID of the company recruiter." id: ID! "The mail of the recruiter." email: String "Status of the company recruiter." status: ContactStatus! "The token used to invite the recruiter." token: String "The message sent to the recruiter when inviting them." message: String "The fee of the recruiter for the relationship." recruiterFee: Float @deprecated(reason: "Only supports percentage-based fees. Use `fees` instead, which supports all fee bases.") "The days of ownership of the recruiter." recruiterOwnershipDays: Int """ The amount of days left of the ownership. Null when the staffing agency's ownership never expires. """ recruiterOwnershipDaysLeft: Int """ Whether the recruiter manages workers for this company relationship. Resolved from the per-relationship override if set, otherwise falls back to the company-level default. """ recruiterManagesWorkers: Boolean! "Whether there are any hires between this recruiter and company." hasHires: Boolean! "The recruiter for this company recruiter." recruiter: Recruiter! "The company recruiter company." company: Company! "The tags applied to the relationship." tags: [Tag!]! "An identifier associated with the company recruiter from an external system." externalIdentifier: String "The custom field values for the company recruiter." customFieldValues: [CustomFieldValue!]! "Whether the company requires onboarding for this staffing agency relationship." requiresOnboarding: Boolean! "Whether all required custom fields have been filled by the staffing agency." requiredCustomFieldsComplete: Boolean! "Onboarding documents the staffing agency must review for this client." onboardingDocuments: [OnboardingDocument!]! "The onboarding status of the staffing agency." onboardingStatus: RecruiterOnboardingStatus "The date the contact was invited." invitedAt: Date! "The fees associated with this staffing agency relationship." fees: [Fee!]! """ Compliance requirements for this staffing agency as seen by the pivot's company. The viewing company is unambiguous here (it's the pivot's company), so per-company review state never depends on session state. When `names` is omitted, the curated review-modal subset is returned. Pass explicit names to filter to a specific compliance. """ compliances( """ Optional compliance names to filter for. If omitted, the review-modal subset is returned. """ names: [ComplianceName!] """ Read strategy for `applicable` / `completed`. Defaults to live computation. Pass `true` to read the persisted status row with a live fallback when no row exists yet. """ cached: Boolean = false ): [Compliance!]! "Notes added to the recruiter releationship by the company." notes( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): NotePaginator! } "A paginated list of CompanyRecruiter items." type CompanyRecruiterPaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of CompanyRecruiter items." data: [CompanyRecruiter!]! } "Company settings." type CompanySettings { "Whether project tracking is enabled." projectTracking: Boolean "Whether job budget is required." requiredJobBudget: Boolean "Whether a pay rate is required on jobs before they can be published. This is controlled by a company-settings." requiredJobRate: Boolean "Whether a company has enabled multi currency contracts." multiCurrencyContractsDisabled: Boolean """ Whether a company has enabled managing of workers by staffing agencies (company-level default). This can be overridden per staffing agency relationship and per hire. """ staffingAgencyManagesWorker: Boolean "The company default message for reminding workers to bill." defaultMessageRemindWorkerToBill: String } "A link between a client company and a supplier account (Company acting as a staffing agency)." type CompanySupplier { "The ID of the company supplier." id: ID! "The client company." company: Company! "The supplier account." supplier: Account } "A paginated list of CompanySupplier items." type CompanySupplierPaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of CompanySupplier items." data: [CompanySupplier!]! } "A compliance requirement that must be met for business processes to proceed." type Compliance { "The party responsible for completing this compliance" actor: ComplianceActorTypes! "Unique identifier for this compliance requirement" name: ComplianceName! "Whether this compliance applies to the current context" applicable: Boolean! "Whether this compliance has been completed" completed: Boolean! "When this compliance was fulfilled, if known" completedAt: DateTime "Optional categorization of the compliance" type: String "Human readable title describing the compliance" title: String! "Detailed description of what needs to be done" description: String! "Optional action details if user input is required" action: ComplianceAction "Details about validation status and any blocking issues" validationDetails: ComplianceValidationDetails "Typed data associated with this compliance." data: [ComplianceData!]! } "A compliance action represents an action that can be taken to complete a compliance requirement." type ComplianceAction { "URL or route where the action can be performed." action: String! "Title of the action button or link" title: String! "Description of what the action will do" description: String! "Optional button copy text" buttonText: String "Optional tooltip text for additional context" tooltip: String """ Identifier for the input form required to complete this action. When set, the frontend resolves and renders the corresponding input view inline. """ inputIdentifier: String } "A single question/answer pair within a classification." type ComplianceClassificationQuestion { "The question as shown to the worker." text: String! "Additional guidance shown alongside the question, if any." helpText: String "The recorded answer. Null when the question is unanswered." answer: ComplianceClassificationAnswer } """ An address associated with a compliance (residential address, work location, etc.). Wraps the existing `Address` type so the frontend can query any field. """ type ComplianceDataAddress { "Optional heading rendered above the address, e.g. 'Residential address'." title: String "The address record." address: Address! } """ Bank account details associated with a compliance. Wraps the existing `BankDetail` type so the same fragment can be reused across owner-facing and reviewer-facing flows. The wrapper always resolves so the frontend can render "Bank details on file" rows; `bankDetail` is null for viewers who aren't authorised to read the underlying fields (everyone except the account owner and companies on external payments with visibility to the worker), avoiding the `@passes` field guards bubbling up and nulling out the entire compliance row. """ type ComplianceDataBankDetail { "Optional heading, e.g. 'Primary bank account'." title: String "The bank account record. Null when the viewer can't read the details." bankDetail: BankDetail } """ A business entity associated with a compliance, typically the freelancer's primary business entity (company details, tax numbers, etc.). """ type ComplianceDataBusinessEntity { """ The business entity record. Reuses the existing `BusinessEntity` type so any field on it can be queried. """ businessEntity: BusinessEntity! } """ A determination-style questionnaire result (IR35, NL/Global/US worker classification). Each question carries its text, optional help text, and the recorded answer (if any). """ type ComplianceDataClassification { "The answered questions that make up the classification." questions: [ComplianceClassificationQuestion!]! } """ A single label/value pair. Null `value` is preserved so the UI can render semantically-empty fields (e.g. "Not subject to VAT") rather than hiding them. """ type ComplianceDataField { "The field label (e.g. a question or attribute name)." label: String! "The field value, formatted for display by the backend." value: String } "A file associated with a compliance (certificate, proof document, etc.)." type ComplianceDataFile { "Optional display title, e.g. 'KvK certificate' or 'Insurance policy'." title: String "The compliance-related file." file: File! } """ Titled collection of label/value fields. Use when a compliance emits multiple semantically-distinct groups (e.g. "Primary contact" + "Emergency contact"). For a single flat list of fields, skip the wrapper and emit top-level `ComplianceDataField` entries instead. """ type ComplianceDataGroup { "Optional heading rendered above the fields." title: String "The fields in the group." fields: [ComplianceDataField!]! } """ A user associated with a compliance, typically an attribution such as 'Reviewed by'. Wraps the existing `User` type so the frontend can query avatar, name, etc. """ type ComplianceDataUser { "Optional label describing the user's relation to the compliance." title: String "The user record." user: User! } "Validation details for a compliance requirement." type ComplianceValidationDetails { "Whether the compliance passes all validation checks" isValid: Boolean! "List of validation issues preventing completion" issues: [String!]! } """ A legal agreement between a company and a worker within a hire. A hire may have multiple contracts over its lifetime (e.g. an initial draft, an active contract, and amended versions). The `activeContract` on a hire is the currently accepted agreement between the parties. """ type Contract { "The ID of the contract." id: ID! "The name of the contract that the job is for." jobName: String! "The description of the contract that the job is for." jobDescription: String! "The location preference of the contract." locationPreference: LocationPreference "The status of the contract." status: ContractStatus! "The date that the contract started." startDate: Date "The date that the contract ended." endDate: Date "The address location associated to the contract." location: Address "The address of the contract." address: String "The type of currency." currency: Currency! "The unit of time when payment is due." rateType: RateType "The payment amount per specified rate type." rate: Float "The Purchase Order (PO) number." purchaseOrderNumber: String """ The company's Central Virksomhed (Company) Registration (CVR) number. For more information, visit: https://datacvr.virk.dk """ companyCvr: String """ A URL of the actual contract. This URL will link to a PDF for the contract. This URL cannot be used for saving in external systems as it might change over time or be regenerated. If a permanent URL is needed for the contract, it should be stored in the clients own system. """ pdfUrl: URL "The method of payment over the specified term." paymentTermMethod: PaymentTermMethod! """ The term that the payment will be made within, in days. Example `paymentTerm: 10` means Worksome will pay the worker's approved payment requests within 10 days. """ paymentTerm: Int! "Whether the contract's terms have been accepted." termsAccepted: Boolean! "The date that the terms were accepted." termsAcceptedAt: DateTime "The date that the terms were accepted by a worker." workerAcceptedAt: DateTime """ The date a scheduled change takes effect. Null means the change applies immediately on signature; a future date means it is parked until then. """ effectiveAt: DateTime "The submitted signature of the accepted worker." workerSignature: String "The job for which the contract is for." job: Job! "The worker for which the contract is for." worker: Worker "The company for which the contract is for." company: Company! "The company contact person for the contract." companyContact: User "The business entity associated with the contract." businessEntity: BusinessEntity "The company name associated with the contract." companyName: String "The company location associated with the contract." companyLocation: Address "The files attached to the contract (e.g. SOW, NDA, supporting documents)." files: [File!]! """ The contract documents (e.g. KID, onboarding documents) generated for the contract. The Key Information Document is only included for the worker on the contract. """ contractDocuments: [ContractDocument!]! "The latest milestone details at the time of creation of the contract." milestoneDetails( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): MilestoneDetailPaginator! } "A document associated with a contract (e.g. KID, onboarding document)." type ContractDocument { "The ID of the contract document." id: ID! "The type of document (e.g. Key Information Document, Contract Document, Onboarding Document)." docType: String "URL to download the PDF version of this document." pdfUrl: String "The date and time the document was created." createdAt: DateTime "The date and time the document was last updated." updatedAt: DateTime } "A paginated list of Contract items." type ContractPaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of Contract items." data: [Contract!]! } "A conversation between a company and a worker." type Conversation implements HasURL { "The ID of the conversation." id: ID! "The subject line of the conversation." subject: String! "The job that the conversation is related to." job: Job "The latest message sent in the conversation." latestMessage: Message "The URL for the conversation." url: URL! """ Whether the authenticated user's active account can open this conversation. Mirrors the check behind `url`, so do not render a link to `url` when this is `false` — the viewer would land on a "No access" page. """ viewerCanAccess: Boolean! "The date that the conversation was created." createdAt: Date! "Whether the conversation is closed." isClosed: Boolean! "Whether the conversation is unread by the authenticated user." isUnread: Boolean! "The date that the conversation was closed." closedAt: Date "The messages in the conversation." messages( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): MessagePaginator! "The participants involved in the conversation." participants( "The account types to filter participants by." accountTypes: [AccountType!] "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): ParticipantPaginator! } "A paginated list of Conversation items." type ConversationPaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of Conversation items." data: [Conversation!]! } "A country." type Country { """ The ISO 3166 alpha-2 code. This is a two-letter country identifier (e.g. US). """ isoCode: CountryCode! "The full name of the country." name: String } "The response from creating a custom timesheet." type CreateCustomTimeSheetResponse { "The total number of timesheet registrations that were detected in the submitted payload." providedRegistrations: Int! "The number of timesheet registrations that passed validation and were queued for processing." successfulRegistrations: Int! "Per-registration errors for any registrations that were not accepted. Each entry corresponds to a single rejected registration." rejectedRegistrations: [RejectedCustomTimesheetRegistration!]! } "A response with data from the export creation." type CreateExportResponse { "The status of the export." status: ExportResponseStatus! "A message explaining the result of the export." message: String! } "A custom field." type CustomField { "The ID of the field." id: ID! """ The user that created the field. The user may have been deleted in which case we return null. """ user: User "The account that the field is owned by." account: Account! "The title of the field." title: String! """ A unique human-readable key for the field, preferably in a slug format with lowercase and hyphens to replace spaces. The key is only unique within the same account. """ slug: String "The description of the field." description: String "The type of the field." fieldType: CustomFieldType! "The type of item that the field applies to." appliesTo: TypeSupportingCustomFieldValues! "The possible options for the field." customFieldOptions: [CustomFieldOption!]! """ Additional custom field settings. For example, validation rules. """ settings: CustomFieldSettings! "To which people should the custom field be visible to." visibility: CustomFieldVisibility! "The custom field related values which were applied on an entity." customFieldValues: [CustomFieldValue!]! "Whether the field has been applied to an entity supporting custom fields." isUsedInFieldValues: Boolean! "Access to the approval rule field pivot, containing the operator and rule value." rule: WorkflowVariableRule "Whether the field is enabled for approval workflows." approval: Boolean! "Whether the user querying the field can edit it." viewerCanUpdate: Boolean! """ Whether the field is owned by the account the viewer is acting as, either directly or through an organisation that account belongs to. Inherited organisation fields count as the viewer's own; fields shared by another company do not. """ viewerOwnsField: Boolean! "Whether the field is enabled to be updated by the API only." apiOnly: Boolean! """ Whether workers are allowed to provide values for this field. When enabled, workers can update field values through the worker API. """ workerInputAllowed: Boolean! """ Whether recruiters (staffing agencies) are allowed to provide values for this field. When enabled, recruiters can update field values through the recruiter API. """ recruiterInputAllowed: Boolean! "Whether values for this field should be surfaced on client invoices." showOnInvoice: Boolean! """ Whether this field is shared with client companies. When enabled, clients of the supplier that owns this field will see it during job sharing. """ sharedWithClients: Boolean! """ Whether values for this field are visible to staffing agencies this company shares the job with. When enabled, agencies with an active share of the job can read this field's value (read-only). """ sharedWithStaffingAgencies: Boolean! """ Whether the user querying the field can edit the field value. Not to be confused with 'viewerCanUpdate' which indicates if the user can edit the field itself, not the field value. """ viewerCanManageFieldValues( "Specify for which account you want to see access rights to manage fields values of a specific field." account: ID! ): Boolean! "The date and time that the field was created." createdAt: DateTime! "The date and time that the field was updated." updatedAt: DateTime "The date and time that the field was deleted." deletedAt: DateTime } "A custom field option." type CustomFieldOption { "The ID of the field option." id: ID! "The field that the field option is valid for." customField: CustomField! """ The display order of the field option. This is an unsigned integer. """ displayOrder: Int! "The value of the field option." value: String! } "A paginated list of CustomField items." type CustomFieldPaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of CustomField items." data: [CustomField!]! } "The settings for a custom field." type CustomFieldSettings { "Validation rules for the custom field." validation: [CustomFieldValidationRules!]! } """ A custom field value. Those represents the custom fields value filled for an entity supporting custom fields. e.g: You've defined a free-text "sector" custom field applying to `Job` entities. Say you have a job which is in the "IT" sector. You'd need to create a custom field value with `field_id = `, and `content = "IT"`. """ type CustomFieldValue { "The ID of the field value." id: ID! "The account that the field value is owned by." account: Account! "The user who created the field value." user: User! "The entity to which the custom field value is applying to." appliesTo: SupportsCustomFieldValue! "The field that the field value is valid for." customField: CustomField! """ The field option which was applied for that field to the entity supporting custom fields. This will be present for a single-select field type. """ customFieldOption: CustomFieldOption """ The content of the custom field value in the case of a custom field not using custom field options. This will be present for a free-text field type. """ content: String """ A representation of the value for easier display. This gives a "human" representation of the custom field value no matter the field type. For example, this will return `content` for a free-text value, will return the custom field option `value` for a single-select value, or the file `name` for a file-upload value. """ displayValue: String """ The uploaded file referenced by the field value. Present for `FILE_UPLOAD` field-values; null for every other field type. """ file: File } """ An employment record for a worker engaged on payroll through Worksome or an Employer of Record (EoR) partner. Employment records track the formal payroll relationship when a worker is employed rather than operating as an independent contractor. A hire may have an associated employment when the engagement uses a payroll arrangement; not all hires have one. """ type Employment { "The ID of the employment." id: ID! "The worker that the employment relates to." worker: Worker! "The employer of record for this employment." employerOfRecord: Account "The hiring managers for this employment." hiringManagers: [User!]! "The employment status for the employment." status: EmploymentStatus! "The employer record status for the employment." onboardingStatus: EmployerRecordStatus! "The start date of the employment." startDate: Date "The end date of the employment." endDate: Date "The date when the worker was first payrolled." firstPayrolledAt: DateTime "Indicates if the worker was previously hired." previouslyHired: Boolean "The date and time that the employment was created." createdAt: DateTime "The date and time that the employment was updated." updatedAt: DateTime "Whether the employment is onboarded." isOnboarded: Boolean "The date when the employment was onboarded (status set to Complete)." onboardedAt: DateTime "The hires associated with this employment." hires( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): HirePaginator! "The employment costs applied to the employment." employmentCosts( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): EmploymentCostPaginator! } "An employment cost." type EmploymentCost { "The ID of the employment cost." id: ID! "The category of the employment cost." category: EmploymentCostCategory! "The type of the employment cost." type: EmploymentCostType! "The frequency of the employment cost." frequency: EmploymentCostFrequency! "The amount of the employment cost." amount: Float! "The currency of the employment cost." currency: String "The date and time that the employment cost was created." createdAt: DateTime "The date and time that the employment cost was updated." updatedAt: DateTime } "A paginated list of EmploymentCost items." type EmploymentCostPaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of EmploymentCost items." data: [EmploymentCost!]! } "A paginated list of Employment items." type EmploymentPaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of Employment items." data: [Employment!]! } """ An expense line item within an expense report. Expenses represent individual costs incurred by a worker during an engagement, such as travel or materials. They are grouped into expense reports and submitted alongside payment requests for approval. """ type Expense { "The ID of the expense." id: ID! "The description of the expense." description: String "The currency of the expense." currency: Currency! "The amount of the expense." amount: Float! "The vendor of the expense." vendor: String! "The date and time that the expense was expensed." expenseAt: DateTime! "The date and time that the expense was created." createdAt: DateTime! "The files attached to this expense." files( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): FilePaginator! } "A paginated list of Expense items." type ExpensePaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of Expense items." data: [Expense!]! } "An expense report." type ExpenseReport { "The ID of the expense report." id: ID! "The title of the expense report." title: String "The description of the expense report." description: String "The total of the expense report." total: Float! "Whether the expense report is a draft." isDraft: Boolean! "The date and time that the expense report was created." createdAt: DateTime "The expenses on the expense report." expenses( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): ExpensePaginator! } "A paginated list of ExpenseReport items." type ExpenseReportPaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of ExpenseReport items." data: [ExpenseReport!]! } "A fee attached to a feeable entity (e.g. Hire, PaymentRequest, staffing agency relationship)." type Fee { "The ID of the fee." id: ID! "The type of the fee." feeType: FeeType! "How the fee is applied when calculating or explaining an amount." application: FeeApplication! """ The rate value of the fee. For percentage-based fees this is a decimal fraction (e.g. 0.125 = 12.5%). For duration-based fees (hourly/daily/weekly/monthly) this is the monetary rate per unit. """ rate: DecimalFour! """ The computed monetary amount of the fee, when available. This is typically populated when the fee is snapshotted onto a billing entity. """ amount: DecimalTwo "The ISO 4217 currency code for the fee, when applicable." currency: Currency "The basis on which the fee is calculated (e.g. percentage, hourly, daily, weekly, monthly)." basis: FeeBasis! """ A human-readable representation of the rate, formatted per basis. For example: "12.50%" for a percentage fee, "EUR 25.50/h" for an hourly fee, or "EUR 200.00/day" for a daily fee. """ formattedRate: String! "The recipient of the fee." recipient: Account """ The parent fee this fee was derived from, if any. For example, a bill fee may reference the hire fee it was snapshotted from. """ parent: Fee } "A file." type File { "The ID of the file." id: ID! "The name of the file." name: String! "The title of the file (optional display name)." title: String "The size of the file in bytes." size: Int! "A human-readable representation of the file size (e.g. `1.2 MB`)." humanReadableSize: String! "The IANA MIME type of the file." mimeType: String! "The account that the file belongs to." owner: Account! """ The URL that should be used to download the file. This URL cannot be used for saving in external systems as it might change over time or be regenerated. If a permanent URL is needed for the file, it should be stored in the clients own system. """ url: String! "The date and time the file was created." createdAt: DateTime "The date and time the file was last updated." updatedAt: DateTime "The tags applied to the file." tags: [Tag!]! } "A paginated list of File items." type FilePaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of File items." data: [File!]! } "A gate represents a collection of related compliance requirements." type Gate { "The primary party responsible for this gate's requirements" actor: ComplianceActorTypes! "Unique identifier for this gate" name: ComplianceName! "List of individual compliance requirements in this gate" compliances: [Compliance!]! "Whether all applicable compliances in this gate are complete" completed: Boolean! "Whether this gate applies to the current context" applicable: Boolean! "Human readable title describing the gate's purpose" title: String! "Detailed description of what needs to be done in this gate" description: String! } """ A representation of an engagement between a company and a worker on a job. A hire tracks the agreement between parties to work together. It is not itself a legal document — the contracts attached to the hire (`Hire.contracts`, `Hire.activeContract`) are the legal agreements. A hire progresses through a lifecycle: `DRAFT` → `OFFERED` → `READY` → `ACTIVE` → `ENDED`. It may also be `CANCELLED` (before activation) or `TERMINATED` (ended early by the company). """ type Hire { "The ID of the hire." id: ID! "The unique reference for the hire." number: String! """ The date the worker last submitted a payment request for this hire. Null if no payment request has ever been submitted. """ lastPaymentRequestDate: Date """ The latest contract, not necessarily the active one. The latest contract could for example be a draft, if one of the parties wanted to make changes to the currently active contract. see `hire.activeContract` for the current active one. """ latestContract: Contract! """ The currently active contract. This has been accepted by all parties and is the active legal document between them. """ activeContract: Contract "The draft contract, if there is one waiting for the other party to accept." draftContract: Contract "If there are pending changes to the contract that are awaiting acceptance by the worker." pendingContractChanges: Boolean! """ If the hire has a contract change scheduled to take effect on a future date, whether or not it has been signed yet. """ hasScheduledChanges: Boolean! """ If the hire has a signed, future-dated change that is parked awaiting its effective date. When true the change is locked: it can no longer be amended and must be cancelled and re-created to change it. """ hasSignedScheduledChange: Boolean! "The company which the worker will work with." company: Company! "The job that the hire is on." job: Job! "The recruiter attributed to the hire." recruiter: Recruiter "The polymorphic supplier (Company or Recruiter) attributed to the hire." supplier: Account """ Whether the authenticated viewer is the supplier (staffing agency) on this hire. True for both traditional Recruiters and Company-as-supplier accounts. """ viewerIsSupplier: Boolean! "The contract type for the hire (e.g., 'SOW', 'Sole Trader', etc.)." contractType: ContractType! """ The engagement type for the hire (e.g., 'payroll', 'contractor', 'external', 'pending'). This represents the nature of the working relationship. """ engagementType: EngagementType "A descriptive label for the engagement type (e.g. 'Employee', 'Contractor', etc.)." engagementTypeLabel: String "The engagement type setup for the hire (e.g. 'W-2', 'InsideIR35', 'GlobalPayroll', etc.)." engagementTypeSetup: EngagementTypeSetup "A descriptive label for the engagement type setup (e.g. 'PAYE', 'Inside IR35', 'Outside IR35', etc.)." engagementTypeSetupLabel: String "A short code or abbreviation representing the contract type (e.g., 'W2', 'IR35', etc.)." contractTypeShort: String "A descriptive label for the contract type. e.g. 'Subject to Worksome Classify'." contractTypeLabel: String! "If this hire is using Worksomes Classify for determining its classification." usesClassification: Boolean! "The Worksome Classification Recommendation (WCR) currently linked to this hire." wcr: Wcr @deprecated(reason: "Legacy method for getting worksome classification recommendation. Use classification instead.") """ The worksome classification recommendation represents a worker classification (SDS/WCR) for a hire. This can be various types of classifications like IR35, US Worker Classification, etc. """ classification: Classification "The result of classification." classificationResult: ClassificationResult! @deprecated(reason: "Decoupling classification from hire in future versions.") """ A context dependent label that helps interpret the classification result. It can return a much wider array of labels than the classificationResult can and therefore should be used when displaying the legal context for the classification. """ classificationLabel: String @deprecated(reason: "Decoupling classification from hire in future versions.") """ A URL of the classification documentation result. This URL will link to a PDF for the classification result is present. This URL cannot be used for saving in external systems as it might change over time or be regenerated. If a permanent URL is needed for the classification result, it should be stored in the clients own system. """ classificationPdfUrl: String! @deprecated(reason: "Decoupling classification from hire in future versions.") "The worker which the company is hiring." worker: Worker! """ The conversation in which the hire is happening. If the hire is stuck in an approval flow, there can exist a situation where no conversation exists yet. """ conversation: Conversation """ The employment record for the worker on this hire when they are employed by Worksome or an EoR partner. Note: This employment is not always tied to a specific hire. """ employment: Employment "The date that the hire was created." createdAt: Date! "The date that the hire started." startDate: Date "The date that the hire ended." endDate: Date "The date that recruiter ownership started." recruiterOwnershipStartDate: Date "The recruiter's fee." recruiterFee: Percentage @deprecated(reason: "Only supports percentage-based fees. Use `fees` instead, which supports all fee bases.") "The number of ownership days for the recruiter." recruiterOwnershipDays: Int "Indicates whether or not the recruiter ownership has expired yet." recruiterOwnershipIsExpired: Boolean "Number of days left in the recruiter's ownership." recruiterOwnershipDaysLeft: Int "The currency of the hire." currency: String! "The rate for the hire." rate: Float "The rate type for the hire." rateType: String """ The current lifecycle status of the hire. See `activeStatus` for the same value. Possible values: `DRAFT`, `OFFERED`, `READY`, `ACTIVE`, `ENDED`, `CANCELLED`, `TERMINATED`. """ status: HireActiveStatus! "The date that the hire became active." offeredAt: Date "An identifier associated with the hire from an external system." externalIdentifier: String "The assigned Purchase Order (PO) number, if one has been added." purchaseOrderNumber: String "Compliance rows for this hire. Pass `names` to filter." compliances( "Compliance names to filter by. Omit for all that apply to a hire." names: [ComplianceName!] ): [Compliance!]! "Whether the staffing agency (recruiter or company-as-supplier) manages workers on this hire." recruiterManagesWorkers: Boolean """ Whether the supplier's confirmation on this hire is signature-free and auto-accepted (the MSP opted this vendor-managed hire into no-signature confirmation). Drives whether the supplier sees a signature widget. """ supplierSignatureWaived: Boolean "Whether the assigned recruiter can be removed from the hire." canRemoveRecruiter: Boolean "Whether the assigned worker can be reminded for billing." canRemindWorkerForBilling: Boolean! "The user who created the Hire." user: User """ The current lifecycle status of the hire. Possible values: `DRAFT`, `OFFERED`, `READY`, `ACTIVE`, `ENDED`, `CANCELLED`, `TERMINATED`. """ activeStatus: HireActiveStatus! """ The date an early termination takes effect, or null when the hire has not been terminated. """ terminationDate: Date "If the company can terminate the contract of the hire." canTerminateContract: Boolean! "If the company can cancel the contract of the hire." canCancelContract: Boolean! "If milestones exists for the hire." hasMilestones: Boolean! "If an employment record exists for the hire." hasEmployment: Boolean! "If there is a draft contract for the hire." hasDraftContract: Boolean! "If the hire triggers approval" triggersApproval( "The approval trigger to check if the hire will trigger." trigger: ApprovalTrigger ): Boolean "The overall state for approvals on the hire with a given trigger." currentApprovalState( "The approval trigger to check the state for." trigger: ApprovalTrigger ): ApprovalState "Whether the hire has any pending approval request across all triggers." hasPendingApproval: Boolean! "The owners of the hire." owners: [User!]! "Check if this hire ends within a given number of days." endsWithinDays( "Number of days ahead to check for the hire to end (default: 3)." daysAhead: Int = 3 ): Boolean! "The number of days the hire has been active (tenure)." tenure: Int! "The source hire this hire was derived from." sourceHire: Hire "The supplier-side hire derived from this source hire." supplierHire: Hire """ True when the `sourceHire` has pending contract changes that haven't yet been reflected here. Always false on hires without a `sourceHire`. """ hasUnactedClientChanges: Boolean! """ Checks if the current viewer has the correct permissions to be able to accept the contract and that all blocking actions have been completed. """ viewerCanAcceptContract: Boolean! """ Whether the current viewer can create a new payment request for this hire. Uses the createBill policy (worker or recruiter with access-placements) plus hire state. """ viewerCanCreatePaymentRequest: Boolean! "The fees associated with this hire." fees: [Fee!]! """ The staffing agency's markup fee on this hire, when one applies. Visible only to the staffing agency; null otherwise. """ markupFee: Fee """ The contracts for the hire. These are legal documents, however it can contain old contracts and drafts also. """ contracts( "A status to filter on to only see contracts with a specific or multiple specific statuses." statuses: [ContractStatus!] "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): ContractPaginator! "The payment requests created on the hire." paymentRequests( "Only show payment requests that have the specified statuses." statuses: [PaymentRequestStatus!] "Only show payment requests that have the specified worker statuses." workerStatuses: [PaymentRequestWorkerStatus!] "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): PaymentRequestPaginator! "The milestones for the hire." milestones( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): MilestonePaginator! "The approvals on a hire." approvals( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): ApprovalPaginator! } "A paginated list of Hire items." type HirePaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of Hire items." data: [Hire!]! } "An industry." type Industry { "The ID of the industry." id: ID! "The name of the industry." name: String! } "A paginated list of Industry items." type IndustryPaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of Industry items." data: [Industry!]! } """ An invoice issued to a company for approved worker payment requests. An invoice is created when one or more worker payment requests are approved by a company user. It defines the total amount due from the company to Worksome and tracks the payment lifecycle. """ type Invoice { "The ID of the invoice." id: ID! """ A number referencing the invoice. This is usually printed on the invoice itself and should be used by booking system and finance departments. The invoice number is in a human readable format. """ number: String """ A URL of the actual invoice. This URL will link to a PDF for the invoice. This URL cannot be used for saving in external systems as it might change over time or be regenerated. If a permanent URL is needed for the invoice, it should be stored in the clients own system. """ pdfUrl: URL! "The type of currency." currency: Currency! "The total amount including taxes etc." grossAmount: Float! "The total amount due on invoice minus credited amounts including taxes etc." grossOpenAmount: Float! "The total amount of taxes to be paid." taxAmount: Float! "The total amount without taxes." netAmount: Float! """ The date that the invoice was marked paid by Worksome. This date might vary from the actual date it was paid, as it takes time for a payment to go through and be validated. """ markedPaidAt: Date "The date that the invoice should be paid by." dueDate: Date! "The company that the invoice is for." company: Company! "The payer business entity on the invoice." payerBusinessEntity: BusinessEntity "The payee business entity on the invoice." payeeBusinessEntity: BusinessEntity "Human-readable display name of the payer." payerDisplayName: String! "Human-readable display name of the payee." payeeDisplayName: String! "The date that the invoice was created." date: Date! """ Checks if the invoice is a batched invoice. A batch invoice aggregates multiple payment requests together in one, summarised invoice over a period of time. This reduces the overhead of processing high volumes of payment requests and corresponding invoices. """ isBatched: Boolean! "The type of transaction to be used for the invoice." transactionType: InvoiceTransactionType! "Checks if the invoice has been fully credited." isFullyCredited: Boolean! "Checks if the invoice is overdue." isOverDue: Boolean "The credit notes associated with the invoice." creditNotes: [Invoice!]! "The original invoice credited by this credit note." originalInvoice: Invoice "An external identifier for the invoice, used to reference it in external systems." externalIdentifier: String """ A paginated list of all the rows on the invoice. This can be used to gather more information about the invoice than just the overall amount. """ rows( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): InvoiceRowPaginator! } "A paginated list of Invoice items." type InvoicePaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of Invoice items." data: [Invoice!]! } "A row on the invoice." type InvoiceRow { "The ID of the invoice row." id: ID! "The payment request which the row on the invoice is related to." paymentRequest: PaymentRequest "The worker that is linked to this row." worker: Worker "A custom text which will be shown on the invoice PDF." customText: String } "A paginated list of InvoiceRow items." type InvoiceRowPaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of InvoiceRow items." data: [InvoiceRow!]! } """ A job posting created by a company on Worksome. Jobs start in `DRAFT` status after creation via `createJob`, then move to `ACTIVE` once published via `updateJob`. A job can be shared with the marketplace, trusted contacts, or staffing agencies depending on its visibility settings. Workers can submit bids on published jobs, and the company can hire from those bids or directly hire a trusted contact. """ type Job implements HasURL { "The ID of the job." id: ID! "The unique reference for the job." number: Int! "The name of the job." name: String! "The client contact's full name." contactName: String "The client contact's email address." contactEmail: String "The client contact's phone number." contactPhone: String "The skills required for the job." skills: [Skill!]! "The description of the job." description: String "The market that the job is in." market: MarketCode! "The status of the job." status: JobStatus "The address of the job." address: String @deprecated(reason: "Use `location` instead.") "The address location associated to the job." location: Address! "The type of currency." currency: Currency! "The unit of time when payment is due." rateType: RateType "The payment amount per specified rate type." rate: Float "The minimum payment amount per specified rate type." minimumRate: Float "The maximum payment amount per specified rate type." maximumRate: Float "The payment scheme that the job will use." paymentScheme: PaymentScheme @deprecated(reason: "This field is being phased out as part of our platform simplification efforts. No direct replacement is planned. This field will be removed on `2024-09-29`.") "The company fee (as a percentage)." companyFee: StrictPercentage "The worker fee (as a percentage)." workerFee: StrictPercentage "The project type of the job." association: Association "The project the job associated to." project: Project "Internal budget of the project." internalBudget: Float """ Total job spent. Only enterprise company owning the job could access the budget. """ spent: Float! "The expected experience levels required for the job." expectedExperienceLevel: [ExpectedExperienceLevel!]! "The location preference of the job." locationPreference: LocationPreference "The date that the job started." startDate: Date "The timeframe within the job is likely to start" startDateTimeframe: JobStartTimeframe "The timeframe within the job is likely to end" endDateTimeframe: JobEndTimeframe "The date that the job ended." endDate: Date "The files attached to the job." attachments: [File!]! "Whether the job can be extended." isExtensionAvailable: Boolean "The period of time required to reply to candidates." evaluationPeriod: EvaluationPeriod "The date and time by which candidates should be submitted for this job." sourcingEndDate: DateTime """ A pending choice for the sourcing deadline, while sourcingEndDate is still unresolved. Only meaningful when sourcingEndDate is null. """ sourcingDeadlineChoice: SourcingDeadlineChoice "The deadline for candidate submission, formatted as "YYYY-MM-DDTHH:mm:ss" in the account's market timezone." sourcingEndDateLocal: String "The languages required for the job." languages: [Language!]! "The industries that the worker requires experience in for the job." industries: [Industry!]! """ The number of workers that are required for the job. If excluded, the default is 1 profile. """ requiredWorkers: Int "The owners of the job posting." owners: [User!]! """ Additional custom fields values for the job. Details specified here are never shown to workers. Depending on each field's sharing settings, some may be visible outside your team. """ customFieldValues: [CustomFieldValue!]! "The audiences that will be able to see the job listing." visibility: [JobVisibility!]! "Whether the job has been approved by Worksome." approved: Boolean! "Whether the job is available to receive offers." available: Boolean! "Whether the job is currently paused." paused: Boolean! "Whether the job is completed." completed: Boolean! "Whether the job has been published." published: Boolean! "Whether the job is a draft." draft: Boolean! "Whether the job has been removed/discarded while being published and before having any hires." removed: Boolean! "The cause for removal of the Job." removedCause: String "The date and time that the job was published." publishedAt: DateTime "The company that the job is for." company: Company! "The region for the job." region: String "The URL for the job." url: URL! "Whether the viewer is able to delete the job." viewerCanDelete: Boolean! "Whether the viewer is able to edit the job." viewerCanEdit: Boolean! "Whether the viewer is able to share the job." viewerCanShare: Boolean! "Whether the viewer is able to create a job candidate." viewerCanCreateJobCandidate: Boolean! "Whether the viewer is able to create a hire on the job." viewerCanCreateHire: Boolean! "The date and time that the job was created." createdAt: DateTime! "The date and time that the job was updated." updatedAt: DateTime! "Whether the job is shared with contacts." isForContacts: Boolean! "Whether the job is shared with recruiters." isForRecruiters: Boolean! "Whether the job is shared publicly on the marketplace." isForMarketplace: Boolean! "An identifier associated with the job from an external system." externalIdentifier: String "Determines if the job can be published." canBePublished: Boolean! "Whether the job is a job post." isJobPost: Boolean """ **Experimental.** Whether the job is a lightweight brief rather than a full job post. """ isBrief: Boolean "Whether the job is available." isAvailable: Boolean "The source job this job was derived from." sourceJob: Job "The supplier-side job derived from this source job." supplierJob: Job "The hires made on the job." hires( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): HirePaginator! "The conversations involving the job." conversations( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): ConversationPaginator! "The notes added to the job." notes( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): NotePaginator! "The payment requests created on the job." paymentRequests( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): PaymentRequestPaginator! "The bids submitted for the job." bids( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): BidPaginator! "The contacts that this job was shared with." shares( "Specify which account types the job of shares should be filtered on." accountTypes: [AccountType!] "Indicates either to return active or inactive job shares." isActive: Boolean "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): JobSharePaginator! """ The workers candidates for this job. Scoped like the root jobCandidates query: company viewers see all, suppliers only their own submissions. """ jobCandidates( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): JobCandidatePaginator! } "The relation between a job and a worker, making them a candidate for the job." type JobCandidate { "The ID of the approvals." id: ID! "The job for which the worker is a candidate." job: Job! "The worker who is a candidate for the Job." worker: Worker! "The active bid made by the worker for the job." bid: Bid "The hire created by the company for the job and worker pairing." hire: Hire "The job share reference if the worker was invited to apply." jobShare: JobShare "The sourcing channel that the worker came from as a job candidate." sourcingChannel: SourcingChannel! """ How the candidate was submitted (managed vs referred). Null for candidates that didn't come through a supplier submission. """ submissionType: CandidateSubmissionType "Contact name of who submitted the candidate." contactName: String "Contact email of who submitted the candidate." contactEmail: String "Contact phone of who submitted the candidate." contactPhone: String "The owner of the submitted candidate. Only applies if the candidate was submitted." owner: Account "The step of the hiring process that the job candidate is in." step: JobCandidateHiringStep! "The status of the job candidate." status: JobCandidateStatus! "When not eligible anymore, indicates why the job candidate is not." statusReason: JobCandidateStatusReason """ Added comment regarding the reason for the job candidate not being eligible. Only resolved for viewers on the job's owning company. """ statusComment: String "Whether the candidate has been selected as preferred." isPreferred: Boolean! "The user that last changed the job candidate status." statusSetByUser: User! "The user that last changed the job candidate step." stepSetByUser: User! "The date and time that the job candidate was created." createdAt: DateTime! "The user that created the job candidate." createdByUser: User! "The date and time that the job candidate was last updated." updatedAt: DateTime "The user that last updated the job candidate." updatedByUser: User "Whether the viewer can update the job candidate status." viewerCanUpdateStatus: Boolean! "Whether the viewer can update the job candidate preferred." viewerCanUpdatePreferred: Boolean! """ The source candidate this was presented from in a mirror setup. Only resolved for viewers on the job's owning company. """ sourceCandidate: JobCandidate """ The client-side candidate created when this candidate was presented, in a mirror setup. Only resolved for viewers on the job's owning company. """ presentedCandidate: JobCandidate "The history of stage transitions for this candidate." stageHistory: [JobCandidateStageHistoryEntry!]! "Whether the current user can withdraw this forwarded candidate." viewerCanWithdrawForwardedCandidate: Boolean! """ Whether the viewer (a supplier who owns this candidate) can withdraw them from the hiring process. """ viewerCanWithdraw: Boolean! """ Whether the current user can invite this candidate to begin onboarding. True only when the viewer has edit-jobs permission on the candidate's job, the candidate has a draft hire, and the candidate is not the client-side copy of a candidate presented through an MSP mirror flow. """ viewerCanInviteToOnboard: Boolean! "Whether this candidate has been presented (forwarded) to the client job." presentedToClient: Boolean! """ The name of the staffing agency that originally sourced this candidate. Only returned when the candidate was presented to the client by a different agency than the one that originally submitted them. """ sourceAgencyName: String } "A paginated list of JobCandidate items." type JobCandidatePaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of JobCandidate items." data: [JobCandidate!]! } "A single entry in a candidate's stage transition history." type JobCandidateStageHistoryEntry { "The stage that was set." stage: JobCandidateHiringStep! "The name of the user that made the change, if available." changedByName: String "When the transition occurred." createdAt: DateTime! } "A paginated list of Job items." type JobPaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of Job items." data: [Job!]! } "The contacts that the job was shared with." type JobShare { "The ID of the job share." id: ID! "The account that the job share belongs to." account: JobShareableAccount! "Whether the job share is active." isActive: Boolean! "The date and time that the job share was created." createdAt: DateTime! "The job that the job share is related to." job: Job! } "A paginated list of JobShare items." type JobSharePaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of JobShare items." data: [JobShare!]! } "A language that is required for a job." type Language { "The name of the language." name: LanguageName! "The required level of the language." experience: Fluency! } """ A legacy timesheet. This is only for internal use within the Worksome platform. """ type LegacyTimesheet { "The format of the legacy timesheet." format: LegacyTimesheetType @deprecated(reason: "Use `Timesheet`") "The HTML representation of the legacy timesheet." html: String @deprecated(reason: "Use `Timesheet`") } "A link on a profile." type Link { "The title of the link." title: String! "The URL of the link." url: String! } """ A geographic market in which Worksome operates (e.g. UK, US, Denmark). Markets determine applicable compliance rules, currencies, and employment regulations for accounts and jobs. """ type Market { "The market code." code: MarketCode! "The name of the market." name: String! "The label for the region type (e.g. regions, states, provinces)." regionLabel: String } "A region within a market." type MarketRegion { "The unique identifier for the region." id: Int! "The translated name of the region." name: String! } "A launched market with all of its available regions." type MarketWithRegions { "The market code." code: String! "The market display name." name: String! "The label for the region type (e.g. regions, states, provinces)." regionLabel: String "All regions within this market." regions: [MarketRegion!]! } "A message as part of a conversation." type Message implements HasURL { "The ID of the message." id: ID! "The body of the message." body: String "The author of the message." author: User "The URL for the message." url: URL! } "A paginated list of Message items." type MessagePaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of Message items." data: [Message!]! } """ A deliverable-based milestone within a hire. Milestones allow companies and workers to break an engagement into discrete deliverables, each with its own amount and completion status. Payment can be tied to milestone completion rather than time-based billing. """ type Milestone { "The ID of the milestone." id: ID! "The name of the milestone." name: String! "The Purchase Order (PO) number of the milestone." purchaseOrderNumber: String "The current status of the milestone." status: MilestoneStatus! "The current details of the milestone." details: MilestoneDetail! "The hire that the milestone belongs to." hire: Hire! "The payment requests that the milestone is related to." paymentRequests( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): PaymentRequestPaginator! } "Milestone details." type MilestoneDetail { "The ID of the milestone details." id: ID! "The due date of the milestone detail." dueDate: Date! "The total amount of the milestone detail." amount: Float! "The milestone that the details belong to." milestone: Milestone! "The contracts that the details belong to." contracts( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): ContractPaginator! } "A paginated list of MilestoneDetail items." type MilestoneDetailPaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of MilestoneDetail items." data: [MilestoneDetail!]! } "A paginated list of Milestone items." type MilestonePaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of Milestone items." data: [Milestone!]! } "A paginated list of MultiFactor items." type MultiFactorPaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of MultiFactor items." data: [MultiFactor!]! } type Mutation { """ Create a custom timesheet. Use this endpoint to create timesheets in Worksome from a custom data format. The endpoint requires data in a custom format, as defined by the input schema. """ createCustomTimesheet( "The details for creating a custom timesheet." input: CreateCustomTimesheetInput! ): CreateCustomTimeSheetResponse! """ Add a rule to an approval flow. A rule defines the conditions under which an approval is required. Each rule contains one or more variable conditions (e.g. "hourly rate > 100") that are evaluated when the trigger event fires. After creating the rule, use `createApprover` to assign user groups who will review matching items. """ createApprovalRule( "The details for the new approval rule." input: CreateApprovalRuleInput! ): ApprovalRule! """ Create an approval flow. Only companies can create approvals. An approval defines a review process that is automatically triggered when certain events occur (e.g. a hire is created or a contract changes). Once created, add approval rules to define the conditions and approvers for the flow. """ createApproval( "The details for the new approval flow." input: CreateApprovalInput! ): Approval! """ Update an approval flow. Updating an approval creates a new version. Only companies that own the approval can update it. """ updateApproval( "The fields to update on the approval." input: UpdateApprovalInput! ): Approval! """ Assign a user group as an approver on an approval rule. Approvers are processed in `position` order — position 1 is asked to approve first, then position 2, and so on. Each approver is a user group whose members can act on the approval request. """ createApprover( "The details for the new approver assignment." input: CreateApproverInput! ): Approver! "Update an approver's user group or position in the approval sequence." updateApprover( "The fields to update on the approver." input: UpdateApproverInput! ): Approver! """ Take action on a pending approval request — approve, reject, or request changes. The authenticated user must be a member of the approver's user group and the approval request must be awaiting their action (`viewerCanAction` must be `true`). """ actionApprovalApprovable( "The action to take on the approval request." input: ActionApprovalApprovableInput! ): ApprovalApprovable "Update the bank account details." storeBankDetails( "The details for updating the bank account record." input: StoreBankDetailsInput! ): BankDetail! "Create a new batch of items for processing." createBatch( "The details for the new batch." input: CreateBatchInput! ): Batch "Run an action on a batch." runBatchAction( "The details for the batch action." input: RunBatchActionInput! ): RunBatchActionResponse! "Generate the company invite link token." generateInviteLink( "The input required to generate the company invite link token." input: GenerateInviteLinkInput! ): Company! """ Generate or regenerate a personal invite link for the authenticated user. This URL allows workers to join as trusted contacts with auto-approval. Only company members can generate personal invite links. """ generatePersonalInviteLink( "The company for which to generate the personal invite link." input: GeneratePersonalInviteLinkInput! ): String! "Manage Onboarding documents." manageOnboardingDocuments( "The input required to manage onboarding documents." input: ManageOnboardingDocumentsInput! ): Company "Remove Onboarding documents." removeOnboardingDocuments( "The input required to remove onboarding documents." input: RemoveOnboardingDocumentsInput! ): Company "Manage staffing agency onboarding documents." manageRecruiterOnboardingDocuments( "The input required to manage staffing agency onboarding documents." input: ManageRecruiterOnboardingDocumentsInput! ): Company "Remove staffing agency onboarding documents." removeRecruiterOnboardingDocuments( "The input required to remove staffing agency onboarding documents." input: RemoveRecruiterOnboardingDocumentsInput! ): Company """ Add and invite a new recruiter. Only companies can add and invite recruiters. """ createCompanyRecruiter( "The details for adding & inviting the recruiter." input: CreateCompanyRecruiterInput! ): CompanyRecruiter """ Update a recruiter relationship. Only companies can edit recruiter relationships. """ updateCompanyRecruiter( "The details of the recruiter relationship to be updated." input: UpdateCompanyRecruiterInput! ): CompanyRecruiter """ Delete a recruiter relationship. Both the company and the recruiter can delete the relationship. """ deleteCompanyRecruiter( "The details of the recruiter relationship to be deleted." input: DeleteCompanyRecruiterInput! ): CompanyRecruiter """ Invite an existing recruiter. Only companies can invite the recruiter. """ inviteCompanyRecruiter( "The details of the recruiter to be invited." input: InviteCompanyRecruiterInput! ): CompanyRecruiter! """ Submit information for a compliance — e.g. a company reviewing a worker, or a worker filling in form data. Set exactly one field on the `input` to choose the action; the acting company/user comes from your authenticated session. Returns the updated `Compliance`. """ submitCompliance( "The action to perform. Set exactly one field." input: SubmitComplianceInput! ): Compliance! "Create a custom field." createCustomField( "The input for creating a custom field." input: CreateCustomFieldInput! ): CustomField! """ Update a custom field. All fields must be provided. """ updateCustomField( "The input for updating a custom field." input: UpdateCustomFieldInput! ): CustomField! """ Delete a custom field. All fields details must be provided. """ deleteCustomField( """ " The input for deleting a custom field. """ input: DeleteCustomFieldInput! ): CustomField! """ Update custom field values for a fieldable entity as a worker. Accepts a collection of field values in a single payload. Only fields with `workerInputAllowed: true` can be updated. Partial updates are supported - fields not included are ignored. """ updateWorkerCustomFieldValues( "The input for updating custom field values as a worker." input: UpdateWorkerCustomFieldValuesInput! ): UpdateWorkerCustomFieldValuesPayload! "Mark an employment as updated." approveEmploymentChanges( "The input for approving employment changes." input: ApproveEmploymentChangesInput! ): Employment! "Onboard an employment with optional employment costs." onboardEmployment( "The input for onboarding an employment." input: OnboardEmploymentInput! ): Employment! """ Generate temporary upload URLs for files for the given account. The temporary URL will expire after 1 week. """ uploadFiles( "The input required for upload a file." input: [UploadFileInput!]! ): [TemporaryFileUploadResponse!]! "Mark one or more files as uploaded to the temporary URL." markFilesAsUploaded( "The input required for marking files as uploaded." input: MarkFilesAsUploadedInput! ): [File!]! """ Hire a worker for a job by accepting their bid. Only companies can make hires. The worker must have submitted a bid on the job before this mutation can be used. Once a hire is created, a draft contract is automatically generated (`Hire.latestContract`) and is pending acceptance from the other party (usually the worker). """ acceptBid( "The input required for hiring a worker by accepting their bid." input: AcceptBidInput! ): Hire! "Reject a hire." rejectHire( "The input required to reject a hire." input: RejectHireInput! ): Hire! """ Directly hire a trusted contact without requiring a bid. Deprecated: use `createDraftHire` to create draft hires via the public API. Only companies can make hires. The worker must already be a trusted contact of the hiring company. A job is optional — if omitted, one will be created automatically from the provided details. """ hire( "The input required for directly hiring a trusted contact." input: HireInput! ): Hire! @deprecated(reason: "Use the createDraftHire mutation to create draft hires via the public API.") """ Create a draft hire for a trusted contact. Only companies can make hires. The worker must already be a trusted contact of the hiring company. A job is optional — if omitted, one will be created automatically from the provided details. Draft hires must be completed in the Worksome UI before they become active, such as applicable compliance checks. The hire will start in `DRAFT` status and progress through the lifecycle once all required steps are finished. """ createDraftHire( "The input required for creating a draft hire." input: HireInput! ): Hire! "Terminate a hire." terminateHire( "The input required for terminating a hire." input: TerminateHireInput! ): Hire! """ Cancel a hire. Only companies can cancel their hires. """ cancelHire( "The input required for canceling a hire." input: CancelHireInput! ): Hire! """ Attribute a recruiter to a hire. Only companies can attribute recruiters to their hires. """ attributeRecruiterToHire( "The input required for attributing a recruiter to a hire." input: AttributeRecruiterToHireInput! ): Hire! """ Attribute a supplier (Company or Recruiter) to a hire. Only companies can attribute suppliers to their hires. """ attributeSupplierToHire( "The input required for attributing a supplier to a hire." input: AttributeSupplierToHireInput! ): Hire! """ Remove a recruiter from a hire. Only companies can remove recruiters from their hires. """ removeRecruiterFromHire( "The input required for removing a recruiter from a hire." input: RemoveRecruiterFromHireInput! ): Hire! """ Share a hire offer with a worker. Only companies can share hires with workers. """ shareHire( "The input required for sharing a hire." input: ShareHireInput! ): Hire! """ Create a job with minimal required fields. Only companies can create jobs. The job is created in `DRAFT` status with just a title, skills, and owner. Use `updateJob` to set the full details (description, rates, dates, location, etc.) and to publish the job. """ createJob( "The minimal details for the new job." input: CreateJobInput! ): Job! """ Update a job's details. Only companies can update jobs. This is the follow-up to `createJob` — use it to set the full role details (description, rates, dates, location, visibility) and to publish the job when ready. All fields are optional; only the fields you provide will be updated. """ updateJob( "The fields to update on the job." input: UpdateJobInput! ): Job! """ End a job. Only companies can end jobs. """ endJob( "The details to end the job." input: EndJobInput! ): Job! """ Set the internal budget of a job. Only companies can set the internal budget on the job. """ setInternalBudgetOnJob( "The details of internal budget for the job." input: SetInternalBudgetOnJobInput! ): Job! """ Duplicate a job. Creates a copy of the job with all its details (description, skills, location, budget, etc.) Only companies can duplicate jobs. """ duplicateJob( "The details for duplicating the job." input: DuplicateJobInput! ): Job! """ Create a job candidate. This will make the workers eligible and proposed for a job. """ createJobCandidate( "Input data to create the job candidate." input: CreateJobCandidateInput! ): [JobCandidate!]! """ Update a job candidate status. A reason and comment can be provided. """ updateJobCandidateStatus( "Input data to update a job candidates status." input: UpdateJobCandidateStatusInput! ): JobCandidate! "Update job candidates "preferred" status." updateJobCandidatePreferred( "Input data to update a job candidate preferred status." input: UpdateJobCandidatePreferredInput! ): JobCandidate! "[Experimental] Share candidates with the linked partner account." shareCandidatesWithPartner( "Input data to share candidates." input: ShareCandidatesWithPartnerInput! ): [JobCandidate!]! """ Manually update the hiring step of a job candidate. Only manual (non-system) steps can be set through this mutation. """ updateJobCandidateStep( "Input data to update a job candidate's step." input: UpdateJobCandidateStepInput! ): JobCandidate! "Present a candidate to a linked job with a specified rate." forwardCandidate( "Input data to forward a candidate." input: ForwardCandidateInput! ): JobCandidate! """ Reverse of forwardCandidate — withdraws a candidate that was presented to a client. The candidate is removed from the client's job and the source candidate's step is set to withdrawn. """ withdrawForwardedCandidate( "Input data to withdraw a forwarded candidate." input: WithdrawForwardedCandidateInput! ): JobCandidate! """ Withdraw an own submitted candidate from the hiring process. Used by suppliers; moves the candidate to the withdrawn step of its current phase. """ withdrawJobCandidate( "Input data to withdraw a job candidate." input: WithdrawJobCandidateInput! ): JobCandidate! """ Use this endpoint to invite a candidate to complete the required Worksome onboarding and compliance information before a hire offer is shared. Calling this endpoint will: - add the worker to the company's talent pool if needed - include the worker in the company's compliance tracker - notify the supplier for supplier-managed workers, so they can complete the required onboarding and compliance steps """ inviteCandidateToOnboard( "Input data to invite a candidate to onboard." input: InviteCandidateToOnboardInput! ): JobCandidate! "Create a job share." createJobShare( "The details for the job share." input: CreateJobShareInput! ): [JobShare!]! "Remove a job share." removeJobShare( "The details for removing the job share." input: RemoveJobShareInput! ): [JobShare!]! "Create one or more milestones." createMilestones( "The details for the new milestones." input: CreateMilestonesInput! ): [Milestone!]! "Update one or more milestones." updateMilestones( "The details for the milestones to update." input: UpdateMilestonesInput! ): [Milestone!]! "Delete one or more milestones." deleteMilestones( "The details for the milestone to delete." input: DeleteMilestonesInput! ): [Milestone!]! "Create a new multi-factor authentication implementation." createSmsMultiFactor( "The details for the new SMS multi-factor authentication implementation." input: CreateSmsMultiFactorInput! ): SmsCreateMultiFactorPayload! "Verify a multi-factor authentication implementation." verifySmsMultiFactor( "The details for the verification of the SMS multi-factor authentication implementation." input: VerifySmsMultiFactorInput! ): SmsMultiFactor "Create a new multi-factor authentication implementation." createTotpMultiFactor( "The details for the new TOTP multi-factor authentication implementation." input: CreateTotpMultiFactorInput! ): TotpCreateMultiFactorPayload! "Verify a TOTP multi-factor authentication implementation." verifyTotpMultiFactor( "The details for the verification of the TOTP multi-factor authentication implementation." input: VerifyTotpMultiFactorInput! ): TotpMultiFactor "Remove a multi-factor authentication implementation." removeMultiFactor( "The details for removing the multi-factor authentication implementation instance." input: RemoveMultiFactorInput! ): MultiFactor "Create a note." createNote( "The details for creating a note." input: CreateNoteInput! ): Note! "Update a note." updateNote( "The details for updating a note." input: UpdateNoteInput! ): Note! "Delete a note." deleteNote( "The details for deleting a note." input: DeleteNoteInput! ): Note! "Create a payment request." createPaymentRequest( "The details for creating a payment request." input: CreatePaymentRequestInput! ): PaymentRequest! "Update a payment request." updatePaymentRequest( "The details for updating a payment request." input: UpdatePaymentRequestInput! ): PaymentRequest! "Delete a payment request." deletePaymentRequest( "The details for deleting a payment request." input: DeletePaymentRequestInput! ): PaymentRequest! """ Create a project. Only companies can create projects. """ createProject( "The details for creating a project." input: CreateProjectInput! ): Project! """ Update a project. Only companies can update projects. """ updateProject( "The details for updating a project." input: UpdateProjectInput! ): Project! """ Soft delete a project. Only companies can delete projects. """ deleteProject( "The details for deleting a project." input: DeleteProjectInput! ): Project! """ Attach one or more jobs to a project. Only companies can attach jobs to projects. """ attachJobsToProject( "The details for attaching a job to a project." input: AttachJobsToProjectInput! ): Project! """ Detach a job from a project Only companies can detach a job from a project. """ detachJobFromProject( "The details for attaching a job to a project." input: DetachJobFromProjectInput! ): Project! """ End a project. This is used to set an end date on the project to consider it no longer active. """ endProject( "The details for ending a project." input: EndProjectInput! ): Project! """ Open a project. This is used to set the end date on the project to `null` to make it open again. """ openProject( "The details for opening a project." input: OpenProjectInput! ): Project! """ Add and invite a new candidate. Only recruiters can add and invite candidates. """ createRecruiterCandidate( "The details for adding & inviting the candidate." input: CreateRecruiterCandidateInput! ): RecruiterCandidate """ Update a recruiter candidate information. Only recruiters can edit the relationship. """ updateRecruiterCandidate( "The details of the recruiter candidate relationship to be updated." input: UpdateRecruiterCandidateInput! ): RecruiterCandidate """ Delete a recruiter candidate relationship. Both the recruiter and the candidate can delete the relationship. """ deleteRecruiterCandidate( "The details of the recruiter candidate relationship to be deleted." input: DeleteRecruiterCandidateInput! ): RecruiterCandidate """ Add and invite a new supplier candidate. Only accounts that act as suppliers can add candidates. """ createSupplierCandidate( "The details for adding & inviting the candidate." input: CreateSupplierCandidateInput! ): SupplierCandidate """ Update a supplier candidate. Only the owning supplier can update a candidate. """ updateSupplierCandidate( "The details of the supplier candidate to update." input: UpdateSupplierCandidateInput! ): SupplierCandidate """ Delete a supplier candidate. Only the owning supplier can delete a candidate. """ deleteSupplierCandidate( "The details of the supplier candidate to delete." input: DeleteSupplierCandidateInput! ): SupplierCandidate """ Create a timesheet. Only workers can create timesheets. """ createTimesheet( "The details for the new timesheet." input: CreateTimesheetInput! ): Timesheet """ Update a timesheet. Only workers can update timesheets. """ updateTimesheet( "The details for the timesheet." input: UpdateTimesheetInput! ): Timesheet! """ Delete a timesheet. Only workers can delete timesheets. """ deleteTimesheet( "The details for the timesheet." input: DeleteTimesheetInput! ): Timesheet! """ Update a timesheet registration. Only workers can update timesheet registrations. """ updateTimesheetRegistration( "The details for the timesheet registration." input: UpdateTimesheetRegistrationInput! ): TimesheetRegistration! """ Delete a timesheet registration. Only workers can delete timesheet registrations. """ deleteTimesheetRegistration( "The details for the timesheet registration." input: DeleteTimesheetRegistrationInput! ): TimesheetRegistration! """ Add and invite a new trusted contact. Only companies can add & invite trusted contacts. """ createTrustedContact( "The details for adding & inviting the trusted contact." input: CreateTrustedContactInput! ): TrustedContact! """ Update a trusted contact. Only companies can edit trusted contacts. """ updateTrustedContact( "The details of the trusted contact to be edited." input: UpdateTrustedContactInput! ): TrustedContact! """ Delete a trusted contact. Only companies can delete trusted contacts. """ deleteTrustedContact( "The details of the trusted contact to be soft deleted." input: DeleteTrustedContactInput! ): TrustedContact """ Approve a trusted contact. Only companies can approve trusted contacts. """ approveTrustedContact( "The details of the trusted contact to be approved." input: ApproveTrustedContactInput! ): TrustedContact! """ Block an applied trusted contact. Only companies can block trusted contacts. """ blockTrustedContact( "The details of the trusted contact to be blocked." input: BlockTrustedContactInput! ): TrustedContact! """ Resend an invitation to a Trusted Contact that already exists in the Talent Pool. This can be used for workers that has not responded to the initial invitation or for workers that was previously managed by a Staffing Agency. """ reinviteTrustedContact( "The input for resending an invitation to a Trusted Contact." input: ReinviteTrustedContactInput! ): TrustedContact! """ Create a user group. Only companies can create user groups. """ createUserGroup( "The details for creating a group." input: CreateUserGroupInput! ): UserGroup! """ Update a user group. Only companies can update user groups. """ updateUserGroup( "The details for updating a group." input: UpdateUserGroupInput! ): UserGroup! """ Soft delete a user group. Only companies can delete user groups. """ deleteUserGroup( "The details for deleting a user group." input: DeleteUserGroupInput! ): UserGroup! """ Attach one or more users to a group. Only companies can attach users to groups. """ attachUsersToUserGroup( "The details for attaching users to a group." input: AttachUsersToUserGroupInput! ): UserGroup! """ Detach one or more user from a group. Only companies can detach users from a group. """ detachUsersFromUserGroup( "The details for detaching users from a group." input: DetachUsersFromUserGroupInput! ): UserGroup! "Update consent to use Worksome Intelligence for the current user." updateWorksomeIntelligenceConsent( "The input required for consent." input: UpdateWorksomeIntelligenceConsentInput! ): Boolean! "Update a user's password." updatePassword( "The input for the user update mutation." input: UpdatePasswordInput! ): User! """ Create a password for the authenticated user. This operation is only allowed if the user currently does not have a password for changing the password see `updatePassword` operation instead. """ createPassword( "The input for creating a password." input: CreatePasswordInput! ): User! """ Sends a new verification email. This operation is only allowed if the user has not verified their email. """ sendVerificationEmail: User! "Change the email of the currently authenticated user." changeEmail( "The input for changing the email." input: ChangeEmailInput! ): User! """ Create a webhook. Only companies can create webhooks. """ createWebhook( "The input required for creating a webhook." input: CreateWebhookInput! ): Webhook! "Update a webhook." updateWebhook( "The input required for updating a webhook." input: UpdateWebhookInput! ): Webhook! "Delete a webhook." deleteWebhook( "The input required for deleting a webhook." input: DeleteWebhookInput! ): Webhook! """ Retry a webhook event. Only companies can retry webhook events. """ retryWebhookEvent( "The input required for retrying a webhook event." input: RetryWebhookEventInput! ): WebhookEvent! "Update a worker." updateWorker( "The details for updating a worker." input: UpdateWorkerInput! ): Worker! "Save a worker's identification details." updateWorkerIdentification( "The identification details to persist." input: UpdateWorkerIdentificationInput! ): WorkerIdentification! """ Create an approval workflow as a complete tree in a single operation. Only companies can create workflows. This is the recommended way to set up an approval flow — it creates the approval (root), its rules (conditions), and approvers (user groups) all at once, rather than calling `createApproval`, `createApprovalRule`, and `createApprover` separately. The input is structured as a tree: a root node (the approval definition), rule nodes (conditions), and approver nodes (user groups). Nodes reference each other via temporary `id` and `parent`/`children` fields. """ createWorkflow( "The complete workflow tree: root approval, rules, and approvers." input: CreateWorkflowInput! ): Workflow! """ Update an existing approval workflow as a complete tree. Only companies can update workflows. Replaces the entire workflow structure (root, rules, and approvers) with the provided tree. Creates a new version of the underlying approval. """ updateWorkflow( "The updated workflow tree." input: UpdateWorkflowInput! ): Workflow! """ Delete an approval workflow. Only companies can delete workflows. If the workflow has no existing approval requests, it is permanently removed along with its rules and approvers. If it has existing approval requests, the workflow is archived instead — its rules and approvers are preserved, but it will no longer evaluate new events. """ deleteWorkflow( "The ID of the workflow to delete." input: DeleteWorkflowInput! ): Workflow! """ Create an export. The export URL and the number of rows will be returned (excluding headings). """ createExport( "The input for creating an export." input: CreateExportInput! ): CreateExportResponse } "A note for an entity." type Note { "The ID of the note." id: ID! "The title of the note." title: String! "The body of the note." body: String! "The author of the note." author: User! "The entity that the note belongs to." notable: Notable! "The account that the note belongs to." account: Account! "The date and time that the note was created." createdAt: DateTime! "The date and time that the note was updated." updatedAt: DateTime! "Whether the viewer is able to update the note." viewerCanUpdate: Boolean! "Whether the viewer is able to delete the note." viewerCanDelete: Boolean! } "A paginated list of Note items." type NotePaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of Note items." data: [Note!]! } "An onboarding document for a trusted contact." type OnboardingDocument { "The ID of the onboarding document." id: ID! "The file associated with this document." file: File "The URL to view or download the PDF document." pdfUrl: String "The date when the worker accepted the document." freelancerAcceptedAt: Date "Whether the document has been accepted by the worker." isAccepted: Boolean! } """ An organisation — a parent entity that groups one or more companies (divisions) under a shared structure. Organisations provide a unified view across their divisions for talent pools, reporting, and governance. They do not create jobs or make hires directly; those actions are performed by the individual company divisions. """ type Organisation implements Account & HasCompanyInformation { "The ID of the organisation." id: ID! "The name of the organisation." name: String! "The market that the organisation is in." market: MarketCode! "The avatar (or profile picture) for the organisation." avatar: URL "The divisions that an organisation contains." divisions( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): CompanyPaginator! } "A paginated list of Organisation items." type OrganisationPaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of Organisation items." data: [Organisation!]! } """ An overtime entry automatically calculated from a timesheet. When a worker logs hours that exceed the standard threshold for a billing period, overtime entries are generated automatically. Each entry captures the duration, applicable rate multiplier, and the resulting total, and is linked to the timesheet that triggered it and the payment request where it is billed. """ type Overtime { "The ID of the overtime." id: ID! "The type of the overtime." type: OvertimeType! "The duration of the overtime." duration: Float! "The rate of the overtime." rate: Float! "The rate multiplier for the overtime." rateMultiplier: Float! "The total of the overtime." total: Int! "The worker that the overtime is for." worker: Worker "The payment request on which the overtime is charged." paymentRequest: PaymentRequest "The timesheet which prompted the creation of overtime." timesheet: Timesheet! "The payment request numbers which contain contributing timesheets." contributingPaymentRequestNumbers: [ID!]! "The date and time that the overtime was created." createdAt: DateTime! "The date and time that the overtime was updated." updatedAt: DateTime! } "A paginated list of Overtime items." type OvertimePaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of Overtime items." data: [Overtime!]! } "Information about pagination using a fully featured paginator." type PaginatorInfo { "Number of items in the current page." count: Int! "Index of the current page." currentPage: Int! "Index of the first item in the current page." firstItem: Int "Are there more pages after this one?" hasMorePages: Boolean! "Index of the last item in the current page." lastItem: Int "Index of the last available page." lastPage: Int! "Number of items per page." perPage: Int! "Number of total available items." total: Int! } "A participant in a conversation." type Participant { "The ID of the participant." id: ID! "The conversation that the participant is a part of." conversation: Conversation! "The account of the participant." account: Account! } "A paginated list of Participant items." type ParticipantPaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of Participant items." data: [Participant!]! } """ A partner account — an employment or compliance partner that facilitates hiring on behalf of companies. Partners provide services such as Employer of Record (EoR) and payroll management to companies using Worksome. They do not create jobs or hire workers directly. """ type Partner implements Account { "The ID of the partner." id: ID! "The name of the partner." name: String! "The slug of the partner." slug: String! "The partner preferred currency." currency: String! "The market that the partner is in." market: MarketCode! "The avatar (or profile picture) for the partner." avatar: URL "The address of the partner." address: Address "The primary business entity of the partner." primaryBusinessEntity: BusinessEntity "The primary profile of the partner." primaryProfile: Profile } "A payment request." type PaymentRequest { "The ID of the payment request." id: ID! "The worker attached to the payment request." worker: Worker! "The Recruiter, if any, attached to the payment request." recruiter: Recruiter "The Company attached to the payment request." company: Company! "The unique reference for the payment request." number: String! "The purchase order number assigned to the payment request." purchaseOrderNumber: String "The date that the billing period started." startDate: Date "The date that the billing period ended." endDate: Date "The currency used for this payment request." currency: Currency! "The charged rate for this payment request." rate: Float "The rate type required for this payment request." rateType: RateType "The human friendly rate type required for this payment request." rateTypeName: String! "The abbreviated human friendly rate type required for this payment request." ratetypeNameSlash: String """ The quantity of the selected rate type for the payment request. The rate type can be seen by looking at `PaymentRequest.rateType` and the rate can be seen by looking at `PaymentRequest.rate`. """ rateQuantity: Float! "The fee for using the Worksome Platform. This will change depending on who is viewing the api." serviceAmount( "The type of the account that the amount should be viewed as." accountType: AccountType! ): Float! "The total amount of expenses reported on the payment request." expensesAmount: Float! "The invoice generated for this payment request." invoice: Invoice "The total amount excluding taxes." netAmount( "The type of the account that the amount should be viewed as." accountType: AccountType! """ Which side of the payment request to value the amount from. Defaults to the payer (company/client) view; PAYEE returns the supplier-side amount. """ viewerRole: PaymentRequestViewerRole = ANY ): Float! "The total amount including taxes." grossAmount( "The type of the account that the amount should be viewed as." accountType: AccountType! """ Which side of the payment request to value the amount from. Defaults to the payer (company/client) view; PAYEE returns the supplier-side amount. """ viewerRole: PaymentRequestViewerRole = ANY ): Float! """ The agreed fee on the payment request between the company and recruiter. Only the company and recruiter can see this. """ recruiterFeeAmount: Float! """ The employment cost. The fee for payrolling a Worker. Only the Company can see this. """ employmentCostAmount: Float! "The total amount excluding fees and expenses." billedAmount: Float! "The total amount including fees and expenses." billedAmountWithExpenses: Float! "The date that the payment request was created." date: Date! "The date that the payment request was manually approved." manuallyApprovedAt: Date "The user that approved the payment request." approvedBy: User "The date that the payment request was automatically approved (if applicable)." autoApprovedAt: Date "The date that the payment request was rejected (if applicable)." rejectedAt: Date "The date that the payment request was prepaid (if applicable)." prepaidAt: Date "The date that the payment request was issued (if applicable)." issuedAt: Date "The date that the payment request was cancelled (if applicable)." cancelledAt: Date "The date that the payment request was paid (if applicable)." paidAt: Date "The date that the payment request was payrolled (if applicable)." payrolledAt: Date "The date that the payment request is or was due." dueAt: Date "The date that the payment request is or was completed (if applicable)." completedAt: Date "The date that the payment request is or was processed (if applicable)." processedAt: Date "The hire attached to the payment request." hire: Hire "The job attached to the payment request." job: Job! "The message attached to the payment request." message: Message "The comments relevant to the payment request." comments: String "The worker status relevant to the payment request." workerStatus: PaymentRequestWorkerStatus! """ The worker payout status for the payment request. This represents whether the worker has been paid. """ workerPayoutStatus: PaymentRequestWorkerPayoutStatus! "The approval status of the payment request." status: PaymentRequestStatus! "The timesheet attached to the payment request." timesheet: Timesheet """ The legacy timesheet attached to the payment request. This is only for internal use within the Worksome platform. """ legacyTimesheet: LegacyTimesheet @deprecated(reason: "This is only for internal use. Please use `PaymentRequest.timesheet` instead.") "An external identifier for the payment request, used to reference it in external systems." externalIdentifier: String "The source payment request this record was derived from." sourcePaymentRequest: PaymentRequest "The client-side payment request derived from this source." clientPaymentRequest: PaymentRequest "The fees associated with this payment request." fees: [Fee!]! """ The files attached to the payment request. There could potentially be a timesheet stored as a separate file. """ files( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): FilePaginator! "The expense reports for the payment request." expenseReports( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): ExpenseReportPaginator! "The batches for the payment request." batches( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): BatchPaginator! "The milestones for the payment request." milestones( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): MilestonePaginator! "The overtimes for the payment request." overtimes( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): OvertimePaginator! """ The supplier invoices for the payment request. Supplier invoices are only available to suppliers. """ supplierInvoices( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): SupplierInvoicePaginator! } "A paginated list of PaymentRequest items." type PaymentRequestPaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of PaymentRequest items." data: [PaymentRequest!]! } """ A public-facing profile for a worker or company on Worksome. Profiles contain biographical information, descriptions, and other details that are visible to other users on the platform. """ type Profile implements HasURL { "The ID of the profile." id: ID! "The URL for the profile." url: URL! "The links for the profile" links: [Link!]! } "A project with a budget containing one or more jobs." type Project { "The ID of the project." id: ID! "The name of the project." name: String! "The description of the project." description: String "The currency used for this project." currency: Currency! "The creator of the project." creator: User! "The company that the project is for." company: Company! "The total internal budget for the project." internalBudget: Decimal "The sum of all associated job budgets that have been allocated to the internal budget of the project." allocatedBudget: Decimal! "The amount that is spent out of the internal budget for the project. Spent for the project budget is registered when a bill is approved on an associated job." spent: Decimal! """ The date that the project ended. If this is set to `null`, we will assume that the project is not yet ended but active. """ endDate: Date "The owners of the project." owners: [User!]! "An identifier associated with the project from an external system." externalIdentifier: String "Jobs added to this project." jobs( "Search jobs by name or description." search: String "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): JobPaginator! } "A paginated list of Project items." type ProjectPaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of Project items." data: [Project!]! } type Query { "Get a list of accounts which the current authentication has access to." accounts: [Account!]! """ Get distinct regions used by the company's associated recruiters, grouped by market. Scoped to the authenticated user's companies. """ companyRecruiterRegions: [MarketWithRegions!]! "Get a specific approval rule by ID." approvalRule( "The ID of the approval rule." id: ID! ): ApprovalRule """ Get a specific approval flow by ID. Requires the `manage-approvals` team permission on the owning company. """ approval( "The ID of the approval flow." id: ID! ): Approval "Get a specific approver assignment by ID." approver( "The ID of the approver." id: ID! ): Approver "Get a specific approval request by ID." approvalApprovable( "The ID of the approval request." id: ID! ): ApprovalApprovable "Get a specific batch." batch( "The ID of the batch." id: ID! ): Batch "Get a specific bid which the user has access to." bid( "The ID of the bid." id: ID! ): Bid "Get a specific classification by ID." classification( "The ID of the classification to retrieve" id: ID! ): Classification "Get a specific company." company( "The ID of the company." id: ID! ): Company "Get a specific company recruiter." companyRecruiter( "The ID of the company recruiter." id: ID! ): CompanyRecruiter "Get a specific company supplier." companySupplier( "The ID of the company supplier." id: ID! ): CompanySupplier """ Get compliance requirements for a specific hire. Returns all compliance requirements that apply to the given hire, or only the specified compliances if the names argument is provided. """ compliance( "The ID of the hire to get compliance requirements for" id: ID! "Optional compliance names to filter for specific compliances" names: [ComplianceName!] """ Read strategy for `applicable` / `completed`. Defaults to live computation. Pass `true` to read the persisted compliance status row (falling back to live when no row exists yet). Intended for verification dashboards during the persisted-status rollout; the default will remain live until the persisted rows are proven correct in production. """ cached: Boolean = false ): [Compliance!]! """ Get a specific gate for a hire. Returns the gate containing compliance requirements grouped by a specific compliance name. """ gate( "The ID of the hire to get the gate for" id: ID! "The name of the compliance gate to retrieve" gate: ComplianceName! """ Read strategy for `applicable` / `completed` on the gate and its compliances. Defaults to live; pass `true` to read the persisted status rows with a live fallback. """ cached: Boolean = false ): Gate "Get a specific contract." contract( "The ID of the contract." id: ID! ): Contract "Get a specific conversation." conversation( "The ID of the conversation." id: ID! ): Conversation "Get a list of all countries." countries: [Country!]! "Get a specific custom field." customField( "The custom field ID." id: ID! ): CustomField "Get a specific employment." employment( "The ID of the employment." id: ID! ): Employment "Get a specific file." file( "The ID of the file." id: ID! ): File """ Get a specific hire. All parties of the hire can use this field for seeing their hire. """ hire( "The ID of the hire." id: ID! ): Hire "Get a specific industry." industry( "The ID of the industry." id: ID! ): Industry "Get a specific invoice." invoice( "The invoice number on the PDF." number: String! ): Invoice "Get a specific invoice row." invoiceRow( "The ID of the invoice row." id: ID! ): InvoiceRow "Get a specific job." job( "The ID of the job." id: ID! ): Job "Get a specific job candidate." jobCandidate( "The ID of the job candidate." id: ID! ): JobCandidate "Get a single milestone." milestone( "The ID of the milestone." id: ID! ): Milestone "Retrieve a specific multi-factor authentication implementation." multiFactor( "The id for the multi-factor authentication implementation." id: ID! ): MultiFactor "Get a specific organisation." organisation( "The ID of the organisation." id: ID! ): Organisation "Get a specific partner." partner( "The ID of the partner." id: ID! ): Partner "Get a specific payment request." paymentRequest( "The ID of the payment request." id: ID! ): PaymentRequest "Get a specific project." project( "The ID of the project to view." id: ID! ): Project "Get a specific recruiter." recruiter( "The ID of the recruiter." id: ID! ): Recruiter "Get a specific recruiter candidate." recruiterCandidate( "The ID of the recruiter candidate." id: ID! ): RecruiterCandidate "Get a specific supplier candidate." supplierCandidate( "The ID of the supplier candidate." id: ID! ): SupplierCandidate "Get a specific timesheet." timesheet( "The ID of the timesheet." id: ID! ): Timesheet "Get a specific trusted contact." trustedContact( "The ID of the trusted contact." id: ID! ): TrustedContact "Get a specific organisation trusted contact." organisationTrustedContact( "The ID of the trusted contact." id: ID! ): TrustedContact "Get a specific user group." userGroup( "The ID of the group to view." id: ID! ): UserGroup "Get the authenticated user that is viewing the API." viewer: User! "Get the authenticated user that is viewing the API." profile: User! @deprecated(reason: "Use `viewer` instead.") "Get a specific webhook." webhook( "The ID of the webhook." id: ID! ): Webhook "Get a specific webhook event." webhookEvent( "The ID of the webhook event." id: ID! ): WebhookEvent "Get a specific worker." worker( "The ID of the worker." id: ID! ): Worker """ Get a specific workflow by ID. Requires the `manage-approvals` team permission on the owning company. """ workflow( "The ID of the workflow (same as the approval ID)." id: ID! ): Workflow "List all approval rules accessible to the authenticated user." approvalRules( "Filter rules by the accounts that own their parent approval flows." accounts: [ID!] "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): ApprovalRulePaginator! """ List all approval flows accessible to the authenticated user. Requires the `manage-approvals` team permission. """ approvals( "Filter approvals by the accounts that own them." accounts: [ID!] "Search approvals by name or description." search: String "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): ApprovalPaginator! "List approver assignments, optionally filtered by approval rule." approvers( "Filter by the accounts that own the parent approval flows." accounts: [ID!] "Filter to only show approvers assigned to a specific rule." approvalRule: ID "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): ApproverPaginator! """ List approval requests — the runtime instances created when a trigger fires. Use filters to find requests that need action, belong to specific approvals, or relate to specific items (e.g. a particular hire). """ approvalApprovables( "Filter by the accounts that own the parent approval flows." accounts: [ID!] "When `true`, only return approval requests that still need action from any approver." requiresAction: Boolean "Only return approval requests that need action from specific users." requiresActionUsers: [ID!] "Filter by the parent approval flows." approvals: [ID!] "Filter by the item being approved (e.g. a specific hire)." approvable: ID "Filter by specific approval rules." approvalRules: [ID!] "Order the results by the given field and direction." orderBy: [ApprovalApprovablesOrderByClauseInput!] "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): ApprovalApprovablePaginator! """ List all approval actions (approvals, rejections, change requests) across approval requests. Use this to build an audit trail of all approval activity for a company. """ approvalStates( "Filter by the accounts that own the parent approval flows." accounts: [ID!] "Filter by the type of action taken (e.g. only show rejections)." status: [ApprovalApprovableState!] "Filter by the users who took the action." users: [ID!] "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): ApprovalStatePaginator! "Get a list of batches." batches( "Only show batches for the specified accounts." accounts: [ID!] "Only show batches of the specified types." types: [BatchType!] "Only show batches that contain at least one item of the specified statuses." containsItemsWithStatus: [BatchItemStatus!] "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): BatchPaginator! "Get a list of all bids which the viewer has access to." bids( "Filter the bids based on one or more statuses." statuses: [BidStatus!] "Filter the bids based on a job." job: ID "Filter the bid based on one or more accounts." accounts: [ID!] "Filter the bids based on one or more companies." companies: [ID!] "Order the bids by the specified field and direction." orderBy: [BidOrderByClauseInput!] "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): BidPaginator! "Get all classifications for a specific hire." classifications( "The ID of the hire to get classifications for" hire: ID! "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): ClassificationPaginator! "Get a list of companies that the authenticated user has access to." companies( "Only show companies with the specified external identifier." externalIdentifiers: [String!] "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): CompanyPaginator! "Get a list of company recruiters." companyRecruiters( """ Supply which accounts to see recruiters for. If no accounts are supplied then all authenticated accounts will be used. """ accounts: [ID!] "Supply an input string which will be used to search through." search: String "Supply a list of statuses to filter recruiters by." statuses: [RecruiterStatus!] "Supply a list of tags to filter recruiters by." tags: [String!] "Supply a list of markets to filter recruiters by." markets: [String!] "Filter recruiters by market and optionally narrow by specific regions." recruiterRegions: MarketRegionInput "Supply a list of column/order pairs for sorting, ordering will be applied in the provided order." orderBy: [RecruiterOrderByClauseInput!] "Only show company recruiters with the specified external identifier." externalIdentifiers: [String!] "Filter by custom fields attached to the company recruiters." customFields: [CustomFieldTypeValueInput!] "Filter staffing agencies by their VerifiedRecruiterCompliance review state." verifiedRecruiterReview: VerifiedRecruiterReviewFilterInput "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): CompanyRecruiterPaginator! "Get a list of company suppliers for the authenticated company accounts." companySuppliers( "Filter by specific company accounts." accounts: [ID!] "Search suppliers by name." search: String "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): CompanySupplierPaginator! "Get a list of contracts." contracts( "Only show contracts created by a specific account." accounts: [ID!] "Only show contracts using the specified currencies." currencies: [Currency!] "Only show contracts with the specified statuses." statuses: [ContractStatus!] "Only show contracts with the specified location preferences." locationPreferences: [LocationPreference!] "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): ContractPaginator! "Get a list of conversations." conversations( """ Supply which accounts to see conversations for. If no accounts are supplied then all authenticated accounts will be used. If multiple accounts are used only conversations for those accounts will be shown. """ accounts: [ID!] "If the conversation is open or closed. If not supplied show all conversations." isOpen: Boolean "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): ConversationPaginator! "Get a list of custom fields." customFields( """ Supply which accounts to see fields for. If no accounts are supplied, then all authenticated accounts will be used. """ accounts: [ID!] "Supply to select fields with approval workflow enabled or disabled." approval: Boolean "A list of entity types supporting custom fields." appliesTo: [TypeSupportingCustomFieldValues!] "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): CustomFieldPaginator! "Get a list of inherited custom fields." inheritedCustomFields( """ Supply which accounts to see fields for. If no accounts are supplied, then all authenticated accounts will be used. """ accounts: [ID!] "Supply to select fields with approval workflow enabled or disabled." approval: Boolean "A list of entity types supporting custom fields." appliesTo: [TypeSupportingCustomFieldValues!] "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): CustomFieldPaginator! """ Get custom fields shared by a supplier with its client companies. Returns only fields where sharedWithClients is true for the given supplier. """ supplierSharedCustomFields( "The supplier account whose shared fields to retrieve." supplier: ID! "A list of entity types supporting custom fields." appliesTo: [TypeSupportingCustomFieldValues!] "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): CustomFieldPaginator! "Get a list of employments." employments( "Only show employments related to a specific account." accounts: [ID!] "Filter employments by employment status." status: [EmploymentStatus!] "Filter employments by employer record status." employerRecordStatus: [EmployerRecordStatus!] "Filter by search term against worker name, job title, etc." search: String "Order by clause." orderBy: [EmploymentsOrderByClauseInput!] "Filter by start date range." startDateRange: DateRangeInput "Filter by end date range." endDateRange: DateRangeInput "Filter by contract types." contractType: [ContractType!] "Filter by locations." locations: [String!] "Filter by companies." companies: [ID!] "Filter by hiring managers." hiringManagers: [ID!] "Filter by rate type." rateTypes: [RateType!] "Filter by previously hired status." previouslyHired: Boolean "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): EmploymentPaginator! "Get a list of files." files( """ Only show files for the specified accounts. If no accounts supplied then all authenticated accounts will be used. """ accounts: [ID!] "Only show files with the given IANA MIME types." mimeTypes: [String!] "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): FilePaginator! """ Get a list of hires. All parties of the hire can use this field for seeing their hires. """ hires( "Filter the hires based on one or more accounts." accounts: [ID!] "Search hires." search: String "Filter hires by hire status." status: [HireActiveStatus!] "Order the results by the hire id, company name, job name, or worker name." orderBy: [HiresOrderByClauseInput!] "Filter hires by if recruiter ownership is active." recruiterOwnershipIsExpired: Boolean "Filter hires by company ids." companies: [ID!] "Filter hires by worker ids." workers: [ID!] "Filter hires by recruiter ids." recruiters: [ID!] "Filter hires by hire start date." startDateRange: DateRangeInput "Filter hires by hire end date." endDateRange: DateRangeInput "Filter hires that start after the specified date." startsAfter: Date "Filter hires that end after the specified date." endsAfter: Date "Filter hires by hire by the date the hire was created." createdAtDateRange: DateRangeInput "Only show hires with the specified external identifier." externalIdentifiers: [String!] "Filter hires by hire contract status." contractStatus: [ContractStatus!] "Filter hires by hire contract type." contractType: [ContractType!] "Filter hires by engagement type." engagementType: [EngagementType!] "Filter hires by engagement type setup." engagementTypeSetup: [EngagementTypeSetup!] "Filter hires by classification usage status." usesClassification: [ClassificationUsage!] "Filter hires by active status." activeStatus: [HireActiveStatus!] "Filter hires by owner." owners: [ID!] "Filter hires by if there are associated payment requests." hasPaymentRequests: Boolean """ Only show hires with no payment request submitted within the given date range, including hires that have never submitted one at all. """ missingPaymentRequestDateRange: DateRangeInput "Filter hires by if there are recruiter attribution or not." hasRecruiterAttribution: Boolean "Only show hires that can be selected when creating a payment request." eligibleForPaymentRequests: Boolean "Only show hires that belong to one or more specific jobs." jobs: [ID!] "Filter hires by supplier accounts (Company or Recruiter acting as supplier)." supplierAccounts: [ID!] "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): HirePaginator! "Get a list of industries." industries( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): IndustryPaginator! "Get a list of invoices." invoices( """ Only show invoices for the specified accounts. If no accounts are supplied then all authenticated accounts will be used. """ accounts: [ID!] "Only show invoices which have the supplied status." status: [InvoiceStatus!] "Only show invoices with the given transaction types." transactionTypes: [InvoiceTransactionType!] "Filter invoices by PO number, invoice number, worker name, or amount." search: String "Limit to invoices that either have or do not have payment requests with Purchase Order numbers." hasPurchaseOrderNumber: Boolean "Filter invoices by currency." currency: [Currency!] "Only show invoices with the specified external identifiers." externalIdentifiers: [String!] "Order the results by the invoice date, number, total or due date." orderBy: [QueryInvoicesOrderByOrderByClause!] "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): InvoicePaginator! "Get a list of jobs." jobs( "Only show jobs created by a specific account." accounts: [ID!] "Only show jobs owned by specific users." owners: [ID!] "Only show jobs in the specified markets." markets: [MarketCode!] "Search job posts." search: String "Only show jobs using the specified currencies." currencies: [Currency!] "Only show jobs using the specified payment rate types." rateTypes: [RateType!] """ Only show jobs requiring a set of specific skills. This filter takes a list of skill names, ie "php" for the skill php, or "Graphql api" for the graphql api skill. """ skills: [String!] "Only show jobs requiring specific experience levels." experienceLevel: [ExpectedExperienceLevel!] "Only show jobs using the specified project types." associations: [Association!] "Only show jobs using the specified location preferences." locationPreferences: [LocationPreference!] "Only show jobs that are either available or not." available: Boolean "Only show jobs that are either published or not." published: Boolean "Only show jobs that have either been completed or not." completed: Boolean "Only show jobs that have either been removed or not." removed: Boolean "Filter for jobs with or without project." hasProject: Boolean "Filter for jobs with or without hires." hasHire: Boolean "Filter for jobs with or without bids." hasBids: Boolean "Only show jobs with the specified external identifier." externalIdentifiers: [String!] "Order the results by the hire id, company name, job name, or worker name." orderBy: [JobsOrderByClauseInput!] "Filter jobs by the date the job was created." createdAtDateRange: DateRangeInput "Filter by unfilled jobs." unfilled: Boolean "Only show jobs with specific custom field values." customFields: [CustomFieldTypeValueInput!] "Only show jobs with start dates within the specified range." startDateRange: DateRangeInput "Only show jobs with end dates within the specified range." endDateRange: DateRangeInput "Only show jobs that are job posts." isJobPost: Boolean "Filter the jobs by their status" statuses: [JobStatus!] "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): JobPaginator! "Jobs shared with a linked account that do not yet have a derived version." incomingJobs( "Search job posts by title or description." search: String "Order the results." orderBy: [JobsOrderByClauseInput!] "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): JobPaginator! "Get a list of job candidates." jobCandidates( "Only return job candidates for the specified jobs." jobs: [ID!] "Only return job candidates for the specified statuses." statuses: [JobCandidateStatus!] "Only return job candidates for the specified hiring steps." steps: [JobCandidateHiringStep!] "Only return job candidates which are preferred or not." preferred: Boolean "Supply a list of column/order pairs for sorting, ordering will be applied in the provided order." orderBy: [JobCandidateOrderByClauseInput!] "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): JobCandidatePaginator! "Get a list of job shares." jobShares( "Only show job shares for specific jobs." jobs: [ID!] "Only show job shares for specific accounts." accountTypes: [AccountType!] "Whether the job share is active." isActive: Boolean "Filter the job shares based on one or more companies." companies: [ID!] "Order the job shares by the specified field and direction." orderBy: [JobShareOrderByClauseInput!] "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): JobSharePaginator! "Get a list of milestones." milestones( """ Only show milestones for the specified accounts. If no accounts are supplied then all authenticated accounts will be used. """ accounts: [ID!] "Only show milestones for the specified hires." hires: [ID!] "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): MilestonePaginator! "Retrieve all multi-factor authentication implementation." multiFactors( "A list of statuses to filter the multi factors on." statuses: [MultiFactorStatus!] "A list of channels to filter the multi factors on." channels: [MultiFactorChannel!] "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): MultiFactorPaginator! "Get a list of payment requests." paymentRequests( "Only show payment requests for the specified accounts." accounts: [ID!] "Only show payment requests using the specified currencies." currencies: [Currency!] "Only show payment requests that have a Purchase Order number." hasPurchaseOrderNumber: Boolean "Only show payment requests that have a timesheet." hasTimesheet: Boolean "Only show payment requests for the specified jobs." jobs: [ID!] "Only show payment requests for the specified hires." hires: [ID!] "Only show payment requests belonging to hires owned by the specified users." hireOwners: [ID!] """ Only show supplier-side payment requests belonging to the given client companies (matched via the hire's source hire). MSP/supplier view only. """ clients: [ID!] "Only show payment requests that match the search query." search: String "Only show payment requests that have the specified statuses." statuses: [PaymentRequestStatus!] "Only show payment requests grouped by request type (time or amount)." requestTypes: [PaymentRequestType!] "Only show payment requests that have the specified worker statuses." workerStatuses: [PaymentRequestWorkerStatus!] "Only show payment requests that have the specified worker payout statuses." workerPayoutStatuses: [PaymentRequestWorkerPayoutStatus!] """ Only show payment requests by that were processed through payroll (true) or not through payroll (false). This may include payment requests that were paid outside of payroll. """ isPayrolled: Boolean "Only show payment requests that have a timesheet between the specified date range." timesheetPeriod: DateRangeInput "Only show payment requests that have the specified rate types." rateTypes: [RateType!] "Only show payment requests requested within the specified date range." requestedDateRange: DateRangeInput "Only show payment requests whose billing period start date falls within the specified range." billingStartDateRange: DateRangeInput "Only show payment requests whose billing period end date falls within the specified range." billingEndDateRange: DateRangeInput "Only show payment requests that have expenses (true) or do not have expenses (false)." hasExpenses: Boolean "Only show payment requests that have a batch (true) or don't have a batch (false)." hasBatch: Boolean "Only show payment requests that belong to the specified batches." batchIds: [ID!] "Only show payment requests with the specified external identifiers." externalIdentifiers: [String!] "Order the payment requests by the specified fields." orderBy: [PaymentRequestOrderByClauseInput!] """ Which side of the payment request the viewer is on. Defaults to ANY. Pass PAYER on client-side tables to exclude requests the viewer raised as a supplier. PAYEE is reserved for the supplier-side view. Only filters within the account scope set by the `accounts` arg — without `accounts` there's nothing for this filter to act on. """ viewerRole: PaymentRequestViewerRole = ANY "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): PaymentRequestPaginator! "Get a list of projects." projects( """ Supply which accounts to see projects for. If no accounts supplied then all authenticated accounts will be used. """ accounts: [ID!] "Search between projects by budget, name, description and job name." search: String "Only show projects which have the supplied status." status: [ProjectStatusFilter!] "Filter projects by owners ids." owners: [ID!] "Only show projects with the specified external identifier." externalIdentifiers: [String!] "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): ProjectPaginator! "Get a list of recruiters." recruiters( "The search value used to search recruiters." search: String "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): RecruiterPaginator! "Get a list of recruiter candidates." recruiterCandidates( """ Supply which accounts to see candidates for. If no accounts are supplied then all authenticated accounts will be used. """ accounts: [ID!] "Supply to filter for status." status: ContactStatus "Supply an input string which will be used to search through." search: String "When true, only return candidates with something pending." hasPendingActions: Boolean "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): RecruiterCandidatePaginator! "Get a list of skills." skills( """ Supply an input string which will be used to search through. Search will be performed within all three `name`, `name_en`, `name_da`. """ search: String "Supply a list of SkillableType to which skills should have been applied to." skillableType: [SkillableType!] "Supply a list of column/order pairs for sorting, ordering will be applied in the provided order." orderBy: [SkillOrderByClauseInput!] "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): SkillPaginator! "Get a list of supplier candidates for the authenticated supplier account." supplierCandidates( "Filter by candidate status." status: ContactStatus "Search candidates by email, name, or job title." search: String "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): SupplierCandidatePaginator! "Get a list of timesheets." timesheets( """ Filter the timesheets based on one or more accounts. If no accounts supplied then all authenticated accounts will be used. """ accounts: [ID!] "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): TimesheetPaginator! "Get a list of trusted contacts." trustedContacts( """ Supply which accounts to see trusted contacts for. If no accounts are supplied then all authenticated accounts will be used. """ accounts: [ID!] "Supply which workers to see trusted contacts for." workers: [ID!] "Supply an input string which will be used to search through." search: String "Supply a list of skills IDs to filter workers having those." skills: [ID!] "Supply a list of markets codes to filter workers part of related markets." markets: [MarketCode!] "Supply a list of country codes to filter workers part of related countries." countries: [String!] "Supply a list of states to filter workers in specific states." states: [String!] "Supply a list of user IDs to filter workers by the user who has invited them as trusted contact for the company." invitedByUsers: InvitedByInput "Supply a list of statuses to filter workers by." statuses: [ContactStatus!] "Filter the contacts by their origin. Have they been added or invited." origin: TrustedContactOrigin "Filter contacts by whether they have staffing agency ownership or not." staffingAgencyStatus: TrustedContactStaffingAgencyStatus "Filter contacts by their managed status (worker, staffing agency, or unmanaged)." managedStatus: TrustedContactManagedStatus "Filter contacts by whether they have been previously hired or not." hireHistory: HireHistoryFilterInput "Filter contacts by whether they are currently hired or not." hireStatus: HireStatusFilterInput "Supply a list of business entities to filter workers by." businessSetup: [BusinessEntityType!] "Only show trusted contacts with the specified external identifier." externalIdentifiers: [String!] """ Filter by custom fields attached to the TC's. Freetext CF's work by fuzzy search in the text. Single select works as inclusive or filters. That is you can chain multiple single select filters in the array to filter by many different CF selected options. This can similarly be done with freetext CF's. """ customFields: [CustomFieldTypeValueInput!] "Supply a list of column/order pairs for sorting, ordering will be applied in the provided order." orderBy: [TrustedContactOrderByClauseInput!] "Filter trusted contacts by the date they were created." createdAtDateRange: DateRangeInput "Filter contacts by their VerifiedWorkerCompliance review state." verifiedWorkerReview: VerifiedWorkerReviewFilterInput "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): TrustedContactPaginator! "Get a list of organisation trusted contacts." organisationTrustedContacts( """ Supply which accounts to see trusted contacts for. If no accounts are supplied then all authenticated accounts will be used. """ accounts: [ID!] "Supply which workers to see trusted contacts for." workers: [ID!] "Supply an input string which will be used to search through." search: String "Supply a list of skills IDs to filter trusted contact or associated worker having those." skills: [ID!] "Supply a list of markets codes to filter workers part of related markets." markets: [MarketCode!] "Supply a list of country codes to filter workers part of related countries." countries: [String!] "Supply a list of states to filter workers in specific states." states: [String!] "Supply a list of user IDs to filter workers by the user who has invited them as trusted contact for the company." invitedByUsers: InvitedByInput "Supply a list of statuses to filter workers by." statuses: [ContactStatus!] "Filter the contacts by their origin. Have they been added or invited" origin: TrustedContactOrigin "Filter contacts by whether they have staffing agency ownership or not." staffingAgencyStatus: TrustedContactStaffingAgencyStatus "Filter contacts by their managed status (worker, staffing agency, or unmanaged)." managedStatus: TrustedContactManagedStatus "Filter contacts by whether they have been previously hired or not." hireHistory: HireHistoryFilterInput "Filter contacts by whether they are currently hired or not." hireStatus: HireStatusFilterInput "Supply a list of business entities to filter workers by." businessSetup: [BusinessEntityType!] "Only show trusted contacts with the specified external identifier." externalIdentifiers: [String!] """ Filter by custom fields attached to the TC's. Freetext CF's work by fuzzy search in the text. Single select works as inclusive or filters. That is you can chain multiple single select filters in the array to filter by many different CF selected options. This can similarly be done with freetext CF's. """ customFields: [CustomFieldTypeValueInput!] "Supply a list of column/order pairs for sorting, ordering will be applied in the provided order." orderBy: [TrustedContactOrderByClauseInput!] "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): TrustedContactPaginator! "Get a list of user groups." userGroups( """ Supply which accounts to see groups for. If no accounts supplied then all authenticated accounts will be used. """ accounts: [ID!] "Search user groups by name, description and users name, email." search: String "Filter user groups by users." users: [ID!] "Filter user group by status." status: [UserGroupStatus!] "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): UserGroupPaginator! "Get a list of webhooks." webhooks( """ Filter the webhooks based on one or more accounts. If no accounts are supplied then all authenticated accounts will be used. """ accounts: [ID!] "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): WebhookPaginator! "Get a list of webhook events. They are returned in descending order of creation." webhookEvents( "Filter the webhook events based on the ID of the webhook." webhookId: ID "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): WebhookEventPaginator! "Get a list of webhook event logs. They are returned in descending order of creation." webhookEventLogs( "Filter the webhook event logs based on the ID of the webhook." webhookId: ID "Filter the webhook event logs based on the ID of the webhook." webhookEventId: ID """ Filter the webhook event logss based on one or more accounts. If no accounts are supplied then all authenticated accounts will be used. """ accounts: [ID!] "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): WebhookEventLogPaginator! """ List all workflows accessible to the authenticated user. Requires the `manage-approvals` team permission. """ workflows( "Filter workflows by the accounts that own them." accounts: [ID!] "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): WorkflowPaginator! """ List the available variables that can be used in approval rule conditions. Variables represent the fields you can evaluate in conditions — for example, hourly rate, budget, or company-defined custom fields. The available variables depend on the trigger type: hire-related triggers expose rate and budget variables, while classification triggers expose the classification result. Requires the `manage-approvals` team permission. """ workflowVariables( "Filter by the accounts that own the variables (includes company custom fields)." accounts: [ID!] "The trigger type to get variables for. Different triggers expose different variables." appliesTo: ApprovalTrigger! "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): WorkflowVariablePaginator! } """ A staffing agency account that sources and manages workers on behalf of companies. Staffing agencies can be attributed to hires, manage workers during engagements, and earn fees based on their ownership period. Companies establish relationships with staffing agencies to leverage their talent sourcing capabilities. """ type Recruiter implements Account { "The ID of the recruiter." id: ID! "The name of the recruiter." name: String! "The market that the recruiter is in." market: Market! "The initials of the recruiter" initials: String! "The avatar (or profile picture) for the recruiter." avatar: URL "The markets and regions the recruiter is available in." availableMarkets: [AvailableMarket!]! "The owner of the recruiter account" owner: User "The client relationships that the staffing agency has." clients: [CompanyRecruiter!]! "The candidate relationships that the recruiter has." candidates: [RecruiterCandidate!]! "The insurance information for the recruiter." insurances: [WorkerInsurance!]! } "A recruiter candidate relationship." type RecruiterCandidate { "The ID of the recruiter candidate." id: ID! "The recruiter of the relationship." recruiter: Recruiter! "The candidate in the relationship." worker: Worker! "The email of the candidate." email: String "The status of the candidate relationship." status: ContactStatus! "The token used to invite the candidate." token: String "The rate of the candidate." rate( "The ratetype to get." rateType: RateType! = UNKNOWN "The currency to get the rate in." currency: String ): Float "The candidate job title" jobTitle: String "The candidate's country of residence (cca2), from their location." country: String "The candidate's country state, if applicable." state: String "The links attached to the relationship." links: [String!]! "The tags applied to the relationship." tags: [Tag!]! """ The recruiter's commercial relationship with this worker, rolled up across all engagements (managed / referral / listed). """ relationshipLabel: RecruiterCandidateRelationshipLabel! "The files attached to the relationship." files( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): FilePaginator! } "A paginated list of RecruiterCandidate items." type RecruiterCandidatePaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of RecruiterCandidate items." data: [RecruiterCandidate!]! } "A paginated list of Recruiter items." type RecruiterPaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of Recruiter items." data: [Recruiter!]! } "A single rejected timesheet registration with the reason it was not accepted." type RejectedCustomTimesheetRegistration { "The externalId from the submitted payload, if one was provided. May be null if the registration was malformed." externalId: String "Machine-readable reason for the rejection." reason: CustomTimesheetRejectionReason! "Human-readable explanation, suitable for logs or display to the client's operator." message: String! } "The payload returned when running an action on a batch." type RunBatchActionResponse { "The batch the action was run against." batch: Batch """ The global ID of the batch. Always provided even if the batch was deleted. """ batchId: ID! "The action that was requested." action: BatchActionType! "Whether the batch was deleted as a result of the action." batchDeleted: Boolean! "The URL of the result of the action." resultUrl: String } "A skill that is required for a job." type Skill { "The ID of the skill." id: ID! "The name of the skill." name: String! } "A paginated list of Skill items." type SkillPaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of Skill items." data: [Skill!]! } "A response payload for a newly-created SMS multi-factor authentication implementation." type SmsCreateMultiFactorPayload { "The newly-created SMS multi factor." multiFactor: SmsMultiFactor! } "An SMS multi-factor authentication implementation." type SmsMultiFactor implements HasMultiFactorMetadata { "The ID of the SMS multi-factor authentication implementation." id: ID! "The name of the SMS multi-factor authentication implementation." name: String! "The phone number for the SMS multi-factor authentication implementation." phoneNumber: E164PhoneNumber! "The status of the SMS multi-factor authentication implementation." status: MultiFactorStatus! "The owner of the SMS multi-factor authentication implementation." owner: User! "When the SMS multi-factor authentication implementation was verified." verifiedAt: DateTime "When the SMS multi-factor authentication implementation was created." createdAt: DateTime! "When the SMS multi-factor authentication implementation was updated." updatedAt: DateTime! } "A supplier candidate — a freelancer managed by a supplier account (Company or Recruiter)." type SupplierCandidate { "The ID of the supplier candidate." id: ID! "The supplier account that owns this candidate." supplier: Account "The worker (freelancer) in the relationship." worker: Worker! "The email used to invite the candidate." email: String "The status of the candidate relationship." status: ContactStatus! "The token used to invite the candidate." token: String "The rate of the candidate." rate( "The rate type to get." rateType: RateType! = UNKNOWN "The currency to get the rate in." currency: String ): Float "The candidate job title." jobTitle: String "The links attached to the candidate." links: [String!]! "The tags applied to the candidate by the supplier." tags: [Tag!]! "The files attached to the candidate." files( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): FilePaginator! } "A paginated list of SupplierCandidate items." type SupplierCandidatePaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of SupplierCandidate items." data: [SupplierCandidate!]! } """ A supplier invoice. The invoice defines the amount due and is to be paid to the worker. """ type SupplierInvoice { "The ID of the supplier invoice." id: ID! """ A number referencing the supplier invoice. This is usually printed on the supplier invoice itself and should be used by booking system and finance departments. The supplier invoice number is in a human readable format. """ number: String """ A URL of the actual supplier invoice. This URL will link to a PDF for the supplier invoice. This URL cannot be used for saving in external systems as it might change over time or be regenerated. If a permanent URL is needed for the supplier invoice, it should be stored in the clients own system. """ pdfUrl: URL! "An external identifier for the supplier invoice, used to reference it in external systems." externalIdentifier: String } "A paginated list of SupplierInvoice items." type SupplierInvoicePaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of SupplierInvoice items." data: [SupplierInvoice!]! } "A tag." type Tag { "The ID of the tag." id: ID! "The name of the tag." name: String } "A paginated list of Tag items." type TagPaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of Tag items." data: [Tag!]! } "The details for a temporary file upload." type TemporaryFileUploadResponse { "The ID of the temporary file." id: ID! "The name of the file to be uploaded." name: String! """ The temporary URL to upload the file to. The temporary URL will expire after 1 week. """ url: URL! } """ A timesheet submitted by a worker for a hire. Timesheets record hours worked during a billing period and are used to generate payment requests. They may also trigger overtime calculations when logged hours exceed standard thresholds. """ type Timesheet { "The ID of the timesheet." id: ID! "The worker that the timesheet belongs to." worker: Worker "The hire that the timesheet belongs to." hire: Hire "The start date of timesheet." startDate: Date "The end date of timesheet." endDate: Date "The date and time that the timesheet was created." createdAt: DateTime! "The payment requests created on the timesheet." paymentRequests( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): PaymentRequestPaginator! "The timesheet registrations." registrations( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): TimesheetRegistrationPaginator! "The files that are related to the timesheet." files( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): FilePaginator! "The overtimes that the timesheet belongs to." overtimes( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): OvertimePaginator! } "A paginated list of Timesheet items." type TimesheetPaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of Timesheet items." data: [Timesheet!]! } "A registration for a timesheet." type TimesheetRegistration { "The ID of the timesheet registration." id: ID! "The type of the timesheet registration." type: TimesheetRegistrationType! "The date of the timesheet registration." date: Date! "The start time of the timesheet registration." startTime: Time "The end time of the timesheet registration." endTime: Time "The duration of the timesheet registration." duration: Float! "The unit of measurement for the timesheet registration." unit: TimesheetRegistrationDurationUnit! "The comments for the timesheet registration." comments: String "The invoice reference number associated with the timesheet registration." invoiceReferenceNumber: String "An identifier associated with the timesheet registration from an external system." externalIdentifier: String "Whether the timesheet registration is billable." isBillable: Boolean "The custom fields values for the timesheet registration." customFieldValues: [CustomFieldValue!]! } "A paginated list of TimesheetRegistration items." type TimesheetRegistrationPaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of TimesheetRegistration items." data: [TimesheetRegistration!]! } "A response payload for a newly-created TOTP multi-factor authentication implementation." type TotpCreateMultiFactorPayload { "The newly-created TOTP multi factor." multiFactor: TotpMultiFactor! "The secret for the newly-created TOTP multi factor." secret: String! """ A URL for the QR Code containing the secret. This is not the QR Code itself, but the URL that the QR code should contain. The URL is in `otpauth` format. """ qrCode: URL! } "A TOTP multi-factor authentication implementation." type TotpMultiFactor implements HasMultiFactorMetadata { "The ID of the TOTP multi-factor authentication implementation." id: ID! "The name of the TOTP multi-factor authentication implementation." name: String! "The status of the TOTP multi-factor authentication implementation." status: MultiFactorStatus! "The owner of the TOTP multi-factor authentication implementation." owner: User! "When the TOTP multi-factor authentication implementation was verified." verifiedAt: DateTime "When the TOTP multi-factor authentication implementation was created." createdAt: DateTime! "When the TOTP multi-factor authentication implementation was updated." updatedAt: DateTime! } """ A trusted contact — a worker in a company's Talent Pool. Trusted contacts represent the relationship between a company and a worker. A worker must be added as a trusted contact before the company can hire them directly (without going through the marketplace). Trusted contacts go through an approval workflow and can have custom fields, skills, and onboarding documents. """ type TrustedContact { "The ID of the trusted contact." id: ID! "The trusted contact worker." worker: Worker! "The trusted contact company." company: Company! """ The user who invited the worker as trusted contact of the company. A `null` value here means the trusted contact was automatically added by a process. """ invitedByUser: User "Whether the viewer is able to approve the trusted contact." viewerCanApprove( "The ID of the account that the field should be approved as." account: ID! ): Boolean! "Whether the viewer is able to update the trusted contact." viewerCanUpdate( "The ID of the account that should update the trusted contact." account: ID! ): Boolean! "Whether the viewer is able to delete the trusted contact." viewerCanDelete( "The ID of the account that should delete the trusted contact." account: ID! ): Boolean! "Whether the viewer is able to re-invite the trusted contact." viewerCanReInvite( "The ID of the account that should update the trusted contact." account: ID! ): Boolean! "Links associated with the trusted contact." links: [String!]! "File attachments uploaded by the company that are related to the worker." attachments: [File!]! "Skills associated with the trusted contact." skills: [Skill!]! "Trusted contact managed status." managedStatus: TrustedContactManagedStatus "Status of the trusted contact." status: ContactStatus! "The date that the status of the trusted contact was last updated." statusUpdatedAt: Date! "The date that the trusted contact was invited." invitedAt: Date! "The user who approved the worker as trusted contact." approvedByUser: User "An identifier associated with the trusted contact from an external system." externalIdentifier: String "The origin of the trusted contact" origin: TrustedContactOrigin! "The channel of origin of the trusted contact" originChannel: TrustedContactOriginChannel! "The custom fields values for the trusted contact." customFieldValues: [CustomFieldValue!]! "Whether all required worker-editable custom fields have been filled." requiredCustomFieldsComplete: Boolean! "The onboarding status of the trusted contact." onboardingStatus: TrustedContactOnboardingStatus "The onboarding documents associated with the trusted contact." onboardingDocuments: [OnboardingDocument!]! """ Compliance requirements for this worker as seen by the trusted contact's company. The viewing company is unambiguous here (it's the pivot's company), so per-company review state never depends on session state. When `names` is omitted, the curated review-modal subset is returned. Pass explicit names to filter to a specific compliance. """ compliances( """ Optional compliance names to filter for. If omitted, the review-modal subset is returned. """ names: [ComplianceName!] """ Read strategy for `applicable` / `completed`. Defaults to live computation. Pass `true` to read the persisted status row with a live fallback when no row exists yet. """ cached: Boolean = false ): [Compliance!]! "The date that the trusted contact was created." createdAt: Date! "The tags for a trusted contact." tags( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): TagPaginator! @deprecated(reason: "Use `skills` instead.") "Notes added to the trusted contact." notes( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): NotePaginator! } "A paginated list of TrustedContact items." type TrustedContactPaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of TrustedContact items." data: [TrustedContact!]! } "The payload returned after updating custom field values as a worker." type UpdateWorkerCustomFieldValuesPayload { "The updated fieldable entity." fieldable: SupportsCustomFieldValue! "The updated field values." customFieldValues: [CustomFieldValue!]! } """ A user who can sign in to Worksome and act on behalf of one or more accounts. Users are the people behind accounts — a single user may be a team member of a company, an owner of a staffing agency, or a worker. They authenticate and perform actions within their active account context. """ type User { "The ID of the user." id: ID! "The name of the user." name: String! "The email of the user" email: String! "The avatar (or profile picture) for the user." avatar: URL "Whether the user has consented to use Worksome Intelligence." hasConsentedToWorksomeIntelligence: Boolean! """ Whether the user is allowed to create a password for their account. The user might not be allowed if they already have a password, in which case they should use `updatePassword` or if they have SAML on their account. """ canCreatePassword: Boolean! """ Whether the user has any way of authenticating into the system. This will check that the user has no password, social, SAML etc. way of authenticating into their account. """ missingAuthentication: Boolean! "Checks whether the user has verified their email or not." hasVerifiedEmail: Boolean! "When the email was verified." emailVerifiedAt: DateTime "When the account was created." createdAt: DateTime! "When the account was last updated." updatedAt: DateTime! } """ A named group of company team members. User groups are used to assign approvers in approval workflows — when an approval is required, the members of the assigned user group are notified and can take action. """ type UserGroup { "The ID of the group." id: ID! "The name of the group." name: String! "The description of the group." description: String "The company that the group is for." company: Company! "The status of the user group." status: UserGroupStatus! "The users of the group." users( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): UserPaginator! } "A paginated list of UserGroup items." type UserGroupPaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of UserGroup items." data: [UserGroup!]! } "A paginated list of User items." type UserPaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of User items." data: [User!]! } "Represents the Worksome Classification Recommendation (WCR) in the system." type Wcr { "The ID of the WCR." id: ID! "The user associated with this WCR." user: User """ Reference to a supersede record, indicating a newer WCR that replaces or supersedes a previous one. """ supersededBy: WcrSupersede "Determines whether this WCR overrides another WCR. Details can be found in the WcrSupersede." overridesAnother: Boolean! } "Represents the supersede relationship for an WCR, used when one WCR replaces or supersedes another." type WcrSupersede { "The specific type of the supersede (e.g., 'DISPUTE', 'OVERRIDE', etc.)." type: WcrSupersedeType! "Reference to the original WCR that is being superseded." originalWcr: Wcr "The reason provided for the supersede by the user." reason: String "The date on which this supersede was filed." filedAt: Date! } "The webhook definition." type Webhook { "The ID of the webhook." id: ID! "The title of the webhook." title: String! "The description of the webhook." description: String "The owner of the webhook (company name)." owner: String! "The URL of the webhook." url: String! "The secret of the webhook." secret: String "Whether the webhook is active or not." isActive: Boolean "The client ID of the webhook, when using OAuth." clientId: String "The client secret of the webhook, when using OAuth." clientSecret: String "The client URL of the webhook, when using OAuth." clientUrl: String """ The event types that this webhook is subscribed to. If null, the webhook is subscribed to all event types. If an empty array, the webhook is not subscribed to any events. """ subscribedEvents: [WebhookEventType!] "The date and time that the webhook was created." createdAt: DateTime! "The date and time that the webhook was updated." updatedAt: DateTime! } "The webhook event definition." type WebhookEvent { "The ID of the webhook event." id: ID! "The unique key of the webhook event." key: String! "The ID of the webhook." webhookId: ID! """ The webhook event identifer. Refer to the [webhook event documentation](https://docs.worksome.com/webhooks/reference/) for more information about which event values Worksome uses here. """ event: String! "The webhook event description (human readable version of the `event` field)." description: String! """ The latest status of the webhook sending attempts: - `pending`: The webhook has not yet been sent. - `success`: The webhook was sent successfully. - `failed-N`: The webhook sending attempt failed for the N'th time. - `failed-finally`: The webhook sending attempt failed and will not be retried automatically. """ status: String! "The webhook event payload." payload: JSON! "The log entries of webhook event calls." logs: [WebhookEventLog!]! "The date and time that the webhook event was created." createdAt: DateTime! "The date and time that the webhook event was updated." updatedAt: DateTime! } "The webhook event log definition." type WebhookEventLog { "The ID of the webhook event log." id: ID! "The unique key of the webhook event." key: String! """ The result of the webhook sending attempt: - `success`: The webhook was sent successfully. - `failed-N`: The webhook sending attempt failed for the N'th time. - `failed-finally`: The webhook sending attempt failed and will not be retried automatically. """ result: String! "The HTTP status code of the the webhook sending attempt." statusCode: Int "The webhook." webhook: Webhook! "The webhook event." webhookEvent: WebhookEvent! "The webhook event request." request: JSON! "The webhook event response." response: JSON! "The date and time that the webhook event log was created." createdAt: DateTime! } "A paginated list of WebhookEventLog items." type WebhookEventLogPaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of WebhookEventLog items." data: [WebhookEventLog!]! } "A paginated list of WebhookEvent items." type WebhookEventPaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of WebhookEvent items." data: [WebhookEvent!]! } "A paginated list of Webhook items." type WebhookPaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of Webhook items." data: [Webhook!]! } """ A worker account — a freelancer or contractor who can be hired by companies on Worksome. Workers maintain a profile with skills, experience, and business entity details. They can be hired in two ways: by submitting a bid on a published job (marketplace flow), or via a direct hire — which requires the worker to first be added as a trusted contact in the company's Talent Pool. """ type Worker implements Account { "The ID of the worker." id: ID! "The name of the worker." name: String! "The first name of the worker." firstName: String! "The last name of the worker." lastName: String! "The middle name of the worker." middleName: String "The email of the worker." email: String "The phone of the worker." phone: String "The avatar (or profile picture) for the worker." avatar: URL "The address that the worker is registered to." address: Address "The market that the worker is in." market: Market! "The skills that the worker has." skills: [Skill!]! "The profile that the worker has." profile: Profile "The job title that the worker has." jobTitle: String "The initials for the worker name." initials: String! "True when the viewer can edit this worker's profile on their behalf." viewerCanEdit: Boolean! "The currency that the worker uses." currency: String! "The daily rate for the worker." dayRate: Float "Right to work verification and background checks have been made for this worker at this date." rtwVerifiedAt: DateTime """ Right to work verification and background checks for this worker will expire by this date. If the expire date is in the future the verification is still valid. """ rtwExpiresAt: DateTime """ Recruiter-attributed hires the viewer can see, as client, recruiter, or supplier. Workers get nothing; use `hires` instead. Includes drafts. """ hiresWithAttribution( "Filter by accounts associated with the hire besides worker." companies: [ID!] "Filter hires by if recruiter ownership is active, expired or both." ownershipIsExpired: Boolean = false ): [Hire!]! "The business entity that the worker uses." primaryBusinessEntity: BusinessEntity "The total amount received/paid by the given company." totalPaid( "The ID of the account that the aggregation of total paid should run against." account: ID! ): Float! """ Whether the worker is a trusted contact for the current viewer. Only companies can see this. """ viewerIsClient( "The ID of the account that the field should be viewed as." account: ID! ): Boolean "Whether the viewer is able to contact the trusted contact." viewerCanContact( "The ID of the account that the field should be viewed as." account: ID! ): Boolean! "Whether the viewer is able to offer jobs to the trusted contact" viewerCanOfferJob( "The ID of the account that should offer the job." account: ID! ): Boolean! """ The name of the staffing agency / MSP through which the viewer's company engages this worker, when every hire between them is sourced through a supplier. Returns null when the viewer's company engages the worker directly (or has no engagement with them). """ engagedViaSupplierName( "The ID of the viewer's company account." account: ID! ): String "Determines if the worker is currently hired by the given company." isCurrentlyHired( "The ID of the account that the check should run against." account: ID! ): Boolean! "A list of relations between the worker and a company as seen from the workers perspective." clients: [Client!]! "The insurance information for the worker." insurances: [WorkerInsurance!]! "The worker's identification details." identification: WorkerIdentification "The business entities that the worker has." businessEntities( "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): BusinessEntityPaginator! "The hires associated with the worker." hires( "Filter by accounts associated with the hire besides worker." companies: [ID!] "Filter hires by whether they have been accepted or not." isAccepted: Boolean "Filter hires by their status." status: HireActiveStatus "Limits number of fetched items." first: Int! = 10 "The offset from which items are returned." page: Int ): HirePaginator! } "Identification details supplied by the worker." type WorkerIdentification { "The worker's date of birth. Null if it has not been provided." dateOfBirth: Date "ISO 3166-1 alpha-2 country code of the worker's nationality." nationality: String! "The kind of identification document the worker has provided." documentType: IdentificationDocumentType! "The full document number." documentNumber: String! "The document number, partially masked." documentNumberObfuscated: String "When the document expires." documentExpiresAt: Date! } "Insurance information for a worker." type WorkerInsurance { "The insurance type." type: String! "The human-readable title of the insurance type." title: String! "Whether the worker has this insurance." hasInsurance: Boolean! "The policy limit amount in the smallest currency unit." policyLimit: Int "The date when the insurance information was last updated." updatedAt: DateTime "The proof of insurance files." files: [File!]! } """ A workflow — an alternative tree-structured view of an approval flow for hires. A `Workflow` is backed by the same data as an `Approval`, but exposes the structure as a tree of nodes (rules with their approvers). Use the `workflow`/`workflows` queries to read the tree structure, and `createWorkflow`/`updateWorkflow` to manage the entire approval flow as a single operation. Workflows currently apply only to hires — they cannot be used for jobs, payment requests, or other entities. See the `Approval` type for supported trigger events. """ type Workflow { "The ID of the workflow (same as the underlying approval ID)." id: ID! "The approval rules that form the branches of this workflow tree." nodes: [Nodeable!]! } "A paginated list of Workflow items." type WorkflowPaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of Workflow items." data: [Workflow!]! } "A selectable option for an option-type workflow variable." type WorkflowVariableOption { "The display order of the option in the list." displayOrder: Int! "The human-readable label for this option." label: String! "The value to use when creating a condition with this option." value: String! } """ A workflow variable that accepts one of a predefined set of options for comparison. For example, a classification result variable with options like "Employee" and "Independent Contractor". """ type WorkflowVariableOptionType implements WorkflowVariable { "The identifier for this variable." id: ID! "The human-readable title of the variable." title: String! "A description of what the variable represents." description: String "The comparison operators available for this variable." operators: [WorkflowVariableOperator!]! "The predefined options that can be selected as the comparison value." options: [WorkflowVariableOption!]! } "A paginated list of WorkflowVariable items." type WorkflowVariablePaginator { "Pagination information about the list of items." paginatorInfo: PaginatorInfo! "A list of WorkflowVariable items." data: [WorkflowVariable!]! } """ A condition on an approval rule — compares a workflow variable against a threshold value. For example, a rule might have a condition: "hourly rate greater than 100". The `variable` field identifies what is being compared, `operator` defines the comparison type, and `value` is the threshold. """ type WorkflowVariableRule { "The ID of the condition." id: ID! "The identifier of the variable or custom field being evaluated." fieldId: String! "The approval rule that this condition belongs to." approvalRule: ApprovalRule! "The workflow variable being evaluated in this condition." variable: WorkflowVariable! "The comparison operator (e.g. equals, greater than, less than)." operator: WorkflowVariableOperator! "The threshold value to compare against." value: String! "The date that this condition was created." createdAt: Date! "The date that this condition was last updated." updatedAt: Date! } "A workflow variable that accepts free-text string values for comparison." type WorkflowVariableStringType implements WorkflowVariable { "The identifier for this variable." id: ID! "The human-readable title of the variable." title: String! "A description of what the variable represents." description: String "The comparison operators available for this variable." operators: [WorkflowVariableOperator!]! } "A scalar type representing a date." scalar Date "A date formatted as YYYY-MM-DDTHH:mm:ss.SSSSSSZ (2022-10-30T23:00:00.000000Z)." scalar DateTime """ A scalar for representing a decimal value. It is always limited to a maximum of 2 decimal points. """ scalar Decimal "The `DecimalFour` scalar type represents a number with up to 4 decimal places." scalar DecimalFour "The `DecimalTwo` scalar type represents a number with 2 decimal places." scalar DecimalTwo "A JSON-encoded field for an associative array." scalar Dictionary "A scalar for representing an E.164 phone number." scalar E164PhoneNumber """ A scalar for representing an email address. If a field has Email as its type, it will always be a valid email address. """ scalar Email "A scalar for representing JSON data." scalar JSON "The `Percentage` scalar type represents a percentage." scalar Percentage "The `StrictPercentage` scalar type represents a percentage that cannot be less than 0% or greater than 100%." scalar StrictPercentage """ A time formatted as H:i (12:34). Time using this type is always in 24-hour format. """ scalar Time """ A scalar for representing a URL. If a field has URL as its type, it will always be a valid URL. """ scalar URL """ A scalar representing a multipart form file upload. Can be used as an argument to upload files using the [GraphQL multipart request specification](https://github.com/jaydenseric/graphql-multipart-request-spec). """ scalar Upload "The types of items that can require approval. Currently only hires go through approval workflows." union Approvable = Hire "An item in a batch." union BatchItem = PaymentRequest | Invoice """ Union of typed data a compliance can emit. Compose atomic `ComplianceDataField` entries for simple label/value rows, wrap them in a titled `ComplianceDataGroup` when multiple semantically-distinct groups belong to the same compliance, and reach for domain-reference variants (`ComplianceDataBusinessEntity`, `ComplianceDataAddress`, `ComplianceDataUser`, `ComplianceDataBankDetail`) when the frontend should be able to query a first-class domain type directly. `ComplianceDataClassification` is the specialised Q&A shape for determination compliances (IR35, NL/Global/US worker classification). """ union ComplianceData = ComplianceDataField | ComplianceDataGroup | ComplianceDataFile | ComplianceDataBusinessEntity | ComplianceDataAddress | ComplianceDataUser | ComplianceDataBankDetail | ComplianceDataClassification "Accounts that a job can be shared with." union JobShareableAccount = Worker | Recruiter | Company "A multi-factor instance." union MultiFactor = SmsMultiFactor | TotpMultiFactor "The types of nodes that can appear in a workflow tree. Currently only approval rules." union Nodeable = ApprovalRule "Union of types which can include notes." union Notable = Job | TrustedContact | CompanyRecruiter """ Union of types which custom field values may be applied to. This is closely coupled to the `TypeSupportingCustomFieldValues` enum. """ union SupportsCustomFieldValue = Job | Contract | TrustedContact | CompanyRecruiter