Skip to main content
Version: v2

Changelog

2026-10​

  • canonical_dates is added to GET /api/v2/projects/service and GET /api/v2/projects/service/{id}. It contains the service dates as shown in Simplicate and API v3, with the same meaning for every invoice method.
    • Fields: time_frame, invoiceable_from, registration_time_frame and costs_registration_end_date
    • The existing date fields are unchanged
    • canonical_dates cannot be used to filter or sort
  • Validation of deadline_step and deadline_workflow was corrected when creating / editing workflows. Deadlines that were wrongly refused are now accepted. For example, when submitting a new deadline_step without a deadline_workflow on a workflow that has no workflow deadline, it would be rejected when the date was in the future, because the missing workflow deadline was treated as today. It now correctly accepts the date and leaves the workflow deadline empty.
    • Affected endpoints:
      • POST /api/v2/workflows/workflow
      • PUT /api/v2/workflows/workflow/{id}
    • Workflows with one step:
      • A single date sets both deadlines, also when it is later or earlier than the stored deadline
      • A workflow can be created with only a deadline_step
    • Workflows without a workflow deadline:
      • A deadline_step can be set without a deadline_workflow
    • All other validation errors and their messages are unchanged
  • Submitting an invoice_number that is already in use now returns a validation error instead of a server error. For example, when submitting a new invoice_number that already exists for the same my_organization_profile_id, it would be rejected with an HTTP 500 without a usable message. It now correctly returns an HTTP 400 with an error that names the duplicate invoice number.
    • Affected endpoints:
      • POST /api/v2/invoices/invoice
      • PUT /api/v2/invoices/invoice/{id}
    • Invoice numbers must be unique per organization profile. The same invoice_number on a different my_organization_profile_id is still accepted.

2026-06​

  • source_type is added to timeline message responses (GET /api/v2/timeline/message and GET /api/v2/timeline/message/{id}). It identifies what produced a timeline item as a string enum value ("ai" = AI-generated summary) and is null for unclassified items.

2026-05​

  • invoice_date and invoice_amount are added to the purchase endpoints:
    • GET /api/v2/projects/purchase
    • GET /api/v2/projects/purchase/{id}

2026-04​

  • Business and validation logic for hour_types[x].billable was changed when creating / editing project services.
    • This also affects cost types submitted in the hour_types array.
    • Affected endpoints:
      • POST /api/v2/projects/service
      • PUT /api/v2/projects/service/{id}
    • The new logic depends on the invoice method of the project service:
      • FixedFee:
        • Billable is always true
        • false will trigger a validation error
        • null will be set to true
      • Hours: billable must be one of true or false
        • null will trigger a validation error
      • For internal projects (projects with billable set to false):
        • Billable is always false
        • true will trigger a validation error
        • null will be set to false

2026-03​

  • divergent_payment_term_id is added to PUT /api/v2/sales/sales/{id}.
  • Add REST resource for workflows:
    • GET /api/v2/workflows/workflow
    • POST /api/v2/workflows/workflow
    • GET /api/v2/workflows/workflow/{id}
    • PUT /api/v2/workflows/workflow/{id}
    • DELETE /api/v2/workflows/workflow/{id}
  • Add read-only REST resources for default workflow templates:
    • GET /api/v2/workflows/defaultworkflow
    • GET /api/v2/workflows/defaultworkflow/{id}
    • GET /api/v2/workflows/defaultworkflowgroup
    • GET /api/v2/workflows/defaultworkflowgroup/{id}
    • GET /api/v2/workflows/defaultaction
    • GET /api/v2/workflows/defaultaction/{id}
    • GET /api/v2/workflows/defaulttask
    • GET /api/v2/workflows/defaulttask/{id}

2026-02​

  • has_services is added for all linked_projects of a sale when fetched from GET /api/v2/sales/sales/{?id}
  • is_pending_for_sale_approval is added for all linked_projects of a sale when fetched from GET /api/v2/sales/sales/{?id}
  • POST/PUT to api/v2/project/service is now stricter about which IDs are accepted for hourtype_id. Only hourtype and itemtype prefixes are allowed. This prevents accidental mixup with project hour types.

2026-01​

  • The endpoint GET /api/v2/sales/service/{?id} will also return the keys:
    • track_hours
    • track_cost
    • revenue_group_id
  • has_acquisition_service is added for all linked_projects of a sale when fetched from GET /api/v2/sales/sales/{?id}

