REST API for ontavio career platforms

Job import specifications

Table of contents

  1. General API Usage Information
  2. Job offer
  3. Company Data
    1. Contact Persons
    2. Locations
    3. Company Uploads
    4. Default Company Benefits
    5. Company Job Boards
  4. Routes For General Information
    1. Categories
    2. HTML-Tags
  5. Object structure
    1. Offer Description
    2. Contact Person
    3. Location
    4. Uploads
    5. Temporary Work

1. General API Usage Information

Job board name Shortcut API base url
Karriere Südwestfalen ksw https://api.karriere-suedwestfalen.de/
Karriere Mittelhessen kmh https://api.karriere-mittelhessen.de/
Karriere Südniedersachsen ksn https://api.karriere-suedniedersachsen.de/
Karriere Metropole Ruhr kmr https://api.karriere-metropole-ruhr.de/
Karriere Bremen khb https://api.karriere-bremen.de/
Karriere Hamburg khh https://api.karriere-hamburg.de/
Karriere Nordhessen knh https://api.karriere-in-nordhessen.de/
Karriere Bergisches Land kbl https://api.karriere-bergisches-land.de/
Karriereportal Owl kol https://api.karriereportal-owl.de/

Syntax of this documentation

Depending on your specific goals, the routes you can use in this API can be adjusted to your needs.
In the beginning of each section is an overview of the available routes. Append the route name to the base URL to match the desired route.
Squared Brackets indicate that everything between them is not required for a successful processing.
Curly Braces indicate that you have to send data in the request URL.

General API Information

If you don’t send an ID with the URL for PUT- and DELETE-requests in many cases you need to specify the object you are referring to in the request body via object-ID or in case of a job offer via reference ID.
For POST- and PUT-Requests for a single offer it doesn't matter if you wrap them in an array or not.

Authentication

You need your company ID and your specific company API key to receive a JSON Web Token (JWT). Send it in the body of your request with the FormData-Interface. The JWT is valid for 60 seconds. To receive test credentials for development, contact our support.

Request Route Description
POST v1/authenticate Receive a JWT, which is used to identify yourself. Send it as Bearer token in the header with every Request.


Key Value
companyId Your company ID
apiKey Your Company API Key

2. Job offer

Request Route Description
GET v1/import/joboffer[/{referenceId}] Returns basic information about the requested job offer or of all company job offers
POST v1/import/joboffer Creates one or more job offers
PUT v1/import/joboffer[/{referenceId}] Updates one or more job offers
DELETE v1/import/joboffer[/{referenceId}] Deletes one or more job offers

For POST- and PUT-requests you can send the following data as JSON in the request body.

Ï
Tags (* required) Data Type Values Default Value Description
ref* string|int Import reference. Used to identify the offer
description* object Contains the job offer text. See 5.1
title* string Offer title
showReference bool true Show reference number in the offer?
type int|string|array 1 or ‘job’
2 or ‘apprenticeship’
3 or ‘dual-study’
4 or ‘internship’
5 or ‘thesis’
1 - job Sets the job type. If you send multiple in an array the first one gets shown, but the following values are recognized in the search.
contract int|string|array 1 or ‘full time’
2 or ‘part time’
3 or ‘mini job’
4 or ‘holiday job’
1 - full time Sets the contract information. If you send multiple in an array the first one gets shown, but the following values are recognized in the search.
applyUrl string If not provided, there will appear a form to the applicants and their documents will be sent to the contact person’s email. Link to a website where the applicants can send their application.
startType int|string 1 or ‘immediately’
2 or ‘date’
3 or ‘agreement’
1 - immediately When can the applicant start working?
startFrom string Date on that the job can get started (format YYYY-MM-DD). Only relevant if startType has value 2.
limitationType int|string 1 or ‘no’
2 or ‘date’
3 or ‘yes’
1 - no Determine if an offer is limited in its time.
limitationDate string Date to that the job is limited (format YYYY-MM-DD). Only relevant if limitationDate is 2.
from string Date for automatic activation (format YYYY-MM-DD)
to string Date for automatic deactivation (format YYYY-MM-DD)
status string ‘active’ or ‘inactive’ ‘active’ Sets the status of a job offer
portals array|int|string All company portals Portals can get addressed by their ID or by their short cut through the API, see 3.5
categories array|string Miscellaneous jobs Provides one or more category IDs, see 4.1 for more information
leadership bool false Is the offer for a leader role?
students bool false Is the offer relevant for students?
totalCount int Sum of amounts of every received location, 1 if none are given Total number of jobs over all given locations
benefits array All company benefits Benefits of the offer. see 3.4
workAtHome bool false Is it allowed to work from home?
workAtHomeDays int false Maximum number of days in a week on which can be worked from home
contactPersons object|array Company main contact person Provides one or more contact persons, see 5.2 for more information
locations object|array Company main location Provides one or more locations, see 5.3 for more information
uploads object|array Second image of company portrait Provides one or more uploads, see 5.4 for more information
temporaryWork object Provides details for temporary work, see 5.5 for more information

