ProjectsRe-raise the project-created events

Re-raise the project-created events

Raises TimeLog's "project created" domain events again for an existing project, so integrations pick the project up.

Re-emits EventTypes.ProjectCreate for the project — the event the TimeLog project create normally raises — and, when the project is available in Resource Planner, IsAvailableInResourcePlannerChecked. Everything subscribed to those events reacts as if the project had just been created: the audit log (when project audit logging is on), notification subscribers, the financial integrations that transfer projects (e-conomic, Business Central, generic financial, Fortnox, Uniconta, Björn Lundén, and the integration-service mediator), and the Resource Planner export. Answers 200 with null. It checks only that the project exists: NO project privilege and no guard against raising the events more than once.

Not for:

  • Integrators: this is an internal platform hook, not a 'resync project to ERP' operation — repeated calls replay the create to every subscriber
  • Creating a project → POST /v1/project/create-from-template

Behaviour:

  • Not idempotent.
  • Every call raises the events again; there is no record of a previous raise and no dedup.
  • Not safe to retry blindly. Each retry replays the create to every subscriber (audit log, notifications, financial project transfer, Resource Planner export).
  • Side effect: Logs a ProjectCreate event and, with the AuditLogProject setting, an audit-log entry 'project created' — again for an existing project.
  • Side effect: Financial integrations: the integration-service mediator publishes a project-transfer notification for accounts whose integration supports and has activated project transfer, then sleeps 2 s in the request thread; the legacy integration services (e-conomic, Business Central, generic financial, Fortnox, Uniconta, Björn Lundén) handle ProjectCreate with the same SaveProject path as ProjectUpdate when UseTransferProject is set.
  • Consistency: eventual
  • Mediator publish and Resource Planner export are started in the request; how fast the external systems apply them is not measured.

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

See also: POST /v1/project/create-from-template

Not yet documented: behaviour → consistency; behaviour → duplicate handling; behaviour → side effects; examples; purpose → use cases.

curl -X POST "https://app3.timelog.com/your-account/api/v1/project/123/raise-created-events" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_TOKEN"
"null"
POST
/v1/project/{projectID}/raise-created-events
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.
path
projectIDinteger
Required

Route constraint :int.

Format: int32
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

projectIDinteger
Required

Route constraint :int.

Responses

Success without content: HTTP 200 with the literal JSON body null. The literal null: the events were raised (handlers that run in the request have run).