Show All Users

GET https://YOURACCOUNT.harvestapp.com/people

You may also use the user’s email address in place of a User ID

HTTP Response: 200 OK

<?xml version="1.0" encoding="UTF-8"?>
<user>
<id type="integer">508343</id>
<email>user@example.com</email>
<created-at type="dateTime">2013-04-30T20:28:12Z</created-at>
<is-admin type="boolean">true</is-admin>
<is-project-manager type="boolean">false</is-project-manager>
<first-name>Harvest</first-name>
<last-name>User</last-name>
<timezone>Eastern Time (US &amp; Canada)</timezone>
<is-contractor type="boolean">false</is-contractor>
<telephone></telephone>
<is-active type="boolean">true</is-active>
<has-access-to-all-future-projects type="boolean">true</has-access-to-all-future-projects>
<default-hourly-rate type="decimal">0</default-hourly-rate>
<department></department>
<wants-newsletter type="boolean">true</wants-newsletter>
<updated-at type="dateTime">2015-04-29T14:54:19Z</updated-at>
<cost-rate type="decimal" nil="true"/>
<identity-account-id type="integer">302900</identity-account-id>
<identity-user-id type="integer">20725</identity-user-id>
</user>
{
"user": {
"id": 508343,
"email": "user@example.com",
"created_at": "2013-04-30T20:28:12Z",
"is_admin": true,
"is_project_manager": false,
"first_name": "Harvest",
"last_name": "User",
"timezone": "Eastern Time (US & Canada)",
"is_contractor": false,
"telephone": "",
"is_active": true,
"has_access_to_all_future_projects": true,
"default_hourly_rate": 0,
"department": "",
"wants_newsletter": true,
"updated_at": "2015-04-29T14:54:19Z",
"cost_rate": null,
"identity_account_id": 302900,
"identity_user_id": 20725
}
}

To return a single user, you’ll want to use the request:

GET https://YOURACCOUNT.harvestapp.com/people/{USERID}

You can also filter by updated_since to only show people that have been updated since the date you pass:

GET https://YOURACCOUNT.harvestapp.com/people?updated_since=2015-04-25+18%3A30

Create A New User

POST https://YOURACCOUNT.harvestapp.com/people

HTTP Response: 201 Created

Upon creation, we’ll send an email to the user with instructions for setting a password.

At minimum, you’ll need to include values for email, first-name, and last-name

Optionally, you can include the following values:

  • is-admin - To create a new admin user.
  • is-project-manager - If true this user will automatically be marked as a project manager when assigned to a project.
  • timezone - To set a timezone other than the account default.
  • is-contractor - To create a new contractor user.
  • telephone - Telephone number for user.
  • is-active - If the user is active, or archived (true, false)
  • has-access-to-all-future-projects - If true this user will automatically be assigned to all new projects.
  • default-hourly-rate - Default rate for the user in new projects, if no rate is specified.
  • department - Department for user.
  • cost-rate - Cost (internal) rate for user.
Example request in Postman

<user>
<email>user@example.com</email>
<is-admin type="boolean">true</is-admin>
<is-project-manager type="boolean">false</is-project-manager>
<first-name>New</first-name>
<last-name>User</last-name>
<timezone>Eastern Time (US &amp; Canada)</timezone>
<is-contractor type="boolean">false</is-contractor>
<telephone></telephone>
<is-active type="boolean">true</is-active>
<has-access-to-all-future-projects type="boolean">true</has-access-to-all-future-projects>
<default-hourly-rate type="decimal">0</default-hourly-rate>
<department></department>
<cost-rate type="decimal" nil="true"/>
</user>
{
"user": {
"email": "user@example.com",
"is_admin": true,
"is_project_manager": false,
"first_name": "Harvest",
"last_name": "User",
"timezone": "Eastern Time (US & Canada)",
"is_contractor": false,
"telephone": "",
"is_active": true,
"has_access_to_all_future_projects": true,
"default_hourly_rate": 0,
"department": "",
"cost_rate": null
}
}

Update A User

PUT https://YOURACCOUNT.harvestapp.com/people/{USERID}

HTTP Response: 200 OK

You can update selected attributes for a user with this request. Note, updates to password are disregarded.

Upon a successful request, we’ll return Location: /people/{USERID}.

<user>
<email>user@example.com</email>
<is-admin type="boolean">true</is-admin>
<is-project-manager type="boolean">false</is-project-manager>
<first-name>New</first-name>
<last-name>User</last-name>
<timezone>Eastern Time (US &amp; Canada)</timezone>
<is-contractor type="boolean">false</is-contractor>
<telephone></telephone>
<is-active type="boolean">true</is-active>
<has-access-to-all-future-projects type="boolean">true</has-access-to-all-future-projects>
<default-hourly-rate type="decimal">0</default-hourly-rate>
<department></department>
<cost-rate type="decimal" nil="true"/>
</user>
  {
"user": {
"email": "user@example.com",
"is_admin": true,
"is_project_manager": false,
"first_name": "Harvest",
"last_name": "User",
"timezone": "Eastern Time (US & Canada)",
"is_contractor": false,
"telephone": "",
"is_active": true,
"has_access_to_all_future_projects": true,
"default_hourly_rate": 0,
"department": "",
"cost_rate": null
}
}

Delete A User

DELETE https://YOURACCOUNT.harvestapp.com/people/{USERID}

If the user has no hours or expenses, we’ll return HTTP Response: 200 OK, otherwise, we’ll return HTTP Response: 400 Bad Request. For users with time and expenses, please archive them instead.

Toggle An Existing User

POST https://YOURACCOUNT.harvestapp.com/people/{USERID}/toggle

Use this request archive, or re-activate a user. Upon a successful request, we’ll return HTTP Response: 200 OK. If you don’t have space for the user within your plan limits, we’ll return HTTP Response: 400 Bad Request.