Locations are identified by their id or name. So, if there is a location saved in the company, that matches the received name or id, the further data gets ignored. If you want to change that data you have to update the location as described in 3.2.

The same applies for the contact persons, which are identified by id or email. There you can update that data as described in 3.1.



Example POST or PUT

 [
    {
        "ref": "1292346-2022",
        "title": "Worker in example job",
        "description": {
            "introHeadline": "Introduction Headline",
            "introText": "This is an introduction text.",
            "jobProfileText": "Job Profile Text. <strong>You can use HTML here.</strong>",
            "applicantProfileText": "Applicant Profile Text",
            "offerText": "Offer Text",
            "contactText": "Contact Information"
        },
        "applyUrl": "https:www.examplewebsite.com/apply/for-this-job",
        "startType": "date",
        "startFrom": "2022-01-19",
        "limitationType": "date",
        "limitationDate": "2022-03-23",
        "from": "2021-03-28",
        "to": "2022-03-28",
        "contract": 1,
        "categories": [
            "5d9debaf67a3b775bdc8c927",
            "5d9debae67a3b775bdc8c91e"
        ],
        "setReference": true,
        "status": "active",
        "portals": [
            "ksw",
            2,
            4
        ],
        "type": [
            "apprenticeship",
            "dual-study"
        ],
        "leadership": false,
        "students": true,
        "contactPersons": [
            {
                "email": "contact.person@example.com",
                "firstName": "Contact",
                "lastName": "Person",
                "position": "Leader of Example",
                "image": "https://examplewebsite.com/400x300/000/ff0.png",
                "salutation": "Herr",
                "phone": "0160123456789",
                "newsletter": false,
                "persistent": true
            },
            {
                "email": "existing.contact.person@example.com"
            }
        ],
        "locations": [
            {
                "name": "Main Location",
                "amount": 1
            },
            {
                "name": "New Location",
                "street": "Hundemstr. 2",
                "zip": "57368",
                "city": "Lennestadt",
                "logo": "https://linkToExampleImage.com/450x350/000/f0f.png",
                "amount": 1,
                "persistent": true
            }
        ],
        "uploads": {
            "images": [
                "https://linkToExampleImage.com/1200x600/000/ff0.png",
                "https://linkToExampleImage.com/1250x550/000/ff0.jpg"
            ]
        }
    },
    {
        …
    }
]

Example DELETE

For DELETE-requests either append the reference ID of the offer to the request URL or send an array of JSON-objects according to the following table in the request body.

Tags Data Type Description
ref* string Reference ID of the offer to delete.
portals array Array with portals from which the offer has to get deleted. If the field is not provided the offer gets deleted from all portals.
Portals can get addressed by their portal ID or by their short cut, see 3.5

Example DELETE-request to delete the first offer from KSW and KMH, and the second one from all job boards

[
    {
        "ref": "123456789",
        "portals": ["ksw", "kmh"]
    },
    {
        "ref": "123456-2022"
    },
    {
	…
     }
]

3. Company Data

3.1 Contact Persons

Request Route Description
GET v1/import/company/contact-persons[/{contactPersonId}] Returns basic information about the requested contact person or of all company contact persons.
POST v1/import/company/contact-persons Creates one or more company contact persons.
Send contact persons as described in 5.2
PUT v1/import/company/contact-persons[/{contactPersonId}] Updates one or more company contact persons.
Send contact persons as described in 5.2
DELETE v1/import/company/contact-persons[/{contactPersonId}] Deletes one or more company contact persons.

Examples

POST/PUT

[
   {
       "email": "erika@example.com",
       "firstName": "Erika",
       "lastName": "Mustermann",
       "salutation": "Frau",
       "position": "Personalleitung",
       "phone": "01234 / 123456",
       "emailAlias": "e.mustermann@example.com",
       "newsletter": false,
       "cpCompanyPortrait": true,
       "cpEmailCompanyPortrait": false,
       "cpPhoneCompanyPortrait": false,
       "cpEmailJoboffer": false,
       "cpPhoneJoboffer": false
   },
   ...
]

DELETE

[
    {
        "id": "621f6a03bdef404ecf3b20ca"
    },
    {
        "id": "6220d1a6bdef404ecf3b2172"
    },
    ...
]

3.2 Locations

Request Route Description
GET v1/import/company/locations[/{locationId}] Returns basic information about the requested contact person or of all company contact persons.
POST v1/import/company/locations Creates one or more company locations.
Send locations as described in 5.3
PUT v1/import/company/locations[/{locationId}] Updates one or more company locations.
Send locations as described in 5.3
DELETE v1/import/company/locations[/{locationId}] Deletes one or more company locations.

Examples

POST/PUT

[
   {
       "name": "Example Location",
       "city": "ExampleCity",
       "zip": 12345,
       "street" : "Example street 10",
       "region" : "Südwestfalen",
       "logo" : "https://example.com/logo/1234.jpg",
   }
   ...
]

DELETE

[
    {
        "id": "621f6a03bdef404ecfxxxxx"
    },
    {
        "id": "6220d1a6bdef404ecf3xxxxx"
    },
    ...
]

3.3 Company Uploads

