Moneybird logo
Moneybird API

Time entries

Time entries are used to track time spent on projects, which can then be billed to customers.


Resume a stopped timer

PATCH
https://moneybird.com/api/v2
/{administration_id}/time_entries/{id}/resume{format}

Resumes a stopped time entry. If another time entry is currently active, it will be stopped first. Can only resume timers that started today.

Required scope(s)

time_entries

Resume a stopped timer › path Parameters

administration_id
​administration_id · pattern: ^\d+$ · required

The unique identifier of the administration

A unique record identifier

id
​identifier · pattern: ^\d+$ · required

A unique record identifier

format
​string · pattern: ^(.(json|xml))?$ · required

The format in which the response is given, can be empty to use the default format

Default: .json

Resume a stopped timer › Responses

Time entry resumed

id
​identifier · pattern: ^\d+$

A unique record identifier

administration_id
​administration_id · pattern: ^\d+$

A unique record identifier

contact_id
​identifier_nullable · pattern: ^\d+$

A unique record identifier

project_id
​identifier_nullable · pattern: ^\d+$

A unique record identifier

sales_invoice_id
​identifier_nullable · pattern: ^\d+$

A unique record identifier

user_id
​identifier · pattern: ^\d+$

A unique record identifier

started_at
​timestamp · date-time
​
description
​string
paused_duration
​integer
billable
​boolean | null
created_at
​timestamp · date-time
updated_at
​timestamp · date-time
​
​base_user_response
​
​
​event_response[]
​note_response[]

Stops an active time entry

PATCH
https://moneybird.com/api/v2
/{administration_id}/time_entries/{id}/stop{format}

Stops an active time entry. If the time entry is already stopped, the time entry is returned unchanged.

Required scope(s)

time_entries

Stops an active time entry › path Parameters

administration_id
​administration_id · pattern: ^\d+$ · required

The unique identifier of the administration

A unique record identifier

id
​identifier · pattern: ^\d+$ · required

A unique record identifier

format
​string · pattern: ^(.(json|xml))?$ · required

The format in which the response is given, can be empty to use the default format

Default: .json

Stops an active time entry › Responses

Time entry stopped

id
​identifier · pattern: ^\d+$

A unique record identifier

administration_id
​administration_id · pattern: ^\d+$

A unique record identifier

contact_id
​identifier_nullable · pattern: ^\d+$

A unique record identifier

project_id
​identifier_nullable · pattern: ^\d+$

A unique record identifier

sales_invoice_id
​identifier_nullable · pattern: ^\d+$

A unique record identifier

user_id
​identifier · pattern: ^\d+$

A unique record identifier

started_at
​timestamp · date-time
​
description
​string
paused_duration
​integer
billable
​boolean | null
created_at
​timestamp · date-time
updated_at
​timestamp · date-time
​
​base_user_response
​
​
​event_response[]
​note_response[]

Get a time entry by id

GET
https://moneybird.com/api/v2
/{administration_id}/time_entries/{id}{format}

Returns a time entry in the administration.

Required scope(s)

time_entries

Get a time entry by id › path Parameters

administration_id
​administration_id · pattern: ^\d+$ · required

The unique identifier of the administration

A unique record identifier

id
​identifier · pattern: ^\d+$ · required

A unique record identifier

format
​string · pattern: ^(.(json|xml))?$ · required

The format in which the response is given, can be empty to use the default format

Default: .json

Get a time entry by id › Responses

A time entry

id
​identifier · pattern: ^\d+$

A unique record identifier

administration_id
​administration_id · pattern: ^\d+$

A unique record identifier

contact_id
​identifier_nullable · pattern: ^\d+$

A unique record identifier

project_id
​identifier_nullable · pattern: ^\d+$

A unique record identifier

sales_invoice_id
​identifier_nullable · pattern: ^\d+$

A unique record identifier

user_id
​identifier · pattern: ^\d+$

A unique record identifier

started_at
​timestamp · date-time
​
description
​string
paused_duration
​integer
billable
​boolean | null
created_at
​timestamp · date-time
updated_at
​timestamp · date-time
​
​base_user_response
​
​
​event_response[]
​note_response[]

