ProjectsValidate a new project from a template

Validate a new project from a template

Runs the create-from-template checks on a body without creating anything.

It does NOT check the ProjectManagerToolbox business process and does not map InvoicingCustomerReferenceID / the default invoice language, so a 200 here does not guarantee that create succeeds.

Use it to:

  • Validate a project form before submitting

Rules across fields:

  • R1: As create-from-template R1.

Behaviour:

  • Idempotent.
  • Safe to retry.
  • Changes are visible to the next read immediately.

Next: POST /v1/project/create-from-template

Not yet documented: examples.

curl -X POST "https://app3.timelog.com/your-account/api/v1/project/validate-create-from-template" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -d '{
  "Name": "John Doe",
  "ProjectNo": "example_string",
  "CustomerID": 123,
  "Description": "example_string",
  "ProjectTemplateID": 123,
  "ProjectManagerID": 123,
  "ProjectStartDate": "2024-12-25T10:00:00Z",
  "ProjectEndDate": "2024-12-25T10:00:00Z",
  "ProjectTypeID": 123,
  "ProjectCategoryID": 123,
  "CurrencyID": 123,
  "LegalEntityID": 123,
  "DepartmentID": 123,
  "AccountManagerID": "null",
  "PartnerID": "null",
  "ContactID": 123,
  "InvoicingCustomerReferenceID": "null",
  "LanguageID": "null"
}'
"null"
POST
/v1/project/validate-create-from-template
POST
Base URLstring

Target server for requests. Edit to use your own host.

Bearer Token
Bearer Tokenstring
Required

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.

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.
Content-Typestring
Required

The media type of the request body

Options: application/json
Namestring
Required

Project name. > Not yet documented: constraints.

ProjectNostring

Project number. Empty or omitted = the template / auto-number value is kept. Default: the number the template mapping produces > Not yet documented: default.

CustomerIDinteger
Required

The customer the project is for. Refers to CustomerRead.CustomerID. Look up valid values with GET /v1/customer. Valid values come from GET /v1/customer.

Format: int32
Descriptionstring

Free-text project description.

ProjectTemplateIDinteger
Required

The project template to copy. Refers to ProjectTemplateRead.ProjectTemplateID.

Format: int32
ProjectManagerIDinteger
Required

The project manager, as a USER ID. Must be an existing, active user; stored as that user's employee. Refers to UserRead.UserID. Look up valid values with GET /v1/user. Valid values come from GET /v1/user.

Format: int32
ProjectStartDatestring
Required

Project start date. Time zone: not yet documented. > Not yet documented: constraints → timezone.

Format: date-time
ProjectEndDatestring
Required

Project end date (stored as the contract end date, returned as ProjectRead.EndDate). Time zone: not yet documented. > Not yet documented: constraints → timezone.

Format: date-time
ProjectTypeIDinteger
Required

Project type. Refers to ProjectTypeRead.ProjectTypeID.

Format: int32
ProjectCategoryIDinteger

Project category; 0 = none. Refers to ProjectCategoryRead.ProjectCategoryID.

Format: int32
CurrencyIDinteger
Required

Project currency. The legal entity must have a standard price group in this currency (else 30097). Refers to CurrencyRead.CurrencyID. Look up valid values with GET /v1/currency/{status}. Valid values come from GET /v1/currency/{status}.

Format: int32
LegalEntityIDinteger

Legal entity of the project; 0 = the account's default legal entity. Refers to LegalEntityRead.LegalEntityID. Look up valid values with GET /v1/legal-entity. Default: 0 → default legal entity - 0 or omitted — GetDefaultLegalEntity() Valid values come from GET /v1/legal-entity.

Format: int32
DepartmentIDinteger

Handling department; 0 = the default department. Refers to DepartmentRead.DepartmentID. Look up valid values with GET /v1/department. Default: 0 → default department Valid values come from GET /v1/department.

Format: int32
AccountManagerIDintegernull

Account manager, as a USER ID (existing, active). Only used when the AccountManager feature is on. Refers to UserRead.UserID. Look up valid values with GET /v1/user. - Feature AccountManager is off — Set to none, not validated. Valid values come from GET /v1/user.

Format: int32
PartnerIDintegernull

Partner, as a USER ID (existing, active); stored as that user's EMPLOYEE. Only used when the Partner feature is on. Refers to UserRead.UserID. Look up valid values with GET /v1/user. - Feature Partner is off — Set to none, not validated. Valid values come from GET /v1/user.

Format: int32
ContactIDinteger

Customer contact of the project; 0 = none. A contact the lookup does not return is ignored. Refers to ContactRead.ContactID. > Not yet documented: description.

Format: int32
InvoicingCustomerReferenceIDintegernull

Customer reference on invoices: -1 = the project's contact; > 0 = this contact ID; null/0 = none. Refers to ContactRead.ContactID. Applied by create-from-template only; validate-create-from-template does not map it. > Not yet documented: description.