Request Route Description
GET v1/import/company/uploads Returns basic information about all company uploads. Includes title, slug, type, file extension, ID, file hash and the times of the last update and the creation.

3.4 Default Company Benefits

If you don’t want all default company benefits for a specific job offer you can send an array with all benefit IDs you want to add.

Request Route Description
GET v1/import/company/benefits Returns ID and name of the default company benefits.

3.5 Company Job Boards

Request Route Description
GET v1/import/company/jobboards Returns ID, label, short cut and URL of all company job boards.

4. Routes For General Information

4.1 Categories

Request Route Description
GET v1/import/general/categories Returns ID and Name of all categories.

Currently we support following categories:, which you can reference via ID:

Category name ID
Büro / Verwaltung / Finanzwesen 5d9debae67a3b775bdc8c91e
Handwerk 5d9debaf67a3b775bdc8c927
Industrie / Produktion / Chemie 5d9debaf67a3b775bdc8c928
Logistik 5d9debaf67a3b775bdc8c929
Ingenieurwesen / Entwicklung / Konstruktion 5d9debae67a3b775bdc8c91c
Handel / Dienstleistung / Gastronomie 5d9debaf67a3b775bdc8c926
Computer / IT / Technik 5d9debae67a3b775bdc8c91b
Marketing / Kommunikation / Design 5d9debae67a3b775bdc8c91d
Medizin / Gesundheit / Sozialwesen 5d9debae67a3b775bdc8c91a
Vertrieb / Verkauf 5d9debaf67a3b775bdc8c923
Tourismus 5d9debaf67a3b775bdc8c92a
Kirche / Diakonie 61fb9457e87a2cb15549f9c7
Sicherheitsdienstleistung / Security 623d9701f7bad3aacd9ec1bf
Assistenz / Aushilfen 5d9debaf67a3b775bdc8c925
Aus- und Weiterbildung 5d9debaf67a3b775bdc8c922
Sonstige Berufe 5d9debaf67a3b775bdc8c924

4.2 HTML-Tags

The allowed tags in the description are "<h3>", "<ul>", "<ol>", "<li>", "<a>", "<b>", "<strong>", "<br>", "<p>" and "<small>".

Request Route Description
GET v1/import/general/html-tags Returns information on allowed HTML-tags in job offer descriptions. Every other tag gets stripped off.

5. Object structure

5.1 Offer Description

You can use the HTML-tags described in 4.2 for the text parts.

If you don’t have data for every required text part, you have to send an empty string as corresponding value.

Tags (* required) Data Type
introHeadline string
introText* string
jobProfileHeadline string
jobProfileText* string
applicantProfileHeadline string
applicantProfileText* string
offerHeadline string
offerText* string
contactHeadline string
contactText* string

5.2 Contact Person

Tags
*required
**also required for new
Data Type Default Value Description
id string Identification string
email* string Email address
firstName** string First name
lastName** string Last name
position string Position
image string Image of the contact person
salutation string Salutation
phone string Phone number
emailAlias string Public e-mail address. If not given, the email from the “email”-tag is shown
newsletter bool false Receive newsletter
cpCompanyPortrait bool true Show/hide contact person on company detail site.
Not relevant for job offer import if persistent is false.
cpEmailCompanyPortrait bool true Show/hide email of the contact person in the company portrait.
Not relevant for job offer import if persistent is false.
cpPhoneCompanyPortrait bool true Show/hide phone number on company detail site.
Not relevant for job offer import if persistent is false.
cpPhoneJoboffer bool true Show/hide phone number in job offer
cpEmailJoboffer bool true Show/hide email in job offer
persistent bool false Save the contact person in the company. If false, it will be created only for the current job offer. Only possible in job offer import.

5.3 Location

Tags
*required
**also required for new
Data Type Default Value Description
id string Identification string
name* string Label
street string Street
zip** string Zip
city** string City
region string Region
logo string Company Logo URL to location logo.
amount int 1 Number of jobs in the location. Only in job offer import.
subsidiary bool false Independent Location? Determines if the location name is shown in the job offer or only the address.
Not relevant for job offer import if persistent is false.
persistent bool false Save the location in the company. If false, it will be created only for the current job offer. Only in job offer import.
If the location is persistent and subsidiary is true then the location name is shown additionally to the address in the job offer.

5.4 Uploads

If no Uploads are provided for a job offer, the second image of the company portrait gets added.

Allowed image formats are: .jpg, .png and .gif.

The preferred image ratio for job offer images is 2:1 and the default shown size is 1200x600px.

If the ratio is smaller than 1.7 or bigger than 2.3 the image will get cropped. Maximum amount of images is 5.

Contact person images should have a ratio of 1:1 or will get cropped otherwise.

Tags Data Type Description
images array|string Images to add to the job offer.
URL or file hash.
pdf array|string URL to PDF files to add as image to the job offer.

5.5 Temporary Work

Tags Data Type Values Description
type int 1 – temporary work
2 – direct personnel recruitment
Type of temporary work
zip int|string zip
showZip bool Shorten zip in job offer, e.g. 57xxx
Last Updated: 2024-07-17 © ontavio.de