Manor API (1.0.3)

Download OpenAPI specification:

Provides access to a particular instance (tenant) in Manor. An API key can be provided by a Manor user with administration privileges in the instance.

Users

Users (employees) of the Manor instance.

Get user

Retrieves a single user

Authorizations:
BearerAuth
path Parameters
userId
required
integer <int64>

ID of user to retrieve

Responses

Response samples

Content type
application/json
{
  • "id": 10,
  • "email": "john@example.com",
  • "mobile": "+354 123 4567",
  • "landline": "+354 765 4321",
  • "name": "John Doe"
}

Update user

Updates an existing user

Authorizations:
BearerAuth
path Parameters
userId
required
integer <int64>

ID of user to update

Request Body schema: application/json

Update an existing user

email
string or null <idn-email>

Email of the user. Required when creating a new user.

mobile
string or null

Mobile phone number of the client.

landline
string or null

Landline phone number of the client.

name
string or null

Name of the user. Required when creating a new user.

Responses

Request samples

Content type
application/json
{
  • "email": "john@example.com",
  • "mobile": "+354 123 4567",
  • "landline": "+354 765 4321",
  • "name": "John Doe"
}

Get user by email

Retrieves a single user

Authorizations:
BearerAuth
path Parameters
email
required
string

Email of user to retrieve

Responses

Response samples

Content type
application/json
{
  • "id": 10,
  • "email": "john@example.com",
  • "mobile": "+354 123 4567",
  • "landline": "+354 765 4321",
  • "name": "John Doe"
}

Clients

Clients (customers) that projects are created for. These are also payers of invoices.

Create client

Adds a new client

Authorizations:
BearerAuth
Request Body schema: application/json

Create a new client

name
string or null

Name of the client. Required when creating a client.

national_id
string or null

National ID of the client. Required when creating a client.

object or null (MailingAddress)

An object containing mailing address details. Required when creating a client.

object or null (MailingAddress)

An object containing mailing address details. Required when creating a client.

email
string or null

Email address of the client or a comma separated list of email addresses.

phone
string or null

Phone number of the client.

currency_code
string or null

Currency code of the client. Required when creating a client.

special_attention
boolean or null
Default: false

Whether the client needs a special attention, i.e. to not provide services to etc..

add_transaction_fee
boolean or null
Default: false

Whether the client should be charged a transaction fee on invoices. Defaults to false.

Responses

Request samples

Content type
application/json
{
  • "name": "John Doe",
  • "national_id": "1234567890",
  • "address": {
    },
  • "billing_address": {
    },
  • "email": "example@manor.is,another.example@manor.is",
  • "phone": "+354 123 4567",
  • "currency_code": "USD",
  • "special_attention": false,
  • "add_transaction_fee": false
}

Response samples

Content type
application/json
{
  • "id": 10,
  • "name": "John Doe",
  • "national_id": "1234567890",
  • "address": {
    },
  • "billing_address": {
    },
  • "email": "example@manor.is,another.example@manor.is",
  • "phone": "+354 123 4567",
  • "currency_code": "USD",
  • "special_attention": false,
  • "add_transaction_fee": false
}

Get client

Retrieves a single client

Authorizations:
BearerAuth
path Parameters
clientId
required
integer <int64>

ID of client to retrieve

Responses

Response samples

Content type
application/json
{
  • "id": 10,
  • "name": "John Doe",
  • "national_id": "1234567890",
  • "address": {
    },
  • "billing_address": {
    },
  • "email": "example@manor.is,another.example@manor.is",
  • "phone": "+354 123 4567",
  • "currency_code": "USD",
  • "special_attention": false,
  • "add_transaction_fee": false
}

Update client

Updates an existing client

Authorizations:
BearerAuth
path Parameters
clientId
required
integer <int64>

ID of client to update

Request Body schema: application/json

Update an existing client

name
string or null

Name of the client. Required when creating a client.

national_id
string or null

National ID of the client. Required when creating a client.

object or null (MailingAddress)

