Hiflow API (1.0.0)

Download OpenAPI specification:

Documentation OpenAPI Hiflow for interaction with the Hiflow modules and access to data. Before using our API, you have to create an API key. This can be done in the « Parameters » module. Documentation can be found here (in French): Créer une clé d'API

Authentication

All API requests require a Bearer token for authentication. Include the token in the Authorization header:

Authorization: Bearer <your_token>

Pagination

Most list endpoints support pagination with the following parameters:

  • page: Page number (1-based)
  • items_per_page: Number of items per page (default: 10)

Paginated responses return:

{
  "items": [...],
  "total": 100,
  "itemsPerPage": 10
}

Error Handling

The API uses standard HTTP status codes:

  • 200: Success
  • 201: Resource created
  • 204: Resource deleted (no content)
  • 400: Bad request
  • 401: Unauthorized
  • 403: Forbidden
  • 404: Not found
  • 406: Invalid parameters
  • 500: Server error

Authentication

Authenticate a user

Authenticates a user with login and password credentials. Returns user information and permissions on success.

Request Body schema: application/json
required
login
required
string
password
required
string

Responses

Request samples

Content type
application/json
{
  • "login": "string",
  • "password": "string"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "lang": "string",
  • "id": 0,
  • "firstname": "string",
  • "name": "string",
  • "displayname": "string",
  • "permissions": { }
}

Request an API token

Generates a new JWT token for API authentication. Requires an existing authenticated session.

Authorizations:
BearerAuth

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "token": "string",
  • "msg": "string"
}

Customers

Get list of customers

Returns a list of all customers with their contacts. Results are sorted by name.

Authorizations:
BearerAuth
query Parameters
search
string

Search string applied on the name field

include_coord
boolean

Include GPS coordinates (lat/lng) for each customer

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create a customer

Creates a new customer with the provided information.

Authorizations:
BearerAuth
Request Body schema: application/json
required
name
required
string

Customer name

address
string
postal_code
string
city
string
id_country
string
vat_number
string
phone
string
email
string <email>
website
string
id_tracker
integer
id_legal_form
integer
due_date_formatted
integer

Payment terms in days

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "address": "string",
  • "postal_code": "string",
  • "city": "string",
  • "id_country": "string",
  • "vat_number": "string",
  • "phone": "string",
  • "email": "user@example.com",
  • "website": "string",
  • "id_tracker": 0,
  • "id_legal_form": 0,
  • "due_date_formatted": 0
}

Response samples

Content type
application/json
"customer/123"

Update a customer

Updates an existing customer.

Authorizations:
BearerAuth
Request Body schema: application/json
required
id
required
integer
name
required
string

Customer name

address
string
postal_code
string
city
string
id_country
string
vat_number
string
phone
string
email
string <email>
website
string
id_tracker
integer
id_legal_form
integer
due_date_formatted
integer

Payment terms in days

Responses

Request samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "address": "string",
  • "postal_code": "string",
  • "city": "string",
  • "id_country": "string",
  • "vat_number": "string",
  • "phone": "string",
  • "email": "user@example.com",
  • "website": "string",
  • "id_tracker": 0,
  • "id_legal_form": 0,
  • "due_date_formatted": 0
}

Get a specific customer

Returns detailed information about a customer including:

  • Basic customer data
  • Invoice amounts by year (chart_amount_by_year)
Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "address": "string",
  • "postal_code": "string",
  • "city": "string",
  • "id_country": "string",
  • "vat_number": "string",
  • "phone": "string",
  • "email": "user@example.com",
  • "website": "http://example.com",
  • "id_tracker": 0,
  • "id_legal_form": 0,
  • "due_date_formatted": 0,
  • "creation_date": "2019-08-24T14:15:22Z",
  • "contacts": [
    ],
  • "coord": {
    },
  • "chart_amount_by_year": {
    }
}

Delete a customer

Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

Responses

Get contacts for a customer

Returns all contacts associated with a specific customer.

Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get list of legal forms

Returns all available legal form types.

Authorizations:
BearerAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get list of VAT types

Returns VAT types for the current country (sales side).

Authorizations:
BearerAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Authenticate a customer by auth key

Identifies a customer using their authentication key. Requires customer authentication to be enabled in account settings.

Authorizations:
BearerAuth
Request Body schema: application/json
required
auth_key
required
string

Customer authentication key

Responses

Request samples

Content type
application/json
{
  • "auth_key": "string"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "address": "string",
  • "postal_code": "string",
  • "city": "string",
  • "id_country": "string",
  • "vat_number": "string",
  • "phone": "string",
  • "email": "user@example.com",
  • "website": "http://example.com",
  • "id_tracker": 0,
  • "id_legal_form": 0,
  • "due_date_formatted": 0,
  • "creation_date": "2019-08-24T14:15:22Z",
  • "contacts": [
    ],
  • "coord": {
    }
}

Contacts

Get list of contacts

Returns the contacts, optionally restricted to a single customer, supplier or job.

Without the page parameter the whole list is returned, otherwise the paginated form is used.

Authorizations:
BearerAuth
query Parameters
page
integer >= 1

Page number for pagination (1-based)

items_per_page
integer [ 1 .. 100 ]
Default: 10

Number of items per page

search
string

Search string applied on name, firstname, phone, mobile, address, city, zip, email, tags and events

id_customer
integer

Only the contacts of this customer

id_supplier
integer

Only the contacts of this supplier

id_job
integer

Only the contacts of this job

id_types
Array of integers

Only the contacts having one of these types, see /contact/types

id_tags
Array of integers

Only the contacts having one of these tags. An empty value also matches the contacts with no tag.

id_events
Array of integers

Only the contacts linked to one of these events. An empty value also matches the contacts with no event.

mailing_list
boolean

Only the contacts flagged as part of the mailing list

sort
string
Enum: "name" "firstname" "company" "job_title" "email" "phone" "gsm" "city" "cp" "id_type" "birthdate" "id_owner"

Sort field

sortAscending
boolean
Default: true

Sort direction, ascending by default

Responses

Response samples

Content type
application/json
Example
[ ]

Create a contact

Creates a contact, along with its tags, events and its links to customers, suppliers and jobs.

Authorizations:
BearerAuth
Request Body schema: application/json
required
name
required
string
firstname
string
title
string
company
string
job_title
string
id_type
integer

Contact type, see /contact/types. Defaults to the first type when omitted.

email
string <email>
phone
string
gsm
string
birthdate
string <date>
address
string
cp
string
city
string
id_country
string

Two letters country code. Defaults to the account country.

vat
string
natnum
string
peppol_id
string
id_lang
string
id_owner
integer
mailing_list
boolean
description
string
id_tags
Array of integers

Tags of the contact. When given, replaces all existing tags.

id_events
Array of integers

Events of the contact. When given, replaces all existing events.

id_customers
Array of integers

Customers the contact is linked to. When given, replaces all existing customer links.

id_suppliers
Array of integers

Suppliers the contact is linked to. When given, replaces all existing supplier links.

id_jobs
Array of integers

