# Changelog

Changes to the API and to supported countries and document fields, newest first. For every change to the portals as well, read the full product changelog.

This page lists the changes that affect what you send to the API, what you receive from it, and which countries it supports, newest first. Changes to the portals that do not affect the API are in the [full product changelog](https://complyance.io/changelog).

## 29 September 2026 (v3.17.1)

### Check a payload without submitting it

A new [`purpose` value](https://docs.complyance.io/api-reference/unify/submit-and-retrieve/#purpose), `validate`, runs all the standard checks on a payload without storing it or submitting it to the tax authority. The response tells you whether the payload passed or failed. Use it to confirm a payload is ready, then send it with `invoicing`. Requests with `invoicing` work as before.

### Send XML payloads

The API accepts invoice payloads in XML as well as JSON. If your system exports only XML, you no longer need to convert it to JSON before you send it. Send the request to the same endpoint with `Content-Type: application/xml`, and build your mapping from an XML sample. See [XML requests](https://docs.complyance.io/api-reference/unify/submit-and-retrieve/#xml-requests).

## 23 September 2026 (v3.17.0)

### Supporting documents

Invoices you send through the API can include supporting files, such as a PDF or PNG, as Base64-encoded content. The files appear with the document in the portal, and the API response includes them.

### Company and branch on purchase events

[Purchase invoice webhook events](https://docs.complyance.io/one-platform/developer-portal/webhooks/purchase-invoices/) carry an `attribution` object that names the receiving company, branch and source, with the status of the branch assignment. Use `attribution.companyId` to tell which company a purchase belongs to.

## 17 September 2026 (v3.16.0)

### API key permissions and expiry

[API keys](https://docs.complyance.io/one-platform/developer-portal/api-keys/) can be read-only or read and write. Each key expires after 7, 30, 90, 180 or 365 days, or on a custom date you choose; the default is 90 days. A workspace can hold up to 25 production keys and 50 sandbox keys.

Keys created before this release were given an expiry date based on when each was created. An expired key cannot authenticate, so check the expiry of the keys your systems use.

## 19 August 2026 (v3.15.0)

### UAE invoice line totals

UAE invoice lines take two new fields: **Line Total Without Tax**, which new and remapped integrations must send, and **Line Total With Tax**, which is optional. The UAE VAT breakdown and the AED line amounts are now calculated for you, so you no longer map them. Payloads in the earlier UAE format are still accepted while you move over. See the [UAE fields](https://docs.complyance.io/countries/ae/fields/).

## 22 July 2026 (v3.14.0)

### Germany

You can onboard German companies and send German business-to-government (B2G) e-invoices. See [Germany](https://docs.complyance.io/countries/de/).

### SFTP for the UAE and Malaysia

Instead of calling the API, you can drop invoice files in an SFTP folder. Complyance validates each document, submits it to the tax authority and writes the results back. See [Set up SFTP ingestion](https://docs.complyance.io/one-platform/developer-portal/sftp/).

Source: https://docs.complyance.io/changelog/
