Skip to content
Jason Klein edited this page Nov 2, 2019 · 12 revisions

Welcome to the Hack 4 Good Jobs API Documentation. This API is used by the Hack 4 Good Workforce Development Project.

Table of Contents

This API provides sample job listings and job-related events.

Browse to the API Dashboard to create an account and obtain your API token.

API Dashboard

API Token

Each account will receive a unique token. Each token is rate limited to 60 requests per minute. You may create multiple accounts if you need additional tokens.

Webhook URL

Provide a URL if you would like to receive notifications when new Job records or Event records are added.

Webhook Last Called

The last time we attempted to call your webhook and notify you of new Jobs or Events

Webhook Secret (safe to ignore)

The secret we used to sign the token payload. Read how signing requests work if you would like to understand how the payload is signed so you can verify the signature.

Passing Tokens In Requests

There are several ways of passing the API token to your application. We'll discuss each of these approaches while using the Guzzle HTTP library to demonstrate their usage. You may choose any of these approaches based on the needs of your application.

Query String

Your application's API consumers may specify their token as an api_token query string value:

$response = $client->request('GET', '/api/job?api_token='.$token);

Request Payload

Your application's API consumers may include their API token in the request's form parameters as an api_token:

$response = $client->request('POST', '/api/job', [
    'headers' => [
        'Accept' => 'application/json',
    ],
    'form_params' => [
        'api_token' => $token,
    ],
]);

Bearer Token

Your application's API consumers may provide their API token as a Bearer token in the Authorization header of the request:

$response = $client->request('POST', '/api/job', [
    'headers' => [
        'Authorization' => 'Bearer '.$token,
        'Accept' => 'application/json',
    ],
]);

The URI is api/event

The endpoint returns all events

Request

The only allowed HTTP method is GET.


Parameters

Name Description Required
n/a n/a n/a

Response


Each event record is identified by a unique ID. The results are ordered by ID. The ordering is not defined by this specification, but it must be consistent between requests for paging reasons. The maximum number of entries should not exceed the maximum page size of INF.

The response is a JSON array of JSON objects. Each JSON object is an event record and has the following fields.

Key JSON type Description
id number Unique ID for this event.
date_begin string The date/time event begins. Format "YYYY-MM-DD hh:ii:ss"
date_end string The date/time event ends. Format "YYYY-MM-DD hh:ii:ss"
date_expires string The date/time event listing expires. Do not show the event after this date/time. Format "YYYY-MM-DD hh:ii:ss"
title string Event Title
location object Event Location
event_id number Origin Event ID. This is the ID used by the original event publisher.
description string Event Description
phone string Event Contact Phone
phone string Event Contact Email
cost number Cost to attend event in USD
url string URL of the original event posting
url_image string URL of the original event image
created_at string Record created timestamp
updated_at string Record updated timestamp

Example


Example URL

https://jobs.api.sgf.dev/api/event?api_token=TOKEN_GOES_HERE

Example HTTP request header

No headers required unless you are developing a website and need CORS. 
Your website JS code must pass optional "Origin" header containing your website URL.

Example HTTP response header

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 59

Example HTTP response content

    "data": [
        {
            "id": 1,
            "date_begin": "2019-11-26 07:55:31",
            "date_end": "2019-11-26 07:55:31",
            "date_expires": null,
            "title": "Boyer-Raynor Hiring Event",
            "location": {
                "id": 65,
                "name": "AMAX Hewitt Realty",
                "street": "909 E. Republic Rd., Suite B-200",
                "city": "Springfield",
                "state": "MO",
                "zipcode": "65807",
                "created_at": "2019-11-01T22:21:27.000000Z",
                "updated_at": "2019-11-01T22:21:27.000000Z"
            },
            "event_id": 10568,
            "description": "Ex animi quia velit praesentium ullam sunt. Ex velit explicabo optio eaque magnam et suscipit. Inventore minima consectetur quae accusantium. Reprehenderit ut error quibusdam a distinctio ducimus.",
            "phone": "663.913.9924 x159",
            "email": "[email protected]",
            "cost": 90,
            "url": "https://hack4goodsgf.com/projects/workforce/?event=10568",
            "url_image": "https://hack4goodsgf.com/projects/workforce/?event_image=10568",
            "created_at": "2019-11-01T22:21:41.000000Z",
            "updated_at": "2019-11-01T22:21:41.000000Z"
        },
        ...
    ],
    "links": {
        "self": "/api/event"
    }
}

The URI is api/job

The endpoint returns all jobs

