JANZZ API

list

API endpoint to display all JANZZs in account.

URL

https://www.janzz.jobs/japi/janzz

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
  • janzz_type
    • format: one of 10, 11
    • default value: empty
    • effect: if set, filter only janzzes of this type
  • status
    • format: 0:draft 1:published 3:withdrawn 4:paused
    • default value: empty
    • multiple: repeat parameter for multiple status values
    • effect: if set, filter only janzzes having this status
  • include_tag
    • format: string
    • multiple: repeating parameter will OR all tags together
    • effect: if set, filter only janzzes having any of these tags
  • include_tag_all
    • format: string
    • multiple: repeating parameter will AND all tags together
    • effect: if set, filter only janzzes having ALL of these tags
  • exclude_tag
    • format: string
    • multiple: repeating parameter will OR all tags together
    • effect: if set, filter only janzzes not having any of these tags

returns

list of janzz objects

retrieve / modify

API endpoint to retrive, create, modify or delete a JANZZ from the current account.

URL

using JANZZ.jobs janzz id:

https://www.janzz.jobs/japi/janzz/{id}

using an externally managed ID:

https://www.janzz.jobs/japi/janzz_internal/{id}

ALLOWABLE METHODS

GET, PUT, POST, PATCH, DELETE

parameters

  • noindex
    • format: 1, true to indicate true
    • default value: empty
    • effect: optional parameter to disable indexing on the saved JANZZ for performance reasons. Indexing will have to be called explicitly with an index call either on the newly returned JANZZ or on all or new JANZZs.

janzz format

The JANZZ contents has the following format:

{
    "id": 584156,
    "internal_id": "123-1",
    "group_key": 123,
    "status": 1,
    "internal_comments": "these are the internal comments\nmultiline",
    "description": "the description of the JANZZ",
    "janzz_type": 11,
    "language_captured": "en",
    "title": "test",
    "match_factor": 10,
    "occupation": "Engineer",
    "occupation_list": [],
    "specialization_list": [{
        "specialization": "printed circuit technology",
        "must": false
    }, {
        "specialization": "Multimedia",
        "must": true
    }],
    "function_list": ["Junior Developer"],
    "skill_list": [{
        "skill": "Soil and plants",
        "must": false,
        "level": 3
    }, {
        "skill": "Gardening",
        "must": true,
        "level": 5
    }],
    "softskill_list": [{
        "skill": "Friendliness",
        "must": false,
        "level": 3
    }, {
        "skill": "Punctuality",
        "must": false,
        "level": 3
    }],
    "custom_list": [{
        "text": "custom_concept_1",
        "weight": 1.5
    }, {
        "text": "custom_concept_2",
        "weight": 0.1
    }],
    "contract_type_list": ["Full-time"],
    "language_list": [{
        "proficiency": 1,
        "name": "English",
        "proficiency2": 1
    }, {
        "proficiency": 5,
        "name": "French",
        "proficiency2": 5
    }],
    "industry_list": ["Banking, financial services and financial management"],
    "location_list": [{
        "lat": 47.424482,
        "r": 30.0,
        "name": "St Gallen, Switzerland",
        "cc": "ch",
        "type": "locality",
        "lon": 9.376717
    }, {
        "lat": 46.227638,
        "r": 0.0,
        "name": "France",
        "cc": "fr",
        "type": "country",
        "lon": 2.213749
    }],
    "slocation_list": [{
        "code": "NO06.0633",
        "label": "Nore og Uvdal"
    }, {
        "code": "NO18",
        "label": "Nordland"
    }],
    "education_list": [{
          "profession": null,
          "degree": null,
          "level": "Bachelor's degree/University primary qualification"
      }, {
          "profession": "Mechanic",
          "degree": "Mathematics with Management",
          "level": "On-the-job training"
    }],
    "experience_list": [{
        "position": "experience description",
        "value": 5.0,
        "unit": 1
    }],
    "keyword_list": [{
        "text": "kw1",
        "has": true
    }, {
        "text": "kw2",
        "has": false
    }],
    "tag_list": [{
        "tag": "tag1"
    }, {
        "tag": "tag2"
    }],
    "occupation_exclude_list": [{
        "text": "test engineer",
        "cor": 0.8
    }, {
        "text": "painter",
        "cor": 0.5
    }],
    "concept_filter_list": [
        {
            "branch": "location_no",
            "text": "Hedmark",
            "include_up": true,
            "include_down": true
        }
    ],
    "authorization_list": [
        {
            "text": "Authorization Animal Health",
            "must": false
        }
    ]
}

Minimal JANZZ

A new JANZZ must have the following minimal set of fields:

{
    "janzz_type": 11,
    "language_captured": "en",
    "match_factor": 10,
    "contract_type_list": ["Full-time"]
}

