MATCH API¶
janzz search¶
API endpoint to search for janzzs using another janzz
URL¶
https://www.janzz.jobs/japi/janzz_search/[janzz_id]
https://www.janzz.jobs/japi/janzz_search_internal/[internal_id]
ALLOWABLE METHODS¶
GET
PARAMETERS¶
start_at
format: integer
default value: 0
effect: start at for pagination
num_results
format: integer between 0 and 1000
default value: 100
effect: maximum number of results to return
filter_profile
format: string
default value: empty
effect: only show janzzes having only the matching Company profile name
status
format: integer, can me provided multiple times. 0:draft 1:published 3:withdrawn 4:paused
default value: empty, do not filter on status
effect: only show janzzes which have a status
include_tag
format: string
effect: only show janzzes which have this tag
multiple: repeating parameter will OR all tags together
include_tag_all
format: string
effect: only show janzzes which have this tag
multiple: repeating parameter will AND all tags together
exclude_tag
format: string
effect: only show janzzes which do not have this tag
multiple: repeating parameter will OR all tags together
grouped
format: boolean (true or 1 for true, anything else for false)
default: false
effect: only show the highest scored janzz from janzzes with the same group_key
ignore_glocations
format: boolean (true or 1 for true, anything else for false)
default value: false
effect: do not use the values in location_list when searching
ignore_slocations
format: boolean (true or 1 for true, anything else for false)
default value: false
effect: do not use the values in slocation_list when searching
include_empty_glocations
format: boolean (true or 1 for true, anything else for false)
default value: false
effect: when searching with location_set values, include results which have no locations set.
SAMPLE RESPONSE¶
{
"num_results": 3171,
"total_ungrouped": 4361,
"results": [{
"id": 584157,
"internal_id": "init_offer2",
"status": 1,
"janzz_type": 11,
"title": "job offer 2, czech teacher",
"language_captured": "en",
"score": 100
}]
}
RESPONSE FIELDS¶
results - matched results. A minimal list of fields of each janzz is provided. Retrieve the janzz by id or internal_id for full list of details.
num_results - number of results returned
total_ungrouped - same as num_results if grouped is not true, otherwise the total number of results before applying grouping
janzz search json¶
API endpoint to search using a janzz body, creating a temporary janzz when necessary. A hash of the json object will be created to check if a suitable janzz already exists in the system to use for matching.
URL¶
https://www.janzz.jobs/japi/janzz_search_json/
ALLOWABLE METHODS¶
POST
SAMPLE REQUEST BODY¶
The request body is the same as a janzz body. Only the fields relevant for matching will be used when creating the hash key. match_factor can be changed without creating a new janzz, as it will be set before performing the search.
Optionally, adding keyword to the JANZZ body will search for this text in the concept graph and add corresponding features to the JANZZ if the text is found.
example¶
{
"keyword": "french"
}
results in
{
"skill_list": ["French"],
"language_list": [{"language": "French", "proficiency": 1, "proficiency2": 1}]
}
PARAMETERS¶
All parameters are the same as for janzz_search
keyword_limit_used_concepts - boolean (true or 1 for true, anything else for false, default false) - When using keyword, you can limit searching the concepts to ones used in your account. Generally this should be left disabled because related concepts may be valuable in the search, even if the exact concept found has not been used.
SAMPLE RESPONSE¶
{
"num_results": 3171,
"total_ungrouped": 4361,
"janzz_id": 1545381,
"internal_id": "janzz-internal-095371a7bd009e43ce0ca5a6bce8c4d16abf70be",
"created": false,
"results": [{
"id": 584157,
"internal_id": "init_offer2",
"status": 1,
"janzz_type": 11,
"title": "job offer 2, czech teacher",
"language_captured": "en",
"score": 100
}]
}
RESPONSE FIELDS¶
results - matched results. A minimal list of fields of each janzz is provided. Retrieve the janzz by id or internal_id for full list of details.
num_results - number of results returned
total_ungrouped - same as num_results if grouped is not true, otherwise the total number of results before applying grouping
janzz_id - the ID of the janzz used for the search, can be used for match_explain
internal_id - the internal ID of the janzz used for search
created - whether or not a new janzz was created for this search
match explain janzz¶
API endpoint which describes how a match is made between two janzzs, janzz1 and janzz2
URL¶
https://www.janzz.jobs/japi/match_explain/
https://www.janzz.jobs/japi/match_explain_internal/
ALLOWABLE METHODS¶
GET
REQUEST PARAMETERS¶
janzz1 - the janzz id from which the search was initiated, or the internal_id if using _internal
janzz2 - the janzz from the search results, or the internal_id if using _internal
lang - The language in which to show the concept labels in the match description
simple - boolean (true or 1 for true, anything else for false) - Only include first occurrence of c1id in sorted _concepts_matched_ list
EXAMPLE¶
https://www.janzz.jobs/japi/match_explain/?janzz1=584160&janzz2=584157&lang=en
SAMPLE RESPONSE¶
{
"j2_not_matched": [{
"name": "Czech (Language)",
"id": 26471
}],
"concepts_matched": [{
"c2name": "Language Teacher",
"c2id": 20633,
"cor": 1.0,
"c1id": 20633,
"c1name": "Language Teacher"
}],
"j1_not_matched": [],
"j1_internal_comments": "",
"j2_internal_comments": ""
}
RESPONSE FIELDS¶
concepts_matched - list of concepts matched
c1id - searched concept id
c1name - searched concept best label
c2id - matched concept id
c2name - matched concept best label
cor - correlation between concept1 and concept2, from 0.0 to 1.0
j1_not_matched - list of janzz1 concepts which were not matched in janzz2
j2_not_matched - list of concepts from janzz2 which were not matched in janzz1
j1_internal_comments - internal comments for janzz1
j2_internal_comments - internal comments for janzz2
janzz search elastic¶
Searching endpoints similar to janzz_search_json and janzz_search, using an implementation based on Elastic Search which provides additional functionality over the other implementation.
- The main differences are:
allows JANZZs to be indexed with multiple occupations without a score penalty during search
must criteria on fields is respected
scoring is based only on what has been searched for
compound fields are handled better, like education (level + degree) and experience (time + profession)
explanation of result scores can be returned directly in the search results, with exact labels used in target janzz for each field.
it is possible to specify custom weights for each branch
grouping results by group_key is not possible anymore, but this feature was normally used when it was not ideal to use multiple occupations per JANZZ.
since explain=true with many results can slow down the response considerably, it is also possible to use explain=false, then repeat the exact same request with explain=true and limit_result=<janzz_id> for an explanation for that single result only.
URL¶
(append an _e to other janzz_search URLs)
https://www.janzz.jobs/japi/janzz_search_e/[janzz_id]
https://www.janzz.jobs/japi/janzz_search_internal_e/[internal_id]
https://www.janzz.jobs/japi/janzz_search_json_e/
ALLOWABLE METHODS¶
POST for json interface, GET for non-json interface
SAMPLE REQUEST BODY¶
The request body is the same as a janzz body. Only the fields relevant for matching will be used when creating the hash key. match_factor can be changed without creating a new janzz, as it will be set before performing the search.
PARAMETERS¶
start_at
format: integer
default value: 0
effect: start at for pagination
num_results
format: integer between 0 and 1000
default value: 100
effect: maximum number of results to return
filter_profile
format: string
default value: empty
effect: only show janzzes having only the matching Company profile name
status
format: integer, can me provided multiple times. 0:draft 1:published 3:withdrawn 4:paused
default value: empty, do not filter on status
effect: only show janzzes which have a status
include_tag
format: string
effect: only show janzzes which have this tag
multiple: repeating parameter will OR all tags together
include_tag_all
format: string
effect: only show janzzes which have this tag
multiple: repeating parameter will AND all tags together
exclude_tag
format: string
effect: only show janzzes which do not have this tag
multiple: repeating parameter will OR all tags together
highest_education_level_from, highest_education_level_to
format: integer
effect: only show janzzes which are indexed with highest_education_level in this range
valid values: an integer between 0 (no education) and 7 (PhD level)
total_experience_level_from, total_experience_level_to
format: integer
effect: only show janzzes which are indexed with total_experience_level in this range
valid values: an integer between 0 (no experience) and 17 (10+ years experience)
total_experience_months_from, total_experience_months_to
format: integer
effect: only show janzzes which are indexed with total_experience_years in this range of provided months/12.0
valid values: an integer between 0 (no experience) and 1000 (the maximum number of supported months, approximately 83 years)
explain
format: boolean (true or 1 for true, anything else for false)
default value: false
effect: explain all match results
limit_result
format: integer, the janzz ID of the result
default value: empty
effect: used in conjunction with explain=true, only return score and explanation for a single result
ignore_glocations
format: boolean (true or 1 for true, anything else for false)
default value: false
effect: do not use the values in location_list when searching
ignore_slocations
format: boolean (true or 1 for true, anything else for false)
default value: false
effect: do not use the values in slocation_list when searching
weight_<branch>
format: float from 0.0 - 99.9
default value: empty
effect: you may specify a weight for each branch, from the following list:
occupation
function
specialization
industry
authorization
skill
softskill
language
education
experience
If not provided, the default weights will be used, which may be dependent on the chosen occupation. A good base for this is weight_occupation=10 and weight_<everything else>=5
SAMPLE RESPONSE¶
{
"num_results": 3171,
"janzz_id": 1545381,
"internal_id": "janzz-internal-095371a7bd009e43ce0ca5a6bce8c4d16abf70be",
"created": false,
"results": [{
"id": 584157,
"internal_id": "init_offer2",
"status": 1,
"janzz_type": 11,
"title": "job offer 2, czech teacher",
"language_captured": "en",
"score": 100,
"explain": {}
}]
}
RESPONSE FIELDS¶
results - matched results. A minimal list of fields of each janzz is provided. Retrieve the janzz by id or internal_id for full list of details.
num_results - number of results returned
janzz_id - the ID of the janzz used for the search, can be used for match_explain
internal_id - the internal ID of the janzz used for search
created - whether or not a new janzz was created for this search
explain - when explain query parameter is used, each result will contain a score explanation in the following format:
{ "matched": {<branches>}, "not_matched_source": {<branches>}, "not_matched_target": {<branches>}, "extra": {<extra>} }
where branches are of the format:
<branch>: [ <field>, <field>, ... ]
where each field is of the format:
{ "score": 1.0, "type": "concept", "label_source": "Responsabilidad" "label_target": "Responsible", }
where type can be one of:
concept
highest_education_level
total_experience_level
The score is always a value from 0.0 to 1.0 (0-100%). Only scores in the matched fields are > 0.
In the following cases, label_source and label_target may be null:
not_matched_source: label_target will be null, since there is no matching field on the target side
not_matched_target: label_source will be null, since there is no matching field on the source side
type is highest_education_level or total_experience_level: label_source and label_target are both null, since this is not concept field
extra is of the format:
{ "total_experience_level": { "source": 2, "target": 6 }, "highest_education_level": { "source": 2, "target": 5 } }
source is null if no experience or education was searched for
target is null if the result has no experience or education set
total_experience_level adds up all experience in all units and normalizes it to a total value in years. The following mapping is then used:
1: <= 0.1y
2: <= 0.2y
3: <= 0.25y
4: <= 0.3y
5: <= 0.5y
6: <= 1y
7: <= 1.5y
8: <= 2y
9: <= 3y
10: <= 4y
11: <= 5y
12: <= 6y
13: <= 7y
14: <= 8y
15: <= 9y
16: <= 10y
17: > 10y
For example, total_experience_level 8 could be described as betweeen 1 1/2 and 2 years total experience.
highest_education_level collects the ‘level’ field in all education objects and takes the one having the highest value, where the values are integers representing the following:
0: No qualifications/No A-Level/No International Baccalaureate (IB)/No high school diploma
1: In training (e.g. school, college, apprenticeship, etc.), On-the-job training, Course, …
2: A Level/High School Diploma/International Baccalaureate (IB), University studies (not completed), …
3: Vocational qualification (e.g. Swiss Federal VET Diploma)
4: Certificate/Credentials/Diploma/Title, Higher vocational degree/Higher technical degree, …
5: Bachelor’s degree/University primary qualification/Undergraduate degree
6: Master’s degree/Postgraduate degree
7: Doctorate/PhD
These values are not a fixed list and can be translated into many languages. Multiple concepts can also represent the same level, therefore it is not possible to determine exactly the level used in the janzz.
Full example of match explain (for performance reasons, empty lists will be ommitted from the result):
{ "extra": { { "total_experience_level": { "source": 2, "target": 6 }, "highest_education_level": { "source": 2, "target": 5 } } }, "matched": { "function": [], "specialization": [], "language": [], "industry": [], "softskill": [{ "score": 1.0, "type": "concept", "label_target": "Responsable", "label_source": "Responsabilidad" }, { "score": 1.0, "type": "concept", "label_target": "Honesta", "label_source": "Honradez" }, { "score": 0.5, "type": "concept", "label_target": "Responsable", "label_source": "Seriedad" }, { "score": 1.0, "type": "concept", "label_target": "Relación interpersonal", "label_source": "Buen manejo de relaciones interpersonales" }], "custom": [], "experience": [{ "score": 1.0, "type": "total_experience_level", "label_target": null, "label_source": null }], "contract_type": [], "skill": [{ "score": 1.0, "type": "concept", "label_target": "Atencion y servicio a clientes", "label_source": "Atención a cliente" }], "education": [{ "score": 1.0, "type": "highest_education_level", "label_target": null, "label_source": null }], "authorization": [], "occupation": [{ "score": 0.5, "type": "concept", "label_target": "Mesero", "label_source": "Barman" }] }, "not_matched_source": { "function": [], "specialization": [], "language": [], "industry": [], "softskill": [{ "score": 0.0, "type": "concept", "label_target": null, "label_source": "Paciencia" }, { "score": 0.0, "type": "concept", "label_target": null, "label_source": "Agilidad" }, { "score": 0.0, "type": "concept", "label_target": null, "label_source": "Respeto" }, { "score": 0.0, "type": "concept", "label_target": null, "label_source": "Concentración" }, { "score": 0.0, "type": "concept", "label_target": null, "label_source": "Positivismo" }, { "score": 0.0, "type": "concept", "label_target": null, "label_source": "Buena memoria" }, { "score": 0.0, "type": "concept", "label_target": null, "label_source": "Amabilidad" }, { "score": 0.0, "type": "concept", "label_target": null, "label_source": "Objetividad" }], "custom": [], "experience": [], "contract_type": [], "skill": [], "education": [{ "score": 0.0, "type": "concept", "label_target": null, "label_source": "bachiller " }], "authorization": [], "occupation": [] }, "not_matched_target": { "function": [], "specialization": [], "language": [], "industry": [], "softskill": [{ "score": 0.0, "type": "concept", "label_target": "Puntual", "label_source": null }, { "score": 0.0, "type": "concept", "label_target": "Persuasión", "label_source": null }, { "score": 0.0, "type": "concept", "label_target": "Dinámica", "label_source": null }, { "score": 0.0, "type": "concept", "label_target": "Fluidez verbal", "label_source": null }, { "score": 0.0, "type": "concept", "label_target": "Agil", "label_source": null }, { "score": 0.0, "type": "concept", "label_target": "Líder", "label_source": null }], "custom": [], "experience": [{ "score": 0.0, "type": "concept", "label_target": "Administrador punto de venta", "label_source": null }, { "score": 0.0, "type": "concept", "label_target": "Mesero", "label_source": null }], "contract_type": [], "skill": [{ "score": 0.0, "type": "concept", "label_target": "Manejo de caja", "label_source": null }, { "score": 0.0, "type": "concept", "label_target": "Manejo de dinero", "label_source": null }], "education": [{ "score": 0.0, "type": "concept", "label_target": "Abogado", "label_source": null }], "authorization": [], "occupation": [{ "score": 0.0, "type": "concept", "label_target": "Asistente de abogado", "label_source": null }, { "score": 0.0, "type": "concept", "label_target": "Cajero", "label_source": null }, { "score": 0.0, "type": "concept", "label_target": "Asistente de juzgado", "label_source": null }, { "score": 0.0, "type": "concept", "label_target": "Auxiliar de salas de cine", "label_source": null }] } }
occupation correlations¶
API endpoint to display correlation between janzz’s occupation and the “position” fields of its experience
URL¶
https://www.janzz.jobs/japi/occupation_correlations/{id}
https://www.janzz.jobs/japi/occupation_correlations_internal/{id}
ALLOWABLE METHODS¶
GET
SAMPLE RESPONSE¶
{
"occupation": {
"label": "Rengjøringshjelp (bedrift)",
"cid": 20477
},
"correlations": [
{
"cor": 1,
"best_label": "Renholdsarbeider (bedrift)",
"cid": 20477
},
{
"cor": 0.15,
"best_label": "Hjelpearbeider (industri)",
"cid": 153637
}
],
"max_correlation": 1
}
RESPONSE FIELDS¶
occupation - details about the concept corresponding to the janzz occupation
correlations - list of concepts corresponding to “position” field of a janzz and their correlation to the occupation
max_correlation - helper which shows the maximum correlation in the results, or 0 if no correlations are found
concept search - DEPRECATED¶
API endpoint to search for janzzs using concept labels. This endpoint has been deprecated and replaced by janzz search json.
URL¶
https://www.janzz.jobs/japi/concept_search
match explain concepts - DEPRECATED¶
API endpoint which describes how a match is made given a list of concepts which were searched for. This endpoint has been deprecated. The janzz search json endpoint returns a janzz id which can be used for match explain.
URL¶
https://www.janzz.jobs/japi/match_explain_concept/