Jobs the contact is linked to. When given, replaces all existing job links.

id_role
integer

Function held by the contact in the linked customers, suppliers and jobs. See /contact/roles.

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "firstname": "string",
  • "title": "string",
  • "company": "string",
  • "job_title": "string",
  • "id_type": 0,
  • "email": "user@example.com",
  • "phone": "string",
  • "gsm": "string",
  • "birthdate": "2019-08-24",
  • "address": "string",
  • "cp": "string",
  • "city": "string",
  • "id_country": "string",
  • "vat": "string",
  • "natnum": "string",
  • "peppol_id": "string",
  • "id_lang": "string",
  • "id_owner": 0,
  • "mailing_list": true,
  • "description": "string",
  • "id_tags": [
    ],
  • "id_events": [
    ],
  • "id_customers": [
    ],
  • "id_suppliers": [
    ],
  • "id_jobs": [
    ],
  • "id_role": 0
}

Response samples

Content type
application/json
"contact/123"

Get a specific contact

Returns the contact together with its tags (tags, id_tags), its events (id_events) and the customers, suppliers and jobs it is linked to (id_customers, id_suppliers, id_jobs).

When id_customer, id_supplier or id_job is given, the function (id_role) and the note held by the contact in that customer, supplier or job are added to the answer.

Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

query Parameters
id_customer
integer
id_supplier
integer
id_job
integer

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "firstname": "string",
  • "title": "string",
  • "company": "string",
  • "job_title": "string",
  • "id_type": 0,
  • "email": "user@example.com",
  • "phone": "string",
  • "gsm": "string",
  • "birthdate": "2019-08-24",
  • "address": "string",
  • "cp": "string",
  • "city": "string",
  • "id_country": "string",
  • "vat": "string",
  • "natnum": "string",
  • "peppol_id": "string",
  • "id_lang": "string",
  • "id_owner": 0,
  • "mailing_list": true,
  • "description": "string",
  • "tags": [
    ],
  • "id_tags": [
    ],
  • "id_events": [
    ],
  • "id_customers": [
    ],
  • "id_suppliers": [
    ],
  • "id_jobs": [
    ],
  • "id_role": 0,
  • "note": "string"
}

Update a contact

Updates the given fields. Tags, events and links are only touched when the matching field is present in the body, and are then entirely replaced by the given list.

Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

Request Body schema: application/json
required
name
required
string
firstname
string
title
string
company
string
job_title
string
id_type
integer

Contact type, see /contact/types. Defaults to the first type when omitted.

email
string <email>
phone
string
gsm
string
birthdate
string <date>
address
string
cp
string
city
string
id_country
string

Two letters country code. Defaults to the account country.

vat
string
natnum
string
peppol_id
string
id_lang
string
id_owner
integer
mailing_list
boolean
description
string
id_tags
Array of integers

Tags of the contact. When given, replaces all existing tags.

id_events
Array of integers

Events of the contact. When given, replaces all existing events.

id_customers
Array of integers

Customers the contact is linked to. When given, replaces all existing customer links.

id_suppliers
Array of integers

Suppliers the contact is linked to. When given, replaces all existing supplier links.

id_jobs
Array of integers

Jobs the contact is linked to. When given, replaces all existing job links.

id_role
integer

Function held by the contact in the linked customers, suppliers and jobs. See /contact/roles.

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "firstname": "string",
  • "title": "string",
  • "company": "string",
  • "job_title": "string",
  • "id_type": 0,
  • "email": "user@example.com",
  • "phone": "string",
  • "gsm": "string",
  • "birthdate": "2019-08-24",
  • "address": "string",
  • "cp": "string",
  • "city": "string",
  • "id_country": "string",
  • "vat": "string",
  • "natnum": "string",
  • "peppol_id": "string",
  • "id_lang": "string",
  • "id_owner": 0,
  • "mailing_list": true,
  • "description": "string",
  • "id_tags": [
    ],
  • "id_events": [
    ],
  • "id_customers": [
    ],
  • "id_suppliers": [
    ],
  • "id_jobs": [
    ],
  • "id_role": 0
}

Delete a contact

Deletes the contact along with its tags, events and links to customers, suppliers and jobs.

Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

Responses

Link a contact to a customer, a supplier or a job

Creates the link if needed, and sets the function and the note held by the contact there.

Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

Request Body schema: application/json
required
entity_type
required
string
Enum: "customer" "supplier" "job"
id_entity
required
integer

ID of the customer, supplier or job

id_role
integer

Function held by the contact in this customer, supplier or job. See /contact/roles.

note
string

Responses

Request samples

Content type
application/json
{
  • "entity_type": "customer",
  • "id_entity": 0,
  • "id_role": 0,
  • "note": "string"
}

Unlink a contact from a customer, a supplier or a job

Removes the link. The contact itself is not deleted.

Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

Request Body schema: application/json
required
entity_type
required
string
Enum: "customer" "supplier" "job"
id_entity
required
integer

Responses

Request samples

Content type
application/json
{
  • "entity_type": "customer",
  • "id_entity": 0
}

Get list of contact types

Authorizations:
BearerAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get list of contact functions

Functions a contact can hold in a customer, a supplier or a job.

Authorizations:
BearerAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get list of tags applicable to contacts

Authorizations:
BearerAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get list of events

Authorizations:
BearerAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get list of civilities

Values usable in the title field of a contact, as short_name.

Authorizations:
BearerAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Estimates

Get list of estimates

Returns a list of estimates with optional filtering and pagination.

Authorizations:
BearerAuth
query Parameters
search
string

Search string applied on the name field

page
integer >= 1

Page number for pagination (1-based)

items_per_page
integer [ 1 .. 100 ]
Default: 10

Number of items per page

id_statuses
Array of integers

Filter by status IDs

id_customers
Array of integers

Filter by customer IDs

Responses

Response samples

Content type
application/json
Example
[ ]

Create an estimate

Creates a new estimate with entries. If id_item is specified in an entry, the entry data will be populated from the catalog item. If id_status is provided and corresponds to an ACCEPTED status, a job will be automatically created.

Authorizations:
BearerAuth
Request Body schema: application/json
required
id_customer
required
integer

Customer ID (mandatory)

description
string
customer_ref
string
id_status
integer
required
Array of objects

Responses

Request samples

Content type
application/json
{
  • "id_customer": 0,
  • "description": "string",
  • "customer_ref": "string",
  • "id_status": 0,
  • "entries": [
    ]
}

Response samples

Content type
application/json
"estimate/123"

Update an estimate

Updates an existing estimate. All existing entries are replaced with the new entries. If id_status changes to ACCEPTED, a job will be automatically created.

Authorizations:
BearerAuth
Request Body schema: application/json
required
id
required
integer
id_customer
required
integer

Customer ID (mandatory)

description
string
customer_ref
string
id_status
integer
required
Array of objects

Responses

Request samples

Content type
application/json
{
  • "id": 0,
  • "id_customer": 0,
  • "description": "string",
  • "customer_ref": "string",
  • "id_status": 0,
  • "entries": [
    ]
}