Delete a time entry

DELETE
https://moneybird.com/api/v2
/{administration_id}/time_entries/{id}{format}

Delete a time entry by id.

Required scope(s)

time_entries

Delete a time entry › path Parameters

administration_id
​administration_id · pattern: ^\d+$ · required

The unique identifier of the administration

A unique record identifier

id
​identifier · pattern: ^\d+$ · required

A unique record identifier

format
​string · pattern: ^(.(json|xml))?$ · required

The format in which the response is given, can be empty to use the default format

Default: .json

Delete a time entry › Responses

Time entry deleted

No data returned

Update a time entry

PATCH
https://moneybird.com/api/v2
/{administration_id}/time_entries/{id}{format}

When updating a time entry, provide only the attributes you want to update. The other attributes will not be changed. started_at and ended_at are rounded down to full minutes when updating a time entry, with a minimum of 1 minute between them.

Required scope(s)

time_entries

Update a time entry › path Parameters

administration_id
​administration_id · pattern: ^\d+$ · required

The unique identifier of the administration

A unique record identifier

id
​identifier · pattern: ^\d+$ · required

A unique record identifier

format
​string · pattern: ^(.(json|xml))?$ · required

The format in which the response is given, can be empty to use the default format

Default: .json

Update a time entry › Request Body

​object

Update a time entry › Responses

Time entry updated

id
​identifier · pattern: ^\d+$

A unique record identifier

administration_id
​administration_id · pattern: ^\d+$

A unique record identifier

contact_id
​identifier_nullable · pattern: ^\d+$

A unique record identifier

project_id
​identifier_nullable · pattern: ^\d+$

A unique record identifier

sales_invoice_id
​identifier_nullable · pattern: ^\d+$

A unique record identifier

user_id
​identifier · pattern: ^\d+$

A unique record identifier

started_at
​timestamp · date-time
​
description
​string
paused_duration
​integer
billable
​boolean | null
created_at
​timestamp · date-time
updated_at
​timestamp · date-time
​
​base_user_response
​
​
​event_response[]
​note_response[]

Destroys note from entity

DELETE
https://moneybird.com/api/v2
/{administration_id}/time_entries/{time_entry_id}/notes/{id}{format}

Deletes a note from a time entry.

Required scope(s)

time_entries

Destroys note from entity › path Parameters

administration_id
​administration_id · pattern: ^\d+$ · required

The unique identifier of the administration

A unique record identifier

time_entry_id
​identifier · pattern: ^\d+$ · required

A unique record identifier

id
​identifier · pattern: ^\d+$ · required

A unique record identifier

format
​string · pattern: ^(.(json|xml))?$ · required

The format in which the response is given, can be empty to use the default format

Default: .json

Destroys note from entity › Responses

Note deleted

No data returned

Adds note to entity

POST
https://moneybird.com/api/v2
/{administration_id}/time_entries/{time_entry_id}/notes{format}

Adds a note to the time entry.

Required scope(s)

time_entries

Adds note to entity › path Parameters

administration_id
​administration_id · pattern: ^\d+$ · required

The unique identifier of the administration

A unique record identifier

time_entry_id
​identifier · pattern: ^\d+$ · required

A unique record identifier

format
​string · pattern: ^(.(json|xml))?$ · required

The format in which the response is given, can be empty to use the default format

Default: .json

Adds note to entity › Request Body

​object

Adds note to entity › Responses

Note created

id
​identifier · pattern: ^\d+$

A unique record identifier

administration_id
​administration_id · pattern: ^\d+$

A unique record identifier

entity_id
​identifier_nullable · pattern: ^\d+$

A unique record identifier

entity_type
​string
user_id
​identifier · pattern: ^\d+$

A unique record identifier

assignee_id
​identifier_nullable · pattern: ^\d+$

A unique record identifier

todo
​boolean | string | null
Default: false
note
​string | null
completed_at
​string | null · date-time
completed_by_id
​identifier_nullable · pattern: ^\d+$

A unique record identifier