An object containing mailing address details. Required when creating a client.

object or null (MailingAddress)

An object containing mailing address details. Required when creating a client.

email
string or null

Email address of the client or a comma separated list of email addresses.

phone
string or null

Phone number of the client.

currency_code
string or null

Currency code of the client. Required when creating a client.

special_attention
boolean or null
Default: false

Whether the client needs a special attention, i.e. to not provide services to etc..

add_transaction_fee
boolean or null
Default: false

Whether the client should be charged a transaction fee on invoices. Defaults to false.

Responses

Request samples

Content type
application/json
{
  • "name": "John Doe",
  • "national_id": "1234567890",
  • "address": {
    },
  • "billing_address": {
    },
  • "email": "example@manor.is,another.example@manor.is",
  • "phone": "+354 123 4567",
  • "currency_code": "USD",
  • "special_attention": false,
  • "add_transaction_fee": false
}

Delete client

Deletes an existing client

Authorizations:
BearerAuth
path Parameters
clientId
required
integer <int64>

ID of client to delete

Responses

Get client by national ID

Retrieves a single client by national ID

Authorizations:
BearerAuth
path Parameters
nationalId
required
string

National ID of client to retrieve

Responses

Response samples

Content type
application/json
{
  • "id": 10,
  • "name": "John Doe",
  • "national_id": "1234567890",
  • "address": {
    },
  • "billing_address": {
    },
  • "email": "example@manor.is,another.example@manor.is",
  • "phone": "+354 123 4567",
  • "currency_code": "USD",
  • "special_attention": false,
  • "add_transaction_fee": false
}

Projects

Projects, formerly known as matters. These are the contain time entries and other billables items.

List projects

Returns a list of projects

Authorizations:
BearerAuth
query Parameters
page
integer

Page number

per_page
integer

Number of items per page

status
string
Enum: "all" "open" "closed"

Filter by project status

with_activities
boolean

Include activities of each projects

Responses

Response samples

Content type
application/json
{}

Create project

Adds a new project

Authorizations:
BearerAuth
Request Body schema: application/json

Create a new project

name
string or null

Project name. Required when creating a project.

object or null

An object containing client id.

object or null

An object containing owner id. Required when creating a project.

object or null

An object containing owner id. Optional. Only has an effect if the billing owner feature is enabled. If the feature is disabled, billing owner is automatically equal to the project owner.

open
boolean or null
Default: true

Whether the project is open or not. Defaults to true.

closing_comment
string or null

A comment explaining why the project was closed. Applicable only when open is set to "false".

subject_to_vat
boolean or null

Whether the project is subject to VAT or not. Defaults to false. Only in case the instance is set to always choose VAT in its settings, subject_to_vat property is not provided and the project client's country is same as the country of the project owner, defaults to true.

settlement
boolean or null

Whether the project is a settlement project or not. When a project is saved or updated this field is not considered.

billing
string or null
Default: "enabled"
Enum: "enabled" "internal" "sensitive"

Billing status of the project.

confidential
boolean or null
Default: false

Whether the project should be hidden even from high privileged users. Defaults to false.

buyer_contact
string or null

Name of the buyer contact.

buyer_contact_email
string <idn-email>
Array of objects or null
Default: []

An array of project participants. Project owner is automatically added to this array.

Array of objects or null (Activity)
Default: []

An array of project activities.

Array of objects or null
Deprecated

Deprecated. Alias for labels, which were initially called subjects. Responses will contain the same array under both keys. Requests can set the array using either key.

Array of objects or null

An array of project labels.

budget
number or null <float>

Warnings will be visible when the current matter balance gets close to this limit.

time_budget
number or null <float>

Warnings will be visible when time spent on this matter reaches this limit.

estimate
number or null <float>

A warning will show in the project if the total amount filed will exceed this estimate.

Responses

Request samples

