Note: The TIE API is currently a proprietary Trendence service. Parts of the TIE system are available as a Trendence product — see the Trendence API documentation for details. We’re planning to open the data source interface for generic REST APIs in a future version.
The TIE (Talent Intelligence Engine) is Trendence’s labour market intelligence system. We use TIE to power TREVL visualizations with real-time data on salaries, skills, vacancies, and more. The TIE data source connects TREVL components to the TIE REST API — unlike Cube queries, TIE components use API endpoints and a different reference syntax.
Enabling TIE
Add api: tie to your component. This switches from the default Cube data source to the TIE REST API.
id: salary-chart
type: chart
api: tie
api-parameters:
profession:
id: "43104"
taxonomy: kldb
location:
country: DE
time:
start_month_offset: -12
end_month_offset: 0
highchartsData:
series:
- data:
y: "$salary.data.q50"
Reference Syntax
TIE uses a structured $-reference syntax with three levels: endpoint, scope, and field.
Standard form
$endpoint.data.field # row data
$endpoint.meta.field # response metadata
Examples:
y: "$salary.data.q50" # salary quantile from row
name: "$hard-skills.data.label" # skill name from row
total: "$vacancies-count.meta.total_results" # total from metadata
Resource-qualified form
When accessing endpoints outside the default professions resource, prefix with the resource name:
$resource.endpoint.data.field
$resource.endpoint.meta.field
Examples:
y: "$professions.salary.data.q50" # explicit professions resource
y: "$surveys.option-distribution.data.share" # surveys resource
The resource qualifier is optional for professions endpoints — $salary.data.q50 and $professions.salary.data.q50 are equivalent.
Known resources
| Resource | Base path | Description |
|---|---|---|
professions |
/api/v1/professions/ |
Labour market data per profession (default) |
surveys |
/api/v1/surveys/ |
Survey response analytics |
Legacy form
For backward compatibility, the legacy short form still works:
y: "$salary.q50" # equivalent to $salary.data.q50
api-parameters
The api-parameters section defines what gets sent in the POST body to the TIE API. Only parameters you explicitly define are sent — there are no implicit defaults except profession.
api-parameters:
profession:
id: "43104"
taxonomy: kldb
location:
country: DE
time:
start_month_offset: -12
end_month_offset: 0
language: de
limit: 25
threshold: 0.6
Parameter reference
| Parameter | Type | Description |
|---|---|---|
profession |
object | {id, taxonomy} — required for most endpoints. Falls back to {id: "43104", taxonomy: "kldb"} if omitted |
location |
object | {country, region?, city?} — geographic filter |
time |
object | {start_month_offset, end_month_offset} or {month_offset} — time range |
language |
string | "de" or "en" — response language |
limit |
integer | Maximum number of results |
offset |
integer | Pagination offset |
threshold |
float | Minimum similarity threshold (0.0–1.0) |
aggregate_time |
boolean | Aggregate across time periods |
Important: StrictModel validation
TIE endpoints use strict request validation. Sending a parameter that an endpoint does not accept will result in an HTTP 422 error. Only include parameters that the specific endpoint supports.
For example, hard-skills accepts profession, language, limit, threshold but not location or time. If you add location to the api-parameters, the request will fail.
Runtime parameter overrides
When a component is rendered in the context of a specific profession (e.g., on the REKO profession detail page), the param_override is merged into the api-parameters:
# The controller provides:
{param_override: {profession: {id: "43104", taxonomy: "kldb"}}}
This overrides the profession in api-parameters, so the same component works for any profession.
Professions Endpoints
These endpoints live under /api/v1/professions/.
Attribute endpoints
Flat list endpoints that return skills, tools, and responsibilities.
| Endpoint | Accepts | Returns |
|---|---|---|
hard-skills |
profession, language, limit, threshold | [{id, label, similarity}] |
soft-skills |
profession, language, limit, threshold, time | [{skill, value}] |
tools |
profession, language, limit, threshold | [{tool, value}] |
responsibilities |
profession, language, limit, threshold | [{responsibility, value}] |
Example:
id: hard-skills-table
type: table
api: tie
api-parameters:
limit: 16
threshold: 0.6
language: de
tableData:
columns:
- value: "$hard-skills.data.label"
identifier: skill
headers:
- name: "Fachliche Kompetenz"
Market intelligence endpoints
Time-series endpoints for salary, scarcity, and vacancy data.
| Endpoint | Accepts | Returns |
|---|---|---|
salary |
profession, location, time | [{date, salary_quantiles: {q10..q90}}] |
scarcity |
profession, location, time | [{date, scarcity_index, ...}] |
vacancies-count |
profession, location, time, threshold, aggregate_time | [{date, vacancies}] |
jobseekers-count |
profession, location, time | [{date, jobseekers}] |
vacancies-jobseekers-ratio |
profession, location, time | [{date, vacancies, jobseekers, ratio}] |
Example:
id: vacancies-count-line
type: chart
api: tie
api-parameters:
profession:
id: "43104"
taxonomy: kldb
location:
country: DE
time:
start_month_offset: -12
end_month_offset: 0
highchartsData:
chart:
type: line
series:
- name: "Stellenangebote"
data:
x: "$vacancies-count.data.date"
y: "$vacancies-count.data.vacancies"
Vacancy distribution endpoints
| Endpoint | Accepts | Returns |
|---|---|---|
vacancies |
profession, location, threshold, limit, offset | [{vacancy_title, organization_name, ...}] |
vacancy-sources |
profession, location, time, aggregate_time, limit | [{sources: [{source, count, share}]}] |
vacancy-employers |
profession, location, time, aggregate_time, limit | [{employers: [{employer, count, share}]}] |
vacancy-industries |
profession, location, time, language, aggregate_time, limit | [{industries: [...]}] |
Reference data endpoints
| Endpoint | Accepts | Returns |
|---|---|---|
countries |
language, limit, offset | [{id, value}] |
regions |
language, limit, offset, country | [{id, value}] |
cities |
language, limit, offset, country | [{id, value}] |
Surveys Endpoints
Surveys endpoints live under /api/v1/surveys/ and require a survey_id path parameter.
option-distribution
Returns answer distribution for a specific survey question.
id: survey-question
type: table
api: tie
api-parameters:
survey_id: "hrm"
question_key: "Q-1"
time:
month_offset: 0
limit: 20
tableData:
columns:
- value: "$surveys.option-distribution.data.option"
identifier: option
- value: "$surveys.option-distribution.data.share"
identifier: share
headers:
- name: "Antwort"
- name: "Anteil"
The survey_id is extracted from api-parameters and placed in the URL path: /api/v1/surveys/{survey_id}/option-distribution. It is not sent in the POST body.
Accepted parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
survey_id |
string | yes | Survey identifier (used in URL path) |
question_key |
string | yes | Question identifier |
time |
object | no | {month_offset} or {start_date, end_date} |
location |
object | no | {country?, region?, city?} |
profession |
object | no | {id, taxonomy} |
filters |
object | no | Additional key-value filters |
limit |
integer | no | Max results (1-100, default 20) |
Postprocess with TIE data
TIE components can use postprocess just like Cube components. The $result variable contains the fetched rows.
postprocess: |-
if ($result.length === 0) { $result = []; } else {
var last = $result[$result.length - 1];
var sq = last.salary_quantiles;
$result = ["q10","q25","q50","q75","q90"].map(function(p) {
return {percentile: p, salary: sq[p]};
});
}
Always guard against empty data — TIE may return no results for certain professions or parameters.
Computed fields with TIE data
Computed fields work the same way as with Cube data. Arguments can reference TIE $endpoint.data.* and $endpoint.meta.*:
computed:
- name: share_percent
arguments:
raw_share: "$hard-skills.data.similarity"
code: "raw_share * 100"
Allowed endpoints
TIE endpoints must be explicitly allowed in the TIE_ALLOWED_ENDPOINTS environment variable. The format supports resource-qualified entries:
TIE_ALLOWED_ENDPOINTS=salary,hard-skills,surveys:option-distribution
Unqualified entries default to the professions resource. Use resource:endpoint for other resources.