Push API and Webhooks
API for our integration partners, who want to push candidates and subscribers into Jobylon.
In Jobylon every candidate can be represented by one or more applications, where every application relates to a job.
The 3:rd party app registers with Jobylon and gets one or more sets of credentials plus one or more feeds, that contains the promotions or jobs for one or more companies. The app uses the credentials and a job_id (found in the feed) to push new applications to Jobylon.
The type of feed (promotion or job) depends on the type of data required by the app and how our clients' contract work with the 3:rd party. If the 3:rd party do not require any extra information (such as purchase information) a simple job feed will be provided, otherwise a promotion feed will be provided. The promotion feed wraps a job and contains extra information.
To run the examples:
Basic example:
Example using a local JSON file:
Example with files attached (multipart/form-data):
POST /applications/
Query String Parameters
None
Request Payload
Name | Type | Mandatory? | Description |
---|---|---|---|
job_id | integer | yes | Applicant first name |
first_name | string | yes | Applicant first name |
last_name | string | yes | Applicant last name |
string | | Applicant email | |
phone | string | | Applicant phone |
ln_url | URL | | Applicant LinkedIn URL (will be validated) |
message | string | | Message from the applicant |
source_type | string | yes | Source type (applied/applied-silent/recommended/sourced). If set to applied, a thank-you email will be sent to the applicant. |
source_json | object | yes | Additional source data (partner dependent, but using the data from the example will be nicely styled in Jobylon. |
cv | file | | Application file (supported using multipart/form-data) |
cv_url | URL | | URL to the file to be downloaded and assigned to the field |
cover_letter | file | | Application file (supported using multipart/form-data) |
cover_letter_url | URL | | URL to the file to be downloaded and assigned to the field |
other_1 | file | | Application file (supported using multipart/form-data) |
other_1_url | URL | | URL to the file to be downloaded and assigned to the field |
other_2 | file | | Application file (supported using multipart/form-data) |
other_2_url | URL | | URL to the file to be downloaded and assigned to the field |
other_3 | file | | Application file (supported using multipart/form-data) |
other_3_url | URL | | URL to the file to be downloaded and assigned to the field |
other_4 | file | | Application file (supported using multipart/form-data) |
other_4_url | URL | | URL to the file to be downloaded and assigned to the field |
other_5 | file | | Application file (supported using multipart/form-data) |
other_5_url | URL | | URL to the file to be downloaded and assigned to the field |
ab_test | string | | A unique identifier used for A/B testing |
original_referrer | string | | Value used to keep track on the application origin (used in analytics) |
Response
Name | Type | Description |
---|---|---|
id | integer | Application ID |
Exceptions
Status | Description |
---|---|
400 | Bad request, job_id that app doesn't have access to. |
403 | Permission denied |
405 | Method not supported |
Basic example:
GET /applications/<application_pk>/users/<sign_hash>
Query String Parameters
Name | Type | Mandatory? | Description |
---|---|---|---|
roles | string | no | Roles that can be use to filter users |
Response
Name | Type | Description |
---|---|---|
count | integer | Total number of results |
next | string (URL) | Link to the next page |
previous | string (URL) | Link to the previous page |
results | array | Collection of users that have access to the application |
Exceptions
Status | Description |
---|---|
403 | Permission denied |
405 | Method not supported |
Basic example:
GET /jobs/<job_pk>/users/<sign_hash>
Query String Parameters
Name | Type | Mandatory? | Description |
---|---|---|---|
roles | string | no | Roles that can be use to filter the users |
Response
Name | Type | Description |
---|---|---|
count | integer | Total number of results |
next | string (URL) | Link to the next page |
previous | string (URL) | Link to the previous page |
results | array | Collection of users that have access to the job |
Exceptions
Status | Description |
---|---|
403 | Permission denied |
405 | Method not supported |
Basic example:
GET /companies/<company_pk>/users/<sign_hash>
Query String Parameters
Name | Type | Mandatory? | Description |
---|---|---|---|
roles | string | no | Roles that can be use to filter the users |
Response
Name | Type | Description |
---|---|---|
count | integer | Total number of results |
next | string (URL) | Link to the next page |
previous | string (URL) | Link to the previous page |
results | array | Collection of company's users |
Exceptions
Status | Description |
---|---|
403 | Permission denied |
405 | Method not supported |
Callback API for our intergration partners who want to receive and act upon different Jobylon events.
In Jobylon every webhook has a client url and an event type that it is subscribed to.
After the third-party party app registers with Jobylon; they can request webhook intergration by providing a url and the type of events it should subscribe to. The webhook will use these details to send notifications when an event occurs.
When the event is sent to the url the webhook expects a successful response (HTTP 2XX). In the case it does not receive a valid response, it will retry again immediately and then after 30 seconds, 300 seconds (5 minutes), 3000 seconds (50 minutes), 30000 seconds (~8.3 hours) and 300000 seconds (~3 days and 12 hours).
You can request us to provide you with custom headers if you so choose.
You can request us to provide basic authentication by providing a username and password of your choosing.
You can limit the IPs that the callback comes from by letting us know.
Actions
Name | Description |
---|---|
created | Application created |
rejection_sent | Rejection communicated/sent to applicant |
status_changed | Application status updated |
Request Payload
Name | Type | Description |
---|---|---|
event_type | string | "application" |
action | string | Action triggering the event (see above) |
application | object | The application object |
Actions
Name | Description |
---|---|
created | Job created |
updated | Job was updated |
status_changed | Job status was specifically updated |
Request Payload
Name | Type | Description |
---|---|---|
event_type | string | "job" |
action | string | Action triggering the event (see above) |
job | object | The job object |
Name | Type | Description |
---|---|---|
id | integer | Application ID |
first_name | string | First name |
last_name | string | Last name |
string | ||
phone_number | string | Phone number |
url | string (URL) | Deep link to the application in Jobylon |
recommended_by | object | The recommended_by object |
rejection_sent | boolean | Info regarding if the rejection has been communicated to the applicant or not |
status | object | The status object |
source_type | string | The source where the application was received |
job | object | The job object |
owner | object | The user that owns the application |
ab_test | string | A unique identifier used for A/B testing |
users_url | string (URL) | Time-limited link to an list of users that have access to the application and their roles |
Value | Description |
---|---|
'applied' | Applied (thank-you email sent by Jobylon) |
'applied-silent' | Applied through partner (thank-you email possibly sent by partner) |
'imported' | Imported |
'recommended' | Recommended |
'sourced' | Sourced |
'uploaded' | Uploaded |
Name | Type | Description |
---|---|---|
id | integer | Status ID |
name | string | Status name |
group | integer | The status group value |
Value | Description |
---|---|
0 | New |
1 | In progress |
19 | Rejected |
20 | Hired |
21 | On hold |
Name | Type | Description |
---|---|---|
id | integer | Job ID |
title | string | Title of the job |
from_date | string (date-time UTC) | Datetime job first created |
to_date | string (date-time UTC) | Deadline for the job |
contact_name | string | Contact name |
contact_email | string | Contact email |
language | string | The language of the job |
location_set | array | The location(s) of the job |
categories | array | The categories that this job belongs to |
departments | array | The departments that this job belongs to |
layers_X | array | |
status | string | The job status value |
company | object | The company object |
owner | object | The user that owns the job |
employment_type | object | The employment type object |
experience | object | The experience object |
function | object | The function object |
users_url | string (URL) | Time-limited link to an list of users that have access to the job and their roles |
Value | Description |
---|---|
'draft' | Draft |
'published' | Published |
'closed' | Closed |
'archived' | Archived |
Name | Type | Description |
---|---|---|
id | integer | Category ID |
text | string | Category description |
Name | Type | Description |
---|---|---|
id | integer | Company ID |
name | string | Name |
users_url | string (URL) | Time-limited link to an list of users that have access to the job and their roles |
Name | Type | Description |
---|---|---|
id | integer | Department ID |
name | string | Department name |
Name | Type | Description |
---|---|---|
id | integer | Experience ID |
text | string | Experience description |
Name | Type | Description |
---|---|---|
id | integer | EmploymentType ID |
text | string | EmploymentType description |
Name | Type | Description |
---|---|---|
id | integer | Function ID |
text | string | Function description |
Value | Description |
---|---|
'da' | Dansk |
'de' | Deutsch |
'en' | English |
'fi' | Suomi |
'fr' | Français |
'nb' | Norsk |
'nl' | Nederlands |
'sv' | Svenska |
Name | Type | Description |
---|---|---|
id | integer | Layer ID |
identifier | string | Slug based on "text" |
text | string | Layer name |
Name | Type | Description |
---|---|---|
location | string | name of the location |
location_json | object | object based on the data from Google's map API |
Name | Type | Description |
---|---|---|
name | string | Name |
string |
Name | Type | Description |
---|---|---|
id | integer | User ID |
name | string | Name |
string |
Name | Type | Description |
---|---|---|
id | integer | User ID |
first_name | string | First name |
last_name | string | Last name |
role | string | User role |
email_primary | string | |
emails | array |
A/B testing for customers who want to try different application flows
UserRole object can return one of this roles depending on what object/event (job/application) was called.
Name | Description |
---|---|
owner | Owner of the company |
admin | Administrator of the company |
manager | Manager of the company |
member | Member of the company |
collaborator | Collaborator on the job |
viewer | Viewer of the job |
job_owner | Owner of the job |
job_interviewer | Interviewer on the job |
application_interviewer | Interviewer of the application |
You can pass the name of the A/B test as a query parameter on the Jobylon URL. The query parameter should be called jbl_ab_test. We will store it in the browser session storage for 30 minutes or until the session expires, whichever is shorter. In other words, it will be stored for a maximum of 30 minutes. If a new A/B testing query parameter is found on the URL, the existing one will be overridden and the timeout will be reset to 30 minutes. As long as the user ends up on the application form within 30 minutes, the A/B testing query parameter value will be stored with the application. A ab_test parameter is added to the application data sent to your webhook.
Just add the ab_test parameter when pushing to Jobylon and the data will be stored in Jobylon.
Please ensure that the ab_test parameter is less than 20 characters