Get a specific estimate

Returns detailed information about an estimate including all entries.

Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "id_customer": 0,
  • "customer_name": "string",
  • "description": "string",
  • "customer_ref": "string",
  • "id_status": 0,
  • "status": "string",
  • "status_color": "string",
  • "amount": 0.1,
  • "entries": [
    ]
}

Delete an estimate

Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

Responses

Get list of estimate statuses

Returns all available estimate status types.

Authorizations:
BearerAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get list of units

Returns all available units for estimate entries.

Authorizations:
BearerAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Delivery notes

Get list of delivery notes

Returns delivery notes with optional filtering and pagination. Without page, the whole filtered list is returned. Each item carries a signed flag telling whether the customer signature has been captured.

Authorizations:
BearerAuth
query Parameters
search
string

Search string applied on the name field

page
integer >= 1

Page number for pagination (1-based)

items_per_page
integer [ 1 .. 100 ]
Default: 10

Number of items per page

id_statuses
Array of integers

Filter by status IDs (array or comma separated)

id_customers
Array of integers

Filter by customer IDs (array or comma separated)

id_users
Array of integers

Filter by owner IDs (array or comma separated)

id_tracker
integer

Only the delivery notes attached to this tracker (job)

date_from
string <date>

Delivery notes dated on or after this date

date_to
string <date>

Delivery notes dated on or before this date

Responses

Response samples

Content type
application/json
Example
[ ]

Create a delivery note

Creates a delivery note, in the draft status by default, with its entries. id_customer is mandatory unless id_tracker is given, in which case the customer of the tracker is used. Entries can be typed in (label, quantity, unitary_price...), copied from the catalog (id_item) or copied from items already sold on the job (id_item_entries). A signature can be given right away with the same fields as /deliverynote/{id}/sign. The reference is generated according to the account configuration.

Authorizations:
BearerAuth
Request Body schema: application/json
required
id_customer
integer

Mandatory on creation unless id_tracker is given (the customer is then derived from the tracker)

id_tracker
integer

Tracker (job or sub-project) to attach the delivery note to

id_customer_contact
integer or null

Contact of the customer, reset when the customer changes

customer_ref
string

Title

description
string

HTML note printed on the PDF

additional_text
string

Text printed below the totals

deliverynote_date
string <date>

Defaults to the configured default date (today)

deliverynote_ref
string

Reference; normally left empty and generated by the application

id_status
integer

See /deliverynote/status

id_owner
integer
id_signer
integer
Array of objects (DeliverynoteEntryInput)

On update, the given entries replace all existing ones. Refused (406) once the delivery note is signed.

id_item_entries
Array of integers

Ids of items already sold on the job (item_entry) to copy as entries

signature
string

Customer signature, same as /deliverynote/{id}/sign (signer_name, lat, lng, worker_signature and worker_name are accepted too)

Responses

Request samples

Content type
application/json
{
  • "id_customer": 0,
  • "id_tracker": 0,
  • "id_customer_contact": 0,
  • "customer_ref": "string",
  • "description": "string",
  • "additional_text": "string",
  • "deliverynote_date": "2019-08-24",
  • "deliverynote_ref": "string",
  • "id_status": 0,
  • "id_owner": 0,
  • "id_signer": 0,
  • "entries": [
    ],
  • "id_item_entries": [
    ],
  • "signature": "string"
}

Response samples

Content type
application/json

Update a delivery note

Updates the given fields of an existing delivery note (the id can be given in the body or in the URL as /deliverynote/{id}). When entries is given, it replaces all existing entries; this is refused once the delivery note is signed.

Authorizations:
BearerAuth
Request Body schema: application/json
required
id
required
integer
id_customer
integer

Mandatory on creation unless id_tracker is given (the customer is then derived from the tracker)

id_tracker
integer

Tracker (job or sub-project) to attach the delivery note to

id_customer_contact
integer or null

Contact of the customer, reset when the customer changes

customer_ref
string

Title

description
string

HTML note printed on the PDF

additional_text
string

Text printed below the totals

deliverynote_date
string <date>

Defaults to the configured default date (today)

deliverynote_ref
string

Reference; normally left empty and generated by the application

id_status
integer

See /deliverynote/status

id_owner
integer
id_signer
integer
Array of objects (DeliverynoteEntryInput)

On update, the given entries replace all existing ones. Refused (406) once the delivery note is signed.

id_item_entries
Array of integers

Ids of items already sold on the job (item_entry) to copy as entries

signature
string

Customer signature, same as /deliverynote/{id}/sign (signer_name, lat, lng, worker_signature and worker_name are accepted too)

Responses

Request samples

Content type
application/json
{
  • "id": 0,
  • "id_customer": 0,
  • "id_tracker": 0,
  • "id_customer_contact": 0,
  • "customer_ref": "string",
  • "description": "string",
  • "additional_text": "string",
  • "deliverynote_date": "2019-08-24",
  • "deliverynote_ref": "string",
  • "id_status": 0,
  • "id_owner": 0,
  • "id_signer": 0,
  • "entries": [
    ],
  • "id_item_entries": [
    ],
  • "signature": "string"
}

Get a specific delivery note

Returns the delivery note with its entries, signature (when signed) and attached files.

Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "id_customer": 0,
  • "customer_name": "string",
  • "id_customer_contact": 0,
  • "contact_name": "string",
  • "id_tracker": 0,
  • "tracker_name": "string",
  • "id_job": 0,
  • "id_owner": 0,
  • "id_signer": 0,
  • "deliverynote_ref": "string",
  • "ref_display": "string",
  • "customer_ref": "string",
  • "description": "string",
  • "additional_text": "string",
  • "deliverynote_date": "2019-08-24",
  • "creation_date": "2019-08-24T14:15:22Z",
  • "amount": 0.1,
  • "amount_formatted": "string",
  • "vat": 0.1,
  • "vatincl": 0.1,
  • "vatincl_formatted": "string",
  • "id_status": 0,
  • "status": "string",
  • "status_color": "string",
  • "status_type": 0,
  • "entries": [
    ],
  • "signed": true,
  • "signature": {
    },
  • "files": [
    ]
}

Update a delivery note

Same as PUT /deliverynote, with the id in the URL.

Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

Request Body schema: application/json
required
id_customer
integer

Mandatory on creation unless id_tracker is given (the customer is then derived from the tracker)

id_tracker
integer

Tracker (job or sub-project) to attach the delivery note to

id_customer_contact
integer or null

Contact of the customer, reset when the customer changes

customer_ref
string

Title

description
string

HTML note printed on the PDF

additional_text
string

Text printed below the totals

deliverynote_date
string <date>

Defaults to the configured default date (today)

deliverynote_ref
string

Reference; normally left empty and generated by the application

id_status
integer

See /deliverynote/status

id_owner
integer
id_signer
integer
Array of objects (DeliverynoteEntryInput)

On update, the given entries replace all existing ones. Refused (406) once the delivery note is signed.

id_item_entries
Array of integers

Ids of items already sold on the job (item_entry) to copy as entries