Request

The only allowed HTTP method is GET.


Parameters

Name Description Required
n/a n/a n/a

Response


A lay description of the response followed by more technical details.

JSON Output Documentation

Key JSON type Description
id number Unique ID for this job
date_posted string The date job listing was posted. Format "YYYY-MM-DD"
date_updated string The date job listing was updated. Format "YYYY-MM-DD"
date_expires string The date job listing expired. Do not show the event after this date. Format "YYYY-MM-DD"
_employer_id_ _string_ _DEPRECATED - DO NOT USE - SEE EMPLOYER OBJECT BELOW_
employer object Employer (name, category, naics, created_at, updated_at)
locations object List of Job Locations (id, name, street, city, state, zipcode, created_at, updated_at)
title string Job Title
description string Job Description HTML
job_type string values: null, full_time, part_time, internship, casual, temporary, contractor
job_id number Source Job ID
pay_rate string Pay rate in various formats ($/HR, $/YR, etc)
req_education string values: null, high_school, associate, bachelor, master, doctorate
data_source string Name of data source for this job record
data_site string Domain of data source for this job record
url string URL of the original job posting
created_at string Record created timestamp
updated_at string Record updated timestamp

Example


Example URL

https://jobs.api.sgf.dev/api/job?api_token=TOKEN_GOES_HERE

Example HTTP request header

No headers required unless you are developing a website and need CORS. 
Your website JS code must pass optional "Origin" header containing your website URL.

Example HTTP response header

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 59

Example HTTP response content

    "data": [
        {
            "id": 1,
            "date_posted": "2019-10-20",
            "date_updated": "2019-11-01",
            "date_expires": "2019-11-11",
            "employer_id": 15,
            "employer": {
                "id": 15,
                "name": "Ankunding Ltd",
                "category": "Ameliorated 24hour emulation",
                "naics": 362688,
                "created_at": "2019-11-01T22:21:09.000000Z",
                "updated_at": "2019-11-01T22:21:09.000000Z"
            },
            "locations": {
                "data": [
                    {
                        "id": 51,
                        "name": "Professional Service",
                        "street": "555 S. Jefferson",
                        "city": "Springfield",
                        "state": "MO",
                        "zipcode": "65807",
                        "created_at": "2019-11-01T22:21:25.000000Z",
                        "updated_at": "2019-11-01T22:21:25.000000Z"
                    },
                    ...
                ],
                "links": {
                    "self": "/api/location"
                }
            },
            "title": "Outdoor Power Equipment Mechanic",
            "description": "<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum. <b>Lorem ipsum dolor sit amet, consectetur adipiscing elit</b>. Praesent mauris. Fusce nec tellus sed augue semper porta. Mauris massa. Vestibulum lacinia arcu eget nulla. <b>Lorem ipsum dolor sit amet, consectetur adipiscing elit</b>. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. </p><p>Curabitur sodales ligula in libero. Sed dignissim lacinia nunc. Curabitur tortor. Pellentesque nibh. Aenean quam. In scelerisque sem at dolor. Maecenas mattis. Sed convallis tristique sem. Proin ut ligula vel nunc egestas porttitor. Morbi lectus risus, iaculis vel, suscipit quis, luctus non, massa. <i>Lorem ipsum dolor sit amet, consectetur adipiscing elit</i>. Fusce ac turpis quis ligula lacinia aliquet. </p><p>Mauris ipsum. Nulla metus metus, ullamcorper vel, tincidunt sed, euismod in, nibh. Quisque volutpat condimentum velit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nam nec ante. <b>Morbi lectus risus, iaculis vel, suscipit quis, luctus non, massa</b>. Sed lacinia, urna non tincidunt mattis, tortor neque adipiscing diam, a cursus ipsum ante quis turpis. Nulla facilisi. Ut fringilla. Suspendisse potenti. Nunc feugiat mi a tellus consequat imperdiet. Vestibulum sapien. Proin quam. Etiam ultrices. </p>",
            "job_type": "full_time",
            "job_id": 668834,
            "pay_rate": "$55,000 per year",
            "req_education": "high_school",
            "data_source": "Hack 4 Good Springfield",
            "data_site": "hack4goodsgf.com",
            "url": "https://hack4goodsgf.com/projects/workforce/?job=668834",
            "fake": 1,
            "created_at": "2019-11-01T22:21:21.000000Z",
            "updated_at": "2019-11-02T09:50:36.000000Z"
        },
        ...
    ],
    "links": {
        "self": "/api/job"
    }
}

⇡ top