2025-12​

  • The endpoint GET /api/v2/sales/sales/{?id} will also return the key linked_projects. This contains an array with some info about the projects that are linked with the sale. linked_projects. This contains the following keys:
    • id of the project
    • name of the project
    • project_number of the project
    • created_at the date when the project was created. It has the YYYY-MM-DD HH-MM-SS format
    • project_status:
      • id of the project status
      • label of the status
      • color of the status
  • POST /api/v2/projects/assignment now returns the id of the created record instead of a list of all records.

2025-10​

  • The endpoint GET /api/v2/hrm/leave will also return results without leave status.
  • Fixed inconsistencies in handling referenced entities. Referencing an invalid entity will now consistently result in a 400 Bad Request error. Affected endpoints are:
    • POST api/v2/documents/externaldocument

2025-09​

  • The fields is_editable and is_deletable are only included in the API response when explicitly requested via the select parameter. Affected endpoints are:
    • GET api/v2/hours/hours
  • Contract change for GET /api/v2/hrm/leave
    • Added new key leave_status in the response
      • id
      • label

2025-08​

  • Previously the application erroneously returned "501: not implemented" status codes. These cases have been updated to more appropriate status codes. Most of these cases are now returning a "404: not found" status code.

2025-07​

  • In the new project service UI, you can set a specific registration timeframe. Several API calls have been updated to return the correct start_date and until_date for services. Affected endpoints are:
    • GET api/v2/hours/hours
    • GET api/v2/hours/timesheetrow

2025-05​

  • explanation property added to the following endpoints
    • GET /api/v2/sales/service
    • GET /api/v2/projects/service
  • Contract change for GET /api/v2/crm/myorganizationprofile/{id}
    • Added key main_profile to denote if the organization profile is the main profile of the organization.

2025-04​

  • Contract change for PUT /api/v2/projects/project/{id}
  • billable can no longer be changed for projects with services. To change the value of billable, existing services have to be removed first.

2025-03​

  • Contract change for PUT|POST /api/v2/hours/hours
    • Fixed validation of hours records against assignment date ranges. Requests now fail if hours' start_date falls outside the assignment's period.
  • Behavior change when invoice_method is set to subscription, a value for subscription_cycle should be provided.
    • When unspecified, a fallback default of Month will be applied to maintain compatibility with existing integrations
    • To ensure consistent and expected behavior, please update your implementation to explicitly set a subscription_cycle when needed
    • For supported possible values, please have a look at the updated documentation for this endpoint.

2025-02​

  • Add servicegroup type enum(all_included multiple_optional single_required single_optional) to /api/v2/sales/quote. type defaults to all_included
  • Contract change for PUT /api/v2/projects/service/{id}
    • If hour_types is omitted from the body, existing hour_types are no longer deleted from the project service.

2025-01​

  • Add REST resource for external documents:
    • GET /api/v2/documents/externaldocument
    • POST /api/v2/documents/externaldocument
    • PUT /api/v2/documents/externaldocument
    • GET /api/v2/documents/externaldocument/{id}
    • DELETE /api/v2/documents/externaldocument/{id}
  • Add is_active property to a sale service resource indicating whether it was successfully created for endpoints:
    • GET /api/v2/sales/service
  • Contract change for POST /api/v2/projects/service
    • Newly created project services no longer contain the hour_types of the provided default service by default. You can still provide the hour_types you want to add to the service in the body.
  • In the GET /api/v2/hrm/absence endpoint:
    • The end_date field is empty when the absence is ongoing.
    • The field absence_ongoing indicates whether the absence is ongoing.
  • Add copy_latest_quote property when cloning sale to indicate if the last quote on the original sale should be copied
    • POST sales/sales/{id}/duplicate
  • Update the input types for POST /api/v2/customfields/option:
    • Added field customfield_id

2024-12​

  • New key totals added in the service_groups key. Affected endpoints
    • GET /api/v2/sale/quote
    • GET /api/v2/sale/quote/{id}