signature
string

Customer signature, same as /deliverynote/{id}/sign (signer_name, lat, lng, worker_signature and worker_name are accepted too)

Responses

Request samples

Content type
application/json
{
  • "id_customer": 0,
  • "id_tracker": 0,
  • "id_customer_contact": 0,
  • "customer_ref": "string",
  • "description": "string",
  • "additional_text": "string",
  • "deliverynote_date": "2019-08-24",
  • "deliverynote_ref": "string",
  • "id_status": 0,
  • "id_owner": 0,
  • "id_signer": 0,
  • "entries": [
    ],
  • "id_item_entries": [
    ],
  • "signature": "string"
}

Delete a delivery note

Deletes the delivery note, its entries and its signature.

Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

Responses

Get list of delivery note statuses

Returns all delivery note statuses, ordered as in the application. The type tells the meaning of the status (1 = draft, 2 = ready, 3 = sent, 4 = delivered).

Authorizations:
BearerAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get list of units

Returns all available units for delivery note entries.

Authorizations:
BearerAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Sign a delivery note

Stores the customer signature captured on site (typically from the mobile app), with the name of the signer, the GPS position and optionally the signature of the person who delivered.

Signing a delivery note:

  • assigns it a reference if it does not have one yet,
  • moves it to the "delivered" status (unless it is already there),
  • freezes its entries (PUT with entries is refused afterwards),
  • prints the signature block (name, date and image) on the PDF.

Signing again replaces the previous signature. The delivery note is returned as GET /deliverynote/{id} does.

Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

Request Body schema: application/json
required
signature
required
string

Customer signature image, base64 encoded PNG (a data URI such as data:image/png;base64,... or the raw base64 string). Resized to 300px max on the server.

signer_name
string

Name of the person who signed for the customer

worker_signature
string

Signature of the person who delivered, same format as signature

worker_name
string
lat
number <float>

Latitude where the signature was captured

lng
number <float>

Longitude where the signature was captured

sign_date
string <date-time>

When the signature was captured, defaults to now

Responses

Request samples

Content type
application/json
{
  • "signature": "string",
  • "signer_name": "string",
  • "worker_signature": "string",
  • "worker_name": "string",
  • "lat": 0.1,
  • "lng": 0.1,
  • "sign_date": "2019-08-24T14:15:22Z"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "id_customer": 0,
  • "customer_name": "string",
  • "id_customer_contact": 0,
  • "contact_name": "string",
  • "id_tracker": 0,
  • "tracker_name": "string",
  • "id_job": 0,
  • "id_owner": 0,
  • "id_signer": 0,
  • "deliverynote_ref": "string",
  • "ref_display": "string",
  • "customer_ref": "string",
  • "description": "string",
  • "additional_text": "string",
  • "deliverynote_date": "2019-08-24",
  • "creation_date": "2019-08-24T14:15:22Z",
  • "amount": 0.1,
  • "amount_formatted": "string",
  • "vat": 0.1,
  • "vatincl": 0.1,
  • "vatincl_formatted": "string",
  • "id_status": 0,
  • "status": "string",
  • "status_color": "string",
  • "status_type": 0,
  • "entries": [
    ],
  • "signed": true,
  • "signature": {
    },
  • "files": [
    ]
}

Get the delivery note PDF

Returns the PDF of the delivery note, with the signature block when it is signed. Requires the export privilege.

Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

Responses

Get the data needed to send a delivery note

Returns the recipients, subject, body and attachments the application would propose for this delivery note, so they can be reviewed or overridden before calling /deliverynote/{id}/send.

A reference is assigned to the delivery note if it does not have one yet.

Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

Responses

Response samples

Content type
application/json
{
  • "email": "string",
  • "subject": "string",
  • "body": "string",
  • "ref_display": "string",
  • "deliverynote_date": "string",
  • "files": [
    ]
}

Send a delivery note by email

Sends the delivery note PDF (with its signature when signed) by email, on behalf of the logged user, together with the files attached to the delivery note.

A reference is assigned to the delivery note if it does not have one yet, and the status moves on to the next "sent" status when there is one after the current status. A delivery note cannot be sent more than 10 times.

Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

Request Body schema: application/json
optional
to
string

Comma separated recipients, defaults to the contact then to the customer email

cc
string

Comma separated recipients in copy

copy
boolean
Default: false

Send a blind copy to the logged user

subject
string

Defaults to the reference as displayed in the application (%tokens are replaced)

message
string

HTML body, defaults to the configured template (%tokens are replaced)

Responses

Request samples

Content type
application/json
{
  • "to": "string",
  • "cc": "string",
  • "copy": false,
  • "subject": "string",
  • "message": "string"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "id_customer": 0,
  • "customer_name": "string",
  • "id_customer_contact": 0,
  • "contact_name": "string",
  • "id_tracker": 0,
  • "tracker_name": "string",
  • "id_job": 0,
  • "id_owner": 0,
  • "id_signer": 0,
  • "deliverynote_ref": "string",
  • "ref_display": "string",
  • "customer_ref": "string",
  • "description": "string",
  • "additional_text": "string",
  • "deliverynote_date": "2019-08-24",
  • "creation_date": "2019-08-24T14:15:22Z",
  • "amount": 0.1,
  • "amount_formatted": "string",
  • "vat": 0.1,
  • "vatincl": 0.1,
  • "vatincl_formatted": "string",
  • "id_status": 0,
  • "status": "string",
  • "status_color": "string",
  • "status_type": 0,
  • "entries": [
    ],
  • "signed": true,
  • "signature": {
    },
  • "files": [
    ]
}

Invoices

Get list of invoices

Returns a list of invoices with optional filtering and pagination.

Authorizations:
BearerAuth
query Parameters
search
string

Search string applied on the name field

page
integer >= 1

Page number for pagination (1-based)

items_per_page
integer [ 1 .. 100 ]
Default: 10

Number of items per page

id_customers
Array of integers

Filter by customer IDs

id_statuses
Array of integers

Filter by status IDs

id_tracker
integer

Filter by tracker ID

id_tags
Array of integers

Filter on tags with no group: invoices having at least one of these tags. Accepts id_tags[]=1&id_tags[]=2 or id_tags=1,2. For tags belonging to a group, use id_tags_<id_group> with the same syntax.

dateFrom
string <date>

Filter invoices from this date

dateTo
string <date>

Filter invoices until this date

Responses

Response samples

Content type
application/json
Example
[ ]

Create an invoice

Creates a new invoice. Can be created:

  • From scratch with entries
  • From an existing estimate (by providing id_estimate)
Authorizations:
BearerAuth
Request Body schema: application/json
required
id_customer
required
integer
id_estimate
integer

If specified, creates invoice from an existing estimate

required
Array of objects
id_tags
Array of integers

Tags to set on the new invoice (see /invoice/tags)

Responses

Request samples

Content type
application/json
{
  • "id_customer": 0,
  • "id_estimate": 0,
  • "entries": [
    ],
  • "id_tags": [
    ]
}

Response samples

Content type
application/json
"invoice/123"

