Switch a account feature on or off
Turns one account-wide feature flag on or off — any feature, despite the front-page name.
ACCOUNT-WIDE CONFIGURATION WRITE. The feature is named in the identifier query parameter (FeatureIdentifier name or number) and the body carries only Enabled. It runs exactly the same manager code as PUT /v1/feature (PUT /v1/feature): setting a feature to its current value does nothing and returns 200; a real change is validated, written, and then triggers the feature's side effects, some of which rewrite account data (AllocationDates off rewrites every allocation's dates). Unlike v1, there is no internal-client restriction.
Use it to:
- WidgetPlannedAbsence) on or off
Not for:
- Reading a feature →
GET /v2/features/{id} - Typed settings (numbers, dates, text) →
PUT /v2/settings/{settingIdentifier}
Behaviour:
- Idempotent.
- Safe to retry.
- Duplicates: Same value again = no write, no events, 200 null.
- AllocationDates OFF rewrites every allocation's dates to its task's dates — not reversible by switching back).
- Side effect: Post actions run TWICE per call.
Call first: GET /v2/features/{id}
Next: GET /v2/features/front-page
See also: PUT /v1/feature, PUT /v2/settings/{settingIdentifier}
Not yet documented: behaviour → consistency; examples (success); request → query params.
curl -X PUT "https://app3.timelog.com/your-account/api/v2/features?identifier=InvoiceDefaultValue_UseProjectContactForInvoiceContact" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-d '{
"Enabled": true
}'
import requests
import json
url = "https://app3.timelog.com/your-account/api/v2/features?identifier=InvoiceDefaultValue_UseProjectContactForInvoiceContact"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_TOKEN"
}
data = {
"Enabled": true
}
response = requests.put(url, headers=headers, json=data)
print(response.json())
const response = await fetch("https://app3.timelog.com/your-account/api/v2/features?identifier=InvoiceDefaultValue_UseProjectContactForInvoiceContact", {
method: "PUT",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_TOKEN"
},
body: JSON.stringify({
"Enabled": true
})
});
const data = await response.json();
console.log(data);
package main
import (
"fmt"
"net/http"
"bytes"
"encoding/json"
)
func main() {
data := []byte(`{
"Enabled": true
}`)
req, err := http.NewRequest("PUT", "https://app3.timelog.com/your-account/api/v2/features?identifier=InvoiceDefaultValue_UseProjectContactForInvoiceContact", bytes.NewBuffer(data))
if err != nil {
panic(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer YOUR_API_TOKEN")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println("Response Status:", resp.Status)
}
require 'net/http'
require 'json'
uri = URI('https://app3.timelog.com/your-account/api/v2/features?identifier=InvoiceDefaultValue_UseProjectContactForInvoiceContact')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Put.new(uri)
request['Content-Type'] = 'application/json'
request['Authorization'] = 'Bearer YOUR_API_TOKEN'
request.body = '{
"Enabled": true
}'
response = http.request(request)
puts response.body
"null"
{
"error": "Bad Request",
"message": "The request contains invalid parameters or malformed data",
"code": 400,
"details": [
{
"field": "email",
"message": "Invalid email format"
}
]
}
{
"error": "Unauthorized",
"message": "Authentication required. Please provide a valid API token",
"code": 401
}
{
"Message": "No HTTP resource was found that matches the request URI 'https://app{server-number}.timelog.com/{account}/api/v2/features'.",
"MessageDetail": "No action was found on the controller 'Features' that matches the request."
}
{
"error": "Internal Server Error",
"message": "An unexpected error occurred on the server",
"code": 500,
"requestId": "req_1234567890"
}
/v2/features
Target server for requests. Edit to use your own host.
OAuth 2.0 bearer token, sent as Authorization: Bearer <token>. JWT and reference tokens are both accepted. The token must carry the required scope (default tlp).
The token's sub claim is the acting user. A token WITHOUT sub (client-credentials) acts as the system service user. If the sub user cannot log in (inactive, locked, deleted), the request is rejected with 401 — it is no longer let through without a user.
> Not yet documented: how to obtain a token.
> Not yet documented: token lifetime.
Authorization: Bearer <token>. JWT and reference tokens are both accepted. The token must carry the required scope (default tlp).
The token's sub claim is the acting user. A token WITHOUT sub (client-credentials) acts as the system service user. If the sub user cannot log in (inactive, locked, deleted), the request is rejected with 401 — it is no longer let through without a user.
> Not yet documented: how to obtain a token.
> Not yet documented: token lifetime.The feature to change: FeatureIdentifier member name (case-insensitive) or its integer value. Omitted → 404 rest.action-not-matched (captured — every captured call omitted it). An integer with no member binds and then fails with 500 (FeatureConfiguration.GetFeature).
Allowed values: see FeatureIdentifier.
The media type of the request body
true = switch the feature on for the whole account, false = switch it off. - omitted (e.g. body {}) — false — the feature is switched OFF; nothing validates the body. - equal to the current value — No write, no validation, no events; 200 null.
Request Preview
Response
Response will appear here after sending the request
Authentication
Bearer token. OAuth 2.0 bearer token, sent as Authorization: Bearer <token>. JWT and reference tokens are both accepted. The token must carry the required scope (default tlp).
The token's sub claim is the acting user. A token WITHOUT sub (client-credentials) acts as the system service user. If the sub user cannot log in (inactive, locked, deleted), the request is rejected with 401 — it is no longer let through without a user.
Not yet documented: how to obtain a token.
Not yet documented: token lifetime.
Query Parameters
The feature to change: FeatureIdentifier member name (case-insensitive) or its integer value. Omitted → 404 rest.action-not-matched (captured — every captured call omitted it). An integer with no member binds and then fails with 500 (FeatureConfiguration.GetFeature).
Allowed values: see FeatureIdentifier.
InvoiceDefaultValue_UseProjectContactForInvoiceContactInvoiceDefaultValue_AppendInvoiceHeaderOnCreditNoteHeaderInvoiceDefaultValue_AddRegistrationDateToInvoiceLineTextInvoiceDefaultValue_UseProjectExchangeRateOnInvoicingInvoiceDefaultValue_AdditionalTextInInvoiceAutoTextInvoiceDefaultValue_AddProjectAndTaskInfoAutomaticallyLockProjectDateToTaskPlanDateLockInstallmentInvoicingDateToTaskEnddateOnFPTEnableDateOnAllocationsChangeTaskDateBasedOnAllocationProjectContractsContractModelTimeMaterialBasicContractModelFixedPriceBasicContractModelTimeMaterialAccountEndBalancingContractModelTimeMaterialAccountPeriodicBalancingContractModelPrepaidServicesContractModelTaskDrivenRevenueContractModelContinuousServiceContractModelContinuousItemInvoicingTempShowAddContractCustomerInvoiceSettingsBillableOnTimeDefaultTextOnProjectInvoicePaymentMethodInExpenseReportAllowanceInTravelExpensesAccommodationAndUnspecifiedInTravelExpensesExpenseNoAllEmployeesRegisterOnAllActiveProjectsProfitOnExpensesStopwatchTimeTrackingMobileTimeLogProjectAccessTimeRegistrationAdditionalTextFieldUserDefinedCommentInInvoiceModuleUserDefinedCommentInInvoiceLinesCopyWeekMyProjectAssignmentsMyProjectAssignmentsAndGeneralProjectThisWeekRegistrationsLastWeekRegistrationsInternalProjectsExternalProjectsCustomerNoCustomerProjectNoWBSCodeTaskNumberInfoNormalWorkingTimeInTimesheetDifferenceBetweenNormalWorkingTimeAndTotalInTimesheetShowLinkToTravelExpensesShowCustomerInTimesheetAndExpensesEmployeeSelectsInvoicingStatusMandatoryCommentEnableFlexCalculationsOvertimeFactorAllowRedistributionOfTimeFromClosedTasksExpensesApprovedExpensesControlledExpensesPaidEnhancedTimesheetApprovalsProjectManagerApprovalTwoStepApprovalOfExpensesTwoStepApprovalOfExpensesFeatureLockInstallmentDateToFPTTaskDateMilestoneDepartmentSupplierOnExpensesNoContractorsPersonalReportsFullExportInTimeRegistrationDKKAmountInTimeRegistrationNonBookedDeprecationCostPriceEstimatedProjectScheduleBarInvoicedExtendedStatusReportInformationExportMSProjectPdfXmlMSExcelMSWordTextFileBasicInvoiceModuleAllowTDRContractsInBusinessEditionReadyForInvoicingGroupHourlyRatesUseProductsUpgradeNotificationActivatedDefaultBillableDefaultBillableExpensesDefaultBillableMileageDefaultBillableTimeBillableBillableExpenseCustomerNickNameCustomerSinceTwoOwnersPerCustomerTurnOverOnCustomerTabCustomerSalutationCustomerInitialsCustomerProfessionalTitle1CustomerProfessionalTitle2CustomerSortByCustomerNoRelationsInTimeLogCRMAdvancedContactSearchOptionsProjectManagerOverviewUnitTypeUndefinedUnitTypeHoursUnitTypeMinutesUnitTypeDaysUnitTypeKmUnitTypePiecesUnitTypeLitersUseMilestoneTypesImportEconomicExpensesUnitTypeMetersUnitTypeKilogramsTimeAndMaterialAutoMarkReadyForInvoicingMilestoneTypeIsRequiredCapacityPlanningBasicoDataExtractionForNavEnableInpageHelpUsePostEventsEnableNewPivotReportInvoiceSavePostEventReportCustomInvoiceDataExportShowEmployeeIDActivateExpenseBatchEU_ProjectsReportEnhancedUseTimeLogOutlookAuditLogProjectSubContractAuditLogRecurrenceAuditLogMilestoneShowMileStonesImportFortnoxExpensesGenericBudgetPlatformAutomationBetaInvoiceSetting_ProductNoActiveLogoOnExtranetShowMileStonesLinkShippingAddressSalarySpecificationReportCronaLonExportCronaLonExportVisibilityMultiLegalEntitiesOfficeDimensionSalaryCodeOnAllowanceRatesSalaryCodeOnCarsSalaryCodeOnExpenseTypeDepartmentDimensionMappingSalaryGroupsUserDefinedCommentInInvoicePotentialPre6_1SiteAbsenceSpecificationHistoricReportAbsenceSpecificationAllEmployeeHistoricReportProjectCommentsSalaryAccountTypeBillableHoursIsEditableBillableHoursIsEditableOnFixedPriceOrganizationNumberHourlyRateCurrenciesCronaLonExportFlexInvoiceLineCostCenterDefaultInvoiceLineCostCenterHogiaLonExportFlexNotSpecifiedExpensesTravelExpensesApprovalResourcePlannerProjectBudgetingETCDepartmentsSalaryRevenueRecognitionPerformanceMeasurementProcessSkillsModuleCRMExtranetV2APIAndSystemIntegrationProcessDepartmentInternationalEmployeeAdvancedInvoicingProjectManagerToolboxBasicSalaryTimeTrackingBasicCostPriceBasicHolidayCalendarsAllowMultipleProjectLevelsAllowDeepProjectLevelsBasicProjectTemplatesProjectPlanHourlyRateDropdownBaselineProjectForecastProjectDocumentsProjectStatusImportMSProjectProjectNumberAllowMultiCustomerOnOneProjectProjectContactProjectPONoAccountManagerPartnerProjectDescriptionProjectLinkWBSTaskNoWorkLoadCalcMethodTravelTimeTasksTaskDescriptionTaskLinkLockTaskBudgetAmountWhenHourlyRateIsFixedLockProjectDateWithTaskPlanChangeTaskDateBasedAllocationAllocationDatesEmployeesSetTaskCompletedEmployeesToOpenCompletedAllocationsProjectStageEmployeeTypesAutomaticallyCloseTaskWhenLastAllocationIsClosedProjectTypeProjectTypeIsRequiredExpenseTypeExpenseTypeIsRequiredExpenseTypeAccountNoInvoiceSetting_DateRangeNoStartDateInternalNoteOnInvoiceBlockTimeRegistrationNotApprovedFromInvoicingInvoiceSetting_ShowFileExportInvoiceSetting_ExportBookedOnlyInvoiceSetting_ExportIncludeLinesInvoicePrintWithSpecInvoiceSetting_ExportIncludeDetailsGroupByAdditionalTextFieldInInvoicingLimitTextOnInvoiceHeaderLimitTextOnInvoiceMessageLimitTextOnInvoicelineDescriptionOIOXMLWeeklyTimesheetLinkTravelPendingBookingAdvancedPasswordSecurityDistinctUsernameAndPasswordSmallLettersInPasswordSpecialCharactersInPasswordNumbersInPasswordCapitalLettersInPasswordApproveTimeReportsInspariFilterOldDocumentPanelInvoiceLineCostCenterVisibilityAllowSendTaskUpdateExceptionEmailFrontPageInfoboxMilestonesInInfoboxCRMEventsInInfoboxCalendarEventsInInfoboxInfoboxTimesheetClosedInfoboxTimesheetOverNormGoalReportsGDPR_DeleteEmployeeDataGDPR_AnonymizeEmployeeDataGDPR_DeleteContactDataGDPR_DeleteCustomerDataTempFeatureHideGDPRSettingsProjectFactorProjectCategoryProjectCategoryIsRequiredTaskTypeTaskTypeIsRequiredETCSettingWarnProjectManagerAfterSpecificDaysETCSettingForceUnCertaintyWhenReportingForceETCWhenCloseWeeklyTimesheetCopyProjectSettingCVStatusCRMIndustryCodeInvoiceLineFileExportHogiaLonExportVismaLonExportLessorLonExportGenericSalaryExtractionExportTimeRegistrationsByProjectCategoryExportNitroSAPExportWebServiceInvoiceAccountingPeriodInvoiceCurrencySettingNotificationMailProjectNotificationMailAllocationMoverNotificationAllocationCloseProjectManagerNotificationAllocationCloseManagerNotificationProjectModifiedProjectManagerNotificationProjectDeletedProjectManagerNotificationAllocationCreatedAllocatedEmployeeNotificationAllocationModifiedAllocatedEmployeeNotificationAllocationDeletedAllocatedEmployeeNotificationProjectModifiedAllocatedEmployeeNotificationProjectDeletedAllocatedEmployeeNotificationMailUnAllocatedEmployeeRegisterTimeNotificationMailSendETCRequestNotificationETCGivenProjectManagerNotificationAllocationExceedsTaskDatesProjectManagerNotificationETCAllocationUnCloseProjectManagerNotificationETCAllocationUnCloseAllocatedEmployeeNotificationETCAllocationCloseProjectManagerNotificationStatusForWeeklyTimesheetNotificationNewEmployeeMailNotificationOpportunityNotificationMailCustomerNotificationMailContactNotificationRequestProjectManagerTimeApprovalAdjustProjectPaymentsSingleProjectFixSalaryAccountEmployeePostingAggregationAfterMigrationPlanningTaskInProjectsExternalDefaultTaskIsPlanningTaskInternalDefaultTaskIsPlanningTaskSynchronizeHardBookingToAllocationPlanningTaskOnlyInResourcePlannerShowReferenceValueInResourcePlannerDeductAllocatedWorkFromPlanningTaskMilestonesInWeeklyTimesheetRoundingOfBillableTimeLimitTrackerSearchToProjectsSalaryAccountsSalarySpecificationSupplementCodesPaidOutCodesContributionRatioReportContractTeamTempShowProjectForecastInfoUniqueProjectNumberUniqueCustomerNumberTempNewBlankInvoiceUITempGeneratNewInvoicingPotentialTempUseNewInvoicingPotentialTempNewDebtorListAllViewInTimeSheetFavouritesOnlyViewInTimeSheetTasksWithHoursViewInTimeSheetUpdateAedCurrencyOnInvoiceSavePostEventSystemBasicInvoicingAgentProjectMandatoryOnInvoiceLinesStrictPONumberValidationMiracleNavBarExportCustomMiracleFeatureProcessDeltaPlatformNavIntegrationModulePlatformVismaIntegrationModulePlatformBusinessCentralIntegrationModulePlatformDatEVIntegrationModuleShowOldAndNewDebtorlistShowTimeRegistrationsDetailedReportMyProjectAssignmentsViewInTimeSheetBlockTimeTrackingMoreThanAllocatedLinkToProductCatalogueInTimesheetPersonalCreditCardTrialCRMTrialOutlookTrialMLEPrintTemplateInvoiceSpecPageBreakAfterInvoiceLinePrintTemplateInvoiceSpecInvoiceMessageHeaderPrintTemplateInvoiceSpecEmployeeInitialColumnPrintTemplateInvoiceSpecTaskNumberColumnTempShowAbsenceAnalysisReportPlatformSLSIntegrationModuleTempTreatAllTimeRegistrationAsRecurringTaskRecurringDomainStructureAccountorOCI_HackFeatureProjectPlanAmountPageNewServiceBasedTemplatingSalesShareIntercompanyInvoicingDesignSevenProjectProductReimbursementTaxableSplitAccountNumberShowOdometerOdometerIsRequiredContractHourlyRateReleaseOneSalaryAutomationNewResourcePlannerEmployeeBudgetKPICompanyBudgetKPIKPIMainMenuShowEmployeeKPIRegistrationInvoice12MonthsShowEmployeeKPIRegistrationInvoiceShowEmployeeKPIAverageHourlyRateShowEmployeeKPIExternalPercentShowCompanyKPIRegistrationInvoice12MonthsShowCompanyKPIRegistrationInvoiceShowCompanyKPIAverageHourlyRateShowCompanyKPIExternalPercentCustomerPortalOnboardingMailFlowMileageWithMapsIntegrationBusinessCentralContractTypeContractTypeIsRequiredInvoiceTemplateExtendedExpenseIntegrationExpensesOffsetAccountInvoicingBusinessCentralNewInvoiceEndpointTimeRegistrationServiceProcessingMeasureTimeRegistrationServiceProcessingTimeCurrencyMatrixDesignSevenFrontPageCurrencyMatrixPopulationRegionSwedenEnforcePasswordPolicyInLoginPortalInvoiceSpecificationTransferOnIntegrationLastTimeRegistrationReportNewResourcePlannerProcessShowTimestampSetupInSystemAdministrationTimeRegistrationTimestampShowWarningWhenTimestampOverlapExchangeRateOnInvoiceTransferResourcePlannerProcessTransferExpenseEmployeeDescriptionCommentOnlyTimeExpenseUserLicenseExternalUserLicenseDesignSevenNotificationCenterJiraIntegrationWidgetOverdueInvoicesWidgetPlannedAbsenceWidgetInvoicedPerMonthWidgetBudgetRemainingWidgetProjectEconomyHealthWidgetAverageHourlyRateLogIntegrationImportOfExpensePiccaNavRevenueExportProjectDeparmentAsInvoiceLineDimensionForFortnoxVatIsNotIncludedInFortnoxIntegrationCustomizationZenegySendCodeAsHoursBusinessCentralCloudHandlerAgdaSalaryExportTripletexFinancialIntegrationWidgetTimeTrackingDelayWidgetVacationCalculationProjectSubContractBudgetProjectSubContractMaterialsProjectSubContractContingencyProjectSubContractSubContractorIntegrationImportOfExpenseCostBasedRevenueRecognitionCrossLegalEntityHourlyRateMatchingOutlookIntegrationFrontPageInternalMessageDesignSevenSearchProjectCompetencesWidgetHourKPIHoursOnlyWidgetHourKPIWidgetHourKPIWithBARInvoiceMultilingualCustomerNumberSeriesProjectNumberSeriesInvoiceNumberSeriesExpenseNumberSeriesVoucherNumberSeriesCreditNoteNumberSeriesTaskNumberSeriesAllowEmptyCustomerNoAllowEmptyProjectNoAllowEmptyInvoiceNoAllowEmptyExpenseNoAllowEmptyVoucherNoAllowEmptyCreditNoteNoAllowEmptyTaskNoNumberSeriesMvcViewTimesheetApprovalByProjectManagerOnlyApprovalOfTimesheetByProjectManagerOnlyDesignSevenMoveHoursBusinessCentralNewImportOfExpenseEndpointManualInvoiceLinesVisibilityInvoiceProductLineWidgetBillablePercentageWidgetExternalPercentageWidgetPersonalPlanInvoicingFeeManagementInvoicingFeeInvoicingFeeAsDefaultForNewCustomerRevenueForecastingReportPhoenixFinanceEnginePhoenixExpenseEngineProjectPortfolioOverviewServiceBusOverride_SalaryAutomationServiceServiceBusOverride_CurrencyExchangeServiceServiceBusOverride_CostSchedulingServiceServiceBusOverride_RegistrationServiceServiceBusOverride_ResourcePlannerServicePhoenixDashboardPhoenixFinanceEngineTemporalDataSalaryRuleProcessingShadowSalaryRuleProcessingInTlpBody
true = switch the feature on for the whole account, false = switch it off.
-
omitted (e.g. body {}) — false — the feature is switched OFF; nothing validates the body.
-
equal to the current value — No write, no validation, no events; 200 null.
Responses
Success without content: HTTP 200 with the literal JSON body null. Literal JSON null (TafSuccessResult) — also when the value was already set (no-op).