Format: int32
LanguageIDintegernull

Invoice language. Only used when the InvoiceMultilingual feature is on; null = the customer's default invoice language. - Any other value — Validation (400), even when the feature is off. - Feature InvoiceMultilingual is off — ignored - null and feature on — Customer's default invoice language. Allowed values: | Value | Name | Meaning | |---|---|---| | 1 | Danish | Invoices in Danish. | | 2 | English | Invoices in English. | | 4 | Swedish | Invoices in Swedish. | | 15 | Norwegian | Invoices in Norwegian. | | 16 | German | Invoices in German. | | 17 | Dutch | Invoices in Dutch. | | 18 | French | Invoices in French. |

Format: int32 • Options: 1, 2, 4, 15, 16, 17, 18
Request Preview
Response

Response will appear here after sending the request

Authentication

header
Authorizationstring
Required

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.

Body

application/json
Namestring
Required

Project name.

Not yet documented: constraints.

ProjectNostring

Project number. Empty or omitted = the template / auto-number value is kept.

Default: the number the template mapping produces

Not yet documented: default.

CustomerIDinteger
Required

The customer the project is for.

Refers to CustomerRead.CustomerID. Look up valid values with GET /v1/customer.

Valid values come from GET /v1/customer.

Descriptionstring

Free-text project description.

ProjectTemplateIDinteger
Required

The project template to copy.

Refers to ProjectTemplateRead.ProjectTemplateID.

ProjectManagerIDinteger
Required

The project manager, as a USER ID. Must be an existing, active user; stored as that user's employee.

Refers to UserRead.UserID. Look up valid values with GET /v1/user.

Valid values come from GET /v1/user.

ProjectStartDatestring
Required

Project start date.

Time zone: not yet documented.

Not yet documented: constraints → timezone.

ProjectEndDatestring
Required

Project end date (stored as the contract end date, returned as ProjectRead.EndDate).

Time zone: not yet documented.

Not yet documented: constraints → timezone.

ProjectTypeIDinteger
Required

Project type.

Refers to ProjectTypeRead.ProjectTypeID.

ProjectCategoryIDinteger

Project category; 0 = none.

Refers to ProjectCategoryRead.ProjectCategoryID.

CurrencyIDinteger
Required

Project currency. The legal entity must have a standard price group in this currency (else 30097).

Refers to CurrencyRead.CurrencyID. Look up valid values with GET /v1/currency/{status}.

Valid values come from GET /v1/currency/{status}.

LegalEntityIDinteger

Legal entity of the project; 0 = the account's default legal entity.

Refers to LegalEntityRead.LegalEntityID. Look up valid values with GET /v1/legal-entity.

Default: 0 → default legal entity

  • 0 or omitted — GetDefaultLegalEntity()

Valid values come from GET /v1/legal-entity.

DepartmentIDinteger

Handling department; 0 = the default department.

Refers to DepartmentRead.DepartmentID. Look up valid values with GET /v1/department.

Default: 0 → default department

Valid values come from GET /v1/department.

AccountManagerIDinteger,null

Account manager, as a USER ID (existing, active). Only used when the AccountManager feature is on.

Refers to UserRead.UserID. Look up valid values with GET /v1/user.

  • Feature AccountManager is off — Set to none, not validated.

Valid values come from GET /v1/user.

PartnerIDinteger,null

Partner, as a USER ID (existing, active); stored as that user's EMPLOYEE. Only used when the Partner feature is on.

Refers to UserRead.UserID. Look up valid values with GET /v1/user.

  • Feature Partner is off — Set to none, not validated.

Valid values come from GET /v1/user.

ContactIDinteger

Customer contact of the project; 0 = none. A contact the lookup does not return is ignored.

Refers to ContactRead.ContactID.

Not yet documented: description.

InvoicingCustomerReferenceIDinteger,null

Customer reference on invoices: -1 = the project's contact; > 0 = this contact ID; null/0 = none.

Refers to ContactRead.ContactID.

Applied by create-from-template only; validate-create-from-template does not map it.

Not yet documented: description.

LanguageIDinteger,null

Invoice language. Only used when the InvoiceMultilingual feature is on; null = the customer's default invoice language.

  • Any other value — Validation (400), even when the feature is off.

  • Feature InvoiceMultilingual is off — ignored

  • null and feature on — Customer's default invoice language.

Allowed values:

ValueNameMeaning
1DanishInvoices in Danish.
2EnglishInvoices in English.
4SwedishInvoices in Swedish.
15NorwegianInvoices in Norwegian.
16GermanInvoices in German.
17DutchInvoices in Dutch.
18FrenchInvoices in French.
Allowed values:12415161718

Responses

Success without content: HTTP 200 with the literal JSON body null. Literal JSON null — the body passes the checks.