2024-11​

  • New property service_groups in:
    • GET /api/v2/sale/quote
    • GET /api/v2/sale/quote/{id}
  • New identifier format for newly created project services:
    • Newly created project services may have an ID in UUID-v7 format. For example: 01930bb6-87aa-779b-9561-fcb44ac3121d.
    • IDs for existing project services are not affected!
    • Project service IDs are used several endpoints (GET, POST and PUT):
      • api/v2/costs/expense
      • api/v2/costs/projectservices
      • api/v2/hours/hours
      • api/v2/hours/projectservices
      • api/v2/hours/timesheetrow
      • api/v2/invoices/invoice
      • api/v2/projects/assignment
      • api/v2/projects/service
      • api/v2/sales/service
      • api/v2/timers/timer
  • Added new key display_value to endpoints that contain individual custom_fields.

2024-10​

  • Added stricter validation to timetables.
    • More invalid cases will now trigger validation errors.
    • Some error messages have been updated to be more informative.
    • The following endpoints are affected:
      • POST /api/v2/hrm/timetable
      • PUT /api/v2/hrm/timetable/{id}
  • Only list user accessible company profiles in the endpoint GET /api/v2/crm/myorganization

2024-07​

  • Removed inactive linked_persons_contacts for the endpoints:
    • GET /api/v2/crm/person
    • GET /api/v2/crm/person/{id}
    • GET /api/v2/crm/organization
    • GET /api/v2/crm/organization/{id}
  • To get all contact persons for an organization, use the endpoint:
    • GET /api/v2/crm/contactperson?q[organization.id]={organisation_id}

2024-04​

  • Added field grand_totals to the api/v2/sales/quote endpoint.
  • Re-enable adding email addresses to Mailchimp lists or deleting from those lists with these endpoints:
    • POST /api/v2/crm/person
    • PUT /api/v2/crm/person/{id}
    • DELETE /api/v2/crm/person/{id}
  • It is possible to get the Mailchimp lists of a person with GET /api/v2/crm/person/{id}.

