EmployeeGive an employee a competence

Give an employee a competence

Adds one competence with a value (rating) to one employee.

Creates the employee-competence row (employee, competence, value). The caller needs the Employee skills create/edit privilege covering that employee. The response is the literal null — the new employee-competence ID is NOT returned; read it back with GET /v2/employee-competences?userId=. For several competences at once, prefer the batch create, which skips existing pairs instead of failing.

Use it to:

  • Record a newly acquired skill for an employee

Not for:

  • Changing the value of a competence the employee already has — PUT /v2/employee-competences
  • Several competences in one call — POST /v2/employee-competences/bulk

Rules across fields:

  • R1: The (UserId, CompetenceId) pair must not exist yet.

Behaviour:

  • Not idempotent.
  • Safe to retry only under a condition. A retry after a lost success fails with 500 Code 100 (unique constraint) — check with GET before retrying.
  • Changes are visible to the next read immediately.

Call first: GET /v1/user, GET /v2/employee-competences/available

Next: GET /v2/employee-competences

See also: POST /v2/employee-competences/bulk

Not yet documented: errors; examples.

curl -X POST "https://app3.timelog.com/your-account/api/v2/employee-competences" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -d '{
  "UserId": 123,
  "CompetenceId": 123,
  "Value": 42
}'
"null"
POST
/v2/employee-competences
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
UserIdinteger
Required

UserID of the employee who gets the competence. Can be set on create only. Refers to UserRead.UserID. Look up valid values with GET /v1/user. - Missing, 0 or not an existing user — 500 Code 102 / 37040 (captured for a missing value). - User deactivated — 500 Code 102 / 37931. - Caller has no Employee skills privilege covering this employee — 500 Code 102 / 38015.

Format: int32
CompetenceIdinteger
Required

ID of the competence to give (GET /v2/employee-competences/available lists the ones the employee does not have yet). Can be set on create only. Refers to CompetenceRead.Id. Look up valid values with GET /v2/employee-competences/available. - Not checked earlier. - The employee already has this competence — Unique constraint (UserID, CompetenceID) → 500 Code 100. Use PUT to change the value. - Competence is inactive — Not checked: an inactive competence can be given (the 'available' list hides inactive ones). > Not yet documented: behaviour.

Format: int32
Valueinteger

The employee's value (rating) for the competence. Stored as given; the scale is not defined in the API (see EmployeeCompetenceItemRead.Value). Can be set on create only. Contains personal data. - Omitted — Binds as 0 and is stored as 0. - No range rule in the API. > Not yet documented: behaviour.

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.

Body

application/json
UserIdinteger
Required

UserID of the employee who gets the competence.

Can be set on create only.

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

  • Missing, 0 or not an existing user — 500 Code 102 / 37040 (captured for a missing value).

  • User deactivated — 500 Code 102 / 37931.

  • Caller has no Employee skills privilege covering this employee — 500 Code 102 / 38015.

CompetenceIdinteger
Required

ID of the competence to give (GET /v2/employee-competences/available lists the ones the employee does not have yet).

Can be set on create only.

Refers to CompetenceRead.Id. Look up valid values with GET /v2/employee-competences/available.

  • Not checked earlier.

  • The employee already has this competence — Unique constraint (UserID, CompetenceID) → 500 Code 100. Use PUT to change the value.

  • Competence is inactive — Not checked: an inactive competence can be given (the 'available' list hides inactive ones).

Not yet documented: behaviour.

Valueinteger

The employee's value (rating) for the competence. Stored as given; the scale is not defined in the API (see EmployeeCompetenceItemRead.Value).

Can be set on create only.

Contains personal data.

  • Omitted — Binds as 0 and is stored as 0.

  • No range rule in the API.

Not yet documented: behaviour.

Responses

*Success without content: HTTP 200 with the literal JSON body null. Literal JSON null (TafSuccessResult).

Order: none

Empty result: none*