Content type
application/json
{
  • "name": "My Project",
  • "client": {
    },
  • "owner": {
    },
  • "billing_owner": {
    },
  • "open": true,
  • "closing_comment": "Closing comment for my project.",
  • "subject_to_vat": true,
  • "settlement": true,
  • "billing": "enabled",
  • "confidential": true,
  • "buyer_contact": "John Doe",
  • "buyer_contact_email": "john.doe@manor.is",
  • "participants": [ ],
  • "activities": [ ],
  • "subjects": [
    ],
  • "labels": [
    ],
  • "budget": 0.1,
  • "time_budget": 0.1,
  • "estimate": 0.1
}

Response samples

Content type
application/json
{
  • "id": 10,
  • "identifier": "my-external-identifier",
  • "name": "My Project",
  • "client": {
    },
  • "owner": {
    },
  • "billing_owner": {
    },
  • "open": true,
  • "closing_comment": "Closing comment for my project.",
  • "subject_to_vat": true,
  • "settlement": true,
  • "billing": "enabled",
  • "confidential": true,
  • "buyer_contact": "John Doe",
  • "buyer_contact_email": "john.doe@manor.is",
  • "participants": [ ],
  • "activities": [ ],
  • "subjects": [
    ],
  • "labels": [
    ],
  • "budget": 0.1,
  • "time_budget": 0.1,
  • "estimate": 0.1
}

Get project

Retrieves a single project

Authorizations:
BearerAuth
path Parameters
projectId
required
integer <int64>

ID of project to retrieve

Responses

Response samples

Content type
application/json
{
  • "id": 10,
  • "identifier": "my-external-identifier",
  • "name": "My Project",
  • "client": {
    },
  • "owner": {
    },
  • "billing_owner": {
    },
  • "open": true,
  • "closing_comment": "Closing comment for my project.",
  • "subject_to_vat": true,
  • "settlement": true,
  • "billing": "enabled",
  • "confidential": true,
  • "buyer_contact": "John Doe",
  • "buyer_contact_email": "john.doe@manor.is",
  • "participants": [ ],
  • "activities": [ ],
  • "subjects": [
    ],
  • "labels": [
    ],
  • "budget": 0.1,
  • "time_budget": 0.1,
  • "estimate": 0.1
}

Update project

Updates an existing project

Authorizations:
BearerAuth
path Parameters
projectId
required
integer <int64>

ID of project to update

Request Body schema: application/json

Update an existing project

name
string or null

Project name. Required when creating a project.

object or null

An object containing client id.

object or null

An object containing owner id. Required when creating a project.

object or null

An object containing owner id. Optional. Only has an effect if the billing owner feature is enabled. If the feature is disabled, billing owner is automatically equal to the project owner.

open
boolean or null
Default: true

Whether the project is open or not. Defaults to true.

closing_comment
string or null

A comment explaining why the project was closed. Applicable only when open is set to "false".

subject_to_vat
boolean or null

Whether the project is subject to VAT or not. Defaults to false. Only in case the instance is set to always choose VAT in its settings, subject_to_vat property is not provided and the project client's country is same as the country of the project owner, defaults to true.

settlement
boolean or null

Whether the project is a settlement project or not. When a project is saved or updated this field is not considered.

billing
string or null
Default: "enabled"
Enum: "enabled" "internal" "sensitive"

Billing status of the project.

confidential
boolean or null
Default: false

Whether the project should be hidden even from high privileged users. Defaults to false.

buyer_contact
string or null

Name of the buyer contact.

buyer_contact_email
string <idn-email>
Array of objects or null
Default: []

An array of project participants. Project owner is automatically added to this array.

Array of objects or null (Activity)
Default: []

An array of project activities.

Array of objects or null
Deprecated

Deprecated. Alias for labels, which were initially called subjects. Responses will contain the same array under both keys. Requests can set the array using either key.

Array of objects or null

An array of project labels.

budget
number or null <float>

Warnings will be visible when the current matter balance gets close to this limit.

time_budget
number or null <float>

Warnings will be visible when time spent on this matter reaches this limit.

estimate
number or null <float>

