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.

When the time entry belongs to another user than the user of the token, the token also needs the sales_invoices scope.

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.

When the time entry belongs to another user than the user of the token, the token also needs the sales_invoices scope.

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. When the time entry belongs to another user than the user of the token, the token also needs the sales_invoices scope.

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[]

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.

When the time entry belongs to another user than the user of the token, the token also needs the sales_invoices scope. A time entry that is on a sales invoice cannot be updated.

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[]

Delete a time entry

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

Delete a time entry by id. When the time entry belongs to another user than the user of the token, the token also needs the sales_invoices scope. A time entry that is on a sales invoice cannot be deleted.

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

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. 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). A custom period must have a start and an end date. It must not be longer than 10 years and must be between 20000101 and 21000101. For one month, use 202401..202401, not 202401. Without period, the filter does not limit the dates. The default this_year applies only when you send no filter.
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[]