Get a specific invoice

Returns detailed information about an invoice including all entries.

Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "id_customer": 0,
  • "invoice_date": "2019-08-24",
  • "invoice_duedate": "2019-08-24",
  • "invoice_type": "invoice",
  • "amount": 0.1,
  • "id_status": 0,
  • "reference": "string",
  • "entries": [
    ],
  • "tags": [
    ],
  • "id_tags": [
    ],
  • "items": [
    ]
}

Update an invoice

Updates invoice fields and/or its tags. Typical use: tag an invoice without changing anything else with {"add_id_tags": [12]}.

Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

Request Body schema: application/json
required
id_tags
Array of integers

Replaces every tag of the invoice. An empty array removes them all.

add_id_tags
Array of integers

Tags to add, existing tags are kept

remove_id_tags
Array of integers

Tags to remove, other tags are kept

property name*
additional property
any

Responses

Request samples

Content type
application/json
{
  • "add_id_tags": [
    ]
}

Delete an invoice

Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

Responses

Get list of invoice statuses

Returns all available invoice status types.

Authorizations:
BearerAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get list of invoice tags

Returns the tags applicable to invoices. Tags are created in the application.

Authorizations:
BearerAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get list of VAT types

Returns all VAT types available for invoices.

Authorizations:
BearerAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get the data needed to send an invoice

Returns the recipients, subject, body and attachments the application would propose for this invoice, so they can be reviewed or overridden before calling /invoice/{id}/send.

A reference is assigned to the invoice if it does not have one yet.

Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

query Parameters
reminder
boolean
Default: false

Return the reminder subject and body instead of the regular ones

Responses

Response samples

Content type
application/json
{
  • "email": "string",
  • "subject": "string",
  • "body": "string",
  • "ref_display": "string",
  • "activity_report_format": "string",
  • "timesheet_format": "string",
  • "files": [
    ],
  • "invoice_date": "string"
}

Send an invoice by email

Sends the invoice PDF by email, on behalf of the logged user, together with the files attached to the invoice and, when requested, the timesheet and activity reports.

A reference is assigned to the invoice if it does not have one yet, and the invoice status moves on to the next "sent" status. An invoice cannot be sent more than 10 times.

Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

Request Body schema: application/json
optional
to
string

Comma separated recipients. Defaults to the invoice contact, then to the customer email.

cc
string

Comma separated carbon copy recipients.

copy
boolean
Default: false

Send a blind copy to the logged user.

subject
string

Defaults to " from ". Tokens such as %ref are replaced.

message
string

HTML body. Defaults to the invoice default mail body configured on the account. Tokens such as %ref and %sender are replaced.

reminder
boolean
Default: false

Use the reminder subject and body instead of the regular ones.

timesheet
string

Format of the timesheet report to attach ("pdf", "xls", ...), or false to attach none. Defaults to the account configuration. Ignored for credit notes.

activity_report
string

Format of the activity report to attach ("pdf", "xls", ...), or false to attach none. Defaults to the account configuration. Ignored for credit notes.

Responses

Request samples

Content type
application/json
{
  • "to": "string",
  • "cc": "string",
  • "copy": false,
  • "subject": "string",
  • "message": "string",
  • "reminder": false,
  • "timesheet": "string",
  • "activity_report": "string"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "id_customer": 0,
  • "invoice_date": "2019-08-24",
  • "invoice_duedate": "2019-08-24",
  • "invoice_type": "invoice",
  • "amount": 0.1,
  • "id_status": 0,
  • "reference": "string",
  • "entries": [
    ],
  • "tags": [
    ],
  • "id_tags": [
    ],
  • "items": [
    ]
}

Send an invoice on the Peppol network

Exports the invoice as an EFFF XML document embedding its attachments and submits it to the Peppol network. Requires a Peppol ID on the account and on the customer.

A reference is assigned to the invoice if it does not have one yet, and the invoice status moves on to the next "sent" status. An invoice cannot be sent more than 10 times.

Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

Request Body schema: application/json
optional
timesheet
string

Format of the timesheet report to embed ("pdf", "xls", ...), or false to embed none. Defaults to the account configuration.

activity_report
string

Format of the activity report to embed ("pdf", "xls", ...), or false to embed none. Defaults to the account configuration.

Responses

Request samples

Content type
application/json
{
  • "timesheet": "string",
  • "activity_report": "string"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "id_customer": 0,
  • "invoice_date": "2019-08-24",
  • "invoice_duedate": "2019-08-24",
  • "invoice_type": "invoice",
  • "amount": 0.1,
  • "id_status": 0,
  • "reference": "string",
  • "entries": [
    ],
  • "tags": [
    ],
  • "id_tags": [
    ],
  • "items": [
    ]
}

Items

Get list of catalog items

Returns a list of catalog items with optional filtering.

Authorizations:
BearerAuth
query Parameters
search
string

Search string applied on the name field

id_folder
integer

Filter by folder ID

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create an item or folder

Creates a new catalog item or folder. Set type='folder' to create a folder instead of an item.

Authorizations:
BearerAuth
Request Body schema: application/json
required
label
string
description
string
id_folder
integer
id_unit
integer
unitary_price
number <float>
unitary_cost
number <float>
id_vat_type
integer
id_supplier
integer
type
string
Enum: "item" "folder"

Set to 'folder' to create a folder instead of an item

id_parent
integer

Parent folder ID (when creating a folder)

name
string

Folder name (when creating a folder)

Responses

Request samples

Content type
application/json
{
  • "label": "string",
  • "description": "string",
  • "id_folder": 0,
  • "id_unit": 0,
  • "unitary_price": 0.1,
  • "unitary_cost": 0.1,
  • "id_vat_type": 0,
  • "id_supplier": 0,
  • "type": "item",
  • "id_parent": 0,
  • "name": "string"
}

Response samples

Content type
application/json
"item/123"

Get list of folders

Returns all catalog folders.

Authorizations:
BearerAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Jobs

Get list of jobs

Returns a list of jobs (projects) with optional filtering and pagination.

Authorizations:
BearerAuth
query Parameters
search
string

Search string applied on the name field

page
integer >= 1

Page number for pagination (1-based)

items_per_page
integer [ 1 .. 100 ]
Default: 10

Number of items per page

id_statuses
Array of integers

Filter by project status IDs

id_customers
Array of integers

Filter by customer IDs

from
string <date>

Start date filter

to
string <date>

End date filter

Responses

Response samples

Content type
application/json
Example
[ ]

Create a job

Creates a new job (project).

Authorizations:
BearerAuth
Request Body schema: application/json
required
name
required
string
title
string
description
string
id_customer
required
integer
id_status
integer

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "title": "string",
  • "description": "string",
  • "id_customer": 0,
  • "id_status": 0
}

Response samples

Content type
application/json
"job/123"

Update a job

Authorizations:
BearerAuth
Request Body schema: application/json
required
id
required
integer
name
required
string
title
string
description
string
id_customer
required
integer
id_status
integer

Responses

Request samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "title": "string",
  • "description": "string",
  • "id_customer": 0,
  • "id_status": 0
}