A warning will show in the project if the total amount filed will exceed this estimate.

Responses

Request samples

Content type
application/json
{
  • "name": "My Project",
  • "client": {
    },
  • "owner": {
    },
  • "billing_owner": {
    },
  • "open": true,
  • "closing_comment": "Closing comment for my project.",
  • "subject_to_vat": true,
  • "settlement": true,
  • "billing": "enabled",
  • "confidential": true,
  • "buyer_contact": "John Doe",
  • "buyer_contact_email": "john.doe@manor.is",
  • "participants": [ ],
  • "activities": [ ],
  • "subjects": [
    ],
  • "labels": [
    ],
  • "budget": 0.1,
  • "time_budget": 0.1,
  • "estimate": 0.1
}

Webhooks subscriptions

Set up callback URLs that handle events originating in Manor.

Create webhook subscription

Adds a new webhook subscription

Authorizations:
BearerAuth
Request Body schema: application/json

Create a new webhook subscription

type
string or null
Enum: "project_saved" "activity_saved" "user_saved" "client_saved"

Type of the webhook, controls what actions trigger this webhook. Required when creating a webhook subscription.

url
string or null

URL the webhook should call when triggered. Required when creating a webhook subscription.

Responses

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{}

Get webhook subscription

Retrieves a single webhook subscription

Authorizations:
BearerAuth
path Parameters
webhookId
required
integer <int64>

ID of the webhook subscription to retrieve

Responses

Response samples

Content type
application/json
{}

Update webhook subscription

Updates an existing webhook subscription

Authorizations:
BearerAuth
path Parameters
webhookId
required
integer <int64>

ID of webhook subscription to update

Request Body schema: application/json

Update an existing webhook subscription

type
string or null
Enum: "project_saved" "activity_saved" "user_saved" "client_saved"

Type of the webhook, controls what actions trigger this webhook. Required when creating a webhook subscription.

url
string or null

URL the webhook should call when triggered. Required when creating a webhook subscription.

Responses

Request samples

Content type
application/json
{}

Delete webhook subscription

Deletes an existing webhook subscription

Authorizations:
BearerAuth
path Parameters
webhookId
required
integer <int64>

ID of webhook subscription to delete

Responses

Utility

Utility calls, not related to any particular database models.

Ping

Returns a simple message to test connectivity to the API.

Authorizations:
BearerAuth

Responses

Response samples

Content type
application/json
{ }

Project activities

Activities are used to group time entries and other billable items within a project.

Create activity for project

Adds a new project activity

Authorizations:
BearerAuth
path Parameters
projectId
required
integer <int64>

ID of project

Request Body schema: application/json

Create a new project activity

name
string or null

Activity name. Required when creating a activity.

internal
boolean or null
Default: false

Whether a activity is internal.

description
string or null

Activity description.

project_id
integer or null

Responses

Request samples

Content type
application/json
{
  • "name": "My Activity",
  • "internal": false,
  • "description": "The description of my activity.",
  • "project_id": 10
}

Response samples

Content type
application/json
{
  • "id": 10,
  • "name": "My Activity",
  • "internal": false,
  • "description": "The description of my activity.",
  • "project_id": 10
}

Deprecated. Create activity for project Deprecated

Adds a new project activity

Authorizations:
BearerAuth
path Parameters
projectId
required
integer <int64>

ID of project

Request Body schema: application/json

Create a new project activity

name
string or null

Activity name. Required when creating a activity.

internal
boolean or null
Default: false

Whether a activity is internal.

description
string or null

Activity description.

project_id
integer or null

Responses

Request samples

Content type
application/json
{
  • "name": "My Activity",
  • "internal": false,
  • "description": "The description of my activity.",
  • "project_id": 10
}

Response samples

Content type
application/json
{
  • "id": 10,
  • "name": "My Activity",
  • "internal": false,
  • "description": "The description of my activity.",
  • "project_id": 10
}

Update project activity

Updates an existing project activity

Authorizations:
BearerAuth
path Parameters
projectId
required
integer <int64>

