Technical Solutions
Importing Standardized JSON Feed Format (valid from 2026)
Scope
Data source: Client provides a JSON feed with job ads.
Delivery model: Our system periodically pulls the feed via a stable HTTP(S) endpoint.
Validation: All records are checked against the official JSON Schema and business rules.
Publishing & lifecycle: Valid ads are created/updated; ads missing from subsequent fetches are automatically deactivated.
Operational details
Endpoint: Public or protected HTTP(S) URL without manual login (automation-ready). Basic auth, token, or mTLS by agreement.
Fetch cadence: ~Every 3 hours (partner-specific configuration).
Communications: Initial setup and configuration changes via service@jobcloud.ch.
Error handling: Invalid records are skipped with reason logged; critical fetch errors trigger retries with backoff.
Lifecycle rules
Create/Update: Ads are identified by
externalId (optionally combined with externalCompanyId). Changes in the feed are reflected on published ads.Deactivation: Ads no longer present in the feed are set to inactive/stopped in the next processing cycle.
Versioning: The feed should expose a schema version (e.g.,
schemaVersion) to enable safe future changes.Security & availability
Transport: HTTPS required; TLS 1.2+ recommended.
Authentication: Basic, Bearer token, or mTLS (agreed during onboarding).
Stability: The endpoint must be highly available and resilient to brief outages.
JSON feed fields (schema references)
Full list and types are provided and linked in the accompanying JSON Schema.
Example of JSON Feed containing 1 job ad:
{
"jobAds": [
{
"externalCompanyId": "company-123",
"externalId": "job-001",
"jobPosition": "Software Engineer",
"employmentGradeTo": 100,
"metadataApiEmploymentTypeId": 1,
"metadataApiEmploymentPositionId": 12345,
"description": "Develop and maintain software applications.",
"externalUrl": "https://apply.example.com/job-001"
},
"address": {
"city": "Zurich",
"postalCode": "8001",
"countryIsoCode": "CH",
"street": "Bahnhofstrasse 1",
"addition": "5th Floor",
"latitude": 47.3769,
"longitude": 8.5417
},
"language": "EN",
{
"metadataApiLanguageId": "en",
"metadataApiLanguageLevelId": 3
}
],
"experience": "1-3",
"salaryUnit": "YEAR",
"salaryFrom": 60000,
"salaryTo": 90000,
"showSalary": true,
"videos": [
{
"url": "https://youtube.com/examplevideo1"
}
],
"recruiter": {
"firstName": "Alice",
"lastName": "Smith",
"profilePictureMediaApiId": "https://media.jobs.ch/images/recruiter.jpg"
},
"jobGroupId": "jobgroup-01",
"logoMediaApiId": "https://media.jobs.ch/images/image.png",
"headerMediaApiId": "https://media.jobs.ch/images/banner.png",
"product": "JOBSOFFER22M"
}
]
}
externalCompanyId
| Field Name | externalCompanyId |
| Description | An identifier used to reference the company either in the customer’s external system (External ID) or in our former system (ORGANISATIONID or ZLOGIN), or a new account ID (specified by JobCloud team, can be requested). |
| Field Type | string |
| Mandatory Field | no |
externalId
| Field Name | externalId |
| Description | Unique identifier for a job ad from the client’s system (f.e. ATS). Used to ensure correct reference and integration. The field accepts a maximum of 255 characters. |
| Field Type | string |
| Mandatory Field | yes |
jobPosition
| Field Name | jobPosition |
| Description | Job title. The field accepts a maximum of 255 characters. |
| Field Type | string |
| Mandatory Field | yes |
description
| Field Name | description |
| Description | Text description of the job ad containing details such as tasks and requirements. You may format the text using the following supported HTML tags: <a>, <b>, <br>, <em>, <h1>–<h6>, <li>, <p>, <strong>, <ul>, <ol>, <u>. |
| Field Type | string |
| Mandatory Field | yes |
employmentGradeFrom
| Field Name | employmentGradeFrom |
| Description | Minimum employment percentage (minimum 0; default 100). |
| Field Type | integer |
| Mandatory Field | yes |
employmentGradeTo
| Field Name | employmentGradeTo |
| Description | Maximum employment percentage (minimum 0; default 100). |
| Field Type | integer |
| Mandatory Field | yes |
metadataApiEmploymentTypeId
| Field Name | metadataApiEmploymentTypeId |
| Description | The ID of the employment type. Allowed values are:1 = Temporary. Fixed-term employment for a specific period or project.2 = Freelance. Project-based work or collaboration with independent worker.3 = Internship. Temporary work for students or recent graduates to gain practical experience.4 = Supplementary income. Part-time or flexible work arrangement that provide additional income alongside other primary sources or earnings.5 = Unlimited employment. Full-time employment with no predetermined end date.6 = Apprenticeship. Training program that combines in-the-job learning with classroom instruction. |
| Field Type | integer |
| Mandatory Field | yes |
application
| Field Name | application |
| Description | URL to the application form for the job ad. Links to our “Apply” button. Clicking on the button opens the external URL in a new tab. Upon request, the Easy Apply feature can be used instead of an external URL. |
| Field Type | string($uri) |
| Mandatory Field | yes |
address
| Field Name | address |
| Description | Address object with multiple fields:city: “City name”postalCode: “XXXX”countryIsoCode: “CH”street: “Street name with number”addition: “Additional info about the address”longitude: 47.36777latitude: 8.5594489The fields ‘ city’ and ‘postalCode’ are mandatory. If they are not provided, the account address on our platform will be used as the default address on job level. |
| Field Type |
city: stringpostalCode: stringcountryIsoCode: stringstreet: stringaddition: stringlongitude: number($float)latitude: number($float) |
| Mandatory Field | yes |
metadataApiEmploymentPositionId
| Field Name | metadataApiEmploymentPositionId |
| Description | The ID of the employment position. Allowed values:1 = Executive position2 = Position with responsibilities3 = Employee |
| Field Type | integer |
| Mandatory Field | no |
language
| Field Name | language |
| Description | Language code of the job ad content. Allowed values:DE = GermanEN = EnglishFR = FrenchIT = Italian |
| Field Type | string |
| Mandatory Field | no |
languageRequirements
| Field Name | languageRequirements |
| Description | List of required languages and levels [{metadataApiLanguageId, metadataApiLanguageLevelId}]Allowed values (a selection) for metadataApiLanguageId: de = Germanfr = Frenchen = Englishit = ItalianAllowed values for metadataApiLanguageLevelId: 1 = Basic knowledge2 = Intermediate3 = Fluent4 = Native language |
| Field Type | string |
| Mandatory Field | no |
experience
| Field Name | experience |
| Description | Professional experience. Specify the years of experience the candidate should have in a similar position. Allowed values (in years):0-11-33-55-77+ |
| Field Type | string |
| Mandatory Field | no |
salaryUnit
| Field Name | salaryUnit |
| Description | Unit of salary measurement (in order for salary information to be displayed correctly, all fields must be transmitted with correct values). Allowed values:YEARMONTHWEEKHOUR |
| Field Type | string |
| Mandatory Field | no |
salaryFrom
| Field Name | salaryFrom |
| Description | Minimum salary amount (in order for salary information to be displayed correctly, all fields must be transmitted with correct values). |
| Field Type | integer |
| Mandatory Field | no |
salaryTo
| Field Name | salaryTo |
| Description | Maximum salary amount (in order for salary information to be displayed correctly, all fields must be transmitted with correct values) |
| Field Type | integer |
| Mandatory Field | no |
showSalary
| Field Name | showSalary |
| Description | Whether the salary should be displayed (in order for salary information to be displayed correctly, all fields must be transmitted with correct values). Allowed values:truefalse |
| Field Type | boolean |
| Mandatory Field | no |
videos
| Field Name | videos |
| Description | List of video objects, each with a URL. Youtube or Vimeo link (no “shorts”). The video must allow external embedding. |
| Field Type | string($uri) |
| Mandatory Field | no |
recruiter
| Field Name | recruiter |
| Description | Object with recruiter’s first and last name (required), and optional profile picture ID e.g. { “firstName“: “John”, “lastName“: “Brown” }Allowed format for profilePictureMediaApiId: The URL of the picture is transmitted and included in the job ad. “min_width”: 224, “min_height”: 224, “min_ratio”: 0.9, “max_ratio”: 1.1, “max_size”: “20m” Available file types: avif, gif, jpeg, png, webp. If the picture from the URL does not pass any of these validation parameters, it will be discarded, and the job ad will be published without it. |
| Field Type |
firstName: stringlastName: stringprofilePictureMediaApiId: string($uuid) |
| Mandatory Field | no |
recruiterId
| Field Name | recruiterId |
| Description | Uuid of existing user from platform (specified by JobCloud team, can be requested). |
| Field Type | string($uuid) |
| Mandatory Field | no |
jobGroupId
| Field Name | jobGroupId |
| Description | Uuid of existing jobGroup (specified by JobCloud team, can be requested). Job postings can be split in different groups, by this group ID (for example: all job ad’s with location in Geneva vs. Zurich, or brand name 1 vs. brand name 2, etc.). Job Groups will be created by JobCloud team. |
| Field Type | string($uuid) |
| Mandatory Field | no |
logoMediaApiId
| Field Name | logoMediaApiId |
| Description | A media API resource ID. The URL of the logo is transmitted and included in the ad. Format specifications: “min_width”: 320, “min_height”: 320, “min_ratio”: 0.9, “max_ratio”: 1.1 Available file types: avif, gif, jpeg, png, webp. The focus of the logo should be in the center of the image. Images that are too large will be scaled down proportionally (no image cropping). Images that are too small will be rejected (the job ad will still go online). In principle, we recommend that you do not deviate from this format in order to achieve optimum results. The website must allow the file to be downloaded (no restriction of the user agent). |
| Field Type | string($uuid) |
| Mandatory Field | no |
headerMediaApiId
| Field Name | headerMediaApiId |
| Description | A media API resource ID. The URL of the banner is transmitted and included in the ad. Format specifications: “min_width”: 1200, “min_height”: 400, “min_ratio”: 2.9, “max_ratio”: 3.1, “max_size”: “32m” Available file types: avif, gif, jpeg, png, webp. The focus of the banner should be in the center of the image. Images that are too large will be cropped proportionally from the center of the image. Images that are too small will be rejected (the job ad will still go online). In principle, we recommend that you do not deviate from this format in order to achieve optimum results. The website must allow the file to be downloaded (no restriction of the user agent). |
| Field Type | string($uuid) |
| Mandatory Field | no |
product
| Field Name | product |
| Description | Fixed offer allocation for the job ad’s. Mandatory, if several products have been purchased. List:JS24FREE |
| Field Type | string($uuid) |
| Mandatory Field | yes |
FAQ
At what times does the interface read my job ads?
We can define specific intervals per client (default: every 3 hours).
Can my JSON feed be password-protected?
In the current implementation of feed importers it’s not supported, though we plan to allow it in the future.
Can the URL of my JSON feed change?
The URL of the JSON feed must stay the same and cannot be redirected.
CONTACT
If you have any further questions, please don’t hesitate to contact us:
Team Product Supportservice@jobcloud.chP +41 44 254 69 09