Get a specific job

Returns detailed information about a job including:

  • Time consumption data
  • Budget breakdown by trackers and workers
  • Customer information
  • Financial details (if user has invoice view permission)
Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "title": "string",
  • "description": "string",
  • "id_tracker": 0,
  • "id_status": 0,
  • "customer": {
    },
  • "tracker": { },
  • "consumed": { },
  • "top_trackers": [ ],
  • "workers": [ ],
  • "details": { }
}

Delete a job

Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

Responses

Get list of job statuses

Returns all available project status types.

Authorizations:
BearerAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Tasks

Get list of tasks

Returns a list of tasks with optional filtering, sorting, and pagination. Supports both singular and plural parameter names for compatibility.

Authorizations:
BearerAuth
query Parameters
search
string

Search string applied on the name field

page
integer >= 1

Page number for pagination (1-based)

items_per_page
integer [ 1 .. 100 ]
Default: 10

Number of items per page

integer or Array of integers

Filter by customer ID (can be array)

integer or Array of integers

Filter by customer IDs (alias for id_customer)

integer or Array of integers

Filter by status ID (can be array)

integer or Array of integers

Filter by status IDs (alias for id_status)

integer or Array of integers

Filter by assigned user ID (can be array)

integer or Array of integers

Filter by assigned user IDs (alias for id_user)

date_start
string <date>

Filter tasks starting from this date

date_end
string <date>

Filter tasks ending before this date

created_from
string <date>

Filter tasks created from this date

created_to
string <date>

Filter tasks created until this date

sort
string

Field to sort by (must be in allowed sort fields)

sortAscending
boolean

Sort in ascending order (presence of parameter enables ascending)

only_open
boolean
Deprecated

Only return open tasks (deprecated, use id_status instead)

Responses

Response samples

Content type
application/json
Example
[ ]

Create a task

Creates a new task with optional user assignments and tags.

Authorizations:
BearerAuth
Request Body schema: application/json
required
name
string
description
string
id_tracker
integer
id_status
integer
id_priority
integer
date_start
string <date>
date_end
string <date>
users
Array of integers

List of user IDs to assign

tags
Array of integers

List of tag IDs

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string",
  • "id_tracker": 0,
  • "id_status": 0,
  • "id_priority": 0,
  • "date_start": "2019-08-24",
  • "date_end": "2019-08-24",
  • "users": [
    ],
  • "tags": [
    ]
}

Response samples

Content type
application/json
"task/123"

Update a task

Updates an existing task including user assignments and tags.

Authorizations:
BearerAuth
Request Body schema: application/json
required
id
required
integer
name
string
description
string
id_tracker
integer
id_status
integer
id_priority
integer
date_start
string <date>
date_end
string <date>
users
Array of integers

List of user IDs to assign

tags
Array of integers

List of tag IDs

Responses

Request samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "description": "string",
  • "id_tracker": 0,
  • "id_status": 0,
  • "id_priority": 0,
  • "date_start": "2019-08-24",
  • "date_end": "2019-08-24",
  • "users": [
    ],
  • "tags": [
    ]
}

Get a specific task

Returns detailed information about a task.

Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "description": "string",
  • "id_tracker": 0,
  • "id_status": 0,
  • "id_priority": 0,
  • "date_start": "2019-08-24",
  • "date_end": "2019-08-24",
  • "users": [
    ],
  • "tags": [
    ]
}

Delete a task

Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

Responses

Get task history

Returns the change history for a specific task.

Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

Responses

Response samples

Content type
application/json
[
  • { }
]

Get list of task statuses

Returns all available task status types.

Authorizations:
BearerAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get list of task priorities

Returns all available task priority levels.

Authorizations:
BearerAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get candidate assignees

Returns users who can be assigned to tasks.

Authorizations:
BearerAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get available tags

Returns all tags applicable to tasks.

Authorizations:
BearerAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get available trackers

Returns trackers that can be associated with tasks.

Authorizations:
BearerAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Timesheets

Get list of timesheet entries

Returns timesheet entries (time blocks) with optional filtering. If no user filter is provided, returns entries for the logged-in user only. Use all_users parameter to retrieve entries for all users.

Authorizations:
BearerAuth
query Parameters
date_start
string <date>

Start date for selection (defaults to 1970-01-01)

date_end
string <date>

End date for selection (defaults to 2037-01-01)

integer or Array of integers

Filter by customer ID (can be array)

integer or Array of integers

Filter by user ID (can be array, defaults to logged user)

integer or Array of integers

Filter by tracker ID (can be array)

integer or Array of integers

Filter by task ID (can be array)

integer or Array of integers

Filter by tracker type ID (can be array)

all_users
boolean

Include entries from all users (ignores id_user filter)

summary
boolean

Return only total time summary instead of individual entries

Responses

Response samples

Content type
application/json
Example
[ ]

Create a timesheet entry

Creates a new timesheet entry (time block). Validates for overlapping entries and other constraints.

Authorizations:
BearerAuth
Request Body schema: application/json
required
id_tracker
required
integer

Tracker ID (mandatory)

date_start
required
string <date-time>

Start datetime (mandatory)

date_end
required
string <date-time>

End datetime (mandatory)

id_user
integer

User ID (defaults to logged user)

comment
string
quantity
number <float>
location
string
signature
string

Base64 encoded customer signature

lat
number <float>

Latitude

lng
number <float>

Longitude

signer_name
string

Name of the person who signed

Array of objects

Responses

Request samples

Content type
application/json
{
  • "id_tracker": 0,
  • "date_start": "2019-08-24T14:15:22Z",
  • "date_end": "2019-08-24T14:15:22Z",
  • "id_user": 0,
  • "comment": "string",
  • "quantity": 0.1,
  • "location": "string",
  • "signature": "string",
  • "lat": 0.1,
  • "lng": 0.1,
  • "signer_name": "string",
  • "items": [
    ]
}

Response samples

Content type
application/json
"timesheet/123"

Update a timesheet entry

Updates an existing timesheet entry.

Authorizations:
BearerAuth
Request Body schema: application/json
required
id
required
integer
from_app
boolean

Set to true when updating from mobile app (affects item handling)

id_tracker
required
integer

Tracker ID (mandatory)

date_start
required
string <date-time>

Start datetime (mandatory)

date_end
required
string <date-time>

End datetime (mandatory)

id_user
integer

User ID (defaults to logged user)

comment
string
quantity
number <float>
location
string
signature
string

Base64 encoded customer signature

lat
number <float>

Latitude

lng
number <float>

Longitude

signer_name
string

Name of the person who signed

Array of objects

Responses

Request samples

Content type
application/json
{
  • "id": 0,
  • "from_app": true,
  • "id_tracker": 0,
  • "date_start": "2019-08-24T14:15:22Z",
  • "date_end": "2019-08-24T14:15:22Z",
  • "id_user": 0,
  • "comment": "string",
  • "quantity": 0.1,
  • "location": "string",
  • "signature": "string",
  • "lat": 0.1,
  • "lng": 0.1,
  • "signer_name": "string",
  • "items": [
    ]
}