todo_type
​string | null · enum
Enum values:
sales_invoice_due
purchase_invoice_due
general_document_reminder
general_document_due
new_document_awaiting_processing
new_financial_mutation_awaiting_processing
financial_mutations_not_updated
sales_invoice_payment_not_linked_to_financial_mutation
data
​object | null
created_at
​timestamp · date-time
updated_at
​timestamp · date-time

List all time entries

GET
https://moneybird.com/api/v2
/{administration_id}/time_entries{format}

Returns a paginated list of time entries in the administration.

Required scope(s)

time_entries

List all time entries › path Parameters

administration_id
​administration_id · pattern: ^\d+$ · required

The unique identifier of the administration

A unique record identifier

format
​string · pattern: ^(.(json|xml))?$ · required

The format in which the response is given, can be empty to use the default format

Default: .json

List all time entries › query Parameters

filter
​string

Filters are key:value terms separated by commas (e.g. period:this_year,state:all). Any filter you pass replaces the defaults below entirely, so include every key you need — in particular pass an explicit period (a named period or a YYYYMMDD..YYYYMMDD range) to look beyond the default financial year. Available filters:

FilterTypeDefaultDescription
stateStringallall, open or non_billable
periodStringthis_yearThis can either be the description of a period (this_week, prev_week, next_week, this_month, prev_month, next_month, this_quarter, prev_quarter, next_quarter, this_year, prev_year, next_year) or a custom period (201301..201302, 20130101..20130131)
contact_idIntegerSelect time entries belonging to a certain contact
include_nil_contactsBooleanfalseWhether to include time entries that have no assigned contact
include_activeBooleanfalseWhether to include active time entries i.e. time entries without ended_at
project_idIntegerSelect time entries belonging to a certain project
user_idIntegerSelect time entries belonging to a certain user
dayDateSelect time entries on a specific date

You can filter by multiple states at the same time as well. To do this, separate the state values by a pipe: state:open|non_billable.

Default: period:this_year
page
​integer | string
per_page
​integer | string · min: 1 · max: 100 · pattern: ^\d+$
query
​string

Free-text search across the time entry description.

List all time entries › Responses

A list of time entries

id
​identifier · pattern: ^\d+$

A unique record identifier

administration_id
​administration_id · pattern: ^\d+$

A unique record identifier

contact_id
​identifier_nullable · pattern: ^\d+$

A unique record identifier

project_id
​identifier_nullable · pattern: ^\d+$

A unique record identifier

sales_invoice_id
​identifier_nullable · pattern: ^\d+$

A unique record identifier

user_id
​identifier · pattern: ^\d+$

A unique record identifier

started_at
​timestamp · date-time
​
description
​string
paused_duration
​integer
billable
​boolean | null
created_at
​timestamp · date-time
updated_at
​timestamp · date-time
​
​base_user_response
​
​
​event_response[]
​note_response[]

Create a time entry

POST
https://moneybird.com/api/v2
/{administration_id}/time_entries{format}

API to post a time entry. Used to create time entries to record time spent by an employee. Api user needs access to both sales invoices and time entries for this action. started_at and ended_at are rounded down to full minutes when creating a time entry, with a minimum of 1 minute between them.

Required scope(s)

time_entries

Create a time entry › path Parameters

administration_id
​administration_id · pattern: ^\d+$ · required

The unique identifier of the administration

A unique record identifier

format
​string · pattern: ^(.(json|xml))?$ · required

The format in which the response is given, can be empty to use the default format

Default: .json

Create a time entry › Request Body

​object

Create a time entry › Responses

Time entry created

id
​identifier · pattern: ^\d+$

A unique record identifier

administration_id
​administration_id · pattern: ^\d+$

A unique record identifier

contact_id
​identifier_nullable · pattern: ^\d+$

A unique record identifier

project_id
​identifier_nullable · pattern: ^\d+$

A unique record identifier

sales_invoice_id
​identifier_nullable · pattern: ^\d+$

A unique record identifier

user_id
​identifier · pattern: ^\d+$

A unique record identifier

started_at
​timestamp · date-time
​
description
​string
paused_duration
​integer
billable
​boolean | null
created_at
​timestamp · date-time
updated_at
​timestamp · date-time
​
​base_user_response
​
​
​event_response[]
​note_response[]