API Tokens
An API (Application Programming Interface) translates data from an HTTP job seeker to the AJL server. For example, one of the most used API services is for bringing in data from UI into the AJL system. The API Tokens page displays any endpoints your state is using, along with the token for that API, which is an authentication credential.
Navigation
From the left-hand navigation menu, navigate to Admin Tasks > Admin tab > API Tokens tile.
How the Job API Works
To use the Job API, you need a RESTful client, which is a program that lets you build HTTP requests. To make a request, you need to include the URL, Header, Method, and Body. The body will vary depending on the method.
URL
An endpoint is a unique URL that makes up part of an API. For the Job API, each state using JobLink has a unique endpoint. If you wish to post jobs across multiple states using JobLink, you must use separate endpoints for each state:
- Arizona: https://www.azjobconnection.gov/api/jobs
- Arkansas: https://www.arjoblink.arkansas.gov/api/jobs
- Delaware: https://joblink.delaware.gov/api/jobs
- Idaho: https://idahoworks.gov/api/jobs
- Illinois: https://illinoisjoblink.illinois.gov/api/jobs
- Kansas: https://www.kansasworks.com/api/jobs
- Maine: https://joblink.maine.gov/api/jobs
- Oklahoma: https://okjobmatch.com/api/jobs
- Vermont: https://www.vermontjoblink.com/api/jobs
Method
The request methods for the Job API are POST (create job posting[s], PATCH (update an existing job posting), and DELETE (delete the job posting).
If you need to patch or delete a posting, select PATCH or DELETE and add the job posting ID in braces to the endpoint (e.g., https://www.kansasworks.com/api/jobs{10608445}).
Header
Headers provide meta information about the request. Add the following headers to your RESTful client:
| Header Name | Header Value |
|---|---|
| Content-Type | vnd.joblink.v2+json |
| Accept | application/json; v2 |
Body
The request body contains the job posting data the client is sending to the JobLink server.
Please note that if you were using Version 1 of the Job API, you can update the body text for additional fields.
Select the POST/PATCH Body link below to expand the Version 2 body.
"username": "string",
"api_token": "string",
"number_of_positions_available": 0,
"education_level_id": 0,
"license_type_id": 0,
"employment_type": "string",
"position_type": "string",
"alien_recruiting": "string",
"made_public_on": "string",
"absolute_expiration_on": "string",
"is_day_shift": true,
"is_evening_shift": true,
"is_night_shift": true,
"is_split_shift": true,
"is_no_preference_shift": true,
"is_rotating_shift": true,
"wage_upper_bound": 0,
"wage_lower_bound": 0,
"is_sent_to_jobcentral": true,
"is_staff_assistance_requested": true,
"applicant_reply_method": [
"string"
],
"application_description": "string",
"driving_required": true,
"is_wage_displayed": true,
"wage_type": "string",
"company_work_description": "string",
"title": "string",
"company_name": "string",
"city": "string",
"state": "string",
"zip": "string",
"address": "string",
"email": "string",
"phone": "string",
"fax": "string",
"url": "string",
"description": "string",
"average_hours": 0
}
DELETE Body
{
"username": "string",
"api_token": "string"
}
About Job API Data
The following table (select link to expand) provides the keys and values accepted in the body of Job API requests. There are three types of data: string (group of characters and digits), integer (group of digits), and boolean (true or false). Accepted values are provided, as well as any constraints, such as character limits.
Job API Data
| Key | Data Type | Value | Constraints |
|---|---|---|---|
| username | string | Employer's JobLink username | 6-20 characters |
| api_token | string | Employer's JobLink Job API token | 35 characters |
| number_of_positions_available | integer | How many positions are available? | 1-2 digits |
| education_level_id | integer | What education level is required for this position?
|
1-2 digits |
| license_type_id | integer |
If a driver's license is required, what class should it be:
|
1 digit |
| employment_type | string | Is this job full time, part time, or both?
|
1 character |
| position_type | string | Is this job temporary, permanent, or both?
|
1 character |
| alien_recruiting | string | Is this job supporting an H-1B, H-2A, or H-2B recruitment activity?
|
1 character |
| made_public_on | string | What date do you want this job made public? | YYYY/MM/DD |
| absolute_expiration_on | string | What is the expiration date of this job? | YYYY/MM/DD |
| is_day_shift | boolean | Is this a day shift? 0 = No, 1 = Yes | 1 character |
| is_evening_shift | boolean | Is this an evening shift? 0 = No, 1 = Yes | 1 character |
| is_night_shift | boolean | Is this a night shift? 0 = No, 1 = Yes | 1 character |
| is_split_shift | boolean | Is this a split shift? 0 = No, 1 = Yes | 1 character |
| is_no_preference_shift | boolean | Is this an undefined shift? 0 = No, 1 = Yes | 1 character |
| is_rotating_shift | boolean | Is this a day shift? 0 = No, 1 = Yes | 1 character |
| wage_upper_bound | integer | What is the maximum starting wage or salary? | Decimals and digits (e.g., 12.50 or 30000) |
| wage_lower_bound | integer | What is the minimum starting wage or salary? | Decimals and digits |
| is_sent_to_jobcentral | boolean | Should this job be posted on US.jobs by Direct Employer? 0 = No, 1 = Yes | 1 character |
| is_staff_assistance_requested | boolean | Is staff assistance requested for managing this posting? 0 = No, 1 = Yes | 1 character |
| applicant_reply_method | string | How should the applicant respond to this posting?
|
15 characters |
| application_description | string | Describe any additional materials or information the applicant should provide. | 16 characters |
| driving_required | boolean | Is driving an essential function of this job? 0 = No, 1 = Yes | 1 character |
| is_wage_displayed | boolean | Should the wage be displayed for this position? 0 = No, 1 = Yes | 1 character |
| wage_type | string | How are wages paid for this position?
|
1 character |
| company_work_description | string | What is the company description? | 3000 characters |
| title | string | What is the title of the position? | 150 characters |
| company_name | string | What is the name of the company? | 50 characters |
| city | string | What city is the position located in? | 25 characters |
| state | string | What state is the position located in? | 2 characters |
| zip | string | What is the ZIP code of the position location? | 9 characters |
| address | string | What is the street address of the position location? | 50 characters |
| string | What is the company's email address? | 100 characters | |
| phone | string | What is the company's phone number? | 10 characters |
| fax | string | What is the company's fax number? | 10 characters |
| url | string | What is the URL of the job posting, if available on an external website? | 5000 characters |
| description | string | What is the job description? | 4000 characters |
| average_hours | integer | How many hours are in the average work week? (1-99) | 2 characters |
Submitting a Successful API Request
Using your RESTful client, send a request to the Job API endpoint(s). All requests must include a valid employer username and API token; if this information is not valid, the request will not be successful. To be successful, POST requests must also include accepted values for all of the required fields in the JobLink job posting builder as shown in the table above. The API processes successful requests immediately. Once the job posting is created in JobLink, both self-service employers and staff can view, edit, and delete the job posting like any other job. Job seekers can also search for and view the job posting like any other job, depending on the value submitted for “What date do you want this job made public?” and veterans’ preference settings in the state.
Status Codes
After submitting a request, a status code will display indicating the success of the request.
- 200: The request has been fulfilled, resulting in the creation of a new resource.
- 401: The request contained an unauthorized token, and access is denied.
- 422: The request instance was invalid and validation messages are provided.
- 500: An error indicating a general problem on our server during specific steps in processing.