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
All API requests require a Bearer token for authentication. Include the token in the Authorization header:
Authorization: Bearer <your_token>
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
}
The API uses standard HTTP status codes:
200: Success201: Resource created204: Resource deleted (no content)400: Bad request401: Unauthorized403: Forbidden404: Not found406: Invalid parameters500: Server errorAuthenticates a user with login and password credentials. Returns user information and permissions on success.
| login required | string |
| password required | string |
{- "login": "string",
- "password": "string"
}{- "success": true,
- "lang": "string",
- "id": 0,
- "firstname": "string",
- "name": "string",
- "displayname": "string",
- "permissions": { }
}Returns a list of all customers with their contacts. Results are sorted by name.
| search | string Search string applied on the name field |
| include_coord | boolean Include GPS coordinates (lat/lng) for each customer |
[- {
- "id": 0,
- "name": "string",
- "address": "string",
- "postal_code": "string",
- "city": "string",
- "id_country": "string",
- "vat_number": "string",
- "phone": "string",
- "email": "user@example.com",
- "id_tracker": 0,
- "id_legal_form": 0,
- "due_date_formatted": 0,
- "creation_date": "2019-08-24T14:15:22Z",
- "contacts": [
- {
- "id": 0,
- "firstname": "string",
- "name": "string",
- "email": "user@example.com",
- "phone": "string",
- "mobile": "string",
- "function": "string"
}
], - "coord": {
- "lat": 0.1,
- "lng": 0.1
}
}
]Creates a new customer with the provided information.
| name required | string Customer name |
| address | string |
| postal_code | string |
| city | string |
| id_country | string |
| vat_number | string |
| phone | string |
string <email> | |
| website | string |
| id_tracker | integer |
| id_legal_form | integer |
| due_date_formatted | integer Payment terms in days |
{- "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
}"customer/123"Updates an existing customer.
| id required | integer |
| name required | string Customer name |
| address | string |
| postal_code | string |
| city | string |
| id_country | string |
| vat_number | string |
| phone | string |
string <email> | |
| website | string |
| id_tracker | integer |
| id_legal_form | integer |
| due_date_formatted | integer Payment terms in days |
{- "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
}Returns detailed information about a customer including:
| id required | integer Resource ID |
{- "id": 0,
- "name": "string",
- "address": "string",
- "postal_code": "string",
- "city": "string",
- "id_country": "string",
- "vat_number": "string",
- "phone": "string",
- "email": "user@example.com",
- "id_tracker": 0,
- "id_legal_form": 0,
- "due_date_formatted": 0,
- "creation_date": "2019-08-24T14:15:22Z",
- "contacts": [
- {
- "id": 0,
- "firstname": "string",
- "name": "string",
- "email": "user@example.com",
- "phone": "string",
- "mobile": "string",
- "function": "string"
}
], - "coord": {
- "lat": 0.1,
- "lng": 0.1
}, - "chart_amount_by_year": {
- "property1": 0,
- "property2": 0
}
}Returns all contacts associated with a specific customer.
| id required | integer Resource ID |
[- {
- "id": 0,
- "firstname": "string",
- "name": "string",
- "email": "user@example.com",
- "phone": "string",
- "mobile": "string",
- "function": "string"
}
]Identifies a customer using their authentication key. Requires customer authentication to be enabled in account settings.
| auth_key required | string Customer authentication key |
{- "auth_key": "string"
}{- "id": 0,
- "name": "string",
- "address": "string",
- "postal_code": "string",
- "city": "string",
- "id_country": "string",
- "vat_number": "string",
- "phone": "string",
- "email": "user@example.com",
- "id_tracker": 0,
- "id_legal_form": 0,
- "due_date_formatted": 0,
- "creation_date": "2019-08-24T14:15:22Z",
- "contacts": [
- {
- "id": 0,
- "firstname": "string",
- "name": "string",
- "email": "user@example.com",
- "phone": "string",
- "mobile": "string",
- "function": "string"
}
], - "coord": {
- "lat": 0.1,
- "lng": 0.1
}
}Returns a list of estimates with optional filtering and pagination.
| 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 |
[ ]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.
| id_customer required | integer Customer ID (mandatory) |
| description | string |
| customer_ref | string |
| id_status | integer |
required | Array of objects |
{- "id_customer": 0,
- "description": "string",
- "customer_ref": "string",
- "id_status": 0,
- "entries": [
- {
- "id_item": 0,
- "label": "string",
- "description": "string",
- "quantity": 0.1,
- "id_unit": 0,
- "unitary_price": 0.1,
- "id_vat_type": 0
}
]
}"estimate/123"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.
| id required | integer |
| id_customer required | integer Customer ID (mandatory) |
| description | string |
| customer_ref | string |
| id_status | integer |
required | Array of objects |
{- "id": 0,
- "id_customer": 0,
- "description": "string",
- "customer_ref": "string",
- "id_status": 0,
- "entries": [
- {
- "id_item": 0,
- "label": "string",
- "description": "string",
- "quantity": 0.1,
- "id_unit": 0,
- "unitary_price": 0.1,
- "id_vat_type": 0
}
]
}Returns detailed information about an estimate including all entries.
| id required | integer Resource ID |
{- "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": [
- {
- "id": 0,
- "label": "string",
- "description": "string",
- "quantity": 0.1,
- "id_unit": 0,
- "unit_name": "string",
- "unitary_price": 0.1,
- "unitary_price_formatted": "string",
- "amount": 0.1,
- "amount_formatted": "string",
- "id_vat_type": 0,
- "vat_pct": 0.1,
- "amount_vat_incl": 0.1,
- "unitary_price_vat_incl": 0.1,
- "id_item": 0
}
]
}Returns a list of invoices with optional filtering and pagination.
| 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 |
| dateFrom | string <date> Filter invoices from this date |
| dateTo | string <date> Filter invoices until this date |
[ ]Creates a new invoice. Can be created:
| id_customer required | integer |
| id_estimate | integer If specified, creates invoice from an existing estimate |
required | Array of objects |
{- "id_customer": 0,
- "id_estimate": 0,
- "entries": [
- {
- "label": "string",
- "description": "string",
- "quantity": 0.1,
- "unitary_price": 0.1,
- "id_tracker": 0,
- "id_vat_type": 0,
- "pct_vat": 0
}
]
}"invoice/123"Returns detailed information about an invoice including all entries.
| id required | integer Resource ID |
{- "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": [
- {
- "id": 0,
- "label": "string",
- "description": "string",
- "quantity": 0.1,
- "id_unit": 0,
- "unit_name": "string",
- "unitary_price": 0.1,
- "unitary_price_formatted": "string",
- "amount": 0.1,
- "amount_formatted": "string",
- "id_vat_type": 0
}
]
}Returns a list of catalog items with optional filtering.
| search | string Search string applied on the name field |
| id_folder | integer Filter by folder ID |
[- {
- "id": 0,
- "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
}
]Creates a new catalog item or folder. Set type='folder' to create a folder instead of an item.
| 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) |
{- "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"
}"item/123"Returns a list of jobs (projects) with optional filtering and pagination.
| 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 |
[ ]Creates a new job (project).
| name required | string |
| title | string |
| description | string |
| id_customer required | integer |
| id_status | integer |
{- "name": "string",
- "title": "string",
- "description": "string",
- "id_customer": 0,
- "id_status": 0
}"job/123"| id required | integer |
| name required | string |
| title | string |
| description | string |
| id_customer required | integer |
| id_status | integer |
{- "id": 0,
- "name": "string",
- "title": "string",
- "description": "string",
- "id_customer": 0,
- "id_status": 0
}Returns detailed information about a job including:
| id required | integer Resource ID |
{- "id": 0,
- "name": "string",
- "title": "string",
- "description": "string",
- "id_tracker": 0,
- "id_status": 0,
- "customer": {
- "id": 0,
- "name": "string",
- "address": "string",
- "postal_code": "string",
- "city": "string",
- "id_country": "string",
- "vat_number": "string",
- "phone": "string",
- "email": "user@example.com",
- "id_tracker": 0,
- "id_legal_form": 0,
- "due_date_formatted": 0,
- "creation_date": "2019-08-24T14:15:22Z",
- "contacts": [
- {
- "id": 0,
- "firstname": "string",
- "name": "string",
- "email": "user@example.com",
- "phone": "string",
- "mobile": "string",
- "function": "string"
}
], - "coord": {
- "lat": 0.1,
- "lng": 0.1
}
}, - "tracker": { },
- "consumed": { },
- "top_trackers": [ ],
- "workers": [ ],
- "details": { }
}Returns a list of tasks with optional filtering, sorting, and pagination. Supports both singular and plural parameter names for compatibility.
| 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) |
[ ]Creates a new task with optional user assignments and tags.
| 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 |
{- "name": "string",
- "description": "string",
- "id_tracker": 0,
- "id_status": 0,
- "id_priority": 0,
- "date_start": "2019-08-24",
- "date_end": "2019-08-24",
- "users": [
- 0
], - "tags": [
- 0
]
}"task/123"Updates an existing task including user assignments and tags.
| 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 |
{- "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": [
- 0
], - "tags": [
- 0
]
}Returns detailed information about a task.
| id required | integer Resource ID |
{- "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": [
- 0
], - "tags": [
- 0
]
}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.
| 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 |
[ ]Creates a new timesheet entry (time block). Validates for overlapping entries and other constraints.
| 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 |
{- "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": [
- {
- "id": 0,
- "quantity": 0.1
}
]
}"timesheet/123"Updates an existing timesheet entry.
| 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 |
{- "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": [
- {
- "id": 0,
- "quantity": 0.1
}
]
}Returns detailed information about a timesheet entry including metadata and items.
| id required | integer Resource ID |
{- "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": {
- "sign_customer_image": "string",
- "lat": 0.1,
- "lng": 0.1,
- "sign_customer_name": "string"
}, - "items": [
- {
- "id": 0,
- "id_item": 0,
- "quantity": 0
}
]
}Returns a list of trackers with optional filtering. Can return flat list or tree structure depending on 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) |
[ ]Creates a new tracker under a customer or job.
| name | string |
| note | string |
| id_parent | integer |
| id_type | integer |
| id_tracker_root | integer Root tracker ID for creating under a job |
{- "name": "string",
- "note": "string",
- "id_parent": 0,
- "id_type": 0,
- "id_tracker_root": 0
}Returns detailed information about a tracker.
| id required | integer Resource ID |
| show_details | boolean Include time consumption details |
| from | string <date> Start date for consumption calculation |
| to | string <date> End date for consumption calculation |
{- "id": 0,
- "name": "string",
- "note": "string",
- "id_parent": 0,
- "id_type": 0,
- "id_customer": 0,
- "level": 0,
- "path": "string",
- "consumed": { }
}Returns a list of users (excluding sensitive fields like password).
[- {
- "id": 0,
- "login": "string",
- "firstname": "string",
- "name": "string",
- "email": "user@example.com",
- "phone": "string",
- "mobile": "string",
- "active": true
}
]Creates a new user with optional customer access assignments.
| login required | string |
| firstname required | string |
| name required | string |
string <email> | |
| phone | string |
| mobile | string |
| customers | Array of integers List of customer IDs to grant access to |
{- "login": "string",
- "firstname": "string",
- "name": "string",
- "email": "user@example.com",
- "phone": "string",
- "mobile": "string",
- "customers": [
- 0
]
}"user/123"Returns user information (excluding sensitive fields).
| id required | integer Resource ID |
{- "id": 0,
- "login": "string",
- "firstname": "string",
- "name": "string",
- "email": "user@example.com",
- "phone": "string",
- "mobile": "string",
- "active": true
}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"}
| id required | integer Resource ID |
| 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 |
{- "meta": { },
- "data": { },
- "level": 0,
- "entries": { }
}Returns the activity dashboard with:
{- "timeline": [
- {
- "id": 0,
- "type": "string",
- "description": "string",
- "date": "2019-08-24T14:15:22Z",
- "avatar": "string"
}
], - "metrics": {
- "timethismonth": "string",
- "timethismonth_all": "string",
- "billedthismonth": "string",
- "nbinvoicelate": 0,
- "nbinvoiceready": 0,
- "nbinvoiceapproved": 0
}
}Returns a list of incoming invoices (purchase invoices) with optional filtering and pagination.
| 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 |
[ ]Creates a new incoming invoice. Supports image upload via base64 encoded data. If no entries are provided, a default entry with zero amounts is created.
| 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 |
{- "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": [
- {
- "amount": 0.1,
- "id_vat_type": 0,
- "vat": 0.1,
- "vatincl": 0.1,
- "pctprivate": 0,
- "id_type": 0,
- "description": "string",
- "id_tracker": 0,
- "id_po_entries": [
- 0
]
}
]
}"incominginvoice/123"Returns detailed information about an incoming invoice including entries and files.
| id required | integer Resource ID |
{- "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": [
- {
- "id": 0,
- "amount": 0.1,
- "amount_formatted": "string",
- "vat": 0.1,
- "vat_formatted": "string",
- "vatincl": 0.1,
- "vatincl_formatted": "string",
- "id_vat_type": 0,
- "vat_type_name": "string",
- "vat_percentage": 0,
- "id_type": 0,
- "type_name": "string",
- "description": "string",
- "pctprivate": 0,
- "id_tracker": 0
}
], - "files": [
- {
- "id_file": 0,
- "file_name": "string",
- "date": "string",
- "type": "string",
- "size": 0
}
]
}