Download OpenAPI specification:
https://api.aboardhr.com/v1/The Aboard API uses Bearer token authentication. All API requests must include a valid authentication token in the Authorization header.
Using cURL:
# Set your token as an environment variable
export ABOARD_API_TOKEN="your_token_here"
# Use the token in requests
curl -H "Authorization: Bearer $ABOARD_API_TOKEN" \
https://api.aboardhr.com/v1/company
Using JavaScript/Fetch:
const token = 'your_token_here';
const response = await fetch('https://api.aboardhr.com/v1/company', {
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
}
});
If your token is invalid or missing, you'll receive a 401 Unauthorized response with an empty body:
HTTP/1.1 401 Unauthorized
Content-Length: 0
curl -H "Authorization: Bearer YOUR_TOKEN" \
https://api.aboardhr.com/v1/company
curl -H "Authorization: Bearer YOUR_TOKEN" \
https://api.aboardhr.com/v1/employees
curl -H "Authorization: Bearer YOUR_TOKEN" \
"https://api.aboardhr.com/v1/employees?filter[role]=manager"
curl -H "Authorization: Bearer YOUR_TOKEN" \
https://api.aboardhr.com/v1/time-off-requests
curl -H "Authorization: Bearer YOUR_TOKEN" \
https://api.aboardhr.com/v1/time-tracking-projects
All list endpoints support pagination using page[limit] and page[offset] parameters:
# Get first 10 employees
curl -H "Authorization: Bearer YOUR_TOKEN" \
"https://api.aboardhr.com/v1/employees?page[limit]=10&page[offset]=0"
Many endpoints support filtering:
role (employee, manager, superadmin)status, time_off_policy_id, time_off_policy_type_id, date, from_date, to_date, requested_at, requested_at_from, requested_at_tostatus, time_tracking_project_id, date, from_date, to_date, from_time, to_timeAll responses follow the JSON:API specification with:
data: The main resource(s)links: Pagination linksrelationships: Links to related resourcesExample response:
{
"data": [
{
"id": "1",
"type": "employees",
"links": {
"self": "https://api.aboardhr.com/v1/employees/1"
},
"attributes": {
"first-name": "Andy",
"last-name": "Bernard",
"work-email": "andy-bernard@company.com",
"role": "manager"
},
"relationships": {
"time-off-requests": {
"links": {
"self": "https://api.aboardhr.com/v1/employees/1/relationships/time-off-requests",
"related": "https://api.aboardhr.com/v1/employees/1/time-off-requests"
}
}
}
}
],
"links": {
"first": "https://api.aboardhr.com/v1/employees?page[limit]=20&page[offset]=0",
"last": "https://api.aboardhr.com/v1/employees?page[limit]=20&page[offset]=0"
}
}
GET /v1/company - Get company informationGET /v1/employees - List all employeesGET /v1/employees/{id} - Get specific employeeGET /v1/bank-details - List all bank detailsGET /v1/bank-details/{id} - Get specific bank detailsSupported Bank Detail Types:
GET /v1/time-tracking-projects - List time tracking projectsGET /v1/time-tracking-projects/{id} - Get specific projectGET /v1/time-tracking-entries - List time tracking entriesGET /v1/time-tracking-entries/{id} - Get specific entryGET /v1/time-off-requests - List time-off requestsGET /v1/time-off-requests/{id} - Get specific requestGET /v1/time-off-policies - List time-off policiesGET /v1/time-off-policies/{id} - Get specific policyGET /v1/time-off-policy-types - List policy typesGET /v1/time-off-policy-types/{id} - Get specific policy typeGET /v1/departments - List departmentsGET /v1/departments/{id} - Get specific departmentGET /v1/job-titles - List job titlesGET /v1/job-titles/{id} - Get specific job titleGET /v1/locations - List locationsGET /v1/locations/{id} - Get specific locationGET /v1/profile-attributes - List custom profile attributesGET /v1/profile-attributes/{id} - Get specific profile attributeGET /v1/profile-attribute-options - List profile attribute optionsGET /v1/profile-attribute-options/{id} - Get specific optionGET /v1/profile-attribute-values - List profile attribute valuesGET /v1/profile-attribute-values/{id} - Get specific valueThe API uses standard HTTP status codes:
200 - Success401 - Unauthorized (invalid or missing token) - Returns empty response body404 - Resource not found422 - Validation errorAuthentication errors return empty response body:
HTTP/1.1 401 Unauthorized
Content-Length: 0
Retrieve a paginated list of all employees in the company
| filter[role] | string Enum: "employee" "manager" "superadmin" Example: filter[role]=manager Filter employees by role |
| page[limit] | integer <= 100 Default: 20 Example: page[limit]=20 Number of employees to return per page |
| page[offset] | integer Default: 0 Number of employees to skip |
{- "data": [
- {
- "id": "1",
- "type": "employees",
- "attributes": {
- "first-name": "Andy",
- "last-name": "Bernard",
- "work-email": "andy-bernard@dundermifflin.example.com",
- "work-phone-number": null,
- "personal-phone-number": null,
- "personal-email": "andy-bernard@example.com",
- "role": "manager"
}, - "relationships": {
- "time-off-policy-types": {
- "links": {
}
}, - "time-off-policies": {
- "links": {
}
}, - "time-off-requests": {
- "links": {
}
}, - "time-tracking-projects": {
- "links": {
}
}, - "time-tracking-entries": {
- "links": {
}
}
}
}
],
}Retrieve detailed information about a specific employee by their ID
| id required | string Example: 1 Unique identifier for the employee |
{- "data": {
- "id": "1",
- "type": "employees",
- "attributes": {
- "first-name": "Andy",
- "last-name": "Bernard",
- "work-email": "andy-bernard@dundermifflin.example.com",
- "work-phone-number": null,
- "personal-phone-number": null,
- "personal-email": "andy-bernard@example.com",
- "role": "manager"
}, - "relationships": {
- "time-off-policy-types": {
- "links": {
}
}, - "time-off-policies": {
- "links": {
}
}, - "time-off-requests": {
- "links": {
}
}, - "time-tracking-projects": {
- "links": {
}
}, - "time-tracking-entries": {
- "links": {
}
}
}
}
}Retrieve a paginated list of all employments
| page[limit] | integer <= 100 Default: 20 Example: page[limit]=20 Number of records per page |
| page[offset] | integer Default: 0 Number of records to skip |
{- "data": [
- {
- "id": "1",
- "type": "employments",
- "attributes": {
- "start-date": "2006-09-21",
- "end-date": null,
- "last-working-date": null
}, - "relationships": {
- "employee": {
- "links": {
}, - "data": {
- "type": "employees",
- "id": "1"
}
}
}
}, - {
- "id": "2",
- "type": "employments",
- "attributes": {
- "start-date": "2005-03-24",
- "end-date": null,
- "last-working-date": null
}, - "relationships": {
- "employee": {
- "links": {
}, - "data": {
- "type": "employees",
- "id": "2"
}
}
}
}
],
}Retrieve employment details by ID
| id required | string Example: 1 Employment ID |
{- "data": {
- "id": "1",
- "type": "employments",
- "attributes": {
- "start-date": "2006-09-21",
- "end-date": null,
- "last-working-date": null
}, - "relationships": {
- "employee": {
- "links": {
}, - "data": {
- "type": "employees",
- "id": "1"
}
}
}
}
}Retrieve a paginated list of home addresses
| page[limit] | integer <= 100 Default: 20 Example: page[limit]=20 Number of records per page |
| page[offset] | integer Default: 0 Number of records to skip |
{- "data": [
- {
- "id": "1",
- "type": "home-addresses",
- "attributes": {
- "start-date": "2025-09-03",
- "address-line-1": "aoeu",
- "address-line-2": "",
- "city": "aooeu",
- "zip-code": "123",
- "country-code": "AT"
}, - "relationships": {
- "employee": {
- "links": {
}, - "data": {
- "type": "employees",
- "id": "1"
}
}
}
}
],
}Retrieve home address details by ID
| id required | string Example: 1 Home address ID |
{- "data": {
- "id": "1",
- "type": "home-addresses",
- "attributes": {
- "start-date": "2025-09-03",
- "address-line-1": "aoeu",
- "address-line-2": "",
- "city": "aooeu",
- "zip-code": "123",
- "country-code": "AT"
}, - "relationships": {
- "employee": {
- "links": {
}, - "data": {
- "type": "employees",
- "id": "1"
}
}
}
}
}Retrieve a paginated list of positions
| page[limit] | integer <= 100 Default: 20 Example: page[limit]=20 Number of records per page |
| page[offset] | integer Default: 0 Number of records to skip |
{- "data": [
- {
- "id": "1",
- "type": "positions",
- "attributes": {
- "start-date": "2006-09-21",
- "end-date": null,
- "employment-type": "employee",
- "employment-contract": "full_time"
}, - "relationships": {
- "employee": {
- "links": {
}, - "data": {
- "type": "employees",
- "id": "1"
}
}, - "manager": {
- "links": {
}, - "data": {
- "type": "employees",
- "id": "8"
}
}
}
}
],
}Retrieve position details by ID
| id required | string Example: 1 Position ID |
{- "data": {
- "id": "1",
- "type": "positions",
- "attributes": {
- "start-date": "2006-09-21",
- "end-date": null,
- "employment-type": "employee",
- "employment-contract": "full_time"
}, - "relationships": {
- "employee": {
- "links": {
}, - "data": {
- "type": "employees",
- "id": "1"
}
}, - "manager": {
- "links": {
}, - "data": {
- "type": "employees",
- "id": "8"
}
}
}
}
}Retrieve a paginated list of salaries
| page[limit] | integer <= 100 Default: 20 Example: page[limit]=20 Number of records per page |
| page[offset] | integer Default: 0 Number of records to skip |
{- "data": [
- {
- "id": "1",
- "type": "salaries",
- "attributes": {
- "currency": "USD",
- "start-date": "2005-03-24",
- "pay-period": "yearly",
- "amount-in-cents": "67000000"
}, - "relationships": {
- "employee": {
- "links": {
}, - "data": {
- "type": "employees",
- "id": "2"
}
}
}
}
],
}Retrieve salary details by ID
| id required | string Example: 1 Salary ID |
{- "data": {
- "id": "1",
- "type": "salaries",
- "attributes": {
- "currency": "USD",
- "start-date": "2005-03-24",
- "pay-period": "yearly",
- "amount-in-cents": "67000000"
}, - "relationships": {
- "employee": {
- "links": {
}, - "data": {
- "type": "employees",
- "id": "2"
}
}
}
}
}Retrieve a paginated list of all bank details in the company
| page[limit] | integer <= 50 Default: 20 Example: page[limit]=20 Number of bank details to return per page |
| page[offset] | integer Default: 0 Number of bank details to skip |
{- "data": [
- {
- "id": "1",
- "type": "ibans",
- "attributes": {
- "account-number": "GB27BWXX85439131864698",
- "bank-name": "Bank of America",
- "account-type": "IBAN",
- "bic": ""
}, - "relationships": {
- "profile": {
- "links": {
}
}
}
}, - {
- "id": "2",
- "type": "swedens",
- "attributes": {
- "account-number": "12312412",
- "bank-name": "aoeu",
- "account-type": "Swedish bank account",
- "clearing-number": "123"
}, - "relationships": {
- "profile": {
- "links": {
}
}
}
}, - {
- "id": "3",
- "type": "us",
- "attributes": {
- "account-number": "1234567890",
- "bank-name": "Chase Bank",
- "account-type": "US bank account",
- "routing-number": "021000021"
}, - "relationships": {
- "profile": {
- "links": {
}
}
}
}
],
}Retrieve specific bank details by ID
| id required | string Example: 1 Bank details ID |
{- "data": {
- "id": "1",
- "type": "ibans",
- "attributes": {
- "account-number": "GB27BWXX85439131864698",
- "bank-name": "Bank of America",
- "account-type": "IBAN",
- "bic": ""
}, - "relationships": {
- "profile": {
- "links": {
}
}
}
}
}Retrieve a paginated list of departments
| page[limit] | integer <= 100 Default: 20 Example: page[limit]=20 Number of records per page |
| page[offset] | integer Default: 0 Number of records to skip |
{- "data": [
- {
- "id": "1",
- "type": "departments",
- "attributes": {
- "name": "Engineering"
}
}, - {
- "id": "2",
- "type": "departments",
- "attributes": {
- "name": "Sales"
}
}
],
}Retrieve a paginated list of job titles
| page[limit] | integer <= 100 Default: 20 Example: page[limit]=20 Number of records per page |
| page[offset] | integer Default: 0 Number of records to skip |
{- "data": [
- {
- "id": "1",
- "type": "job-titles",
- "attributes": {
- "name": "Software Engineer"
}
}, - {
- "id": "2",
- "type": "job-titles",
- "attributes": {
- "name": "Product Manager"
}
}
],
}Retrieve a paginated list of locations
| page[limit] | integer <= 100 Default: 20 Example: page[limit]=20 Number of records per page |
| page[offset] | integer Default: 0 Number of records to skip |
{- "data": [
- {
- "id": "1",
- "type": "locations",
- "attributes": {
- "name": "New York Office"
}
}, - {
- "id": "2",
- "type": "locations",
- "attributes": {
- "name": "London Office"
}
}
],
}Retrieve a paginated list of custom profile attributes defined for the company
| page[limit] | integer <= 100 Default: 20 Example: page[limit]=20 Number of records per page |
| page[offset] | integer Default: 0 Number of records to skip |
{- "data": [
- {
- "id": "1",
- "type": "profile-attributes",
- "attributes": {
- "name": "T-shirt Size",
- "multiple-choice": false
}, - "relationships": {
- "employees": {
- "links": {
}
}
}
}, - {
- "id": "2",
- "type": "profile-attributes",
- "attributes": {
- "name": "Skills",
- "multiple-choice": true
}, - "relationships": {
- "employees": {
- "links": {
}
}
}
}
],
}Retrieve profile attribute details by ID
| id required | string Example: 1 Profile attribute ID |
{- "data": {
- "id": "1",
- "type": "profile-attributes",
- "attributes": {
- "name": "T-shirt Size",
- "multiple-choice": false
}, - "relationships": {
- "employees": {
- "links": {
}
}
}
}
}Retrieve a paginated list of options for profile attributes
| page[limit] | integer <= 100 Default: 20 Example: page[limit]=20 Number of records per page |
| page[offset] | integer Default: 0 Number of records to skip |
{- "data": [
- {
- "id": "1",
- "type": "profile-attribute-options",
- "attributes": {
- "name": "Small"
}, - "relationships": {
- "profile-attribute": {
- "data": {
- "type": "profile-attributes",
- "id": "1"
}
}
}
}, - {
- "id": "2",
- "type": "profile-attribute-options",
- "attributes": {
- "name": "Medium"
}, - "relationships": {
- "profile-attribute": {
- "data": {
- "type": "profile-attributes",
- "id": "1"
}
}
}
}
],
}Retrieve profile attribute option details by ID
| id required | string Example: 1 Profile attribute option ID |
{- "data": {
- "id": "1",
- "type": "profile-attribute-options",
- "attributes": {
- "name": "Small"
}, - "relationships": {
- "profile-attribute": {
- "data": {
- "type": "profile-attributes",
- "id": "1"
}
}
}
}
}Retrieve a paginated list of profile attribute values assigned to employees
| page[limit] | integer <= 100 Default: 20 Example: page[limit]=20 Number of records per page |
| page[offset] | integer Default: 0 Number of records to skip |
{- "data": [
- {
- "id": "1",
- "type": "profile-attribute-values",
- "relationships": {
- "employee": {
- "links": {
}, - "data": {
- "type": "employees",
- "id": "1"
}
}, - "profile-attribute-option": {
- "data": {
- "type": "profile-attribute-options",
- "id": "2"
}
}
}
}
],
}Retrieve profile attribute value details by ID
| id required | string Example: 1 Profile attribute value ID |
{- "data": {
- "id": "1",
- "type": "profile-attribute-values",
- "relationships": {
- "employee": {
- "links": {
}, - "data": {
- "type": "employees",
- "id": "1"
}
}, - "profile-attribute-option": {
- "data": {
- "type": "profile-attribute-options",
- "id": "2"
}
}
}
}
}Retrieve a paginated list of time tracking entries with optional filtering
| filter[status] | string Enum: "active" "archived" Example: filter[status]=active Filter entries by status |
| filter[time_tracking_project_id] | string Example: filter[time_tracking_project_id]=1 Filter entries by project ID |
| filter[date] | string <date> Example: filter[date]=2025-01-15 Filter entries by exact date (YYYY-MM-DD format) |
| filter[from_date] | string <date> Example: filter[from_date]=2025-01-01 Filter entries starting on or after this date (YYYY-MM-DD format) |
| filter[to_date] | string <date> Example: filter[to_date]=2025-01-31 Filter entries ending on or before this date (YYYY-MM-DD format) |
| filter[from_time] | string <date-time> Example: filter[from_time]=2025-01-15T09:00:00Z Filter entries starting on or after this timestamp (ISO 8601 format) |
| filter[to_time] | string <date-time> Example: filter[to_time]=2025-01-15T18:00:00Z Filter entries ending on or before this timestamp (ISO 8601 format) |
| page[limit] | integer <= 100 Default: 20 Example: page[limit]=20 Number of entries to return per page |
| page[offset] | integer Default: 0 Number of entries to skip |
{- "data": [ ],
}Retrieve time tracking entry details by ID
| id required | string Example: 1 Time tracking entry ID |
{- "data": {
- "id": "1",
- "type": "time-tracking-entries",
- "attributes": {
- "duration-in-seconds": 3600,
- "start-time": "2025-01-15T09:00:00.000Z",
- "end-time": "2025-01-15T10:00:00.000Z",
- "status": "active"
}, - "relationships": {
- "employee": {
- "links": {
}, - "data": {
- "type": "employees",
- "id": "1"
}
}, - "time-tracking-project": {
- "data": {
- "type": "time-tracking-projects",
- "id": "1"
}
}
}
}
}Retrieve a paginated list of all time tracking projects
| page[limit] | integer <= 100 Default: 20 Example: page[limit]=20 Number of projects to return per page |
| page[offset] | integer Default: 0 Number of projects to skip |
{- "data": [
- {
- "id": "1",
- "type": "time-tracking-projects",
- "attributes": {
- "name": "Work",
- "status": "active"
}, - "relationships": {
- "employees": {
- "links": {
}
}
}
}, - {
- "id": "2",
- "type": "time-tracking-projects",
- "attributes": {
- "name": "Break",
- "status": "active"
}, - "relationships": {
- "employees": {
- "links": {
}
}
}
}
],
}Retrieve detailed information about a specific time tracking project by its ID
| id required | string Example: 1 Unique identifier for the time tracking project |
{- "data": {
- "id": "1",
- "type": "time-tracking-projects",
- "attributes": {
- "name": "Work",
- "status": "active"
}, - "relationships": {
- "employees": {
- "links": {
}
}
}
}
}Retrieve a paginated list of time-off requests with optional filtering
| filter[status] | string Enum: "pending" "approved" "declined" "cancelled" Example: filter[status]=approved Filter requests by status |
| filter[time_off_policy_id] | string Example: filter[time_off_policy_id]=1 Filter requests by policy ID |
| filter[time_off_policy_type_id] | string Example: filter[time_off_policy_type_id]=1 Filter requests by policy type ID |
| filter[date] | string <date> Example: filter[date]=2025-07-15 Filter requests that contain a specific date (YYYY-MM-DD format). Returns requests where the date falls between start_date and end_date. |
| filter[from_date] | string <date> Example: filter[from_date]=2025-07-01 Filter requests starting on or after this date (YYYY-MM-DD format) |
| filter[to_date] | string <date> Example: filter[to_date]=2025-07-31 Filter requests ending on or before this date (YYYY-MM-DD format) |
| filter[requested_at] | string <date> Example: filter[requested_at]=2025-06-01 Filter requests created on a specific date (YYYY-MM-DD format) |
| filter[requested_at_from] | string <date> Example: filter[requested_at_from]=2025-06-01 Filter requests created on or after this date (YYYY-MM-DD format) |
| filter[requested_at_to] | string <date> Example: filter[requested_at_to]=2025-06-30 Filter requests created on or before this date (YYYY-MM-DD format) |
| page[limit] | integer <= 100 Default: 20 Example: page[limit]=20 Number of requests to return per page |
| page[offset] | integer Default: 0 Number of requests to skip |
{- "data": [
- {
- "id": "1",
- "type": "time-off-requests",
- "attributes": {
- "start-date": "2025-07-07",
- "end-date": "2025-08-06",
- "status": "approved",
- "number-of-days": 23,
- "requested-at": "2025-09-09T12:07:02.440Z",
- "duration-in-minutes": 480,
- "duration-type": "full-day"
}, - "relationships": {
- "employee": {
- "links": {
}
}, - "time-off-policy": {
- "links": {
}
}, - "time-off-policy-type": {
}
}
}
],
}Retrieve detailed information about a specific time-off request by its ID
| id required | string Example: 1 Unique identifier for the time-off request |
{- "data": {
- "id": "1",
- "type": "time-off-requests",
- "attributes": {
- "start-date": "2025-07-07",
- "end-date": "2025-08-06",
- "status": "approved",
- "number-of-days": 23,
- "requested-at": "2025-09-09T12:07:02.440Z",
- "duration-in-minutes": 240,
- "duration-type": "half-day"
}, - "relationships": {
- "employee": {
- "links": {
}
}, - "time-off-policy": {
- "links": {
}
}, - "time-off-policy-type": {
}
}
}
}Retrieve a paginated list of time-off policy types
| page[limit] | integer <= 100 Default: 20 Example: page[limit]=20 Number of policy types to return per page |
| page[offset] | integer Default: 0 Number of policy types to skip |
{- "data": [
- {
- "id": "1",
- "type": "time-off-policy-types",
- "attributes": {
- "name": "Vacation"
}, - "relationships": {
- "employees": {
- "links": {
}
}
}
}, - {
- "id": "2",
- "type": "time-off-policy-types",
- "attributes": {
- "name": "Sick"
}, - "relationships": {
- "employees": {
- "links": {
}
}
}
}
],
}Retrieve detailed information about a specific time-off policy type by its ID
| id required | string Example: 1 Unique identifier for the time-off policy type |
{- "data": {
- "id": "1",
- "type": "time-off-policy-types",
- "attributes": {
- "name": "Vacation"
}, - "relationships": {
- "employees": {
- "links": {
}
}
}
}
}Retrieve a paginated list of time-off policies
| page[limit] | integer <= 100 Default: 20 Example: page[limit]=20 Number of policies to return per page |
| page[offset] | integer Default: 0 Number of policies to skip |
{- "data": [
- {
- "id": "1",
- "type": "time-off-policies",
- "attributes": {
- "name": "Sweden"
}, - "relationships": {
- "time-off-policy-type": {
}, - "employees": {
- "links": {
}
}
}
}
],
}Retrieve detailed information about a specific time-off policy by its ID
| id required | string Example: 1 Unique identifier for the time-off policy |
{- "data": {
- "id": "1",
- "type": "time-off-policies",
- "attributes": {
- "name": "Sweden"
}, - "relationships": {
- "time-off-policy-type": {
}, - "employees": {
- "links": {
}
}
}
}
}