ID of project

activityId
required
integer <int64>

ID of activity to update

Request Body schema: application/json

Update an existing project activity

name
string or null

Activity name. Required when creating a activity.

internal
boolean or null
Default: false

Whether a activity is internal.

description
string or null

Activity description.

project_id
integer or null

Responses

Request samples

Content type
application/json
{
  • "name": "My Activity",
  • "internal": false,
  • "description": "The description of my activity.",
  • "project_id": 10
}

Deprecated. Update project activity Deprecated

Updates an existing project activity

Authorizations:
BearerAuth
path Parameters
projectId
required
integer <int64>

ID of project

activityId
required
integer <int64>

ID of activity to update

Request Body schema: application/json

Update an existing project activity

name
string or null

Activity name. Required when creating a activity.

internal
boolean or null
Default: false

Whether a activity is internal.

description
string or null

Activity description.

project_id
integer or null

Responses

Request samples

Content type
application/json
{
  • "name": "My Activity",
  • "internal": false,
  • "description": "The description of my activity.",
  • "project_id": 10
}

Time entries

Time entries are used to track hours worked on projects.

Create time entry

Adds a new time entry to a project. To create a time entry, "set_alternative_user_of_times" permission is required. Time entries can only be added for enabled users.

Authorizations:
BearerAuth
path Parameters
projectId
required
integer <int64>

ID of project

Request Body schema: application/json

Create a new time entry

activity_id
integer or null <int64>

ID of the activity the time entry belongs to.

begins_at
string <date-time>

Date and time when the time entry begins in UTC. Required when creating a time entry. Must be in ISO 8601 format.

hours
number <float>

Duration of the time entry in hours. Required when creating a time entry.

billable_hours
number or null <float>

Billable hours for the time entry. If not provided, defaults to the value of hours.

description
string

Description of the time entry. Required when creating a time entry.

internal_note
string or null

Internal note for the time entry, not visible on invoices.

user_id
integer <int64>

ID of the user who created the time entry. Required when creating a time entry. User must be enabled.

rate_id
integer or null <int64>

ID of the rate applied to the time entry. If not provided, the default rate will be used based on the user and matter.

Responses

Request samples

Content type
application/json
{
  • "activity_id": 5,
  • "begins_at": "2024-01-15T09:00:00Z",
  • "hours": 2.5,
  • "billable_hours": 2.5,
  • "description": "Meeting with client to discuss project requirements.",
  • "internal_note": "Client requested additional features.",
  • "user_id": 1,
  • "rate_id": 3
}

Response samples

Content type
application/json
{
  • "id": 10,
  • "matter_id": 10,
  • "activity_id": 5,
  • "begins_at": "2024-01-15T09:00:00Z",
  • "hours": 2.5,
  • "billable_hours": 2.5,
  • "description": "Meeting with client to discuss project requirements.",
  • "internal_note": "Client requested additional features.",
  • "user_id": 1,
  • "rate_id": 3
}

Extensions

List all enabled extensions

Retrieves all available extensions with their actions and parameters

Authorizations:
BearerAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Execute an extension action

Triggers a specific action on a given extension

Authorizations:
BearerAuth
path Parameters
extension
required
string

Name of the extension

action
required
string

Name of the action to execute

Request Body schema: application/json

Parameters for the action

object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{ }

Expenses

Create expense

Adds a new expense. To create an expense, "set_alternative_user_of_expenses" permission is required.

Authorizations:
BearerAuth
path Parameters
projectId
required
integer <int64>

ID of project

Request Body schema: application/json

Create a new expense

description
string or null

Description of the expense. Required when creating an expense.

amount
number <float>

Amount of the expense. Required when creating an expense.

billable_amount
number or null <float>

Billable amount of the expense.

recipient
string

Recipient of the expense.

paid_at
string <date-time>

Date when the expense was paid. Required when creating an expense. Must be in ISO 8601 format with timezone (e.g., "2024-01-15T09:00:00Z" or "2024-01-15T14:00:00+05:00").