Delete a timesheet entry

Authorizations:
BearerAuth

Responses

Get a specific timesheet entry

Returns detailed information about a timesheet entry including metadata and items.

Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "id_user": 0,
  • "id_tracker": 0,
  • "date_start": "2019-08-24T14:15:22Z",
  • "date_end": "2019-08-24T14:15:22Z",
  • "comment": "string",
  • "quantity": 0.1,
  • "location": "string",
  • "meta": {
    },
  • "items": [
    ]
}

Send timesheet worksheet

Sends the timesheet entry worksheet via email to configured recipients.

Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

Responses

Trackers

Get list of trackers

Returns a list of trackers with optional filtering. Can return flat list or tree structure depending on parameters.

Authorizations:
BearerAuth
query Parameters
id_customer
integer

Filter by customer ID

level
integer

Filter by hierarchy level

id_parent
integer

Filter by parent tracker ID (also returns children as tree)

search
string

Search trackers by name (returns tree structure, max 100 results)

mostused
boolean

Return most used trackers for the current user (returns tree structure, max 15 results)

Responses

Response samples

Content type
application/json
Example
[ ]

Create a tracker

Creates a new tracker under a customer or job.

Authorizations:
BearerAuth
Request Body schema: application/json
required
name
string
note
string
id_parent
integer
id_type
integer
id_tracker_root
integer

Root tracker ID for creating under a job

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "note": "string",
  • "id_parent": 0,
  • "id_type": 0,
  • "id_tracker_root": 0
}

Get a specific tracker

Returns detailed information about a tracker.

Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

query Parameters
show_details
boolean

Include time consumption details

from
string <date>

Start date for consumption calculation

to
string <date>

End date for consumption calculation

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "note": "string",
  • "id_parent": 0,
  • "id_type": 0,
  • "id_customer": 0,
  • "level": 0,
  • "path": "string",
  • "consumed": { }
}

Delete a tracker

Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

Responses

Users

Get list of users

Returns a list of users (excluding sensitive fields like password).

Authorizations:
BearerAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create a user

Creates a new user with optional customer access assignments.

Authorizations:
BearerAuth
Request Body schema: application/json
required
login
required
string
firstname
required
string
name
required
string
email
string <email>
phone
string
mobile
string
customers
Array of integers

List of customer IDs to grant access to

Responses

Request samples

Content type
application/json
{
  • "login": "string",
  • "firstname": "string",
  • "name": "string",
  • "email": "user@example.com",
  • "phone": "string",
  • "mobile": "string",
  • "customers": [
    ]
}

Response samples

Content type
application/json
"user/123"

Get a specific user

Returns user information (excluding sensitive fields).

Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "login": "string",
  • "firstname": "string",
  • "name": "string",
  • "email": "user@example.com",
  • "phone": "string",
  • "mobile": "string",
  • "active": true
}

Reports

Get list of report bookmarks

Returns all report bookmarks accessible to the current user (owned or public).

Authorizations:
BearerAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Execute a report

Executes a saved report bookmark and returns the results. Only GenericReport-based reports are supported via API.

Example request with custom parameters:

/report/11?rawmode=1&custom_parameters={"from": "2024-01-01", "to": "2024-12-31"}
Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

query Parameters
rawmode
integer
Enum: 0 1

Set to 1 to return raw data without formatting

custom_parameters
string
Example: custom_parameters={"from": "2024-01-01", "to": "2024-12-31"}

JSON-encoded custom parameters to override report defaults

Responses

Response samples

Content type
application/json
{
  • "meta": { },
  • "data": { },
  • "level": 0,
  • "entries": { }
}

Activity

Get activity dashboard

Returns the activity dashboard with:

  • Recent timeline events (last 15)
  • Key metrics (time worked, invoices, etc.)
Authorizations:
BearerAuth

Responses

Response samples

Content type
application/json
{
  • "timeline": [
    ],
  • "metrics": {
    }
}

Incoming Invoices

Get list of incoming invoices

Returns a list of incoming invoices (purchase invoices) with optional filtering and pagination.

Authorizations:
BearerAuth
query Parameters
search
string

Search string applied on the name field

page
integer >= 1

Page number for pagination (1-based)

items_per_page
integer [ 1 .. 100 ]
Default: 10

Number of items per page

id_supplier
integer

Filter by supplier ID

payment_status
string
Enum: "new" "rejected" "topay" "paid"

Filter by payment status

dateFrom
string <date>

Filter invoices from this date

dateTo
string <date>

Filter invoices until this date

dueFrom
string <date>

Filter by due date from

dueTo
string <date>

Filter by due date until

Responses

Response samples

Content type
application/json
Example
[ ]

Create an incoming invoice

Creates a new incoming invoice.

When image and extension are given (a scanned receipt or invoice, as an image or a PDF), the file is attached to the invoice and, if an AI provider is configured on the account (ai.ocr_provider: Claude vision or Mistral OCR), its content is extracted: supplier, document number, dates, totals and line items. The extracted values are used as defaults for every field not explicitly given in the request, the supplier being matched on its VAT number then on its name. The extraction is returned in ocr so the caller can review it.

If no entries are provided and nothing could be extracted, a default entry with zero amounts is created.

Authorizations:
BearerAuth
Request Body schema: application/json
required
docno
string
cost_date
string <date>
tmonth
integer

Accounting month

tyear
integer

Accounting year

id_supplier
integer
supplier_ref
string
internal_ref
string
payment_status
string
Enum: "new" "rejected" "topay" "paid"
due_date
string <date>
image
string

Base64 encoded image data

extension
string

File extension (e.g., 'jpg', 'png', 'pdf')

mark_po_entries_booked
boolean
Array of objects

Responses

Request samples

Content type
application/json
{
  • "docno": "string",
  • "cost_date": "2019-08-24",
  • "tmonth": 0,
  • "tyear": 0,
  • "id_supplier": 0,
  • "supplier_ref": "string",
  • "internal_ref": "string",
  • "payment_status": "new",
  • "due_date": "2019-08-24",
  • "image": "string",
  • "extension": "string",
  • "mark_po_entries_booked": true,
  • "entries": [
    ]
}

Response samples

Content type
application/json
{
  • "url": "incominginvoice/123",
  • "id": 0,
  • "ocr": {
    }
}

Get a specific incoming invoice

Returns detailed information about an incoming invoice including entries and files.

Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "docno": "string",
  • "cost_date": "2019-08-24",
  • "tmonth": 0,
  • "tyear": 0,
  • "id_supplier": 0,
  • "supplier_name": "string",
  • "supplier_ref": "string",
  • "internal_ref": "string",
  • "payment_status": "new",
  • "due_date": "2019-08-24",
  • "entries": [
    ],
  • "files": [
    ]
}

Delete an incoming invoice

Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

Responses

Get list of payment statuses

Returns all available payment status options for incoming invoices.

Authorizations:
BearerAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Files

Get file information or serve file

Returns file information or serves the file content. Use serve parameter to download the actual file.

Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