Description of the fields

  • id:

    7197
    
    • Assigned by JANZZ, used in the URL to access JANZZ
  • internal_id:

    "123"
    
    • Assigned externally, can be used in the URL to access JANZZ
  • group_key:

    123
    
    • format: bigint or null
    • Advanced feature - use very carefully!
    • When multiple janzzes are created for a single profile, use the group_key to group search results by this key.
    • example: profile 123-1, 123-2, 123-3. group_key: 123. Then use ?grouped=true in the search to return only the janzz having the highest score from this group.
  • status:

    1
    
    • Status of a the janzz. 0:draft 1:published 3:withdrawn 4:paused
    • can be used for filtering search results
    • default when not provided is 0
  • description:

    "the description of the JANZZ"
    
  • janzz_type:

    11
    
    • 10=candidate profile, 11=job offer
    • required when creating a JANZZ
  • title:

    "test"
    
    • the title of the janzz
  • language_captured:

    "en"
    
    • the language of the janzz
    • certain fields like contract type, education, language must be in this language. This is required when creating a new JANZZ and cannot be changed after.
    • required when creating a JANZZ
  • match_factor:

    10
    
    • don’t show results lower than 10%
    • required when creating a JANZZ
  • occupation:

    "Engineer"
    
    • the occupation - most important field in the janzz
  • occupation_list:

    []
    
    • not used at the moment, possibility to have multiple occupations
  • occupation_exclude_list:

    [{
          "text": "test engineer",
          "cor": 0.8
      }, {
          "text": "painter",
          "cor": 0.5
    }]
    
    • list of occupations to exclude from search results.
    • cor refers to the minimum correlation for other related concepts to be excluded. For example, painter with cor 0.5 will also exclude “vehicle painter” because it has a correlation higher than 0.5. Cor 1.0 means only exclude this occupation and all others which are identical to this one.
    • any JANZZ in the results having any of these concepts will be excluded.
  • specialization_list:

    [{
        "specialization": "printed circuit technology",
        "must": false
    }, {
        "specialization": "Multimedia",
        "must": true
    }]
    
    • list of terms in the specialization branch
    • must denotes that this value is very important
  • function_list:

    [
          "Junior Developer"
    ]
    
    • list of terms in the function branch
  • skill_list:

    [{
        "skill": "Soil and plants",
        "must": false,
        "level": 3
    }, {
        "skill": "Gardening",
        "must": true,
        "level": 5
    }]
    
    • skill term from skills branch
    • level from 1(beginner) to 5(expert)
    • must denotes that this value is very important
  • softskill_list:

    [{
        "skill": "Friendliness",
        "must": false,
        "level": 3
    }, {
        "skill": "Punctuality",
        "must": false,
        "level": 3
    }]
    
    • skill term from softskills branch
    • level from 1(beginner) to 5(expert)
    • must denotes that this value is very important
  • contract_type_list:

    [
          "Full-time"
    ]
    
    • term from contract types branch
    • required when creating a JANZZ
  • language_list:

    [
      {
          "proficiency": 1,
          "name": "English",
          "proficiency2": 1
      },
      {
          "proficiency": 3,
          "name": "French",
          "proficiency2": 4
      }
    ]
    
    • proficiency: oral proficiency from 1 (perfect) to 5 (basic)
    • proficiency2: written proficiency from 1 (perfect) to 5 (basic)
    • name: name of language, must be in the language of the janzz
  • industry_list:

    ["Banking, financial services and financial management"]
    
    • list of terms from the industries branch, must be in language of the janzz
  • location_list:

    [
      {
          "lat": 47.424482,
          "r": 30.0,
          "name": "St Gallen, Switzerland",
          "cc": "ch",
          "type": "locality",
          "lon": 9.376717
      }
    ]
    
    • lat: latitude
    • lon: longitude
    • r: radius in km, use 0.0 or 0.3 for a point without a radius.
    • name: name of location (for display only)
    • cc: country code (ch, de, no, etc.)
    • type: one of locality, country
  • slocation_list:

    [{
      "code": "NO06.0633",
      "label": "Nore og Uvdal"
    }, {
      "code": "NO18",
      "label": "Nordland"
    }],
    
    • slocation, or “simple location” is a simple code-based substring location matching tool. It filters janzzes matching more specific and more general codes. For example, NO18 will match all janzzes having NO, NO18, NO18*.
    • code: the code to be matched, must be spelled correctly, case sensitive
    • label: the label, only for displaying purposes, not used for filtering
  • education_list:

    [{
      "profession": null,
      "degree": null,
      "level": "Bachelor's degree/University primary qualification"
    }, {
      "profession": "Mechanic",
      "degree": "Mathematics with Management",
      "level": "On-the-job training"
    }]
    
    • list of objects with the following fields:

      • level: must be in language of janzz, must exist in education branch. Example URL for list of all education levels

        https://www.janzz.jobs/japi/concepts?branch=education&lang=en&q=*
        
      • degree: Optional, the degree of the education object, using typeahead from branch education2, but new values can be entered. This will be indexed and it affects matching.

      • profession: Optional, a description of this education or a profession related to the education. This does not affect matching.

  • experience_list:

    [{
      "position": "experience description",
      "value": 5.0,
      "unit": 1
    }]
    
    • position: description of experience, free text
    • value: number of years/months/days/hours
    • unit: one of 1:years, 2:months, 3:days, 4:hours
    • Experience is aggregated into a single experience_level concept in the matching engine
  • keyword_list:

    [{
        "text": "kw1",
        "has": true
    }, {
        "text": "kw2",
        "has": false
    }]
    
    • can be used to filter results by keywords, either having or not having certain keywords. These keywords affect janzz matching.
  • tag_list:

    [{
        "tag": "tag1"
    }, {
        "tag": "tag2"
    }]
    
    • can be used to filter results by tags. Unlike keywords, tags do not affect janzz matching and they can be provided in a janzz search query as GET parameters are query time.
  • custom_list:

    [{
        "text": "custom_concept_1",
        "weight": 1.5
    }, {
        "text": "custom_concept_2",
        "weight": 0.1
    }]
    
    • custom concepts, these will generate a concept in the custom branch, if it does not already exist.
    • examples can be things like a classification code+value, like ISCO-08:123
  • concept_filter_list:

    [{
        "branch": "location_no",
        "text": "Hedmark",
        "include_up": true,
        "include_down": true
    }]
    
    • used to apply filters on janzz results using concepts without influencing matching scores.
    • For example, location_no contains a structured list of all regions and cities in Norway.
    • include_up: also include results having concepts within the same branch which are ancestors of provided filter
    • include_down: also include results having concepts within the same branch which are descendants of provided filter
  • authorization_list:

    [{
        "text": "Authorization Animal Health",
        "must": false
    }]
    
    • text term from authorization branch
    • must denotes that this value is very important

