Organization API
API Endpoint:
https://api.huntr.co/org
The Huntr API for Organizations is organized around REST. You can use this API to access Huntr's Organizational API endpoints, which can get information on your members plus the jobs, employers, and events they manage through Huntr.
This API is for you if you are an organization using Huntr to follow the job search progress of your members (job seekers). This is the case if you have an organizational account with member boards managed by your organization's advisors.
This API will NOT work for you if multiple job seekers have personally shared their boards with you, in that case there is no concept of an organization, and you are using Huntr as an individual.
Authentication
To authorize, use this code:
# With shell, you can just pass the correct header with each request
curl "api_endpoint_here"
-H "Authorization: Bearer <ORG_ACCESS_TOKEN>"
Make sure to replace
ORG_ACCESS_TOKEN
with your API key.
Huntr uses Access Tokens to allow access to the organization API. You can register a new Huntr Access Token in your organization's admin dashboard.
Huntr expects for the Access Token to be included in all API requests to the server in a header that looks like the following:
Authorization: Bearer <ORG_ACCESS_TOKEN>
Pagination
A sample list query:
curl "https://api.huntr.co/org/members?limit=2"
-H "Authorization: Bearer <ORG_ACCESS_TOKEN>"
The above command returns JSON structured like this:
{
"data": [
{
"id": "5b0379b5712bb674fd0d561e",
"givenName": "Graciela",
"familyName": "Varela",
"email": "[email protected]",
"createdAt": 1526954421,
"isActive": true,
"advisor": {
"id": "64befb78b1ad13706cad0745",
"fullName": "Alice Advisor",
"givenName": "Alice",
"familyName": "Advisor",
"email": "[email protected]",
"createdAt": 1666980452,
"lastSeenAt": 1689792002,
}
},
{
"id": "5b037898b7f93473edc1c43a",
"givenName": "Nicole",
"familyName": "Haylock",
"email": "[email protected]",
"createdAt": 1526954136,
"isActive": false,
"advisor": {
"id": "64befb996efb7b393bfba5fb",
"fullName": "Bob Advisor",
"givenName": "Bob",
"familyName": "Advisor",
"createdAt": 1666980452,
"lastSeenAt": 1689792002,
"email": "[email protected]",
}
}
],
"next": "5b037898b7f93473edc1c43a"
}
Retrieve the second page of results with this query:
curl "https://api.huntr.co/org/members?limit=2&next=5a70a7361d06bb000f0f1c44"
-H "Authorization: Bearer <ORG_ACCESS_TOKEN>"
Some API resources have support for bulk fetches via "list" API methods. For instance, you can list members, jobs, and job events. These list API methods share a common structure, taking these two parameters: limit
, next
.
Huntr uses cursor-based pagination via the next
parameter which takes an existing object ID value. Every "list" endpoint result includes a data
parameter, with the results from the call, along with a next
parameter. The next
parameter represents the id of the last object returned. Passing this parameter in subsequent call will return the next page of results. So, if you've made your first query and set 100 as a limit and want to retrieve the second page of results, you can repeat the same query, but with the next
parameter set with the value returned by your first call. You can see an example set of queries on the right.
Organization Invitations
Organization Invitation Resource
An invitation sent to a member to join your Huntr Organization as a job seeker:
{
"id": "5e6a9d1f62593578ce9de841",
"toEmail": "[email protected]",
"boardName": "Job Search 2020",
"to": {
"id": "5e6a7c99c56bc6669e3da876",
"givenName": "Cristobal",
"familyName": "Hackett",
"email": "[email protected]",
"createdAt": 1584045343
},
"boardTemplate": {
"id": "5a6e4a567e42789e6e65c986",
"name": "Tech Jobs",
"listTemplates": [
{
"id": "5fc9686050c1de39c8412af7",
"name": "Wishlist"
},
{
"id": "5fc9686050c1de39c8412af8",
"name": "Applied"
},
{
"id": "5fc9686050c1de39c8412af9",
"name": "Phone Interview"
},
{
"id": "5fc9686050c1de39c8412af2",
"name": "On Site Interview"
},
{
"id": "5fc9686050c1de39c8412afa",
"name": "Offer"
},
{
"id": "5fc9686050c1de39c8412afa",
"name": "Rejected"
}
]
},
"memberFieldValues": [
{
"fieldId": "5b3f908c99c94b6177d55a28",
"value": "Seattle"
}
],
"createdAt": 1539800736
}
Field | Type | Description |
---|---|---|
id | String | Invitation id |
toEmail | String | Email to which invitation was sent to |
boardName | String | Name to give the board created when member accepts invite |
to | Object | If the user with this email already has a Huntr account this object will show his/her user account information |
String | Member's email | |
boardTemplate | Object | The board template to use to define the board stages when member accepts invite |
memberFieldValues | Array | Array of member field values to assign to the member when invitation is accepted. Each object in the array is of type {fieldId: "5b3f908c99c94b6177d55a28", value: "Montreal"} , where fieldId represents the id of an existing Member Field |
createdAt | Unix timestamp | Date the invitation was created |
List Organization Invitations
curl "https://api.huntr.co/org/organization-invitations"
-H "Authorization: Bearer <ORG_ACCESS_TOKEN>"
The above command returns JSON structured like this:
{
"data": [
{
"id": "5bc77e60856b6201a7f84d99",
"toEmail": "[email protected]",
"boardName": "Fall 2020",
"memberFieldValues": [],
"createdAt": 1539800672
},
{
"id": "5bc77ea0856b6201a7f84d9a",
"toEmail": "[email protected]",
"boardName": "Fall 2020",
"memberFieldValues": [],
"createdAt": 1539800736
},
{
"id": "5ca53f5687967fd925e3aff4",
"toEmail": "[email protected]",
"boardName": "Fall 2020",
"boardTemplate": {
"id": "5a6e4c3c7e42789e6e65c987",
"name": "Fall 2020 Cohort 1",
"listTemplates": [
{
"id": "5fc9686050c1de39c8412af7",
"name": "Wishlist"
},
{
"id": "5fc9686050c1de39c8412af8",
"name": "Applied"
},
{
"id": "5fc9686050c1de39c8412af9",
"name": "Phone Interview"
},
{
"id": "5fc9686050c1de39c8412af2",
"name": "On Site Interview"
},
{
"id": "5fc9686050c1de39c8412afa",
"name": "Offer"
},
{
"id": "5fc9686050c1de39c8412afa",
"name": "Rejected"
}
]
},
"memberFieldValues": [
{
"fieldId": "5b3f908c99c94b6177d55a28",
"value": "Seattle"
}
],
"createdAt": 1554333526
}
]
}
This endpoint retrieves all pending organization invitations.
HTTP Request
GET https://api.huntr.co/org/organization-invitations
Create Organization Invitation
curl --location --request POST 'https://api.huntr.co/org/organization-invitations' \
--header 'Authorization: Bearer <ORG_ACCESS_TOKEN>' \
--header 'Content-Type: application/json' \
--data-raw '{
"email": "[email protected]",
"boardName": "Job Search 2020",
"boardTemplateId": "5a6e4a567e42789e6e65c986",
"advisorEmail": "[email protected]",
"memberFieldValues": [
{"fieldId": "5b3f908c99c94b6177d55a28", "value": "Vancouver"},
{"fieldId": "5b3f9cf499c94b6177d55a2a", "value": "Web Design"}
]
}'
The above command returns JSON structured like this:
{
"id": "5ec478c20f3c3c8443328eb5",
"toEmail": "[email protected]",
"boardName": "Job Search 2020",
"boardTemplate": {
"id": "5a6e4a567e42789e6e65c986",
"name": "Tech Jobs",
"listTemplates": [
{
"id": "5fc9686050c1de39c8412af7",
"name": "Wishlist"
},
{
"id": "5fc9686050c1de39c8412af8",
"name": "Applied"
},
{
"id": "5fc9686050c1de39c8412af9",
"name": "Phone Interview"
},
{
"id": "5fc9686050c1de39c8412af2",
"name": "On Site Interview"
},
{
"id": "5fc9686050c1de39c8412afa",
"name": "Offer"
},
{
"id": "5fc9686050c1de39c8412afa",
"name": "Rejected"
}
]
},
"memberFieldValues": [
{
"fieldId": "5b3f908c99c94b6177d55a28",
"value": "Vancouver"
},
{
"fieldId": "5b3f9cf499c94b6177d55a2a",
"value": "Web Design"
}
],
"createdAt": 1589934274
}
This endpoint creates and sends a single Organization Invitation. The person invited through this endpoint will receive an email invitation to join your organization under Huntr.
To prevent duplicate invitations from being sent, requests with an email that has an existing pending invitation from your organization will return an error and no invitation will be created.
HTTP Request
POST https://api.huntr.co/org/organization-invitations
JSON Body Parameters
Parameter | Required | Type | Description |
---|---|---|---|
email |
yes | String | An email address for the job seeker your want to invite |
boardName |
no | String | Name of board to be created for member |
boardTemplateId |
no | String | Id of the board template to use when creating a board for member, if none is submitted it will default to Organization's default board template, or Huntr's default template if no template has been set as a default. |
memberFieldValues |
no | Array | Array of member field values to assign to the member when invitation is accepted. Each object in the array is of type {fieldId: "5b3f908c99c94b6177d55a28", value: "Montreal"} , where fieldId represents the id of an existing Member Field |
advisorEmail |
no | String | Email address of the Huntr advisor you'd like to assign to this member. Advisor must already have an advisor account under your organization with Huntr. |
Advisors
Advisor Resource
An advisor of your organization:
{
"id": "64befb78b1ad13706cad0745",
"fullName": "Alice Advisor",
"givenName": "Alice",
"familyName": "Advisor",
"email": "[email protected]",
"createdAt": 1666980452,
"lastSeenAt": 1689792002,
}
An advisor within your organization
Field | Type | Description |
---|---|---|
id | String | Advisors's Huntr id |
givenName | String | Advisor's given name |
familyName | String | Advisor's family name |
fullName | String | Advisor's full name |
String | Advisor's email | |
createdAt | Unix timestamp | Date the advisor signed up for Huntr |
lastSeenAt | Unix timestamp | Last date the advisor was seen using Huntr |
List Advisors
curl "https://api.huntr.co/org/advisors"
-H "Authorization: Bearer <ORG_ACCESS_TOKEN>"
The above command returns JSON structured like this:
{
"data": [
{
"id": "64befb78b1ad13706cad0745",
"fullName": "Alice Advisor",
"givenName": "Alice",
"familyName": "Advisor",
"email": "[email protected]",
"createdAt": 1666980452,
"lastSeenAt": 1689792002
}
{
"id": "64befb78b1ad13706cad0746",
"fullName": "Bob Advisor",
"givenName": "Bob",
"familyName": "Advisor",
"createdAt": 1666980452,
"lastSeenAt": 1689792002,
"email": "[email protected]",
}
]
}
This endpoint retrieves all advisors for your organization.
HTTP Request
GET https://api.huntr.co/org/advisors
Members
Member Resource
A member of your organization:
{
"id": "5b0379b5712bb674fd0d561e",
"givenName": "Graciela",
"familyName": "Varela",
"email": "[email protected]",
"createdAt": 1526954421,
"isActive": true,
"lastSeenAt": 1526984421,
"memberFieldValues": [
{
"fieldId": "5b3f908c99c94b6177d55a28",
"value": "Montreal"
}
],
"memberFieldValuesKeyedById": {
"5b3f908c99c94b6177d55a28": {
"fieldId": "5b3f908c99c94b6177d55a28",
"value": "Montreal"
}
},
"advisor": {
"id": "64befb78b1ad13706cad0745",
"fullName": "Alice Advisor",
"givenName": "Alice",
"familyName": "Advisor",
"email": "[email protected]",
"createdAt": 1666980452,
"lastSeenAt": 1689792002,
},
"boardIds": [
"5a6e4c3c7e42789e6e65c987",
]
}
A member is one of the job seekers using Huntr under your organization. If you are an educational institution, your job seeking students qualify as your members.
Field | Type | Description |
---|---|---|
id | String | Member's Huntr id |
givenName | String | Member's first name |
familyName | String | Member's last name |
String | Member's email | |
createdAt | Unix timestamp | Date the member signed up for Huntr |
isActive | Boolean | Defines if member has been deactivated by an organization admin or advisor. Deactivating a member prevents them from continuing activity on boards managed by your organization, and it is usually done for members who have found a job and stopped using Huntr. |
memberFieldValues | Array | Array of assigned member field values. Each object in the array is of type {fieldId: "5b3f908c99c94b6177d55a28", value: "Montreal"} , where fieldId represents the id of an existing Member Field |
memberFieldValuesKeyedById | Object | The same elements seen as memberFieldValues, but keyed by fieldId for fast access. |
lastSeenAt | Unix timestamp | Last date the member was seen using Huntr (this includes logging in, saving jobs from extension, mobile, etc) |
advisor | Object | Advisor who this job seeker is assigned to |
boardIds | Array | Array of board ids that this member owns, you can use this to build a link to a member's board |
List Members
curl "https://api.huntr.co/org/members?active=true&limit=3"
-H "Authorization: Bearer <ORG_ACCESS_TOKEN>"
The above command returns JSON structured like this:
{
"data": [
{
"id": "5b0377c7b7f93473edc1c433",
"givenName": "Roberto",
"familyName": "Moscoso",
"email": "[email protected]",
"createdAt": 1526953927,
"isActive": true,
"memberFieldValues": [],
"advisor": {
"id": "64befb78b1ad13706cad0745",
"fullName": "Alice Advisor",
"givenName": "Alice",
"familyName": "Advisor",
"email": "[email protected]",
"createdAt": 1666980452,
"lastSeenAt": 1689792002
},
"boardIds": [
"5a6e4c3c7e42789e6e65c987",
]
},
{
"id": "5a9f699edd2f935a4e5b263a",
"givenName": "Rennie",
"familyName": "Haylock",
"email": "[email protected]",
"createdAt": 1520396702,
"isActive": true,
"memberFieldValues": [],
"boardIds": [
"5a6e4c3c7e42789e6e65c983",
]
},
{
"id": "5a9b3d392bd2e22e37dee4f0",
"givenName": "John",
"familyName": "Smith",
"email": "[email protected]",
"createdAt": 1520123193,
"isActive": true,
"memberFieldValues": [],
"advisor": {
"id": "64befb996efb7b393bfba5fb",
"fullName": "Bob Advisor",
"givenName": "Bob",
"familyName": "Advisor",
"email": "[email protected]",
"createdAt": 1666980452,
"lastSeenAt": 1689792002,
},
"boardIds": [
"5a6e4c3c7e42789e6e65c984",
]
}
],
"next": "5a9b3d392bd2e22e37dee4f0"
}
This endpoint retrieves all members for your organization.
HTTP Request
GET https://api.huntr.co/org/members
Query Parameters
Parameter | Type | Default | Description |
---|---|---|---|
active |
Boolean | none | If set to true , the result will only include active members. If set to false the result will only include deactivated members. |
email |
String | none | If set, it will return the single member that matches the provided email address. |
limit |
Integer | 100 | Defines the maximum number of members to return |
next |
String | none | If set, returns the next set of results after the object id provided |
Retrieve a Member
curl "https://api.huntr.co/org/members/5a9b3d392bd2e22e37dee4f0"
-H "Authorization: Bearer <ORG_ACCESS_TOKEN>"
The above command returns JSON structured like this:
{
"id": "5a9b3d392bd2e22e37dee4f0",
"givenName": "John",
"familyName": "Smith",
"email": "[email protected]",
"createdAt": 1520123193,
"isActive": true,
"memberFieldValues": [],
"advisor": {
"id": "64befb78b1ad13706cad0745",
"fullName": "Alice Advisor",
"givenName": "Alice",
"familyName": "Advisor",
"email": "[email protected]",
"createdAt": 1666980452,
"lastSeenAt": 1689792002,
}
}
This endpoint retrieves a specific member.
HTTP Request
GET https://api.huntr.co/org/members/<ID>
URL Parameters
Parameter | Type | Description |
---|---|---|
ID | String | The ID of the member to retrieve |
Update a Job Seeker's member field value
curl --location --request PUT 'https://api.huntr.co/org/members/5a9b3d392bd2e22e37dee4f0/member-fields/5b3f908c99c94b6177d55a28' \
--header 'Authorization: Bearer <ORG_ACCESS_TOKEN>' \
--header 'Content-Type: application/json' \
--data-raw '{
"value": "Seattle"
}'
The above command returns JSON structured like this:
{
"id": "5a9b3d392bd2e22e37dee4f0",
"givenName": "John",
"familyName": "Smith",
"email": "[email protected]",
"createdAt": 1589931899,
"isActive": true,
"memberFieldValues": [
{
"fieldId": "5b3f908c99c94b6177d55a28",
"value": "Seattle"
},
{
"fieldId": "5b3f9cf499c94b6177d55a2a",
"value": "Web Design"
},
{
"fieldId": "5b3fb247d9d5bd9d6de8f655",
"value": "YVR-001"
}
]
}
This endpoint updates or sets a specific member's field value.
HTTP Request
PUT https://api.huntr.co/org/members/<memberId>/member-fields/<fieldId>
Where <fieldId>
is the id
for an existing Member Field
URL Parameters
Parameter | Type | Description |
---|---|---|
value |
Mixed | The value to give the member field |
Member Groups
Member Group Resource
A member field:
{
"id": "5b3f908c99c94b6177d55a28",
"name": "2024 Candidates",
"description": "2024 Candidate Cohort",
"createdAt": 1588634675,
}
A member group is a set of members in your organization. Member groups can be used to share job posts to job seekers and limit visibility of job posts in your job board.
Field | Type | In all fields | Description |
---|---|---|---|
id | String | true | Member group id |
name | String | true | Member group name |
description | String | false | Member group description |
createdAt | String | true | Unix timestamp |
List Member Groups
curl "https://api.huntr.co/org/member-groups"
-H "Authorization: Bearer <ORG_ACCESS_TOKEN>"
The above command returns JSON structured like this:
{
"data": [
{
"id": "5b3f908c99c94b6177d55a28",
"name": "2024 Candidates",
"description": "2024 Candidate Cohort",
"createdAt": 1612451816
},
{
"id": "5b3f908c99c94b6177d55a29",
"name": "2024 Candidates",
"description": "2024 Candidate Cohort",
"createdAt": 1614221646,
}
]
}
This endpoint retrieves all member groups for your organization.
HTTP Request
GET https://api.huntr.co/org/member-groups
Member Fields
Member Field Resource
A member field:
{
"id": "5b3f908c99c94b6177d55a28",
"name": "Location",
"fieldType": "MULTIPLE_CHOICE",
"choices": [
"Vancouver",
"Seattle",
"New York",
"Montreal",
"Miami"
]
}
A member field is a custom field created by someone in your organization which describes your members and is used to filter and/or group your members in different areas of your advisor dashboard. For example: If your members are in different cities, you could create a 'location' custom field.
Field | Type | In all fields | Description |
---|---|---|---|
id | String | true | Member field id |
name | String | true | Member field name |
fieldType | String | true | Field type |
choices | String | false | Choices found on member fields of fieldType MULTIPLE_CHOICE and MULTIPLE_SELECT |
Types of Member Fields
This is a list of all the types of fields currently available.
memberField.fieldType |
Description |
---|---|
MULTIPLE_CHOICE |
Represents a multiple choice field for which each job seeker may only have a single value for. Like "Cohort" or "Campus" |
MULTIPLE_SELECT |
Represents a multiple choice field for which each job seeker may have multiple values for. Like "Security Certifications" or "Specialties" |
TEXT |
Represents a text field type like "Nickname" |
NUMBER |
Represents a number field type like "Age" |
DATE |
Represents a date field type like "Graduation Date" |
List Member Fields
curl "https://api.huntr.co/org/member-fields"
-H "Authorization: Bearer <ORG_ACCESS_TOKEN>"
The above command returns JSON structured like this:
{
"data": [
{
"id": "5b3f908c99c94b6177d55a28",
"name": "Location",
"fieldType": "MULTIPLE_CHOICE",
"choices": [
"Vancouver",
"Seattle",
"New York",
"Montreal",
"Miami"
]
},
{
"id": "5b3f960c99c94b6177d55a29",
"name": "Graduation",
"fieldType": "DATE"
},
{
"id": "5b3f9cf499c94b6177d55a2a",
"name": "Program",
"fieldType": "MULTIPLE_CHOICE",
"choices": [
"Web Design",
"iOS",
"Data Science"
]
},
{
"id": "5b3fb247d9d5bd9d6de8f655",
"name": "Cohort",
"fieldType": "MULTIPLE_CHOICE",
"choices": [
"YVR-001",
"TRT-001",
"YVR-002",
"MTR-001"
]
},
{
"id": "5b3ff25b0ec3828665ff7c81",
"name": "Status",
"fieldType": "MULTIPLE_CHOICE",
"choices": [
"In program",
"Searching",
"Placed"
]
},
{
"id": "5b40d89ae582264d4368a2bc",
"name": "Gender",
"fieldType": "MULTIPLE_CHOICE",
"choices": [
"Female",
"Male"
]
},
{
"id": "5b43ee4a8308d2400b9cced3",
"name": "Nickname",
"fieldType": "TEXT"
}
]
}
This endpoint retrieves all member fields for your organization.
HTTP Request
GET https://api.huntr.co/org/member-fields
Create new member field
curl --location --request POST 'https://api.huntr.co/org/member-fields' \
--header 'Authorization: Bearer <ORG_ACCESS_TOKEN>' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "Location",
"fieldType": "MULTIPLE_CHOICE",
"choices": ["London", "Paris", "New York", "San Francisco"]
}'
The above command returns JSON structured like this:
{
"id": "5ec44b9cc482170b3129e569",
"name": "Locations",
"fieldType": "MULTIPLE_CHOICE",
"choices": [
"London",
"Paris",
"New York",
"San Francisco"
]
}
This endpoint creates a new Member Field. After creating the new field, you will
be able to view the field from your advisor dashboard and will be able to send
organization invitations with the memberFieldValues
referring to the newly created field.
To prevent duplicate fields from being created, requests with a field name that matches an existing Member Field from your organization, will return an error message and the field will not be created.
HTTP Request
POST https://api.huntr.co/org/member-fields
JSON Body Parameters
Parameter | Required | Type | Description |
---|---|---|---|
name |
yes | String | Name of the new field, must be unique (i.e: you cannot have two fields with the same name) |
fieldType |
yes | String | One of type of member fields |
choices |
only when fieldType == 'MULTIPLE_CHOICE' or fieldType == 'MULTIPLE_SELECT' |
Array | List of strings representing choices in a field of type MULTIPLE_CHOICE or MULTIPLE_SELECT |
Board Templates
Board Template Resource
A board template:
{
"id": "5a6e4a567e42789e6e65c986",
"name": "Tech Jobs",
"listTemplates": [
{
"id": "5fc9686050c1de39c8412af7",
"name": "Wishlist"
},
{
"id": "5fc9686050c1de39c8412af8",
"name": "Applied"
},
{
"id": "5fc9686050c1de39c8412af9",
"name": "Phone Interview"
},
{
"id": "5fc9686050c1de39c8412af2",
"name": "On Site Interview"
},
{
"id": "5fc9686050c1de39c8412afa",
"name": "Offer"
},
{
"id": "5fc9686050c1de39c8412afa",
"name": "Rejected"
}
],
"isDefault": true
}
A template to use when creating a new board for your members. Board templates are used when you want your job seekers' boards to have specific stages. Say you want your job seekers' board to have the following stages ['Wishlist', 'Applied', 'Interview', 'Offer']
. First you create a board template where listTemplates == [{name: 'Wishlist'}, {name: 'Applied'}, {name: 'Interview'}, {name: 'Offer'}]
(the order of the stages is the same order that will be followed when a new board is created). Then you can create a new Organization Invitation in which boardTemplateId
is the id of the Board Template you just created.
Field | Type | Found in all records | Description |
---|---|---|---|
id | String | true | Board Template id |
name | String | true | Board template name |
listTemplates | Array | true | Template used to create each stage in a board created with this template |
isDefault | Boolean | true | If true, it means the template is the default within the organization |
Deprecated board template fields
These fields will be supported until the end of Q1 2021. See the Replacement field column to see what field is replacing the deprecated fields.
Field | Type | Replacement field | Description |
---|---|---|---|
listNames |
Array | listTemplates |
Names of each stage in a board created with this template |
Default Board Stages
In cases where there are no existing Board Templates for your organization. Huntr will create boards with the following stages (in the order shown):
[ "wishlist", "applied", "interview", "offer", "rejected" ]
List Board Templates
curl "https://api.huntr.co/org/board-templates"
-H "Authorization: Bearer <ORG_ACCESS_TOKEN>"
The above command returns JSON structured like this:
{
"data": [
{
"id": "5a6bd300f92659747fe49a53",
"name": "Spring 2018",
"isDefault": false,
"listTemplates": [
{
"id": "5fc9686050c1de39c8412ad8",
"name": "Applied"
},
{
"id": "5fc9686050c1de39c8412ad9",
"name": "Wishlist"
},
{
"id": "5fc9686050c1de39c8412ad2",
"name": "Interview"
},
{
"id": "5fc9686050c1de39c8412ada",
"name": "Offer"
}
]
},
{
"id": "5a6e4a567e42789e6e65c986",
"name": "Tech Jobs",
"isDefault": true,
"listTemplates": [
{
"id": "5fc9686050c1de39c8412af7",
"name": "Wishlist"
},
{
"id": "5fc9686050c1de39c8412af8",
"name": "Applied"
},
{
"id": "5fc9686050c1de39c8412af9",
"name": "Phone Interview"
},
{
"id": "5fc9686050c1de39c8412af2",
"name": "On Site Interview"
},
{
"id": "5fc9686050c1de39c8412afa",
"name": "Offer"
},
{
"id": "5fc9686050c1de39c8412afa",
"name": "Rejected"
}
]
}
]
}
This endpoint retrieves all board templates for your organization.
HTTP Request
GET https://api.huntr.co/org/board-templates
Jobs
Job Resource
A job in one of your members' boards:
{
"id": "5eb0a4338899ba51bf96f645",
"boardId": "5eb0a4338899ba51bf94a641",
"listId": "5eb0a4338899ba51bf76f571",
"title": "Senior Engineer",
"htmlDescription": "<p><strong>Description</strong></p><p>Great opportunity</p>",
"salary": "$90k",
"url": "https://linkedin.com/job/123",
"location": {
"address": "2015 Main St, Vancouver, BC V5T 3C2, Canada",
"name": "Mailchimp",
"placeId": "ChIJG7btXnJxhlQR62EUZuSVsOE",
"id": "ceb4675ecb0f218b4adf86d215eeffbcb12f5f1f",
"url": "https://maps.google.com/?cid=16262663062632554987",
"lat": "49.2668893",
"lng": "-123.1012246"
},
"createdAt": 1588634675,
"ownerMember": {
"id": "5e6a7bbdc56bc6669e3da86c",
"givenName": "Ruipo",
"familyName": "Fauli",
"email": "[email protected]",
"createdAt": 1584036797,
"isActive": true
},
"creatorMember": {
"id": "5b2bbb5837fbc835bbe3218b",
"givenName": "Advisor",
"familyName": "Two",
"email": "[email protected]",
"createdAt": 1529592664,
"isActive": true
},
"employer": {
"id": "5a016b5221bce9aa2bd70296",
"name": "MailChimp",
"domain": "mailchimp.com",
"foundedYear": 2001,
"isPartner": true,
"description": "MailChimp provides marketing automation for e-commerce businesses. Send beautiful emails, connect your e-commerce store, advertise, and build your brand.\n",
"location": "675 Ponce De Leon Ave NE #5000, Atlanta, GA 30308, USA"
},
"list": {
"name": "Applied"
},
"activities": [
{
"id": "5eb0abc13fac1580adcf5b19",
"title": "Follow Up",
"note": "With pete",
"completed": false,
"createdByWorkflow": false,
"startAt": 1588809403,
"createdAt": 1588636609
},
{
"id": "5eb0cbafacf21d6980c45d64",
"title": "Apply",
"completed": true,
"createdByWorkflow": false,
"startAt": 1588748400,
"completedAt": 1588644783,
"createdAt": 1588644783
},
{
"id": "5eb0cbb2acf21d6980c45d66",
"title": "On Site Interview",
"completed": false,
"createdByWorkflow": false,
"startAt": 1588834800,
"createdAt": 1588644786
},
{
"id": "5eb0cbb6acf21d6980c45d68",
"title": "Offer Received",
"completed": true,
"createdByWorkflow": false,
"startAt": 1590044400,
"completedAt": 1588644790,
"createdAt": 1588644790
},
{
"id": "5eb0cbbaacf21d6980c45d6a",
"title": "Accept Offer",
"completed": true,
"createdByWorkflow": false,
"startAt": 1590562800,
"completedAt": 1588644794,
"createdAt": 1588644794
},
{
"id": "5eb0cebdf9e9ac821876aab0",
"title": "On Site Interview",
"completed": false,
"createdByWorkflow": false,
"startAt": 1589353200,
"createdAt": 1588645565
}
],
"interviewActivities": [
{
"id": "5eb0cbb2acf21d6980c45d66",
"title": "Phone interview",
"completed": false,
"createdByWorkflow": false,
"startAt": 1588834800,
"createdAt": 1588644786
},
{
"id": "5eb0cebdf9e9ac821876aab0",
"title": "On Site Interview",
"completed": false,
"createdByWorkflow": false,
"startAt": 1589353200,
"createdAt": 1588645565
}
],
"applicationActivity": {
"id": "5eb0cbafacf21d6980c45d64",
"title": "Apply",
"completed": true,
"createdByWorkflow": false,
"startAt": 1588748400,
"completedAt": 1588644783,
"createdAt": 1588644783
},
"offerActivity": {
"id": "5eb0cbb6acf21d6980c45d68",
"title": "Offer Received",
"completed": true,
"createdByWorkflow": false,
"startAt": 1590044400,
"completedAt": 1588644790,
"createdAt": 1588644790
},
"offerAcceptedActivity": {
"id": "5eb0cbbaacf21d6980c45d6a",
"title": "Accept Offer",
"completed": true,
"createdByWorkflow": false,
"startAt": 1590562800,
"completedAt": 1588644794,
"createdAt": 1588644794
}
}
A job is an instance of a job opportunity that one of your members has added to one of their boards managed by your organization. Each job card in the Huntr UI represent a different Job.
Field | Type | Description |
---|---|---|
id |
String | Job's id |
boardId |
String | Id of the job seeker Board the job lives in |
listId |
String | Id of the List within a Board the job is currently at |
title |
String | Job title |
description |
String | Job description |
htmlDescription |
String | Html Job description |
description |
String | Job description |
salary |
String | Job salary |
url |
String | URL for the original job post |
location |
Object | Object representing job's location |
deadline |
Unix timestamp | Date of job's application deadline |
activities |
Array | Activities linked to job |
applicationActivity |
Object | Application Activity linked to job |
interviewActivities |
Array | Interview Activities linked to job |
offerActivity |
Object | Offer Received Activity linked to job |
offerAcceptedActivity |
Object | Offer Accepted Activity linked to job |
creatorMember |
Object | Member who created the job |
ownerMember |
Object | Member who owns the job |
employer |
Object | Employer for the job |
jobPost |
Object | Job Post from which this job was created, if any |
list |
Object | Object representing the list the job is in. A list is a stage in a specific Huntr board. |
createdAt |
Unix timestamp | Date the job was created by the member |
Deprecated job fields
These fields will be supported until the end of 2020. See the Replacement field column to see what field is replacing the deprecated fields.
Field | Type | Replacement field | Description |
---|---|---|---|
applicationDate |
Unix timestamp | applicationActivity |
Date of application deadline |
firstInterviewDate |
Unix timestamp | interviewActivities |
Date of first interview |
secondInterviewDate |
Unix timestamp | interviewActivities |
Date of second interview |
offerDate |
Unix timestamp | offerActivity |
Date offer was received |
member |
Object | ownerMember |
Object representing the member who owns the job |
List Jobs
curl "https://api.huntr.co/org/jobs?limit=2"
-H "Authorization: Bearer <ORG_ACCESS_TOKEN>"
The above command returns JSON structured like this:
{
"data": [
{
"id": "5eb0a4338899ba51bf96f645",
"title": "Software Developer",
"htmlDescription": "<p><strong>Description</strong></p><p>Great job!</p>",
"salary": "$90k",
"url": "google.com",
"location": {
"address": "2015 Main St, Vancouver, BC V5T 3C2, Canada",
"name": "Mailchimp",
"placeId": "ChIJG7btXnJxhlQR62EUZuSVsOE",
"id": "ceb4675ecb0f218b4adf86d215eeffbcb12f5f1f",
"url": "https://maps.google.com/?cid=16262663062632554987",
"lat": "49.2668893",
"lng": "-123.1012246"
},
"createdAt": 1588634675,
"ownerMember": {
"id": "5e6a7bbdc56bc6669e3da86c",
"givenName": "Ruipo",
"familyName": "Fauli",
"email": "[email protected]",
"createdAt": 1584036797,
"isActive": true
},
"creatorMember": {
"id": "5b2bbb5837fbc835bbe3218b",
"givenName": "Advisor",
"familyName": "Two",
"email": "[email protected]",
"createdAt": 1529592664,
"isActive": true
},
"employer": {
"id": "5a016b5221bce9aa2bd70296",
"name": "MailChimp",
"domain": "mailchimp.com",
"foundedYear": 2001,
"isPartner": true,
"description": "MailChimp provides marketing automation for e-commerce businesses. Send beautiful emails, connect your e-commerce store, advertise, and build your brand.\n",
"location": "675 Ponce De Leon Ave NE #5000, Atlanta, GA 30308, USA"
},
"list": {
"name": "Applied"
},
"activities": [
{
"id": "5eb0abc13fac1580adcf5b19",
"title": "Follow Up",
"note": "With pete",
"completed": false,
"createdByWorkflow": false,
"startAt": 1588809403,
"createdAt": 1588636609
},
{
"id": "5eb0cbafacf21d6980c45d64",
"title": "Apply",
"completed": true,
"createdByWorkflow": false,
"startAt": 1588748400,
"completedAt": 1588644783,
"createdAt": 1588644783
},
{
"id": "5eb0cbb2acf21d6980c45d66",
"title": "On Site Interview",
"completed": false,
"createdByWorkflow": false,
"startAt": 1588834800,
"createdAt": 1588644786
},
{
"id": "5eb0cbb6acf21d6980c45d68",
"title": "Offer Received",
"completed": true,
"createdByWorkflow": false,
"startAt": 1590044400,
"completedAt": 1588644790,
"createdAt": 1588644790
},
{
"id": "5eb0cbbaacf21d6980c45d6a",
"title": "Accept Offer",
"completed": true,
"createdByWorkflow": false,
"startAt": 1590562800,
"completedAt": 1588644794,
"createdAt": 1588644794
},
{
"id": "5eb0cebdf9e9ac821876aab0",
"title": "On Site Interview",
"completed": false,
"createdByWorkflow": false,
"startAt": 1589353200,
"createdAt": 1588645565
}
],
"interviewActivities": [
{
"id": "5eb0cbb2acf21d6980c45d66",
"title": "On Site Interview",
"completed": false,
"createdByWorkflow": false,
"startAt": 1588834800,
"createdAt": 1588644786
},
{
"id": "5eb0cebdf9e9ac821876aab0",
"title": "On Site Interview",
"completed": false,
"createdByWorkflow": false,
"startAt": 1589353200,
"createdAt": 1588645565
}
],
"applicationActivity": {
"id": "5eb0cbafacf21d6980c45d64",
"title": "Apply",
"completed": true,
"createdByWorkflow": false,
"startAt": 1588748400,
"completedAt": 1588644783,
"createdAt": 1588644783
},
"offerActivity": {
"id": "5eb0cbb6acf21d6980c45d68",
"title": "Offer Received",
"completed": true,
"createdByWorkflow": false,
"startAt": 1590044400,
"completedAt": 1588644790,
"createdAt": 1588644790
},
"offerAcceptedActivity": {
"id": "5eb0cbbaacf21d6980c45d6a",
"title": "Accept Offer",
"completed": true,
"createdByWorkflow": false,
"startAt": 1590562800,
"completedAt": 1588644794,
"createdAt": 1588644794
}
},
{
"id": "5eaf7f8e7d33a823fd5a06c1",
"title": "Front end engineer",
"location": {},
"createdAt": 1588559758,
"ownerMember": {
"id": "5eae15c3a4e9196db88cb394",
"givenName": "Rennie",
"familyName": "Haylock",
"email": "[email protected]",
"createdAt": 1588467139,
"isActive": true
},
"creatorMember": {
"id": "5b2bbb5837fbc835bbe3218b",
"givenName": "Advisor",
"familyName": "Two",
"email": "[email protected]",
"createdAt": 1529592664,
"isActive": true
},
"employer": {
"id": "5903fe3a0ceb436653b2bf7d",
"name": "ESPN",
"domain": "espn.com",
"isPartner": false,
"description": "Visit ESPN to get up-to-the-minute sports news coverage, scores, highlights and commentary for NFL, MLB, NBA, College Football, NCAA Basketball and more.",
"location": "935 Middle St, Bristol, CT 06010, USA"
},
"list": {
"name": "offer"
},
"activities": [
{
"id": "5eaf7fa5f0cf6b54208282be",
"title": "Offer received",
"completed": true,
"createdByWorkflow": true,
"startAt": 1588559758,
"completedAt": 1588559781,
"createdAt": 1588559781
}
],
"offerActivity": {
"id": "5eaf7fa5f0cf6b54208282be",
"title": "Offer received",
"completed": true,
"createdByWorkflow": true,
"startAt": 1588559758,
"completedAt": 1588559781,
"createdAt": 1588559781
}
}
],
"next": "5eaf7f8e7d33a823fd5a06c1"
}
This endpoint lists all jobs added by members from your organization, jobs are sorted by the date they were created, starting from the most recently created.
HTTP Request
GET https://api.huntr.co/org/jobs
Query Parameters
Parameter | Type | Default | Description |
---|---|---|---|
owner_member_id |
String | none | If set, will only return jobs owned by member |
creator_member_id |
String | none | If set, will only return jobs created by member |
created_after |
Unix timestamp | none | If set, will only return jobs created after created_after |
created_before |
Unix timestamp | none | If set, will only return jobs created before created_before |
limit |
Integer | 100 | Defines the maximum number of jobs to return |
next |
String | none | If set, returns the next set of results after the object id provided |
Retrieve a Job
curl "https://api.huntr.co/org/jobs/5eb0a4338899ba51bf96f645"
-H "Authorization: Bearer <ORG_ACCESS_TOKEN>"
The above command returns JSON structured like this:
{
"id": "5eb0a4338899ba51bf96f645",
"title": "Software Engineer",
"htmlDescription": "<p><strong>Description</strong></p><p>Great job!</p>",
"salary": "$90k",
"url": "google.com",
"location": {
"address": "2015 Main St, Vancouver, BC V5T 3C2, Canada",
"name": "Mailchimp",
"placeId": "ChIJG7btXnJxhlQR62EUZuSVsOE",
"id": "ceb4675ecb0f218b4adf86d215eeffbcb12f5f1f",
"url": "https://maps.google.com/?cid=16262663062632554987",
"lat": "49.2668893",
"lng": "-123.1012246"
},
"createdAt": 1588634675,
"ownerMember": {
"id": "5e6a7bbdc56bc6669e3da86c",
"givenName": "Ruipo",
"familyName": "Fauli",
"email": "[email protected]",
"createdAt": 1584036797,
"isActive": true
},
"creatorMember": {
"id": "5b2bbb5837fbc835bbe3218b",
"givenName": "Advisor",
"familyName": "Two",
"email": "[email protected]",
"createdAt": 1529592664,
"isActive": true
},
"employer": {
"id": "5a016b5221bce9aa2bd70296",
"name": "MailChimp",
"domain": "mailchimp.com",
"foundedYear": 2001,
"isPartner": true,
"description": "MailChimp provides marketing automation for e-commerce businesses. Send beautiful emails, connect your e-commerce store, advertise, and build your brand.\n",
"location": "675 Ponce De Leon Ave NE #5000, Atlanta, GA 30308, USA"
},
"list": {
"name": "Applied"
},
"activities": [
{
"id": "5eb0abc13fac1580adcf5b19",
"title": "Follow Up",
"note": "With pete",
"completed": false,
"createdByWorkflow": false,
"startAt": 1588809403,
"createdAt": 1588636609
},
{
"id": "5eb0cbafacf21d6980c45d64",
"title": "Apply",
"completed": true,
"createdByWorkflow": false,
"startAt": 1588748400,
"completedAt": 1588644783,
"createdAt": 1588644783
},
{
"id": "5eb0cbb2acf21d6980c45d66",
"title": "On Site Interview",
"completed": false,
"createdByWorkflow": false,
"startAt": 1588834800,
"createdAt": 1588644786
},
{
"id": "5eb0cbb6acf21d6980c45d68",
"title": "Offer Received",
"completed": true,
"createdByWorkflow": false,
"startAt": 1590044400,
"completedAt": 1588644790,
"createdAt": 1588644790
},
{
"id": "5eb0cbbaacf21d6980c45d6a",
"title": "Accept Offer",
"completed": true,
"createdByWorkflow": false,
"startAt": 1590562800,
"completedAt": 1588644794,
"createdAt": 1588644794
},
{
"id": "5eb0cebdf9e9ac821876aab0",
"title": "On Site Interview",
"completed": false,
"createdByWorkflow": false,
"startAt": 1589353200,
"createdAt": 1588645565
}
],
"interviewActivities": [
{
"id": "5eb0cbb2acf21d6980c45d66",
"title": "On Site Interview",
"completed": false,
"createdByWorkflow": false,
"startAt": 1588834800,
"createdAt": 1588644786
},
{
"id": "5eb0cebdf9e9ac821876aab0",
"title": "On Site Interview",
"completed": false,
"createdByWorkflow": false,
"startAt": 1589353200,
"createdAt": 1588645565
}
],
"applicationActivity": {
"id": "5eb0cbafacf21d6980c45d64",
"title": "Apply",
"completed": true,
"createdByWorkflow": false,
"startAt": 1588748400,
"completedAt": 1588644783,
"createdAt": 1588644783
},
"offerActivity": {
"id": "5eb0cbb6acf21d6980c45d68",
"title": "Offer Received",
"completed": true,
"createdByWorkflow": false,
"startAt": 1590044400,
"completedAt": 1588644790,
"createdAt": 1588644790
},
"offerAcceptedActivity": {
"id": "5eb0cbbaacf21d6980c45d6a",
"title": "Accept Offer",
"completed": true,
"createdByWorkflow": false,
"startAt": 1590562800,
"completedAt": 1588644794,
"createdAt": 1588644794
}
}
This endpoint retrieves a specific job.
HTTP Request
GET https://api.huntr.co/org/jobs/<ID>
URL Parameters
Parameter | Description |
---|---|
ID | The ID of the job to retrieve |
Job Posts
Job Post Resource
A job post in your organization's portal:
{
"id": "601da7c59ca97b1604508a1c",
"title": "Illustrator",
"isRemote": false,
"salary": {
"actual": "90000",
"currency": "USD",
"interval": "ANNUAL"
},
"jobType": "FULL_TIME",
"applicationInstructions": "Apply through original post link or email [email protected]",
"url": "https://notion.so/jobs",
"postDate": 1612556211,
"createdAt": 1612556229,
"location": {
"name": "Brooklyn",
"address": "Brooklyn, NY, USA",
"country": "United States",
"lat": "40.6781784",
"lng": "-73.9441579"
},
"locations": [
{
"name": "Brooklyn",
"address": "Brooklyn, NY, USA",
"country": "United States",
"lat": "40.6781784",
"lng": "-73.9441579"
}
],
"jobPostStatus": {
"name": "Open"
},
"employerId": "5bbfe1c6ed9dc0f2dbb9fe76",
"employer": {
"id": "5bbfe1c6ed9dc0f2dbb9fe76",
"name": "Notion",
"domain": "notion.so",
"description": "A new tool that blends your everyday work apps into one. It's the all-in-one workspace for you and your team",
"location": "3000 20th St, San Francisco, CA 94110, USA",
"isPartner": false
},
"creatorMember": {
"id": "5b2bbb5837fbc835bbe32154",
"givenName": "Rennie",
"familyName": "Dev 32",
"email": "[email protected]",
"createdAt": 1529592664,
"isActive": true,
"memberFieldValues": []
},
"ownerMember": {
"id": "5b2bbb5837fbc835bbe32154",
"givenName": "Rennie",
"familyName": "Dev 32",
"email": "[email protected]",
"createdAt": 1529592664,
"isActive": true,
"memberFieldValues": []
},
"tags": [{
"id": "6375bf49678aa421b84e8743",
"name": "🔥 Hot Jobs",
"description": "High demand job posts",
"color": "#FF0000",
}],
"htmlDescription": "<h3>About <strong>Us:</strong></h3><p>We make software that anyone can mold and shape to take on every challenge — from taking personal notes to running large companies. We've been building together since 2016 and are trusted by customers including Nike, Airbnb, Slack, Samsung, and more. We're excited to be growing a team as diverse and creative as the millions of people we reach worldwide, and a company where everyone can thrive.</p><h3>About The Role:</h3><p>Do you want to help define what data means at Notion? We are looking to hire our first data engineer to guide the team with a vision for what our data tooling and infrastructure should look like as we scale, and then to build and operate those systems over time. With your background in data processing and warehousing, you'll partner with other members of the Data Team to evolve the infrastructure that allows Notion to make high quality decisions that are driven by data.</p><h3>What You'll Do:</h3><ul><li>You'll design and set up the tools that allow other members of the data team to easily write effective data pipelines.</li><li>You'll articulate best practices around logging frameworks and implement the changes to make those practices a reality.</li><li>You'll implement alerting systems to track data quality and consistency.</li><li>You'll create tools for data science team members that enable them to produce insights quickly and with high impact.</li><li>You'll help the Data Science team apply and generalize statistical and econometric models efficiently across large datasets.</li></ul><h3>What We're Looking For:</h3><ul><li><strong>Team player:</strong> For you, work isn't a solo endeavor. You have worked cross-functionally to establish the right overarching data architecture for a company's needs, to build data pipelines, and to provide guidance on best data practices for the business.</li><li><strong>Data tools experience:</strong> You have experience managing relational databases and authoring queries (SQL) and using workflow management technologies (e.g. Airflow, Luigi)</li><li><strong>Thoughtful problem-solving:</strong> For you, problem-solving starts with a clear and accurate understanding of the context. You can decompose tricky problems and work towards a clean solution, by yourself or with teammates. You're comfortable asking for help when you get stuck.</li><li><strong>Pragmatic and business-oriented:</strong> You care about business impact and prioritize projects accordingly. You're not just going after cool stuff—you understand the balance between craft, speed, and the bottom line.</li><li><strong>Put users first:</strong> You think critically about the implications of what you're building, and how it shapes real people's lives. You understand that reach comes with responsibility for our impact—good and bad.</li><li><strong>Not ideological about technology:</strong> To you, technologies and programming languages are about tradeoffs. You may be opinionated, but you're not ideological and can learn new technologies as you go.</li><li><strong>Empathetic communication:</strong> You communicate nuanced ideas clearly, whether you're explaining technical decisions in writing or brainstorming in real time. In disagreements, you engage thoughtfully with other perspectives and compromise when needed.</li></ul><h3>Bonus Points:</h3><ul><li>You've built out data infrastructure from, or nearly from, scratch at a fast-growing startup.</li><li>If you have led or managed a Data Engineering Team.</li></ul>"
}
A job post in your organization's portal. Job posts are sourced and saved by your advisors through the Advisor Portal or the Huntr chrome extension. Learn more about the job portal feature here.
Field | Type | Description |
---|---|---|
id |
String | Job post's id |
title |
String | Job post title |
htmlDescription |
String | Html Job post description |
applicationInstructions |
String | Instructions on how to apply to this job post |
url |
String | URL for the original job post |
employerId |
String | Id of the job post Employer |
jobType |
String | Job type, see Job Types |
isRemote |
Boolean | Defines if the job is a remote opportunity |
salary |
Object | Job post salary |
location |
Object | Object representing job post's location. If a job has multiple locations, the first one is returned |
locations |
Array | Array of objects representing multiple locations for a job post |
jobPostStatus |
Object | Object representing job post's status |
creatorMember |
Object | Advisor who created the job post |
ownerMember |
Object | Advisor who owns the job post |
employer |
Object | Employer for the job post |
tags |
Array | An array of Tags |
postDate |
Unix timestamp | Date the job post was posted, your staff can change this date from the advisor portal |
createdAt |
Unix timestamp | Date the job post was created by the member |
visibility |
String | One of VISIBLE , HIDDEN . Describes whether this job post is visible to all organization members. If HIDDEN , job post can be shared directly to job seekers or made visible to specific member groups in your organization. |
visibleMemberGroupIds |
Array | Array of Member Group ids which this job post will be made visible to. Will always be empty unless visibilty is HIDDEN and job post has been shared with one or more member groups. |
Deprecated job post fields
Field | Type | Replacement field | Description |
---|---|---|---|
location |
Object | locations |
Object representing job post's location. If a job has multiple locations, the first one is returned |
Job Types
There 4 job types:
Job Type | Description |
---|---|
FULL_TIME |
Represents a full time job |
PART_TIME |
Represents a part time job |
CONTRACTOR |
Represents a contractor job |
INTERNSHIP |
Represents an internship |
List Job Posts
curl "https://api.huntr.co/org/job-posts?limit=2"
-H "Authorization: Bearer <ORG_ACCESS_TOKEN>"
The above command returns JSON structured like this:
{
"data": [
{
"id": "6037116c9c299b95bfd431d8",
"title": "Engineer",
"isRemote": true,
"htmlDescription": "<p>Job Description</p><ul><li>Item one</li><li>Item two</li><li>Item three</li></ul>",
"salary": {
"actual": "85000",
"currency": "USD",
"interval": "ANNUAL"
},
"jobType": "FULL_TIME",
"applicationInstructions": "Send email to [email protected]",
"url": "https://priceline.com/jobs",
"postDate": 1614221661,
"createdAt": 1614221676,
"location": {
"name": "Priceline",
"address": "800 Connecticut Ave, Norwalk, CT 06854, USA",
"country": "United States",
"lat": "41.0930242",
"lng": "-73.4539645"
},
"locations": [{
"name": "Priceline",
"address": "800 Connecticut Ave, Norwalk, CT 06854, USA",
"country": "United States",
"lat": "41.0930242",
"lng": "-73.4539645"
}],
"jobPostStatus": {
"name": "Draft"
},
"employer": {
"id": "59b5f5f10143bacaa3eaa3ff",
"name": "Priceline.com",
"domain": "priceline.com",
"foundedYear": 1998,
"description": "Deep Discounts on Hotels, Flights and Rental Cars. Get Exclusive Savings with Priceline.com.",
"location": "800 Connecticut Ave, Norwalk, CT 06854, USA",
"isPartner": false
},
"ownerMember": {
"id": "5b2bbb5837fbc835bbe32154",
"givenName": "Rennie",
"familyName": "Dev 32",
"email": "[email protected]",
"createdAt": 1529592664,
"isActive": true,
"memberFieldValues": []
},
"creatorMember": {
"id": "5b2bbb5837fbc835bbe32154",
"givenName": "Rennie",
"familyName": "Dev 32",
"email": "[email protected]",
"createdAt": 1529592664,
"isActive": true,
"memberFieldValues": []
},
"employerId": "59b5f5f10143bacaa3eaa3ff",
"visibility": "VISIBLE",
"visibleMemberGroupIds": []
},
{
"id": "6037114e9c299b95bfd43158",
"title": "Product Manager",
"isRemote": false,
"jobType": "FULL_TIME",
"postDate": 1614221578,
"createdAt": 1614221646,
"location": {
"name": "Slack",
"address": "500 Howard St, San Francisco, CA 94105, USA",
"country": "United States",
"lat": "37.7885052",
"lng": "-122.396428"
},
"locations": [{
"name": "Slack",
"address": "500 Howard St, San Francisco, CA 94105, USA",
"country": "United States",
"lat": "37.7885052",
"lng": "-122.396428"
}],
"jobPostStatus": {
"name": "Open"
},
"employer": {
"id": "592ed813b67c6168772b19ec",
"name": "Slack",
"domain": "slack.com",
"description": "Slack brings all your communication together in one place. It’s real-time messaging, archiving and search for modern teams.",
"location": "San Francisco, CA, USA",
"isPartner": false
},
"ownerMember": {
"id": "5b2bbb5837fbc835bbe32154",
"givenName": "Rennie",
"familyName": "Dev 32",
"email": "[email protected]",
"createdAt": 1529592664,
"isActive": true,
"memberFieldValues": []
},
"creatorMember": {
"id": "5b2bbb5837fbc835bbe32154",
"givenName": "Rennie",
"familyName": "Dev 32",
"email": "[email protected]",
"createdAt": 1529592664,
"isActive": true,
"memberFieldValues": []
},
"employerId": "592ed813b67c6168772b19ec",
"tags": [{
"id": "6375bf49678aa421b84e8743",
"name": "🔥 Hot Jobs",
"description": "High demand job posts",
"color": "#FF0000",
}],
"visibility": "VISIBLE",
"visibleMemberGroupIds": []
}
],
"next": "6037114e9c299b95bfd43158"
}
This endpoint lists all job posts added by advisors/staff from your organization to your organization's internal job portal, jobs are sorted by the date they were created, starting from the most recently created.
HTTP Request
GET https://api.huntr.co/org/job-posts
Query Parameters
Parameter | Type | Default | Description |
---|---|---|---|
limit |
Integer | 100 | Defines the maximum number of job posts to return |
next |
String | none | If set, returns the next set of results after the object id provided |
Retrieve a Job Post
curl "https://api.huntr.co/org/job-posts/601da7c59ca97b1604508a1c"
-H "Authorization: Bearer <ORG_ACCESS_TOKEN>"
The above command returns JSON structured like this:
{
"id": "601da7c59ca97b1604508a1c",
"title": "Illustrator",
"isRemote": false,
"htmlDescription": "<h3>About <strong>Us:</strong></h3><p>We make software that anyone can mold and shape to take on every challenge — from taking personal notes to running large companies. We've been building together since 2016 and are trusted by customers including Nike, Airbnb, Slack, Samsung, and more. We're excited to be growing a team as diverse and creative as the millions of people we reach worldwide, and a company where everyone can thrive.</p><h3>About The Role:</h3><p>Do you want to help define what data means at Notion? We are looking to hire our first data engineer to guide the team with a vision for what our data tooling and infrastructure should look like as we scale, and then to build and operate those systems over time. With your background in data processing and warehousing, you'll partner with other members of the Data Team to evolve the infrastructure that allows Notion to make high quality decisions that are driven by data.</p><h3>What You'll Do:</h3><ul><li>You'll design and set up the tools that allow other members of the data team to easily write effective data pipelines.</li><li>You'll articulate best practices around logging frameworks and implement the changes to make those practices a reality.</li><li>You'll implement alerting systems to track data quality and consistency.</li><li>You'll create tools for data science team members that enable them to produce insights quickly and with high impact.</li><li>You'll help the Data Science team apply and generalize statistical and econometric models efficiently across large datasets.</li></ul><h3>What We're Looking For:</h3><ul><li><strong>Team player:</strong> For you, work isn't a solo endeavor. You have worked cross-functionally to establish the right overarching data architecture for a company's needs, to build data pipelines, and to provide guidance on best data practices for the business.</li><li><strong>Data tools experience:</strong> You have experience managing relational databases and authoring queries (SQL) and using workflow management technologies (e.g. Airflow, Luigi)</li><li><strong>Thoughtful problem-solving:</strong> For you, problem-solving starts with a clear and accurate understanding of the context. You can decompose tricky problems and work towards a clean solution, by yourself or with teammates. You're comfortable asking for help when you get stuck.</li><li><strong>Pragmatic and business-oriented:</strong> You care about business impact and prioritize projects accordingly. You're not just going after cool stuff—you understand the balance between craft, speed, and the bottom line.</li><li><strong>Put users first:</strong> You think critically about the implications of what you're building, and how it shapes real people's lives. You understand that reach comes with responsibility for our impact—good and bad.</li><li><strong>Not ideological about technology:</strong> To you, technologies and programming languages are about tradeoffs. You may be opinionated, but you're not ideological and can learn new technologies as you go.</li><li><strong>Empathetic communication:</strong> You communicate nuanced ideas clearly, whether you're explaining technical decisions in writing or brainstorming in real time. In disagreements, you engage thoughtfully with other perspectives and compromise when needed.</li></ul><h3>Bonus Points:</h3><ul><li>You've built out data infrastructure from, or nearly from, scratch at a fast-growing startup.</li><li>If you have led or managed a Data Engineering Team.</li></ul>",
"salary": {
"actual": "90000",
"currency": "USD",
"interval": "ANNUAL"
},
"jobType": "FULL_TIME",
"applicationInstructions": "Apply through original post link or email [email protected]",
"url": "https://notion.so/jobs",
"postDate": 1612556211,
"createdAt": 1612556229,
"location": {
"name": "Brooklyn",
"address": "Brooklyn, NY, USA",
"country": "United States",
"lat": "40.6781784",
"lng": "-73.9441579"
},
"locations": [{
"name": "Brooklyn",
"address": "Brooklyn, NY, USA",
"country": "United States",
"lat": "40.6781784",
"lng": "-73.9441579"
}],
"jobPostStatus": {
"name": "Open"
},
"employer": {
"id": "5bbfe1c6ed9dc0f2dbb9fe76",
"name": "Notion",
"domain": "notion.so",
"description": "A new tool that blends your everyday work apps into one. It's the all-in-one workspace for you and your team",
"location": "3000 20th St, San Francisco, CA 94110, USA",
"isPartner": false
},
"ownerMember": {
"id": "5b2bbb5837fbc835bbe32154",
"givenName": "Rennie",
"familyName": "Dev 32",
"email": "[email protected]",
"createdAt": 1529592664,
"isActive": true,
"memberFieldValues": []
},
"creatorMember": {
"id": "5b2bbb5837fbc835bbe32154",
"givenName": "Rennie",
"familyName": "Dev 32",
"email": "[email protected]",
"createdAt": 1529592664,
"isActive": true,
"memberFieldValues": []
},
"employerId": "5bbfe1c6ed9dc0f2dbb9fe76",
"tags": [{
"id": "6375bf49678aa421b84e8743",
"name": "🔥 Hot Jobs",
"description": "High demand job posts",
"color": "#FF0000",
}],
"visibility": "VISIBLE",
"visibleMemberGroupIds": []
}
This endpoint retrieves a specific job post.
HTTP Request
GET https://api.huntr.co/org/job-posts/<ID>
URL Parameters
Parameter | Description |
---|---|
ID | The ID of the job post to retrieve |
Create Job Post
curl --location --request POST 'https://api.huntr.co/org/job-posts' \
--header 'Authorization: Bearer <ORG_ACCESS_TOKEN>' \
--header 'Content-Type: application/json' \
--data-raw '{
"title": "Full Stack Engineer",
"jobType": "FULL_TIME",
"jobPostStatusName": "Open",
"applicationInstructions": "Send resume to [email protected]",
"htmlDescription": "<b>Description</b><p>An html job description</p>",
"url": "https://huntr.co/jobs/1",
"isRemote": false,
"locations": [{"address": "Seattle, WA, United States"}],
"postDate": 1614911232,
"salary": {
"min": "90000",
"max": "120000",
"currency": "USD",
"interval": "ANNUAL"
},
"employer": {
"name": "Huntr",
"domain": "huntr.co"
},
"tagIds": ["6375bf49678aa421b84e8743"],
"memberEntries": [
{"email": "[email protected]"},
{"memberId": "5b0379b5712bb674fd0d561e"}
],
"visibility": "HIDDEN",
"visibleMemberGroupIds": ["5b3f908c99c94b6177d55a28"]
}'
The above command returns JSON structured like this:
{
"id": "6041976280901dae754f0851",
"title": "Full Stack Engineer",
"isRemote": false,
"htmlDescription": "<b>Description</b><p>An html job description</p>",
"salary": {
"min": 90000,
"max": 120000,
"currency": "USD",
"interval": "ANNUAL"
},
"jobType": "FULL_TIME",
"applicationInstructions": "Send resume to [email protected]",
"url": "https://huntr.co/jobs/1",
"postDate": 1614911232,
"createdAt": 1614911330,
"location": {
"name": "Seattle, King County, Washington, USA",
"address": "Seattle, WA, United States",
"lat": "47.6038321",
"lng": "-122.3300624"
},
"locations": [{
"name": "Seattle, King County, Washington, USA",
"address": "Seattle, WA, United States",
"lat": "47.6038321",
"lng": "-122.3300624"
}],
"jobPostStatus": {
"name": "Open"
},
"employer": {
"id": "584917a6e660b2d8a5b46bd1",
"name": "Huntr",
"domain": "huntr.co",
"isPartner": false
},
"employerId": "584917a6e660b2d8a5b46bd1",
"tags": [{
"id": "6375bf49678aa421b84e8743",
"name": "🔥 Hot Jobs",
"description": "High demand job posts",
"color": "#FF0000",
}]
}
This endpoint creates a single Job Post. If the job post status is Open
, then this job will be published in your organization's job portal. See the memberEntries
key if you'd like to share the newly created job post with a list of job seekers in one request.
HTTP Request
POST https://api.huntr.co/org/job-posts
JSON Body Parameters
Parameter | Required | Type | Description |
---|---|---|---|
title |
yes | String | Job title |
jobType |
yes | String | A Job Type name |
jobPostStatusName |
yes | String | One of Open , Closed or Draft |
employer |
yes | Object | Required, unless the employerId field is included. Object is of type {"name": "Google", "domain": "google.com", "description": "American multinational technology company"} . If object is included, then it requires the domain key. If we find an employer in the Huntr database with this domain , we will link the job post to that employer; if not, then a new employer will be created and you will be able to edit the employer details from your organization's portal. |
employerId |
yes | String | Id for existing Huntr employer. Required, unless an employer object is included. |
applicationInstructions |
no | String | Application instructions |
url |
no | String | Url for the location of the original job post |
htmlDescription |
no | String | Job description in HTML format |
isRemote |
no | Boolean | Defines if this is a remote opportunity or not |
postDate |
no | Unix Timestamp | Timestamp denoting job post date. |
location |
no | Object | Location of the opportunity. Object of type {"name": "Huntr HQ", "address": "Seattle, WA, USA", "lat": "47.6038321", "lng": "-122.3300624"} . If object is included, it requires either the address key or both lat and lng keys. |
locations |
no | Array | Array of locations of the opportunity. Location object is of type {"name": "Huntr HQ", "address": "Seattle, WA, USA", "lat": "47.6038321", "lng": "-122.3300624"} . Each included object requires either the address key or both lat and lng keys. |
salary |
no | Object | A Salary object |
tagIds |
no | Array | Array of Tag ids for this job post |
memberEntries |
no | Array | Array of objects specifying the job seekers you want to share this new Job Post with. Each entry is an object with either an email or memberId key corresponding to the member you want to send the job post to: {"email": "[email protected]"} or {"memberId": "5b0379b5712bb674fd0d561e"} . If received, our system will queue up an asynchronous job to deliver this job post for each member included in memberEntries . The jobs should run and finish a few seconds after your request is received. Each delivery of the job post to a job seeker triggers a JOB_CREATED action you can listen to via our Webhooks; the Action body for the webhook will contain a jobPost key matching the job post that was just created. |
visibility |
no | String | one of VISIBLE , HIDDEN . If not provided, default value is VISIBLE |
visibleMemberGroupIds |
no | Array | Array of Member Group ids which this job post will be made visible to. If visibility is VISIBLE , this parameter has no effect. |
Send Job Posts to Job Seekers
curl --location --request POST 'https://api.huntr.co/org/job-posts/send-to-members' \
--header 'Authorization: Bearer <ORG_ACCESS_TOKEN>' \
--header 'Content-Type: application/json' \
--data-raw '{
"jobPostIds": ["6041976280901dae754f0851", "6041976280901dae754f0852"],
"memberEntries": [
{"email": "[email protected]"},
{"memberId": "5b0379b5712bb674fd0d561e"}
]
}'
The above command sends 2 job posts to 2 job seekers and returns a
200 OK
status response
This endpoint sends multiple job posts to job seekers' Huntr boards in the form of a new Job card in each board. You can see all the job seekers that a job post has been shared with via the Pipeline tab of the Job Post details page in your advisor dashboard.
This endpoint does not run synchronously, it only queues up asynchronous jobs to deliver the job posts to each member included in memberEntries
. Thus, a 200
status response does not imply successful delivery, it only means that your job post delivery requests have been successfully queued up. The jobs should run and finish a few seconds after your request is received. Each delivery of the job post to a job seeker triggers a JOB_CREATED
action you can listen to via our Webhooks. The Action body for the webhook will contain a jobPost
key matching the job posts in the jobPostIds
key of the original job-posts/send-to-members
request.
HTTP Request
POST https://api.huntr.co/org/job-posts/send-to-members
JSON Body Parameters
Parameter | Required | Type | Description |
---|---|---|---|
jobPostIds |
yes | Array | array of ids for the job posts you want to send |
memberEntries |
yes | Array | Array of objects specifying the job seekers you want to share these job posts with. Each entry is an object with either an email or memberId key corresponding to the member you want to send the job post to: {"email": "[email protected]"} or {"memberId": "5b0379b5712bb674fd0d561e"} . |
Tags
Tag Resource
{
"id": "6375bf49678aa421b84e8743",
"name": "🔥 Hot Jobs",
"description": "High demand job posts",
"color": "#FF0000",
"targetObjects": ["JOB_POST"]
}
Tags are keywords or identifiers which can be applied to records within Huntr.
Field | Type | Description |
---|---|---|
id |
String | id for the tag |
name |
String | Display name for the tag |
description |
String | An internal description for what the tag describes |
color |
String | Hex color for displaying this tag |
targetObjects |
Array | Array of Target Objects this tag can be applied to |
Create Tag
curl --location --request POST 'https://api.huntr.co/org/tags' \
--header 'Authorization: Bearer <ORG_ACCESS_TOKEN>' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "🔥 Hot Jobs",
"description": "High demand job posts",
"color": "#FF0000",
"targetObjects": ["JOB_POST"]
}'
The above command returns JSON structured like this:
{
"id": "6375bf49678aa421b84e8743",
"name": "🔥 Hot Jobs",
"description": "High demand job posts",
"color": "#FF0000",
"targetObjects": ["JOB_POST"]
}
This endpoint creates a new tag.
HTTP Request
POST https://api.huntr.co/org/tags
JSON Body Parameters
Parameter | Required | Type | Description |
---|---|---|---|
name |
yes | String | Tag name |
description |
no | String | Internal tag description |
color |
yes | String | Display color for this tag |
targetObjects |
yes | Array | Array of Target Objects this tag can be applied to |
List Tags
curl "https://api.huntr.co/org/tags"
-H "Authorization: Bearer <ORG_ACCESS_TOKEN>"
The above command returns JSON structured like this:
[
{
"id": "6375bf49678aa421b84e8743",
"name": "🔥 Hot Jobs",
"description": "High demand job posts",
"color": "#FF0000",
"targetObjects": ["JOB_POST"]
},
{
"id": "6375bf2a678aa421b84e872e",
"name": "💎 Exclusive",
"description": "Organization exclusive jobs",
"color": "#A0A0FF",
"targetObjects": ["JOB_POST"]
}
]
This endpoint lists all tags created by your organization
HTTP Request
GET https://api.huntr.co/org/tags
Target Objects
Target Objects refer to the types resources a tag can be applied to. There is currently only one type of target object
Target Object | Description |
---|---|
JOB_POST |
Tag can be applied to Job Posts |
Salary
Salary Resource
A salary object:
{
"actual": 120000,
"currency": "USD",
"interval": "ANNUAL"
}
This resource represents a salary. There's two possible salary formats:
- A specific salary, in which case we would use the
actual
key. - A salary range, in which case we would use the
min
andmax
keys.
Parameter | Type | Description |
---|---|---|
actual |
Number | Represents a specific salary amount |
min |
Number | Represents the minimum value in a salary range |
max |
Number | Represents the maximum value in a salary range |
currency |
String | One of ISO 4217 currency codes |
interval |
String | One of ANNUAL , MONTHLY , WEEKLY , DAILY or HOURLY |
Activities
Activity Resource
An activity object:
{
"id": "5eb0abc13fac1580adcf5b19",
"title": "Follow Up",
"note": "",
"completed": false,
"createdByWorkflow": false,
"startAt": 1588809403,
"createdAt": 1588636609,
"ownerMember": {
"id": "5e6a7bbdc56bc6669e3da86c",
"givenName": "Ruipo",
"familyName": "Fauli",
"email": "[email protected]",
"createdAt": 1584036797,
"isActive": true
},
"creatorMember": {
"id": "5b2bbb5837fbc835bbe3218b",
"givenName": "Advisor",
"familyName": "Two",
"email": "[email protected]",
"createdAt": 1529592664,
"isActive": true
},
"job": {
"id": "5eb0a4338899ba51bf96f645",
"title": "Software Engineer",
"location": {},
"createdAt": 1588634675
},
"employer": {
"id": "5a016b5221bce9aa2bd70296",
"name": "MailChimp",
"domain": "mailchimp.com",
"foundedYear": 2001,
"isPartner": true,
"description": "MailChimp provides marketing automation for e-commerce businesses. Send beautiful emails, connect your e-commerce store, advertise, and build your brand.\n",
"location": "675 Ponce De Leon Ave NE #5000, Atlanta, GA 30308, USA"
},
"activityCategory": {
"id": "5e448f3bf2b856c29af1128c",
"name": "Follow Up"
}
}
An activity represents any task and/or event that happens during a job seeker's search. Activities represent real world things like an On Site Interview
or an Offer Received
, or even a Prep for Interview
task. Each activity is clearly classified into an Activity Category.
Field | Type | In all events | Description |
---|---|---|---|
id |
String | true | id for the activity |
title |
String | true | Title of the activity |
note |
String | false | Note about activity |
completed |
Boolean | true | Completion state of activity |
completedAt |
Unix timestamp | false | If activity.completed is true, then this is the date when activity was completed |
startAt |
Unix timestamp | false | Date when activity is/was scheduled to start |
endAt |
Unix timestamp | false | Date when activity is/was scheduled to end |
createdAt |
Unix timestamp | true | Date when activity was created |
activityCategory |
Object | true | Activity Category representing the type of Activity |
job |
Object | false | Job linked to activity |
jobPost |
Object | false | Job Post linked to activity, if any |
employer |
Object | false | If activity is linked to a job, then this is the job's employer |
ownerMember |
Object | true | Member who owns the board where the activity was added. i.e: your job seeker |
creatorMember |
Object | false | Member who created the activity. In most cases, this is your job seeker; but if an advisor created this activity, then it would be your advisor. |
createdByWorkflow |
Boolean | true | If true, it means the Activity was created by the Huntr system as a response to a user action; like a job being moved to a specific stage. See Workflows for more information |
List Activities
curl "https://api.huntr.co/org/activities?limit=4"
-H "Authorization: Bearer <ORG_ACCESS_TOKEN>"
The above command returns JSON structured like this:
{
"data": [
{
"id": "5eb0a92378ddef71d0748fb9",
"title": "Prep for Interviews",
"note": "",
"completed": false,
"createdByWorkflow": false,
"startAt": 1588635936,
"createdAt": 1588635939,
"ownerMember": {
"id": "5b2bbb5837fbc835bbe32187",
"givenName": "Nicole",
"familyName": "Thinkful",
"email": "[email protected]",
"createdAt": 1529592664,
"isActive": true
},
"creatorMember": {
"id": "5b2bbb5837fbc835bbe3218b",
"givenName": "Advisor",
"familyName": "Two",
"email": "[email protected]",
"createdAt": 1529592664,
"isActive": true
},
"activityCategory": {
"id": "5e448f3bf2b856c29af112a7",
"name": "Prep for Interview"
}
},
{
"id": "5eb0a4745125d758466dea60",
"title": "Applied",
"completed": true,
"createdByWorkflow": true,
"startAt": 1588634685,
"completedAt": 1588634740,
"createdAt": 1588634740,
"ownerMember": {
"id": "5e6a7bbdc56bc6669e3da86c",
"givenName": "Ruipo",
"familyName": "Fauli",
"email": "[email protected]",
"createdAt": 1584036797,
"isActive": true
},
"job": {
"id": "5eb0a4338899ba51bf96f645",
"title": "No Job Title",
"location": {},
"createdAt": 1588634675
},
"employer": {
"id": "5a016b5221bce9aa2bd70296",
"name": "MailChimp",
"domain": "mailchimp.com",
"foundedYear": 2001,
"isPartner": true,
"description": "MailChimp provides marketing automation for e-commerce businesses. Send beautiful emails, connect your e-commerce store, advertise, and build your brand.\n",
"location": "675 Ponce De Leon Ave NE #5000, Atlanta, GA 30308, USA"
},
"activityCategory": {
"id": "5e448f3bf2b856c29af11289",
"name": "Apply"
}
},
{
"id": "5eb0a4058899ba51bf96f643",
"title": "Got to Networking Event",
"note": "",
"completed": false,
"createdByWorkflow": false,
"startAt": 1588634619,
"createdAt": 1588634629,
"ownerMember": {
"id": "5e6a7bbdc56bc6669e3da86c",
"givenName": "Ruipo",
"familyName": "Fauli",
"email": "[email protected]",
"createdAt": 1584036797,
"isActive": true
},
"creatorMember": {
"id": "5b2bbb5837fbc835bbe3218b",
"givenName": "Advisor",
"familyName": "Two",
"email": "[email protected]",
"createdAt": 1529592664,
"isActive": true
},
"activityCategory": {
"id": "5e448f3bf2b856c29af112b3",
"name": "Networking Event"
}
},
{
"id": "5eaf7fa5f0cf6b54208282be",
"title": "Offer received",
"completed": true,
"createdByWorkflow": true,
"startAt": 1588559758,
"completedAt": 1588559781,
"createdAt": 1588559781,
"ownerMember": {
"id": "5eae15c3a4e9196db88cb394",
"givenName": "Rennie",
"familyName": "Haylock",
"email": "[email protected]",
"createdAt": 1588467139,
"isActive": true
},
"job": {
"id": "5eaf7f8e7d33a823fd5a06c1",
"title": "No Job Title",
"location": {},
"createdAt": 1588559758
},
"employer": {
"id": "5903fe3a0ceb436653b2bf7d",
"name": "ESPN",
"domain": "espn.com",
"isPartner": false,
"description": "Visit ESPN to get up-to-the-minute sports news coverage, scores, highlights and commentary for NFL, MLB, NBA, College Football, NCAA Basketball and more.",
"location": "935 Middle St, Bristol, CT 06010, USA"
},
"activityCategory": {
"id": "5e448f3bf2b856c29af1129c",
"name": "Offer Received"
}
}
],
"next": "5eaf7fa5f0cf6b54208282be"
}
This endpoint retrieves all activities for your organization, sorted from most recently created to oldest.
HTTP Request
GET https://api.huntr.co/org/activities
Query Parameters
Parameter | Type | Default | Description |
---|---|---|---|
owner_member_id |
String | none | If set, will only return activities belonging to member |
creator_member_id |
String | none | If set, will only return activities executed by member |
job_id |
String | none | If set, will only return activities linked to job |
activity_category_id |
String | none | If set, will only return Activity activities of the specified activity category |
employer_id |
String | none | If set, will only return activities linked to employer |
limit |
Integer | 100 | Defines the maximum number of activities to return |
next |
String | none | If set, returns the next set of results after the object id provided |
created_after |
Unix timestamp | none | If set, will only return activities created after created_after |
created_before |
Unix timestamp | none | If set, will only return activities created before created_before |
Activity Categories
Activity Category Resource
An activity category object:
{
"id": "5b05ca43f193b66c692c29a0",
"name": "On Site Interview",
}
This resource classifies a specific instance of an Activity into one of a discrete set of Activity Categories.
Parameter | Type | Default | Description |
---|---|---|---|
id |
String | none | id for the activity category |
name |
String | none | name for the activity category |
Types of Activity Categories
This is a list of all the activity categories currently available.
activityCategory.name |
Description |
---|---|
Email |
Job seeker needs to send an email |
Meeting |
Job seeker is attending a meeting |
Phone Call |
Job seeker needs to make a phone call |
Reach Out |
Job seeker needs to reach out to someone |
Get Reference |
Job seeker needs to get a reference(s) |
Prep Cover Letter |
Job seeker needs to prepare their cover letter |
Prep Resume |
Job seeker needs to prepare their resume |
Apply |
Job seeker has applied to a job opportunity |
Follow Up |
Job seeker needs to follow up with someone |
Send Availability |
Job seeker needs to send their availability |
Prep for Interview |
Job seeker needs to prepare for an interview |
Phone Screen |
Job seeker has or completed a phone screen type interview |
Phone Interview |
Job seeker has or completed a phone interview |
Assignment |
Job seeker has or has completed an assignment |
On Site Interview |
Job seeker has or completed an on site interview |
Rejected |
Job seeker's application has been rejected by the employer |
Offer Received |
Job seeker has received an offer |
Decline Offer |
Job seeker declines an offer |
Accept Offer |
Job seeker accepts an offer |
Send Thank You |
Job seeker needs to send a thank you |
Networking Event |
Job seeker needs to or has attended a networking event |
Application Withdrawn |
Job seeker has withdrawn their application |
Other |
Other activities |
Key Activity Categories
Here is a shorter list of activity categories we believe represent important milestones in a job seeker's search:
activityCategory.name |
Description |
---|---|
Apply |
Job seeker has applied to a job opportunity |
Phone Screen |
Job seeker has scheduled or completed a phone screen type interview |
Phone Interview |
Job seeker has scheduled or completed a phone interview |
Assignment |
Job seeker has scheduled or completed an assignment |
On Site Interview |
Job seeker has scheduled or completed an on site interview |
Rejected |
Job seeker's application has been rejected by the employer |
Offer Received |
Job seeker has received an offer |
Decline Offer |
Job seeker has declined an offer |
Accept Offer |
Job seeker has accepted an offer |
Application Withdrawn |
Job seeker has withdrawn their application |
List Activity Categories
curl "https://api.huntr.co/org/activity-categories"
-H "Authorization: Bearer <ORG_ACCESS_TOKEN>"
The above command returns JSON structured like this:
{
"data": [
{
"name" : "Email",
"id" : "5e448e8df2b856c29af11181"
},
{
"name" : "Meeting",
"id" : "5e448f3bf2b856c29af11280"
},
{
"name" : "Phone Call",
"id" : "5e448f3bf2b856c29af11281"
},
{
"name" : "Reach Out",
"id" : "5e448f3bf2b856c29af11284"
},
{
"name" : "Get Reference",
"id" : "5e448f3bf2b856c29af11285"
},
{
"name" : "Prep Cover Letter",
"id" : "5e448f3bf2b856c29af11288"
},
{
"name" : "Apply",
"id" : "5e448f3bf2b856c29af11289"
},
{
"name" : "Follow Up",
"id" : "5e448f3bf2b856c29af1128c"
},
{
"name" : "Send Availability",
"id" : "5e448f3bf2b856c29af1128d"
},
{
"name" : "Phone Screen",
"id" : "5e448f3bf2b856c29af1128f"
},
{
"name" : "Phone Interview",
"id" : "5e448f3bf2b856c29af11293"
},
{
"name" : "Assignment",
"id" : "5e448f3bf2b856c29af11295"
},
{
"name" : "On Site Interview",
"id" : "5e448f3bf2b856c29af11296"
},
{
"name" : "Rejected",
"id" : "5e448f3bf2b856c29af11299"
},
{
"name" : "Offer Received",
"id" : "5e448f3bf2b856c29af1129c"
},
{
"name" : "Prep Resume",
"id" : "5e448f3bf2b856c29af1129d"
},
{
"name" : "Decline Offer",
"id" : "5e448f3bf2b856c29af1129f"
},
{
"name" : "Accept Offer",
"id" : "5e448f3bf2b856c29af112a1"
},
{
"name" : "Other",
"id" : "5e448f3bf2b856c29af112a3"
},
{
"name" : "Prep for Interview",
"id" : "5e448f3bf2b856c29af112a7"
},
{
"name" : "Send Thank You",
"id" : "5e448f3bf2b856c29af112ad"
},
{
"name" : "Networking Event",
"id" : "5e448f3bf2b856c29af112b3"
},
{
"name" : "Application Withdrawn",
"id" : "5e9a596e53a63660289cd97c"
}
]
}
This endpoint retrieves all activity categories.
Actions
Action Resource
An action object:
{
"id": "5eb0a4338899ba51bf96f646",
"actionType": "JOB_CREATED",
"date": 1588634675,
"ownerMember": {
"id": "5e6a7bbdc56bc6669e3da86c",
"givenName": "Ruipo",
"familyName": "Fauli",
"email": "[email protected]",
"createdAt": 1584036797,
"isActive": true
},
"creatorMember": {
"id": "5b2bbb5837fbc835bbe3218b",
"givenName": "Advisor",
"familyName": "Two",
"email": "[email protected]",
"createdAt": 1529592664,
"isActive": true
},
"job": {
"id": "5eb0a4338899ba51bf96f645",
"title": "No Job Title",
"salary": "$90k",
"location": {},
"createdAt": 1588634675
},
"employer": {
"id": "5a016b5221bce9aa2bd70296",
"name": "MailChimp",
"domain": "mailchimp.com",
"foundedYear": 2001,
"isPartner": true,
"description": "MailChimp provides marketing automation for e-commerce businesses. Send beautiful emails, connect your e-commerce store, advertise, and build your brand.\n",
"location": "675 Ponce De Leon Ave NE #5000, Atlanta, GA 30308, USA"
},
"toList": {
"name": "Wishlist"
},
"createdByWorkflow": false,
"createdAt": 1588634675,
"jobId": "5eb0a4338899ba51bf96f645"
}
An action represents CRUD (Create, read, update and delete) type events that occur within the Huntr application in the context of your organization. Essentially, whenever your job seekers or advisors create, update or delete a Job, Activity, Contact, or Note a new Action will be created representing that event:
Field | Type | In all actions | Description |
---|---|---|---|
id |
String | true | id for the action |
actionType |
String | true | Type of action |
date |
Unix timestamp | true | Date when the action happened |
createdByWorkflow |
Boolean | true | If true, it means the Action was taken by the Huntr system as a response to another user action; like a job being moved to a specific stage. See Workflows for more information. |
creatorMember |
Object | true | Member who took the action. In most cases, this is your job seeker; but if an advisor took the action, then it would be your advisor. |
ownerMember |
Object | false | Member who owns the board where the action occurred. i.e: your job seeker |
jobId |
String | false | id for job linked to this action |
job |
Object | false | Job linked to this action |
jobs |
Array | false | Jobs linked to this action; only applies to Contact and Document related actions, since a contact and a document can be linked to multiple jobs |
jobPostId |
String | false | id for job post linked to this action |
jobPostIds |
Array | false | array of ids for job posts linked to this action |
jobPost |
Object | false | Job Post linked to this action |
employerId |
String | false | id for Employer linked to this action |
employer |
Object | false | Employer linked to this action |
employers |
Array | false | Employers linked to this action; only applies to Contact actions since a contact can be linked to multiple employers |
activityId |
String | false | id for Activity linked to this action |
activity |
Object | false | Activity linked to this action; only applies to Activity actions |
activityCategory |
Object | false | Activity Category linked to this action; only applies to Activity actions |
boardId |
String | false | id for Board linked to this action. i.e: Board where job was created in a JOB_CREATED action |
noteId |
String | false | id for note linked to this action |
note |
Object | false | Note linked to this action; only applies to Note actions |
contactId |
String | false | id for contact linked to this action |
contact |
Object | false | Contact linked to this action; only applies to Contact actions |
documentId |
String | false | id for document linked to this action |
document |
Object | false | Document linked to this action; only applies to Document actions |
fromList |
Object | false | List from which job was moved in a JOB_MOVED action |
fromListId |
String | false | List id from which a job was moved in JOB_MOVED action |
toList |
Object | false | List to which a job was moved or added to in JOB_MOVED and JOB_CREATED actions |
toListId |
String | false | List id to which a job was moved or added to in JOB_MOVED and JOB_CREATED actions |
member |
Object | false | Member created in MEMBER_CREATED actions |
organizationInvitation |
Object | false | Organization Invitation that was accepted on MEMBER_CREATED actions. |
organizationEmployerRequest |
Object | false | Organization Employer Request related to Employer portal actions like ORGANIZATION_EMPLOYER_REQUEST_CREATED ORGANIZATION_EMPLOYER_REQUEST_VERIFIED ORGANIZATION_EMPLOYER_REQUEST_APPROVED ORGANIZATION_EMPLOYER_REQUEST_DECLINED . |
organizationEmployerPartnership |
Object | false | Organization Employer Partnership related to Employer portal actions like ORGANIZATION_EMPLOYER_PARTNERSHIP_CREATED . |
update |
Object | false | Entry used to update the resource, only shown in Update actions |
Action Types
There are multiple action types:
Action Type | Description | Extra fields |
---|---|---|
MEMBER_CREATED |
A new member is created. i.e: job seeker has accepted invitation | member organizationInvitation organizationInvitationId |
MEMBER_UPDATED |
Details for a member have been updated. i.e: A custom field or advisor update for a member | member update |
MEMBER_DELETED |
A member is deleted. i.e: job seeker has been deleted | member |
MEMBER_DEACTIVATED |
A member is deactivated. i.e: job seeker has been deactivated | member |
JOB_CREATED |
A new job is created | job employer toList |
JOB_UPDATED |
A job is updated | job employer update |
JOB_DELETED |
A job is deleted | jobId employer |
JOB_MOVED |
A job is moved from one stage to another | job employer fromList toList |
ACTIVITY_CREATED |
A new activity is created | activity activityCategory job employer |
ACTIVITY_UPDATED |
An activity is updated | activity activityCategory job employer update |
ACTIVITY_DELETED |
An activity is deleted | activityId activityCategory job employer |
NOTE_CREATED |
A new note is created | note job employer |
NOTE_UPDATED |
A note is updated | note job employer |
NOTE_DELETED |
A note is deleted | noteId job employer |
CONTACT_CREATED |
A new contact is created | contact employers jobs |
CONTACT_UPDATED |
A contact is updated | contact employers jobs update |
CONTACT_DELETED |
A contact is deleted | contactId |
ORGANIZATION_COMPANY_CREATED |
An employer is saved through the '+ Company' Advisor portal modal | employer |
ORGANIZATION_COMPANY_UPDATED |
An employer's info is updated through the Advisor portal | employer update |
JOB_POST_CREATED |
A new job post is created | jobPost employer |
JOB_POST_UPDATED |
A job post is updated | jobPost employer update |
JOB_POST_DELETED |
A job post is deleted | jobPostId employer |
BULK_JOB_POST_UPDATED |
Multiple job posts are updated | jobPostIds update |
GOAL_CREATED |
A new goal is created | goal |
GOAL_UPDATED |
A goal is updated | goal update |
GOAL_ENROLLMENT_CREATED |
A job seeker is enrolled into a goal | goal goalEnrollment |
GOAL_ENROLLMENT_CONCLUDED |
A job seeker is unenrolled from a goal | goal goalEnrollment update |
GOAL_PROGRESS_UPDATED |
Triggered every time there is progress from a job seeker towards a goal | goal goalEnrollment goalProgress update |
GOAL_PROGRESS_COMPLETED |
Triggered when a job seeker has completed a goal | goal goalEnrollment goalProgress update |
GOAL_PROGRESS_INCOMPLETE |
Triggered if a job seeker did not complete the goal on time and the end date for the goal has passed | goal goalEnrollment goalProgress update |
GOAL_PROGRESS_IN_PROGRESS |
Triggered on the start date of a goal progress record | goal goalEnrollment goalProgress update |
GOAL_PROGRESS_UNENROLLED |
Triggered after an advisor unenrolls a job seeker from a goal, thus marking all upcoming goal progress records as unenrolled | goal goalEnrollment goalProgress update |
DOCUMENT_CREATED |
A new document is created | document jobs |
DOCUMENT_UPDATED |
A document is updated | document jobs update |
DOCUMENT_DELETED |
A document is deleted | documentId |
ORGANIZATION_EMPLOYER_REQUEST_CREATED |
Triggered immediately after a new employer request is created. When first triggered, request is still not linked to an employer in our DB. | organizationEmployerRequest |
ORGANIZATION_EMPLOYER_REQUEST_VERIFIED |
Triggered after employer verifies their email and claims or joins their corresponding employer account. We suggest listening to this action instead of ORGANIZATION_EMPLOYER_REQUEST_CREATED for new request notifications. |
organizationEmployerRequest employer |
ORGANIZATION_EMPLOYER_REQUEST_APPROVED |
An employer request is approved by a team member | organizationEmployerRequest employer |
ORGANIZATION_EMPLOYER_REQUEST_DECLINED |
An employer request is declined by a team member | organizationEmployerRequest employer |
ORGANIZATION_EMPLOYER_PARTNERSHIP_CREATED |
First user from a new employer has joined your portal | organizationEmployerPartnership employer |
List Actions
curl "https://api.huntr.co/org/actions?limit=3"
-H "Authorization: Bearer <ORG_ACCESS_TOKEN>"
The above command returns JSON structured like this:
{
"data": [
{
"id": "5eb0abc13fac1580adcf5b1a",
"actionType": "ACTIVITY_CREATED",
"date": 1588636609,
"ownerMember": {
"id": "5e6a7bbdc56bc6669e3da86c",
"givenName": "Ruipo",
"familyName": "Fauli",
"email": "[email protected]",
"createdAt": 1584036797,
"isActive": true
},
"creatorMember": {
"id": "5b2bbb5837fbc835bbe3218b",
"givenName": "Advisor",
"familyName": "Two",
"email": "[email protected]",
"createdAt": 1529592664,
"isActive": true
},
"job": {
"id": "5eb0a4338899ba51bf96f645",
"title": "No Job Title",
"salary": "$90k",
"location": {},
"createdAt": 1588634675
},
"employer": {
"id": "5a016b5221bce9aa2bd70296",
"name": "MailChimp",
"domain": "mailchimp.com",
"foundedYear": 2001,
"isPartner": true,
"description": "MailChimp provides marketing automation for e-commerce businesses. Send beautiful emails, connect your e-commerce store, advertise, and build your brand.\n",
"location": "675 Ponce De Leon Ave NE #5000, Atlanta, GA 30308, USA"
},
"activity": {
"id": "5eb0abc13fac1580adcf5b19",
"title": "Follow Up",
"note": "With pete",
"completed": false,
"createdByWorkflow": false,
"startAt": 1588809403,
"createdAt": 1588636609
},
"activityCategory": {
"id": "5e448f3bf2b856c29af1128c",
"name": "Follow Up"
},
"createdByWorkflow": false,
"createdAt": 1588636609,
"jobId": "5eb0a4338899ba51bf96f645",
"activityId": "5eb0abc13fac1580adcf5b19"
},
{
"id": "5eb0a43d8899ba51bf96f647",
"actionType": "JOB_MOVED",
"date": 1588634685,
"ownerMember": {
"id": "5e6a7bbdc56bc6669e3da86c",
"givenName": "Ruipo",
"familyName": "Fauli",
"email": "[email protected]",
"createdAt": 1584036797,
"isActive": true
},
"creatorMember": {
"id": "5b2bbb5837fbc835bbe3218b",
"givenName": "Advisor",
"familyName": "Two",
"email": "[email protected]",
"createdAt": 1529592664,
"isActive": true
},
"job": {
"id": "5eb0a4338899ba51bf96f645",
"title": "No Job Title",
"salary": "$90k",
"location": {},
"createdAt": 1588634675
},
"employer": {
"id": "5a016b5221bce9aa2bd70296",
"name": "MailChimp",
"domain": "mailchimp.com",
"foundedYear": 2001,
"isPartner": true,
"description": "MailChimp provides marketing automation for e-commerce businesses. Send beautiful emails, connect your e-commerce store, advertise, and build your brand.\n",
"location": "675 Ponce De Leon Ave NE #5000, Atlanta, GA 30308, USA"
},
"fromList": {
"name": "Wishlist"
},
"toList": {
"name": "Applied"
},
"createdByWorkflow": false,
"createdAt": 1588634685,
"jobId": "5eb0a4338899ba51bf96f645"
},
{
"id": "5eae1460180a05fbb45f73af",
"actionType": "NOTE_CREATED",
"date": 1588466784,
"ownerMember": {
"id": "5eae15c3a4e9196db88cb394",
"givenName": "Rennie",
"familyName": "Haylock",
"email": "[email protected]",
"createdAt": 1588467139,
"isActive": true
},
"creatorMember": {
"id": "5eae15c3a4e9196db88cb394",
"givenName": "Rennie",
"familyName": "Haylock",
"email": "[email protected]",
"createdAt": 1588467139,
"isActive": true
},
"job": {
"id": "5d7980458a3fd22bfe291f38",
"title": "No Job Title",
"url": "http://localhost:3000/app/track/boards/5cc7ab1f5073b727a3862719/board",
"location": {
"address": ""
},
"createdAt": 1568243781
},
"employer": {
"id": "5d798045ad35fc0158480b95",
"name": "The San Diego Foundation",
"domain": "sdfoundation.org",
"foundedYear": 1975,
"isPartner": false,
"description": "The San Diego Foundation is a community resource that improves San Diegans’ quality of life by creating equity and ensuring opportunities in the region.",
"location": "2508 Historic Decatur Rd #200, San Diego, CA 92106, USA"
},
"note": {
"id": "5eae14603eabef4cb322078e",
"text": "Great Interview"
},
"createdByWorkflow": false,
"createdAt": 1588466784,
"jobId": "5d7980458a3fd22bfe291f38",
"noteId": "5eae14603eabef4cb322078e"
}
],
"next": "5eae1460180a05fbb45f73af"
}
This endpoint retrieves all actions for your organization, sorted from most recently created to oldest.
HTTP Request
GET https://api.huntr.co/org/actions
Query Parameters
Parameter | Type | Default | Description |
---|---|---|---|
action_type |
String | none | If set, will only return actions of the specific type. See action types section for possible action type name values. |
owner_member_id |
String | none | If set, will only return actions belonging to member |
creator_member_id |
String | none | If set, will only return actions executed by member |
job_id |
String | none | If set, will only return actions linked to job |
activity_id |
String | none | If set, will only return actions for the specified activity |
note_id |
String | none | If set, will only return actions for the specified note |
contact_id |
String | none | If set, will only return actions for the specified contact |
activity_category_id |
String | none | If set, will only return Activity actions of the specified activity category |
employer_id |
String | none | If set, will only return actions linked to employer |
limit |
Integer | 100 | Defines the maximum number of actions to return |
next |
String | none | If set, returns the next set of results after the object id provided |
created_after |
Unix timestamp | none | If set, will only return actions created after created_after |
created_before |
Unix timestamp | none | If set, will only return actions created before created_before |
Notes
Note Resource
A note object:
{
"id": "5b05ca42f193b66c692c29a0",
"text": "Interview went well. It lasted about 2 hours and was half technical and half culture fit.",
"htmlText": "<p><b>Interview went well.</b> It lasted about 2 hours and was half technical and half culture fit.</p>",
}
This resource represents a note.
Parameter | Type | Default | Description |
---|---|---|---|
id |
String | none | id for the note |
text |
String | none | text in the note |
htmlText |
String | none | text in the note in html format |
List Internal Member Notes
curl "https://api.huntr.co/org/notes/members?limit=3"
-H "Authorization: Bearer <ORG_ACCESS_TOKEN>"
The above command returns JSON structured like this:
{
"data": [
{
"id": "653180e3741d48c684c7f4ba",
"text": "Parker is doing a great job of sending applications!",
"htmlText": "<p>Parker is doing a great job of sending applications!</p>",
"memberId": "5ebcba7d91ec9047d83f158f"
},
{
"id": "6531809d3b7961c682801699",
"text": "Joe just finished his first interview.",
"htmlText": "<p>Joe just finished his first interview</p>",
"memberId": "5e6a862b37d66bc3840bfcc5"
},
{
"id": "63be5e43ee7cdb028e33f39c",
"text": "Hello world",
"htmlText": "<p>Hello world</p>",
"memberId": "61b78473f77ae961e214e581"
}
],
"next": "63be5e43ee7cdb028e33f39c"
}
This endpoint retrieves all internal member notes (written by staff/advisors from your org) found in job seeker profiles via the admin dashboard, sorted from most recently created to oldest.
HTTP Request
GET https://api.huntr.co/org/notes/members
Query Parameters
Parameter | Type | Default | Description |
---|---|---|---|
limit |
Integer | 100 | Defines the maximum number of notes to return |
next |
String | none | If set, returns the next set of results after the object id provided |
Create Internal Member Note
curl --location --request POST 'https://api.huntr.co/org/notes/members' \
--header 'Authorization: Bearer <ORG_ACCESS_TOKEN>' \
--header 'Content-Type: application/json' \
--data-raw '{
"memberId": "64090fa941a8885a417d0c99",
"htmlText": "This is an internal note about <b>John H.</b> one of our members. Happy to say he is excelling in his job search!"
}'
The above command returns JSON structured like this:
{
"id": "65318ebf41e0bede400849ef",
"text": "This is an internal note about John H. one of our members. Happy to say he is excelling in his job search!",
"htmlText": "This is an internal note about <b>John H.</b> one of our members. Happy to say he is excelling in his job search!",
"memberId": "64090fa941a8885a417d0c99"
}
This endpoint creates a new internal note (i.e: notes private to org staff) for an organization member. You'll see these notes in the member's profile, through your org's admin dashboard.
HTTP Request
POST https://api.huntr.co/org/notes/members
JSON Body Parameters
Parameter | Required | Type | Description |
---|---|---|---|
memberId |
no | String | Member id of the member this note is linked to. Either memberId or memberEmail must be set. |
memberEmail |
no | String | Member email of the member this note is linked to. Either memberId or memberEmail must be set. |
htmlText |
yes | String | The content of the note. You can pass either simple text or valid html (to support features like bold , links , underline , etc). |
Delete Internal Member Note
curl --location --request DELETE 'https://api.huntr.co/org/notes/members/note/65318ebf41e0bede400849ef' \
--header 'Authorization: Bearer <ORG_ACCESS_TOKEN>' \
--header 'Content-Type: application/json' \
The above command returns the deleted note in JSON structured like this:
{
"id": "65318ebf41e0bede400849ef",
"text": "This is an internal note about John H. one of our members. Happy to say he is excelling in his job search!",
"htmlText": "This is an internal note about <b>John H.</b> one of our members. Happy to say he is excelling in his job search!",
"memberId": "64090fa941a8885a417d0c99"
}
This endpoint deletes an internal member note.
HTTP Request
DELETE https://api.huntr.co/org/notes/members/note/<ID>
URL Parameters
Parameter | Description |
---|---|
ID | The ID of the note to delete |
Contacts
Contact Resource
A contact object:
{
"id": "5b05ca43f193b64c692c29a0",
"firstName": "Pepe",
"lastName": "Alava",
"email": "[email protected]",
"title": "HR Manager",
"location": "Seattle, WA USA",
"profiles": {
"linkedin" : "pepealava",
"twitter" : "pepealava",
"googlePlus" : "pepealava",
"crunchbase" : "pepealava",
"facebook" : "pepealava",
"github" : "pepealava",
"aboutme" : "pepealava",
"gravatar" : "pepealava"
}
}
This resource represents a contact.
Parameter | Type | Default | Description |
---|---|---|---|
id |
String | none | id for the note |
firstName |
String | none | Contact's first name |
lastName |
String | none | Contact's last name |
email |
String | none | Contact's email |
title |
String | none | Contact's job title |
location |
String | none | Contact's location |
profiles |
Object | none | Contact's social media profile handles |
Documents
Document Resource
A document object:
{
"id": "622bc9862a2ee4f9779277eb",
"title": "Resume",
"name": "MyResume.pdf",
"url": "https://huntr-documents.s3.amazonaws.com/8b33e720-46f7-45b9-be76-b163be75fbb6/MyResume.pdf",
"extension": "pdf",
"documentCategoryName": "Resume"
}
This resource represents a document.
Parameter | Type | Default | Description |
---|---|---|---|
id |
String | none | id for the document |
title |
String | none | Document's title |
name |
String | none | Document's file name |
url |
String | none | URL where document file is hosted. This url is protected, thus the document is not accessible. |
extension |
String | none | Document's file extension |
documentCategoryName |
String | none | Document category name |
Goals
Goal Resource
A goal object:
{
"id": "61bf6eef5fda60b9fb7f3978",
"name": "Log 5 activities of type Phone Call each wee",
"description": "Job seekers have to complete 5 activities of type Phone Call each week for 4 weeks from the moment they are enrolled into this goal.\n\nWeekly goal intervals begin on Monday of every week.\n\nJob seekers will be enrolled manually by advisors.",
"instructions": "<p>These are some instructions! They have a <a href=\"https://google.com\" target=\"_blank\">link too</a></p>",
"status": "ACTIVE",
"scheduleType": "RECURRING",
"objectiveEntity": "Activity",
"objectiveTargetType": "NUMERIC",
"objectiveEntityConditions": [
{
"operator": "IS_IN",
"key": "_activityCategory",
"value": [
"5e448f3bf2b856c29af11281"
]
},
{
"operator": "EQUAL",
"key": "completed",
"value": true
}
],
"objectiveNumericTarget": 5,
"enrollmentType": "MANUAL",
"enrollmentTriggers": [],
"enrollmentStartDate": 1639935727,
"ownerMember": {
"id": "5e6a7bbdc56bc6669e3da86c",
"givenName": "Ruipo",
"familyName": "Fauli",
"email": "[email protected]",
"createdAt": 1584036797,
"isActive": true
}
}
This resource represents a goal you've designed for your job seekers. Goals are like a blueprint of an objective you want your job seekers to accomplish. Our goals feature works with this goal resource along with Goal Enrollment and Goal Progress resources. While goals tell Huntr what you expect your job seekers to do, goal enrollments represent a job seeker's participation in a goal, and goal progress records represent a job seeker's performance towards a goal for a specific time window (i.e: performance towards a goal for a specific monthly or week interval). These three items provide everything you need to design goals and effectively track job seeker performance towards those goals.
Parameter | Type | Default | Description |
---|---|---|---|
id |
String | none | id for the goal |
name |
String | none | name of the goal |
description |
String | none | private internal description of the goal |
instructions |
String | none | public job seeker facing instructions of the goal |
status |
String | none | status of the goal |
scheduleType |
String | none | either RECURRING or ONE_TIME |
objectiveEntity |
String | none | either Activity , Job or Contact |
objectiveEntityConditions |
Array | none | For Activity entity types, details the Activity Category ids that count towards to goal. |
objectiveNumericTarget |
Number | none | Number of entities that must be saved or logged to complete the goal |
enrollmentType |
String | none | one of MANUAL , ON_SIGNUP or ON_TRIGGER |
enrollmentTriggers |
String | none | for ON_TRIGGER enrollmend, details the action that triggers the enrollment |
enrollmentStartDate |
Unix timestamp | none | date when auto enrollments should start |
oneTimeGoalDueDaysCount |
String | none | for ONE_TIME goals, details the number of days the job seeker has to complete this goal. |
List Goals
curl "https://api.huntr.co/org/goals"
-H "Authorization: Bearer <ORG_ACCESS_TOKEN>"
The above command returns JSON structured like this:
{
"data": [{
"id": "642711341daf29393e1b2351",
"name": "Weekly Application Goal",
"description": "Job seekers have to complete 5 activities of type Apply each week for 12 week(s) from the moment they are enrolled into this goal.\n\nJob seekers will be enrolled manually by advisors.",
"instructions": "<p>Each week, you must complete 5 job applications.</p>",
"status": "ACTIVE",
"scheduleType": "RECURRING",
"objectiveEntity": "Activity",
"objectiveTargetType": "NUMERIC",
"objectiveEntityConditions": [
{
"operator": "IS_IN",
"key": "_activityCategory",
"value": [
"635c14b97370b10fbb987f10"
]
},
{
"operator": "EQUAL",
"key": "completed",
"value": true
}
],
"objectiveNumericTarget": 5,
"enrollmentType": "MANUAL",
"enrollmentTriggers": [],
"enrollmentStartDate": 1680281939,
"goalRecurrence": {
"byMonth": [],
"byMonthDay": [],
"byYearDay": [],
"byWeekNumber": [],
"byWeekDay": [],
"byHour": [],
"byMinute": [],
"bySecond": [],
"frequency": 2,
"start": "2023-03-27T00:00:00.000Z",
"interval": 1,
"count": 12,
"timezone": "America/Los_Angeles"
},
"firstGoalInterval": {
"id": "642711541eaf29393e1b2354",
"nextIntervalId": "642711541daf29393e1b2355",
"intervalIndex": 1,
"timezone": "America/Los_Angeles",
"goalId": "642711541daf29393e1b2351",
"start": 1679900400,
"end": 1680505200
},
"currentGoalInterval": {
"id": "642711541eaf29393e1b2355",
"nextIntervalId": "642711541daf29393e1b2356",
"previousIntervalId": "642711541daf29393e1b2354",
"intervalIndex": 2,
"timezone": "America/Los_Angeles",
"goalId": "642711541daf29393e1b2351",
"start": 1680505200,
"end": 1681110000
}
},
{
"id": "642bd7b0089c281e8d21344e",
"name": "Interview Goal",
"description": "Job seekers have to complete 1 activities of type Interview each month for 6 month(s) from the moment they are enrolled into this goal.\n\nJob seekers will be enrolled manually by advisors.",
"instructions": "<p>Keep interviewing! Don't stop until you find that dream job 😊</p>",
"status": "ACTIVE",
"scheduleType": "RECURRING",
"objectiveEntity": "Activity",
"objectiveTargetType": "NUMERIC",
"objectiveEntityConditions": [
{
"operator": "IS_IN",
"key": "_activityCategory",
"value": [
"635c14b97771b10fbb987f10"
]
},
{
"operator": "EQUAL",
"key": "completed",
"value": true
}
],
"objectiveNumericTarget": 1,
"enrollmentType": "MANUAL",
"enrollmentTriggers": [],
"enrollmentStartDate": 1680594864,
"goalRecurrence": {
"byMonth": [],
"byMonthDay": [],
"byYearDay": [],
"byWeekNumber": [],
"byWeekDay": [],
"byHour": [],
"byMinute": [],
"bySecond": [],
"frequency": 1,
"start": "2023-04-01T00:00:00.000Z",
"interval": 1,
"count": 6,
"timezone": "America/Los_Angeles"
},
"firstGoalInterval": {
"id": "642bd7b0089c281e8d213451",
"nextIntervalId": "642bd7b0089c281e8d213452",
"intervalIndex": 1,
"timezone": "America/Los_Angeles",
"goalId": "642bd7b0089c281e8d21344e",
"start": 1680332400,
"end": 1682924400
},
"currentGoalInterval": {
"id": "642bd7b0089c281e8d213451",
"nextIntervalId": "642bd7b0089c281e8d213452",
"intervalIndex": 1,
"timezone": "America/Los_Angeles",
"goalId": "642bd7b0089c281e8d21344e",
"start": 1680332400,
"end": 1682924400
}
}]
}
This endpoint retrieves all goals for your organization. By default, only active goals are returned.
HTTP Request
GET https://api.huntr.co/org/goals
Query Parameters
Parameter | Type | Default | Description |
---|---|---|---|
includeInactive |
Boolean | false | If true, will return inactive goals alongside active goals. |
Retrieve a Goal
curl "https://api.huntr.co/org/goals/642711341daf29393e1b2351"
-H "Authorization: Bearer <ORG_ACCESS_TOKEN>"
The above command returns JSON structured like this:
{
"id": "642711341daf29393e1b2351",
"name": "Weekly Application Goal",
"description": "Job seekers have to complete 5 activities of type Apply each week for 12 week(s) from the moment they are enrolled into this goal.\n\nJob seekers will be enrolled manually by advisors.",
"instructions": "<p>Each week, you must complete 5 job applications.</p>",
"status": "ACTIVE",
"scheduleType": "RECURRING",
"objectiveEntity": "Activity",
"objectiveTargetType": "NUMERIC",
"objectiveEntityConditions": [
{
"operator": "IS_IN",
"key": "_activityCategory",
"value": [
"635c14b97370b10fbb987f10"
]
},
{
"operator": "EQUAL",
"key": "completed",
"value": true
}
],
"objectiveNumericTarget": 5,
"enrollmentType": "MANUAL",
"enrollmentTriggers": [],
"enrollmentStartDate": 1680281939,
"goalRecurrence": {
"byMonth": [],
"byMonthDay": [],
"byYearDay": [],
"byWeekNumber": [],
"byWeekDay": [],
"byHour": [],
"byMinute": [],
"bySecond": [],
"frequency": 2,
"start": "2023-03-27T00:00:00.000Z",
"interval": 1,
"count": 12,
"timezone": "America/Los_Angeles"
},
"firstGoalInterval": {
"id": "642711541eaf29393e1b2354",
"nextIntervalId": "642711541daf29393e1b2355",
"intervalIndex": 1,
"timezone": "America/Los_Angeles",
"goalId": "642711541daf29393e1b2351",
"start": 1679900400,
"end": 1680505200
},
"currentGoalInterval": {
"id": "642711541eaf29393e1b2355",
"nextIntervalId": "642711541daf29393e1b2356",
"previousIntervalId": "642711541daf29393e1b2354",
"intervalIndex": 2,
"timezone": "America/Los_Angeles",
"goalId": "642711541daf29393e1b2351",
"start": 1680505200,
"end": 1681110000
}
}
This endpoint retrieves a specific goal.
HTTP Request
GET https://api.huntr.co/org/goals/<ID>
URL Parameters
Parameter | Description |
---|---|
ID | The ID of the goal to retrieve |
Goal Enrollments
Goal Enrollment Resource
A goal enrollment object:
{
"id": "61bf669a887ee3b7bff62fe1",
"goalId": "61a1653e0a60f10199537f84",
"status": "ACTIVE",
"ownerMember": {
"id": "5e6a7bbdc56bc6669e3da86c",
"givenName": "Ruipo",
"familyName": "Fauli",
"email": "[email protected]",
"createdAt": 1584036797,
"isActive": true
}
}
This resource represents a job seeker's participation in a goal. Any job seeker participating in a goal will have a corresponding Goal Enrollment record.
Parameter | Type | Default | Description |
---|---|---|---|
id |
String | none | id for the goal enrollment |
goalId |
String | none | id for the goal |
status |
String | none | status of the goal enrollment. |
ownerMember |
Object | Member who is participating in the goal |
Create Goal Enrollment
curl --location --request POST 'https://api.huntr.co/org/goals/642711341daf29393e1b2351/enrollments' \
--header 'Authorization: Bearer <ORG_ACCESS_TOKEN>' \
--header 'Content-Type: application/json' \
--data-raw '{
"memberId": "64090fa941a8885a417d0c99",
}'
The above command returns JSON structured like this:
{
"id": "642da8d2aad714656f293a14",
"goalId": "642711341daf29393e1b2351",
"status": "ACTIVE",
"startingGoalIntervalId": "642711541eaf29393e1b2354",
"ownerMember": {
"id": "64090fa941a8885a417d0c99",
"fullName": "Peter Huntr",
"givenName": "Peter",
"familyName": "Huntr",
"email": "[email protected]",
"createdAt": 1678315433,
"isActive": true,
"lastSeenAt": 1678316577,
},
"startingGoalInterval": {
"id": "642711541eaf29393e1b2354",
"nextIntervalId": "642da8c7aad714656f29389f",
"intervalIndex": 1,
"timezone": "America/Los_Angeles",
"goalId": "642da8c7aad714656f29389b",
"start": 1680505200,
"end": 1681110000
}
}
This endpoint creates a new goal enrollment for an organization member.
HTTP Request
POST https://api.huntr.co/org/goals/<ID>/enrollments
URL Parameters
Parameter | Description |
---|---|
ID | The ID of the goal to enroll the member in |
JSON Body Parameters
Parameter | Required | Type | Description |
---|---|---|---|
memberId |
no | String | Member id of member to be enrolled in this goal. Either memberId or memberEmail must be set. |
memberEmail |
no | String | Member email of member to be enrolled in this goal. Either memberId or memberEmail must be set. |
startingGoalIntervalId |
no | String | For RECURRING goals, the id of the first goal interval for this member. Defaults to the current interval if not provided |
oneTimeGoalStart |
no | Unix timestamp | For ONE_TIME goals, specifies the start time for this member. Defaults to now if not provided. |
Goal Progresses
Goal Progress Resource
A goal progress object:
{
"id": "61bf669a887ee3b7bff62fe3",
"goalId": "61a1653e0a60f10199537f84",
"goalEnrollmentId": "61bf669a887ee3b7bff62fe1",
"status": "IN_PROGRESS",
"progressIndex": 1,
"objectiveNumericCount": 2,
"objectiveNumericTarget": 20,
"objectiveEntity": "Job",
"objectiveActivityIds": [],
"objectiveJobIds": [
"61bf66a70ab6e63cef099798",
"61bf66db0ab6e63cef0997b5"
],
"objectiveContactIds": [],
"start": 1639890000,
"end": 1647752399
}
This resource represents a job seeker's performance towards a goal for a specific time window. For RECURRING
goals, there will be multiple Goal Progress records for each job seeker enrollment, each one representing the job seeker's performance towards a different time window (week or month). For ONE_TIME
goals, there is only 1 goal progress record per job seeker enrollment.
Parameter | Type | Default | Description |
---|---|---|---|
id |
String | none | id for the goal progress |
goalId |
String | none | id for the goal this goal progress record is related to |
goalEnrollmentId |
String | none | id for the goal enrollment this goal progress record is related to |
status |
String | none | one of UPCOMING , IN_PROGRESS , COMPLETE , INCOMPLETE , UNENROLLED |
progressIndex |
Number | none | For a given job seeker, represents the goal progress index in a list of goal progress records sorted by start date. |
objectiveNumericCount |
Number | none | current progress number for this goal |
objectiveNumericTarget |
Number | none | target number for this goal |
objectiveEntity |
String | none | one of Activity , Job , Contact |
objectiveActivityIds |
Array | none | ids for logged activities that count towards this goal progress record, only applies to goals with objectiveEntity of type Activity |
objectiveJobIds |
Array | none | ids for saved jobs that count towards this goal progress record, only applies to goals with objectiveEntity of type Job |
objectiveContactIds |
Array | none | ids for saved contacts that count towards this goal progress record, only applies to goals with objectiveEntity of type Contact |
start |
Unix timestamp | none | Start date for this goal progress record |
end |
Unix timestamp | none | End date for this goal progress record |
Employers
Employer Resource
An employer for which your members have added a job for:
{
"id": "589b77128bf3dd17f01a3055",
"name": "Etsy",
"domain": "etsy.com",
"foundedYear": 2005,
"description": "Find handmade, vintage, and unique goods that express who you are.",
"location": "55 Washington St #512, Brooklyn, NY 11201, USA",
"jobCount": 4,
"isPartner": true,
"applicationCount": 2,
"interviewCount": 1,
"offerCount": 1
}
An employer for which your members have added a job for.
Field | Type | Description |
---|---|---|
id |
String | Employer's id |
name |
String | Name of the employer |
domain |
String | Website for the employer |
foundedYear |
Integer | Year the employer was founded |
description |
String | Employer description |
location |
String | Full address for the employer |
jobCount |
Integer | Number of jobs added for this employer |
isPartner |
Boolean | Set to true if the Employer has been marked as a partner for your organization |
applicationCount |
Integer | Number of applications to this employer |
interviewCount |
Integer | Number of interviews from this employer |
offerCount |
Integer | Number of offers from this employer |
List Employers
curl "https://api.huntr.co/org/employers?limit=2"
-H "Authorization: Bearer <ORG_ACCESS_TOKEN>"
The above command returns JSON structured like this:
{
"data": [
{
"id": "5b088f63b9defaba88d37264",
"name": "The Art Institutes",
"domain": "artinstitutes.edu",
"foundedYear": 1921,
"description": "The Art Institutes is a system of over 30 nonprofit institutions with a focus on education, student outcomes, and community involvement. Learn more about our programs.\r ",
"location": "K&L Gates Center, 210 Sixth Avenue, Pittsburgh, PA 15222, USA",
"isPartner": true,
"jobCount": 1,
"applicationCount": 0,
"interviewCount": 0,
"offerCount": 0
},
{
"id": "5b088a7bb9defaba88d36f1e",
"name": "ResearchGate",
"domain": "researchgate.net",
"foundedYear": 2008,
"description": "Find 100+ million publication pages, 15+ million researchers, and 700k+ projects. ResearchGate is where you discover scientific knowledge and share your work.",
"location": "10115 Berlin, Germany",
"isPartner": false,
"jobCount": 1,
"applicationCount": 1,
"interviewCount": 2,
"offerCount": 1
}
],
"next": "5b088a7bb9defaba88d36f1e"
}
This endpoint retrieves all employers to which your members have added a job for.
HTTP Request
GET https://api.huntr.co/org/employers
Query Parameters
Parameter | Default | Description |
---|---|---|
limit |
100 | Defines the maximum number of employers to return |
isPartner |
none | Set this parameter to true if you want to retrieve only your employers marked as partners |
next |
none | If set, returns the next set of results after the object id provided |
Organization Employer Requests
Organization Employer Request Resource
An employer request object:
{
"id": "648111fee7093f3013aeaefd",
"approvalStatus": "APPROVED",
"fromEmail": "[email protected]",
"utmTags": {
"utm_source": "facebook",
"utm_medium": "social",
"utm_campaign": "fb-2023"
},
"createdAt": 1686180350,
"decidedAt": 1686180501
}
This resource represents a request from a potential employer partner to join your talent portal.
Parameter | Type | Default | Description |
---|---|---|---|
id |
String | none | id for the request |
approvalStatus |
String | PENDING |
either PENDING , APPROVED or REJECTED |
fromEmail |
String | none | Requester's email |
utmTags |
Object | {} |
Any utm tags found in the url the employer used to reach your portal's signup form |
createdAt |
Unix timestamp | none | Date the request was created. |
decidedAt |
Unix timestamp | none | Date the request decision was made (either approved or rejected). |
Organization Employer Partnerships
Organization Employer Partnership Resource
An employer partnership object:
{
"id": "647fc0f471dbf904d034305e",
"employerCanPostJobs": true,
"employerCanBrowseCandidates": true,
"employerId": "5eb4719153a6366028ad14e6",
"createdAt": 1686094068
}
This resource represents an employer who has joined your talent portal. This is not to be confused with the Employer's isPartner
field, which can be set to true by your team even for employers who have not signed up for your portal. In short, every employer who has joined your portal, will have a corresponding Organization Employer Partnership record.
Parameter | Type | Default | Description |
---|---|---|---|
id |
String | none | id for the partnership |
employerCanPostJobs |
Boolean | none | Defines whether this employer can post jobs into your portal |
employerCanBrowseCandidates |
Boolean | none | Defines whether this employer can view your candidate profiles |
employerId |
String | none | id of the corresponding Employer |
createdAt |
Unix timestamp | true | Date the partnership was created. |
Events (Deprecated)
Events Deprecation
The Event resource endpoints will work until the end of 2020, but going forward you should replace all Event calls for Action calls. Actions offer a more robust architecture encompassing many more things that occur within the Huntr application (see the Action resource for more info).
Why we are deprecating Events
Our old Event resource mixed CRUD type events like JOB_ADDED
with real life events like
JOB_APPLICATION_DATE_SET
and JOB_OFFER_DATE_SET
. We have addressed this by creating Actions,
which exclusively represent CRUD type events that happen within the application.
Things like JOB_CREATED
, JOB_DELETED
, NOTE_CREATED
, CONTACT_UPDATED
are now Actions.
Events that happen in the real world, like Apply
, Phone Interview
, Prep for Interview
,
Offer Received
, Offer Accepted
are now represented through the Activity resource.
We like to think of these as things you would put on a to do list or a calendar; they map one
to one with the items show on the 'Activities' section of Huntr boards. Each activity
has an Activity Category representing the type of Activity it is (see the Activity resource for more info).
Furthermore, the architecture of our old Event resource limited the number of events that a job seeker could log. There were only two interview fields for example. With the new Activity + Action combo, job seekers can log as many interviews or other activities as they want. It also opens up the possibility to create custom Activity Categories for your organization, to track any type of activity.
Migrating from Events to Actions
You can still listen for both CRUD and real world events through the Action resource
endpoint. Since real world events are Activities, they are accounted for in Actions through the
ACTIVITY_CREATED
action type, which will contain an activityCategory
field that
will let you know what kind of activity it represents.
Here is what the old event types would translate to in the new Action resource:
Event Name | action.actionType |
action.activityCategory.name |
---|---|---|
JOB_ADDED |
JOB_CREATED |
null |
JOB_MOVED |
JOB_MOVED |
null |
JOB_APPLICATION_DATE_SET |
ACTIVITY_CREATED |
Apply |
JOB_FIRST_INTERVIEW_DATE_SET |
ACTIVITY_CREATED |
Phone Interview |
JOB_SECOND_INTERVIEW_DATE_SET |
ACTIVITY_CREATED |
On Site Interview |
JOB_OFFER_DATE_SET |
ACTIVITY_CREATED |
Offer Received |
Events Resource
An event object:
{
"id": "5b05ca43f193b66c692c29a0",
"eventType": "JOB_MOVED",
"createdAt": 1527106115,
"member": {
"id": "5a5a88fae10d8c2cea07f2f7",
"givenName": "Gwen",
"familyName": "Johnson",
"email": "[email protected]",
"createdAt": 1515882746
},
"job": {
"id": "5a8a255bb4271026f0c0f749",
"title": "Engineer",
"applicationDate": 1527106115,
"createdAt": 1519002971
},
"toList": {
"name": "applied"
},
"fromList": {
"name": "wishlist"
}
}
An event represents one of many events that can occur during the lifetime of a job, therefore a single job may have multiple events related to it:
Field | Type | In all events | Description |
---|---|---|---|
id |
String | true | id for the event |
eventType |
String | true | Type of event |
date |
Unix timestamp | false | Date when the event actually happened (will happen), this date is usually set by the job seekers themselves |
createdAt |
Unix timestamp | true | Date the event was logged. As an example, if a member logged an interview date today, but the actual interview date logged is next Friday, then createdAt is today, and date is next friday |
member |
Object | true | Member who owns the job |
job |
Object | true | Job for which event applies to |
fromList |
Object | false | List from which job was moved in a job moved event |
toList |
Object | false | List to which a job was moved or added to |
Event Types
There are multiple event types which include:
Event Name | Description | Extra fields |
---|---|---|
JOB_ADDED |
A new job is created | toList |
JOB_MOVED |
An existing job is moved | fromList , toList |
JOB_APPLICATION_DATE_SET |
Application date is set for an existing job | date |
JOB_FIRST_INTERVIEW_DATE_SET |
First interview date is set for an existing job | date |
JOB_SECOND_INTERVIEW_DATE_SET |
Second interview date is set for an existing job | date |
JOB_OFFER_DATE_SET |
Offer date is set for an existing job | date |
List Events
curl "https://api.huntr.co/org/events?limit=2"
-H "Authorization: Bearer <ORG_ACCESS_TOKEN>"
The above command returns JSON structured like this:
{
"data": [
{
"id": "5b17300b4453e621e676d90e",
"eventType": "JOB_OFFER_DATE_SET",
"date": 1528095600,
"createdAt": 1528246283,
"member": {
"id": "5a6bf0758f18344d6f76d118",
"givenName": "Gracielita",
"familyName": "Varelita",
"email": "[email protected]",
"createdAt": 1517023349
},
"job": {
"id": "5b088a7b12728af4ec0be9d6",
"title": "Senior Engineer",
"description": "A job description",
"salary": "$90,000",
"url": "https://linkedin.com/jobs/asdf234adf",
"location": {
"lng": "13.384453399999984",
"lat": "52.53073269999999",
"url": "https://maps.google.com/?cid=13193077415763177194",
"id": "1c56fadc63fb73a87bfae16a1096735b2817793b",
"placeId": "ChIJbTkS9uxRqEcR6u7KfAI6F7c",
"name": "ResearchGate",
"address": "Invalidenstraße 115, 10115 Berlin, Germany"
},
"deadline": 1527404400,
"applicationDate": 1527490800,
"firstInterviewDate": 1527750000,
"secondInterviewDate": 1527836400,
"offerDate": 1528095600,
"createdAt": 1527286395
}
},
{
"id": "5b1730094453e621e676d905",
"eventType": "JOB_SECOND_INTERVIEW_DATE_SET",
"date": 1527836400,
"createdAt": 1528246281,
"member": {
"id": "5a6bf0758f18344d6f76d118",
"givenName": "Gracielita",
"familyName": "Varelita",
"email": "[email protected]",
"createdAt": 1517023349
},
"job": {
"id": "5b088a7b12728af4ec0be9d6",
"title": "Senior Engineer",
"description": "A job description",
"salary": "$90,000",
"url": "https://linkedin.com/jobs/asdf234adf",
"location": {
"lng": "13.384453399999984",
"lat": "52.53073269999999",
"url": "https://maps.google.com/?cid=13193077415763177194",
"id": "1c56fadc63fb73a87bfae16a1096735b2817793b",
"placeId": "ChIJbTkS9uxRqEcR6u7KfAI6F7c",
"name": "ResearchGate",
"address": "Invalidenstraße 115, 10115 Berlin, Germany"
},
"deadline": 1527404400,
"applicationDate": 1527490800,
"firstInterviewDate": 1527750000,
"secondInterviewDate": 1527836400,
"offerDate": 1528095600,
"createdAt": 1527286395
}
}
],
"next": "5b1730094453e621e676d905"
}
This endpoint retrieves all events for your organization, sorted from most recently created to oldest.
HTTP Request
GET https://api.huntr.co/org/events
Query Parameters
Parameter | Type | Default | Description |
---|---|---|---|
member_id |
String | none | If set, will only return events belonging to member |
job_id |
String | none | If set, will only return events belonging to job |
event_type |
String | none | If set, will only return events of the specific type. See event types section for possible event name values. |
limit |
Integer | 100 | Defines the maximum number of jobs to return |
next |
String | none | If set, returns the next set of results after the object id provided |
Workflows
Workflow Resource
A workflow allows Huntr to automatically complete certain Actions when other actions happen within the application. For now, workflows power the automatic creation of certain activities when a job is moved or created into a specific stage. For example, you will notice that if a job seeker moves a job to a stage called "Apply" then Huntr will automatically create an Activity with the Apply
Activity Category.
Default workflows
Our current default workflows are triggered for ALL Huntr users when jobs are created or moved onto stages with names that imply a specific stage type.
The default workflows that power automatic activity creation when jobs are moved onto certain stages are the following:
create
Apply Activitywhen
job is moved or created onto a stage of type APPLYcreate
Phone Screen Activitywhen
job is moved or created onto a stage of type PHONE_SCREENcreate
Phone Interview Activitywhen
job is moved or created onto a stage of type PHONE_INTERVIEWcreate
On Site Interview Activitywhen
job is moved or created onto a stage of type ON_SITE_INTERVIEWcreate
Offer Received Activitywhen
job is moved or created onto a stage of type OFFER_RECEIVEDcreate
Accept Offer Activitywhen
job is moved or created onto a stage of type OFFER_ACCEPTEDcreate
Decline Offer Activitywhen
job is moved or created onto a stage of type OFFER_DECLINED
Stage names to type mapping
All of the default workflows mentioned above depend on the stage type
inferred from the name of the stage a job is being created or moved onto. Here are the stage names that map to each stage type:
*note: stage name matches are not case sensitive, so a stage named 'APply' and another one named 'apply' will both be classified as a stage of type 'APPLY'.
Stage Type | Stage Names |
---|---|
APPLY |
applied apply applying applied online |
PHONE_SCREEN |
phone screen screening call phone screen(s) phone screening tech screen screening interview technical screen technical phone screen |
PHONE_INTERVIEW |
phone phone interview video interview hr interview hr phone interview phone interviews |
ON_SITE_INTERVIEW |
interview on-site on-site interview onsite interviews onsite interview on site on site interview final round interview interview 2 interview 1 2nd interview 1st interview interviewing interviews 3+ technical interview personal interview virtual interview in person interview in-person interview in-person interview(s) interviewed final round second interview entrevistas tech interview final interview live interview interview (1st) interview (2nd) second round first interview 2nd round interview 3 technical 3rd interview additional onsite interview scheduled 1st round in-person initial interview entrevista |
OFFER_RECEIVED |
offer offers offer received offer extended offered offer letter ofertas |
OFFER_ACCEPTED |
offer accepted accepted accept accept offer |
OFFER_DECLINED |
offer declined declined decline offer i rejected rejected by me i declined declined offer rejected offer reject offer refused offer rejected |
Coming soon
The next step is to allow job seekers and organizations to create their own workflows to accomplish things like recurring Activity creation.
Webhooks
Receiving Webhooks
Huntr can send webhook events to notify your application any time an action happens within your organization.
You can register webhook URLs in your organization's admin dashboard, under the Developers tab that we will notify any time an action happens in your organization. When the action occurs—a new job is created, an activity is updated, etc.—Huntr creates a Action object.
The Action object contains all the information about the event that just happened, including the type of action and the data associated with that action. Huntr will send the Action via an HTTP POST
request, to any endpoint URLs that you have defined in your organization's Webhooks settings.
Responding to a webhook
To acknowledge receipt of a webhook, your endpoint should return a 200
HTTP status code. All other response codes will indicate to Huntr that you did not receive the webhook.
Secure your webhooks (Optional)
Huntr will sign the webhook events it sends to your endpoints by including a signature in each event’s x-huntr-hmac-sha256
header. This allows you to verify that the events were sent by Huntr, not by a third party. Signatures for each webhook event are created using the HMAC SHA-256 algorithm.
Validating Huntr signature
To validate the signature you received from Huntr, you will generate the signature yourself using your Webhook's secret and compare that signature with the signature you receive in the webhook payload.
- Retrieve the Webhook secret through your advisor portal. Head to to the Developers tab -> Click Webhooks -> Click
Reveal
for the Webhook record you are working with. - Using the HMAC SHA-256 algorithm, create a hash (using the retrieved secret from step 1 as a key) of the entire received payload.
- Encode the hash in base64 format.
- Compare the created value with the signature you received in the
x-huntr-hmac-sha256
header from Huntr.
You can find some code samples on how this verification might work for Python and Node in our huntr-webhook-verification-examples repo.
Common issues when validating signature
- You are looking at the wrong header. Check the headers for the specific framework or environment you are working on. While Huntr submits the header name as
x-huntr-hmac-sha256
, certain frameworks will change case or append extra text into headers. Logging all the request headers for inspection can help find the exact key for the signature header within your framework. - Payload used to create hash is incorrect. The body/payload you are providing the hmac algorithm might not exactly match the body that the Huntr system used to encode the hmac signature in the first place. Huntr creates the hmac algorithm with a stringified version of the request body (i.e: the payload). You might have to 'stringify' the request body in certain frameworks and not in others depending on how each framework encodes the request object.
- Don't forget to encode the HMAC hash in base64 format. You might be properly calculating the hmac, but might have forgotten to encode that result to base64, or you might be encoding to 'hex' or another value.
- Use HMAC SHA-256 algorithm. There are a number of SHA variants available with HMAC, make sure that your are using the 'SHA-256' variant.
Webhooks Changelog
May 2020
Before May 2020, Webhooks were powered by the now deprecated Event resource. Webhooks are now powered by the Action resource. To make the transition from Event to Action Webhooks easier, Webhook messages will contain all of the old Event fields until the end of 2020, alongside the new fields introduced in the Action resource.
Errors
Error response
A sample error response:
{
"message": "Limit must be an integer under 500",
"error": {
"message": "Limit must be an integer under 500",
"param": "limit",
"value": "10000",
"location": "query",
"status": 400
},
"errors": [
{
"message": "Limit must be an integer under 500",
"param": "limit",
"value": "10000",
"location": "query",
"status": 400
},
{
"message": "Invalid value",
"param": "next",
"value": "abcd",
"location": "query",
"status": 400
}
]
}
Field | Type | Description |
---|---|---|
message |
String | Human-readable message providing more details about the first error found. |
error |
Object | First error, see Error format. We suggest you use this parameter to detect errors. |
errors |
Array | Array of all Errors found, when there is more than one. |
Error format
Field | Type | Description |
---|---|---|
message |
String | Error message |
param |
String | If the error is parameter-specific, the parameter related to the error. |
value |
String | Value of the parameter that caused the error. |
location |
String | Location of the param that generated this error. It's either body, query, params, cookies or headers. |
status |
Number | See Error Codes |
Error codes
Error Code | Meaning |
---|---|
400 |
Bad Request -- Your request is invalid. |
401 |
Unauthorized -- Your API key is wrong. |
403 |
Forbidden -- The resource requested is hidden for administrators only. |
404 |
Not Found -- The specified resource could not be found. |
405 |
Method Not Allowed -- You tried to access a resource with an invalid method. |
406 |
Not Acceptable -- You requested a format that isn't json. |
410 |
Gone -- The resource requested has been removed from our servers. |
429 |
Too Many Requests -- You're requesting too many resources! Slow down! |
500 |
Internal Server Error -- We had a problem with our server. Try again later. |
503 |
Service Unavailable -- We're temporarily offline for maintenance. Please try again later. |
Changelog
January 4, 2021
Added validation for the limit
parameter for requests that use the List API methods. The maximum limit
value for those requests is now 500.
February 25, 2021
- New Job Post resource
- New GET /job-posts endpoint to list job posts
- New GET /job-posts/
endpoint to get job post - New
jobPost
field in Job resource, if job was saved from a Job Post - New
jobPost
field in Activity resource, if activity is related to a job that was saved from a Job Post - New
jobPost
andjobPostId
fields in Action resource - Three new Action Types related to Job Posts:
JOB_POST_CREATED
,JOB_POST_UPDATED
,JOB_POST_DELETED
March 4, 2021
- New POST /job-posts endpoint to create job posts
December 20, 2021
- New Goal resource
- New Goal Enrollment resource
New Goal Progress resource
Seven new Action Types related to Goals:
GOAL_CREATED
,GOAL_UPDATED
,GOAL_ENROLLMENT_CREATED
,GOAL_PROGRESS_UPDATED
,GOAL_PROGRESS_COMPLETED
,GOAL_PROGRESS_INCOMPLETE
,GOAL_PROGRESS_IN_PROGRESS
Three new Action Types related to Members:
MEMBER_UPDATED
,MEMBER_DELETED
,MEMBER_DEACTIVATED
January 28, 2022
- Two new Action Types related to Goals:
GOAL_ENROLLMENT_CONCLUDED
,GOAL_PROGRESS_UNENROLLED
- New potential status value for Goal Progress:
UNENROLLED
May 6, 2022
- Three new Action Types related to Documents:
DOCUMENT_CREATED
,DOCUMENT_UPDATED
,DOCUMENT_DELETED
- New Document resource
June 15, 2022
- New
MULTIPLE_SELECT
Member Field Type
Nov 29, 2022
- New Action Type for bulk updating job posts
BULK_JOB_POST_UPDATED
- API endpoints for managing Tags
- New locations field in Job Posts
- New tags field in Job Posts
Dec 8, 2022
- New API endpoint to Send Job Posts to Job Seekers
- New
memberEntries
body parameter in Create Job Post endpoint to send job post to job seekers
Jan 27, 2023
- New
advisorEmail
body parameter in Create Organization Invitation endpoint to assign an advisor to newly invited members.
Feb 15, 2023
- New
memberFieldValuesKeyedById
field in Member resource for quick access to member's custom field values. - New
lastSeenAt
field in Member.
Apr 4, 2023
- New API endpoint to List Goals
- New API endpoint to Retrieve a Goal
- New API endpoint to Enroll Job Seeker in Goal
July 24, 2023
- New API endpoint to List Advisors
- New Advisor field in Member
July 31, 2023
- New
boardId
,listId
andlist.id
fields in Job resource - New
boardId
,fromListId
andtoListId
fields in Action resource
October 19, 2023
- New API endpoint to List Internal Member Notes
- New API endpoint to Create Internal Member Note
- New API endpoint to Delete Internal Member Note
October 28, 2024
- New
boardIds
field in Member