2023-12​

  • Migrated document /v1/storage/* endpoints to /api/v2/storage/* endpoints:
    • GET /api/v2/storage/avatar
    • GET /api/v2/storage/cachedthumb
    • GET /api/v2/storage/costsattachment
    • GET /api/v2/storage/documenteditordownload
    • GET /api/v2/storage/download
    • GET /api/v2/storage/downloadasattachment
    • GET /api/v2/storage/downloadletterpaper
    • GET /api/v2/storage/downloadlogo
    • GET /api/v2/storage/fileicon
    • GET /api/v2/storage/filex
    • GET /api/v2/storage/getfile
    • GET /api/v2/storage/getlogofile
    • GET /api/v2/storage/letterpaper
    • GET /api/v2/storage/loadfile
    • GET /api/v2/storage/logo
    • GET /api/v2/storage/preview
    • GET /api/v2/storage/signature
    • GET /api/v2/storage/thumbnail
    • POST /api/v2/storage/dropzoneupload
    • POST /api/v2/storage/getfileicon
    • POST /api/v2/storage/paperlayoutupload
    • POST /api/v2/storage/uploadstream
  • Added the following fields to the api/v2/projects/assignment endpoints:
    • created_at
    • updated_at

2023-11​

  • Updated PUT api/v2/hrm/employee/{id} with these checks on if the employee status can be set to unemployed:
    • The employee user must have status blocked
    • All timetables of the employee must have an end date

2023-09​

  • Updated PUT api/v2/crm/person/{id} making the field: family_name not mandatory

2023-08​

  • Updated POST|PUT api/v2/crm/person making the field: family_name mandatory

2023-07​

  • Updated POST|PUT api/v2/projects/service with support for 'Actual costs' (type = 'Hours')

2023-06​

  • Updated GET api/v2/crm/organization with extra field
    • Added CustomerGroup value option
  • Updated GET api/v2/sales/salesreason
    • Added blocked property to response
  • Updated GET api/v2/sales/salesfilters with options that can be used to filter GET api/v2/sales/sales
    • Added opportunityprogress value options
    • Added administration value options
    • Added responsible_person value options
  • Updated PUT api/v2/sales/sales
    • It is now possible to change the relation of a Sales entity from an Organization to a Person or from a Person to an Organization with person_id or organization_id respectively

2023-04​

  • Updated documentation 'added person_id' for PUT api/v2/hrm/employee
  • POST/PUT api/v2/hours/leave errors codes
  • POST/PUT api/v2/hours/absense errors codes
  • Added relation_number to various organization and person objects
  • Added mandatory boolean for customfields
  • Added duration_in_minutes int for hours approval

2022-08​

  • Added API endpoints for assigning and removing project employees to projects:
    • POST /api/v2/projects/projectemployee
    • DELETE /api/v2/projects/projectemployee/{id}

2022-07​

  • Added Known Limitations to the API docs
  • Added API endpoints for creating and updating employees, and creating, updating and deleting timetables:
    • POST /api/v2/hrm/employee
      • Updated the contents of PostEmployee model to match the implementation
    • PUT /api/v2/hrm/employee/{id}
    • DELETE /api/v2/hrm/employee/{id}
    • POST /api/v2/hrm/timetable
      • Updated the contents of PostTimetable model to match the implementation
    • PUT /api/v2/hrm/timetable/{id}
    • DELETE /api/v2/hrm/timetable/{id}
  • Added 'project_number' (string) property to GetTimesheetRowProject model (/api/v2/hours/timesheetrow)

2022-06​

  • Adds email configuration properties to the Organization model (/api/v2/crm/organization)
    • 'send_invoice_email_to_contact' (bool)
    • 'send_invoice_email_to_project_contact' (bool)
    • 'send_invoice_email_to_fixed_email' (bool)
    • 'send_invoice_email_to_cc' (bool)

2022-03​

  • Added 'is_active' (bool) to Person, Organization, and ContactPerson models (/api/v2/crm/person, /api/v2/crm/organization and /api/v2/crm/contactperson)

2022-02​

  • Added GetAssignmentSimple model (/api/v2/timers/timer)

2022-01​

  • Added 'use_custom_salutation' (bool) and 'custom_salutation' (string) properties to GetPerson (/api/v2/crm/person)
  • Added 'description' (string) property to Assignment model (/api/v2/projects/assignment)

2021-11​

  • Added /projects/service/{id}/planningBudget (GET)
  • Renamed /projects/project/{id}/assignmentBudgetInfo (GET) to /projects/project/{id}/planningBudget
  • Reworked AssignmentBudgetInfo model
    • Added properties with almost all of them having an AssignmentBudgetInfoFuturePast model
  • Added QuotetemplateConfigurationMetaData model (/api/v2/sales/quotetemplate)
  • Added QuotetemplateMetaData model (/api/v2/sales/quotetemplate)
  • Added 'is_editable' and 'is_deletable' properties to GetHours (/api/v2/hours/hours)
    • Added IsSatisfied model
    • Added IsSatisfiedReason model
  • Added 'attachments' property to Expense model, array of ExpenseAttachment
    • Added ExpenseAttachment model (/api/v2/costs/expense)
  • Added 'is_attachment_allowed' property to GetPurchaseType, PostPurchaseType, PurchaseType (/api/v2/projects/purchasetype)

2021-08​

  • Moved 'custom_fields' property of models Organization, Person, Sales, Project and Hours to their Get* models
    • Replaced 'CustomField' type with 'GetCustomField' type
  • Added PostCustomFieldValue type to custom_fields property of PostOrganization, PostPerson, PostSales, and PostProject models
  • Added 'work_function', 'work_email', 'work_mobile' properties to PostContactOrganizationFk and PostContactPersonFk models
  • Added 'vat_class' properties to GetSalesService model (/api/v2/sales/service)
  • Removed 'vat_code' and 'vat_description' properties from GetSalesService model (/api/v2/sales/service)
  • Added 'revenue_group_id' property to PostSalesService (/api/v2/sales/service)

2021-07​

  • Added 'service_purchase_start_date' and 'service_purchase_end_date' to Expense model (/api/v2/costs/expense)
  • Added 'HoursCorrectionsTotal' and 'HoursCorrectionsUntil' to AssignmentBudgetInfo model (/api/v2/project/service/{id}/planningBudget)

2021-07​

  • Added separate model for updating assignments (PutAssignment) (PUT /api/v2/projects/assignment)
    • PutAssignment no longer accepts 'start_date' and 'end_date' properties; you can no longer modify dates through the API (PUT /api/v2/projects/assignment)
  • Added 'start_date' and 'end_date' to PostAssignment specifically (POST /api/v2/projects/assignment)

2021-06​

  • Added /projects/project/{id}/assignmentBudgetInfo (GET)
  • Added 'note' property (string) to Expense model (/api/v2/costs/expense)
  • Added 'is_productive' property (boolean) to GetHours model (/api/v2/hours/hours)
  • Added 'related_hours_id' property (string) to Mileage model (and its derived models: GetMileage, PostMileage, PutMileage) (/api/v2/hours/mileage)