The following need to match labels exactly as in the concept graph for the JANZZ to work: - contract_type_list - language_list - education_list - industry_list

bulk update

API endpoint to create and modify janzzes in batches of up to 500.

URL

https://www.janzz.jobs/japi/janzz_bulk_update_internal/

ALLOWABLE METHODS

POST

parameters

  • noindex
    • format: 1, true to indicate true
    • default value: empty
    • effect: optional parameter to disable indexing on the saved JANZZ for performance reasons. Indexing will have to be called explicitly with an index call either on the newly returned JANZZ or on all or new JANZZs.
  • want_internal_id
    • format: 1, true to indicate true
    • default value: empty
    • effect: optional parameter to return the provided internal_id with every record in the response.

batch format

The batch has the following format:

[
  {
      "internal_id": "123-1",
      "group_key": 123,
      "janzz_type": 11,
      ...
  },
  {
    ...
  }, ...
]

Mandatory JANZZ fields

  • internal_id: Besides the usual mandatory fields of a JANZZ, internal_id is required for each janzz

Return format

{
  "indexed": false,
  "updated": 423,
  "created": 30,
  "skipped": 20,
  "results": [
      {
          "action": "UPDATE",
          "errors": {
              "education_list": [
                  "Invalid education level"
              ]
          },
          "janzz_id": 1747,
          "success": false
      },
      {
          "action": "CREATE",
          "errors": {
              "contract_type_list": [
                  "Invalid contract type"
              ]
          },
          "janzz_id": null,
          "success": false
      },
      {
          "action": "SKIP_DUPLICATE",
          "errors": {},
          "janzz_id": null,
          "success": true
      },
      {
          "action": "UPDATE",
          "errors": {},
          "janzz_id": 1748,
          "success": true
      },
      {
          "action": "UPDATE",
          "errors": {},
          "janzz_id": 1749,
          "success": true
      },
      .....
  • results: One entry for each submitted row in the batch with success true/false and the errors encountered.
  • If there are duplicate internal_id values in the batch, only the last one will be processed. The previous ones are skipped, even if the processing of the last one returns an error.

bulk delete

API endpoint to delete janzzes in batches of up to 500.

URL

https://www.janzz.jobs/japi/janzz_bulk_delete_internal/

ALLOWABLE METHODS

POST

batch format

The batch has the following format:

[
  {
      "internal_id": "123-1",
  },
  {
      "group_key": 101010,
  }, ...
]

Mandatory fields

  • either internal_id or group_key can be provided for each item in the list

Return format

{
  "deleted": [
    {
      "group_key": 101010,
      "internal_id": "100batch_create1",
      "id": 4552
    },
  ],
  "internal_ids_not_found": [
    "100batch_create5"
  ],
  "skipped": [
    {
      "group_key": 101010,
      "msg": "Janzz is being updated/deleted in another batch, will skip",
      "id": 4629,
      "internal_id": "100batch_create2"
    },
    {
      "group_key": 101010,
      "msg": "Janzz is being updated/deleted in another batch, will skip",
      "id": 4630,
      "internal_id": "100batch_create3"
    }
  ],
  "group_keys_not_found": [
    "group-key-123",
  ]
}
  • results: object containing lists of deleted, skipped, and not-found. JANZZs may be skipped if they are locked by another process.

index

API endpoint to reindex JANZZs for account (map JANZZ to concepts)

URLS

https://www.janzz.jobs/japi/janzz_index_new/
https://www.janzz.jobs/japi/janzz_index_all/
https://www.janzz.jobs/japi/janzz_index/{id}
https://www.janzz.jobs/japi/janzz_index_internal/{id}

returns

success message