query Parameters
serve
boolean

Set to serve/download the actual file

Responses

Opportunities

Get list of opportunities

Returns the opportunities of the sales pipeline.

Without the page parameter the whole list is returned, otherwise the paginated form is used.

Authorizations:
BearerAuth
query Parameters
page
integer >= 1

Page number for pagination (1-based)

items_per_page
integer [ 1 .. 100 ]
Default: 10

Number of items per page

search
string

Search string applied on title, company, contact, description, next action, owner, stage, source, team, country and tags

id_customer
integer

Only the opportunities linked to this client

id_stages
Array of integers

Only the opportunities in one of these stages, see /opportunity/stages

id_owners
Array of integers

Only the opportunities owned by one of these users. An empty value also matches the opportunities with no owner.

id_teams
Array of integers

Only the opportunities of one of these teams. An empty value also matches the opportunities with no team.

id_sources
Array of integers

Only the opportunities coming from one of these sources, see /opportunity/sources

id_tags
Array of integers

Only the opportunities having one of these tags. An empty value also matches the opportunities with no tag.

hide_archived
boolean

Exclude the archived opportunities

only_open
boolean

Only the opportunities still running, i.e. neither won nor lost

sort
string
Enum: "title" "company" "amount" "probability" "weighted_amount" "expected_close_date" "next_action_date" "id_stage" "id_owner" "id_team" "id_source" "created"

Sort field

sortAscending
boolean
Default: true

Sort direction, ascending by default

Responses

Response samples

Content type
application/json
Example
[ ]

Create an opportunity

Creates an opportunity, along with its tags.

When id_stage is omitted the first running stage of the pipeline is used, and the probability defaults to the one configured on that stage.

Authorizations:
BearerAuth
Request Body schema: application/json
required
title
required
string
company
string
id_customer
integer or null

Set it to attach the opportunity to an existing client (upsell)

id_contact
integer or null
id_stage
integer

Defaults to the first running stage of the pipeline

id_source
integer or null
id_owner
integer or null

Defaults to the authenticated user

id_team
integer or null
id_country
string or null

Defaults to the country of the account

amount
number <float>
probability
integer

Defaults to the probability configured on the stage

expected_close_date
string

Account date format, e.g. 31/12/2026

next_action
string
next_action_date
string
description
string
archived
boolean
id_tags
Array of integers

Responses

Request samples

Content type
application/json
{
  • "title": "string",
  • "company": "string",
  • "id_customer": 0,
  • "id_contact": 0,
  • "id_stage": 0,
  • "id_source": 0,
  • "id_owner": 0,
  • "id_team": 0,
  • "id_country": "string",
  • "amount": 0.1,
  • "probability": 0,
  • "expected_close_date": "string",
  • "next_action": "string",
  • "next_action_date": "string",
  • "description": "string",
  • "archived": true,
  • "id_tags": [
    ]
}

Response samples

Content type
application/json
"opportunity/123"

Get a specific opportunity

Returns the opportunity together with its tags (id_tags), its stage history (history) and the estimates generated from it (estimates).

Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "title": "string",
  • "company": "string",
  • "company_name": "string",
  • "id_customer": 0,
  • "customer_name": "string",
  • "id_contact": 0,
  • "contact_name": "string",
  • "contact_email": "string",
  • "contact_phone": "string",
  • "id_stage": 0,
  • "stage": "string",
  • "stage_color": "string",
  • "stage_type": 0,
  • "id_source": 0,
  • "source": "string",
  • "id_owner": 0,
  • "owner_name": "string",
  • "id_team": 0,
  • "team_name": "string",
  • "id_country": "string",
  • "country": "string",
  • "amount": 0.1,
  • "probability": 0,
  • "weighted_amount": 0.1,
  • "expected_close_date": "string",
  • "next_action": "string",
  • "next_action_date": "string",
  • "description": "string",
  • "closed_date": "string",
  • "lost_reason": "string",
  • "archived": true,
  • "days_since_move": 0,
  • "note_count": 0,
  • "estimate_count": 0,
  • "id_tags": [
    ],
  • "history": [
    ],
  • "estimates": [
    ]
}

Update an opportunity

Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

Request Body schema: application/json
required
title
required
string
company
string
id_customer
integer or null

Set it to attach the opportunity to an existing client (upsell)

id_contact
integer or null
id_stage
integer

Defaults to the first running stage of the pipeline

id_source
integer or null
id_owner
integer or null

Defaults to the authenticated user

id_team
integer or null
id_country
string or null

Defaults to the country of the account

amount
number <float>
probability
integer

Defaults to the probability configured on the stage

expected_close_date
string

Account date format, e.g. 31/12/2026

next_action
string
next_action_date
string
description
string
archived
boolean
id_tags
Array of integers

Responses

Request samples

Content type
application/json
{
  • "title": "string",
  • "company": "string",
  • "id_customer": 0,
  • "id_contact": 0,
  • "id_stage": 0,
  • "id_source": 0,
  • "id_owner": 0,
  • "id_team": 0,
  • "id_country": "string",
  • "amount": 0.1,
  • "probability": 0,
  • "expected_close_date": "string",
  • "next_action": "string",
  • "next_action_date": "string",
  • "description": "string",
  • "archived": true,
  • "id_tags": [
    ]
}

Delete an opportunity

Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

Responses

Move an opportunity to another stage

Moves the opportunity to the given stage. The probability configured on the target stage is applied, the change is recorded in the stage history, and entering a won or lost stage stamps the closing date.

sort optionally holds the ids of the target column in their new order, to persist a manual ordering inside the stage.

Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

Request Body schema: application/json
required
id_stage
required
integer

Target stage, see /opportunity/stages

sort
Array of integers

Ids of the opportunities of the target stage, in their new order

lost_reason
string

Only kept when the target stage is a lost one

Responses

Request samples

Content type
application/json
{
  • "id_stage": 0,
  • "sort": [
    ],
  • "lost_reason": "string"
}

Convert the prospect into a client

Creates the client record from the opportunity (unless it is already linked to one), attaches its main contact, carries its tags and notes over, and closes the opportunity on the won stage.

Every field of the body is optional and overrides the value deduced from the opportunity.

Authorizations:
BearerAuth
path Parameters
id
required
integer

Resource ID

Request Body schema: application/json
optional
name
string
code
string
vat
string
adress
string
cp
string
city
string
id_country
string
email
string
phone
string

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "code": "string",
  • "vat": "string",
  • "adress": "string",
  • "cp": "string",
  • "city": "string",
  • "id_country": "string",
  • "email": "string",
  • "phone": "string"
}

Response samples

Content type
application/json
{
  • "id_customer": 0
}

Get the pipeline board

Returns the stages of the pipeline, each holding its cards and its totals.

Authorizations:
BearerAuth
query Parameters
hide_archived
boolean

Exclude the archived opportunities

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get list of pipeline stages

Authorizations:
BearerAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get list of opportunity sources

Authorizations:
BearerAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get list of tags applicable to opportunities

Authorizations:
BearerAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]