API v1 Beta now available for all customers
- Added tags on response to GET /projects
- Added includePlaceholders filter for GET /people
- Added GET /projects/:id/people
- Replaced GET /milestones with GET /projects/:id/milestones
- API v1 beta release notes
See API v1 usage instructions. While the API v1 is still in beta this changelog is a living document.
v1.0.0
URL
The base URL for using API v1 is https://api.runn.io (this has changed from v0).
Note: Refer to “Accounts > Settings > API” for your specific API endpoint URL, it might differ from the above.
Accept-Version Header
We now require passing an Accept-Version header, specifying the version of the API you’d like to use.
Example: Accept-Version: 1.0.0
Pagination
Changed from page-based to cursor-based pagination. Instead of per_page
, use limit
. Instead of page
, use the cursor
provided as nextCursor
in the previous API response.
Identifiers
We've switched from hashids to numeric identifiers to identify resources.
Before:
/v0/people/156ocz
After:
/people/123
In order to convert existing references to the new format, we have provided a /legacy-id
endpoint.
To convert the example above, use the following request:
GET /legacy-id/people/156ocz
You also have the option to convert these values locally for better performance.
Here's an example Python implementation, which you can adapt to a programming language of your choice (using one of the many implementations on hashids.org).
Naming Format
- Changed all property and parameter names from lower snakecase to camelcase:
person_id
becomespersonId
- Changed endpoint paths from snakecase to dashcase. Example:
GET /v0/time_offs
becomesGET /time-offs
Request and Response Structure
- Dropped the
/v0
prefix on paths - Changed HTTP verbs from
PUT
toPATCH
- Collection endpoint results are nested in a
{values: []}
object
References Format
Changed references format on all endpoints.
Before:
{
"My Name": {"external_id": "My ID"},
"My Other Name": {"external_id": "My Other ID"}
}
After:
[
{"referenceName": "My Name", "externalId": "My ID"},
{"referenceName": "My Other Name", "externalId": "My Other ID"}
]
Tags Format
Changed tags format on all endpoints. Retrieve tag identifiers from GET /project-tags
.
Before:
["My Tag", "My Other Tag"]
After:
[{id: 1}, {id: 2}]
Endpoint Specific Changes
GET /invitations
:sentDate
attribute renamed tosentAt
POST /actuals
: No longer allows clearing phases with empty strings, requiresphaseId=null
POST /actuals
: No longer auto-fills gaps (autofill=true
)GET /actuals
: Date filtering parameters renamed tominDate
andmaxDate
GET /actuals
: No longer returnsupdated_at
ororigin_data
GET /assignments
: Renamed date filtering parameters tostartDate
andendDate
GET /assignments
: No longer returnstotal_minutes
, use Reporting API insteadGET /assignments
: Renamedactive
toisActive
GET /clients
: Removedinclude_archived
filterGET /clients
,POST /clients
: Removed projectsGET /clients
: Renamedurl
towebsite
GET /clients
,POST /clients
,PATCH /clients
: Renamedarchived
toisArchived
GET /contracts
: Changedrostered_days
toavailableDays
(keyed by weekday name)GET /milestones
,POST /milestones
,DELETE /milestones
: Moved into/projects/:id/milestones
subresourceGET /milestones
: Renamed date filtering parameters tostartDate
andendDate
GET /people
: Movedrole_id
androle_name
toGET /people/:id/contracts/current
GET /people
,GET /people/:id
: Movedteam_id
andteam
toGET /people/:id/teams
GET /people
,GET /people/:id
: Movedcurrent_contract
toGET /people/:id/contracts/current
GET /people
,GET /people/:id
: Movedprojects
toGET /people/:id/projects
, removedinclude_projects
parameterGET /people
,GET /people/:id
: Movedskills
toGET /people/:id/skills
GET /people
: Removedinclude_placeholders
option, useGET /placeholders
GET /people/:id
: Moved assignments toGET /people/:id/assignments
, removedinclude_assignments
,start
andend
parametersGET /people/:id
: Movedactuals
toGET /people/:id/actuals
, removedinclude_actuals
,start
andend
parametersGET /people/:id
: Movedskills
toGET /people/:id/skills
, removedskills_unstable
GET /people/:id
: Movedtime_offs
toGET /people/:id/time-offs
GET /people/:id
: Movedholidays_unstable
toGET /people/:id/time-offs/holidays
GET /people
,GET /people/:id
: Renamepeople_notes
tonotes
GET /people
: Renamedarchived
toisArchived
POST /people
: Removedrole_name
, userole_id
GET /phases
: Moved toGET /projects/:id/phases
POST /placeholders
: Create placeholders so you can then create assignments for placeholders on projects (retaining functionality from v0)GET /project_notes
: Moved toGET /projects/:id/notes
POST /project_notes
: Moved toPOST /projects/:id/notes
POST /project_notes
: Removed ability to setuser_id
, defaults to “API” userGET /projects
: Includes template projects by default (filter manually based onisTemplate
property)GET /projects/:id
: Moved assignments toGET /projects/:id/assignments
, removedinclude_assignments
optionGET /projects/:id
: Moved actuals toGET /projects/:id/actuals
, removedinclude_actuals
optionGET /projects/:id
: Movedmilestones
toGET /projects/:id/milestones
GET /projects/:id
: Movedother_expenses
toGET /projects/:id/other-expenses
GET /projects/:id
: Movedproject_rates
toGET /projects/:id/project-rates
GET /projects/:id
: Movedphases
toGET /projects/:id/phases
GET /projects/:id
: Movedtimesheet_locked_to
toGET /projects/:id/timesheet-lock
GET /projects/:id/people
: retaining functionality from v0POST /projects
,PATCH /projects/:id
: Removedproject_rates
POST /projects
,PATCH /projects/:id
: Renamedconfirmed
toisConfirmed
POST /projects/:id/project-rates
andPATCH /projects/:id/project-rates
PUT /projects/:id/lock_timesheets
: Moved toPATCH /projects/:id/timesheet-lock
GET /rate-cards
: Changedblended_rate_hourly
andblended_rate_daily
toblendedRate
andrateType
GET /rate-cards
: Renamedarchived
toisArchived
POST /roles
,PATCH /roles
: Changedpeople
topersonIds
POST /skills/:id/people
: retaining functionality from v0GET /teams
,POST /teams
,PATCH /teams/:id
: Removedpeople
, use/people/:id/teams
to identify and modify team membershipGET /time-offs
: Removedtype
, split into separate subresources:GET /time-offs/leave
,GET /time-offs/rostered-off
.GET /time_offs/holidays_unstable
: Moved toGET /time-offs/holidays
GET /users
: Changedpermissions
from serialised JSON strings to an actual object
Unreleased
We’re still working on these endpoints:
POST /invitations
: RequiresfromUser
(no longer defaulting to first admin)GET /placeholders
GET /people-tags/:id
: See all people who have this tagGET /clients/:id/projects
POST /projects/:id/other-expenses
andPATCH /projects/:id/other-expenses/:id
New
GET /assignments
:isTemplate
andactive
/custom-fields
endpoints- Add
customFields
toGET /people/:id
andGET /projects/:id
- List public holidays separately from people through
/holiday-groups
GET /projects
:isTemplate
,expensesBudget
GET /rate-cards
: ListprojectIds
- New reports API:
GET /reports/*
/project-tags
endpoints