firm_id
integer <int64>

ID of the firm the expense belongs to.

matter_id
integer <int64>

ID of the matter the expense belongs to.

activity_id
integer or null <int64>

ID of the activity the expense belongs to.

vat_rate_id
integer <int64>

ID of the VAT rate applied to the expense. Required when creating an expense.

paid_in_currency_code
string

Currency code of the expense. Required when creating an expense.

document_number
string or null

Document number of the expense.

user_id
integer <int64>

ID of the user who created the expense.

Responses

Request samples

Content type
application/json
{
  • "description": "Travel expenses to client meeting.",
  • "amount": 150.75,
  • "billable_amount": 150.75,
  • "recipient": "John Doe",
  • "paid_at": "2024-01-15T09:00:00Z",
  • "firm_id": 1,
  • "matter_id": 10,
  • "activity_id": 5,
  • "vat_rate_id": 2,
  • "paid_in_currency_code": "USD",
  • "document_number": "EXP-2024-001",
  • "user_id": 1
}

Response samples

Content type
application/json
{
  • "id": 10,
  • "description": "Travel expenses to client meeting.",
  • "amount": 150.75,
  • "billable_amount": 150.75,
  • "recipient": "John Doe",
  • "paid_at": "2024-01-15T09:00:00Z",
  • "firm_id": 1,
  • "matter_id": 10,
  • "activity_id": 5,
  • "vat_rate_id": 2,
  • "paid_in_currency_code": "USD",
  • "document_number": "EXP-2024-001",
  • "user_id": 1
}

Update expense

Updates an existing expense

Authorizations:
BearerAuth
path Parameters
projectId
required
integer <int64>

ID of project

expenseId
required
integer <int64>

ID of expense to update

Request Body schema: application/json

Update an existing expense

description
string or null

Description of the expense. Required when creating an expense.

amount
number <float>

Amount of the expense. Required when creating an expense.

billable_amount
number or null <float>

Billable amount of the expense.

recipient
string

Recipient of the expense.

paid_at
string <date-time>

Date when the expense was paid. Required when creating an expense. Must be in ISO 8601 format with timezone (e.g., "2024-01-15T09:00:00Z" or "2024-01-15T14:00:00+05:00").

firm_id
integer <int64>

ID of the firm the expense belongs to.

matter_id
integer <int64>

ID of the matter the expense belongs to.

activity_id
integer or null <int64>

ID of the activity the expense belongs to.

vat_rate_id
integer <int64>

ID of the VAT rate applied to the expense. Required when creating an expense.

paid_in_currency_code
string

Currency code of the expense. Required when creating an expense.

document_number
string or null

Document number of the expense.

user_id
integer <int64>

ID of the user who created the expense.

Responses

Request samples

Content type
application/json
{
  • "description": "Travel expenses to client meeting.",
  • "amount": 150.75,
  • "billable_amount": 150.75,
  • "recipient": "John Doe",
  • "paid_at": "2024-01-15T09:00:00Z",
  • "firm_id": 1,
  • "matter_id": 10,
  • "activity_id": 5,
  • "vat_rate_id": 2,
  • "paid_in_currency_code": "USD",
  • "document_number": "EXP-2024-001",
  • "user_id": 1
}

Delete expense

Deletes an existing expense

Authorizations:
BearerAuth
path Parameters
projectId
required
integer <int64>

ID of project

expenseId
required
integer <int64>

ID of expense to delete

Responses

Upload expense attachment

Uploads an attachment file to an existing expense

Authorizations:
BearerAuth
path Parameters
projectId
required
integer <int64>

ID of project

expenseId
required
integer <int64>

ID of expense

Request Body schema: multipart/form-data

Attachment file to upload

attachment
string <binary>

Responses

Delete expense attachment

Deletes an attachment file from an existing expense

Authorizations:
BearerAuth
path Parameters
projectId
required
integer <int64>

ID of project

expenseId
required
integer <int64>

ID of expense

Responses