ProjectsChange a project's status

Change a project's status

Moves a project to another status (Quote … Cancelled) and sets whether time can be registered on it.

Sets the project status and its status date (today), opens or closes the project for time registration (InProgress opens, OnHold / Completed / Archived / Cancelled close, Quote / Approved follow AllowTimeTracking), and when closing (Completed, Archived, Cancelled) also completes the open milestones and moves every contract to Completed (Cancelled for Cancelled). Re-opening the project does NOT re-open contracts. Always send ProjectStatus: an omitted value is 0 = Quote. Answers 200 with null.

Use it to:

  • Close a project from an ERP when the engagement ends
  • Open a won quote for time registration (Approved + AllowTimeTracking, or InProgress)

Rules across fields:

  • R1: AllowTimeTracking is used only with ProjectStatus 0 (Quote) or 1 (Approved).

Behaviour:

  • Idempotent.
  • Safe to retry. Same body → same status; the status date is reset to today and ProjectStatusChanged is raised again.
  • Side effect: Saves the project status units (status date = today), writes the status (DAO.UpdateOrderStatus) and notifies running time trackers of the status change.
  • Side effect: Sets OpenForTimeRegistration; on Completed / Archived / Cancelled completes open milestones and changes every open contract to Completed / Cancelled.
  • On failure: The status write happens inside ChangeOrderStatus, before the project save; a failure in the save leaves the new status written.
  • Changes are visible to the next read immediately.

Call first: GET /v1/project/{projectID}

See also: PUT /v1/project/{projectID}

Not yet documented: errors.

curl -X PUT "https://app3.timelog.com/your-account/api/v1/project/123/status" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -d '{
  "ProjectStatus": 42,
  "AllowTimeTracking": true
}'
"null"
PUT
/v1/project/{projectID}/status
PUT
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.
path
projectIDinteger
Required

The project.

Format: int32
Content-Typestring
Required

The media type of the request body

Options: application/json
ProjectStatusinteger

The new status. Omitted = 0 = Quote: the validator's NotNull cannot fail on a non-nullable enum, so an empty body moves the project to Quote. - Not one of 0–6 — 400 "ProjectStatus must be 0 = Quote or 1 = Approved or …" - Omitted — 0 = Quote is applied. Allowed values: | Value | Name | Meaning | |---|---|---| | 0 | Quote | Quote. Time registration open = AllowTimeTracking. | | 1 | Approved | Approved. Time registration open = AllowTimeTracking. | | 2 | InProgress | In progress. Time registration is opened (AllowTimeTracking ignored). | | 3 | OnHold | On hold. Time registration is closed. | | 4 | Completed | Completed. Time registration is closed; rejected (37969) when an MCP contract uses the system customer. | | 5 | Archived | Archived. Time registration is closed. | | 6 | Cancelled | Cancelled. Time registration is closed. |

Format: int32 • Options: 0, 1, 2, 3, 4, 5, 6
AllowTimeTrackingboolean

Whether the project is open for time registration. Used only when ProjectStatus is Quote or Approved; every other status sets it itself. - ProjectStatus is InProgress, OnHold, Completed, Archived or Cancelled — ignored - Omitted with Quote/Approved — false — the project is closed for time registration.

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.

Path Parameters

Body

application/json
ProjectStatusinteger

The new status. Omitted = 0 = Quote: the validator's NotNull cannot fail on a non-nullable enum, so an empty body moves the project to Quote.

  • Not one of 0–6 — 400 "ProjectStatus must be 0 = Quote or 1 = Approved or …"

  • Omitted — 0 = Quote is applied.

Allowed values:

ValueNameMeaning
0QuoteQuote. Time registration open = AllowTimeTracking.
1ApprovedApproved. Time registration open = AllowTimeTracking.
2InProgressIn progress. Time registration is opened (AllowTimeTracking ignored).
3OnHoldOn hold. Time registration is closed.
4CompletedCompleted. Time registration is closed; rejected (37969) when an MCP contract uses the system customer.
5ArchivedArchived. Time registration is closed.
6CancelledCancelled. Time registration is closed.
Allowed values:0123456
AllowTimeTrackingboolean

Whether the project is open for time registration. Used only when ProjectStatus is Quote or Approved; every other status sets it itself.

  • ProjectStatus is InProgress, OnHold, Completed, Archived or Cancelled — ignored

  • Omitted with Quote/Approved — false — the project is closed for time registration.

Responses

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