# Novus Conceptus developer documentation > Novus Conceptus is a certified e-invoicing provider in Greece (AADE provider code 005). This is the complete documentation of the Provider API (issuing invoices, receipts, delivery notes and B2G invoices through myDATA) and the Onboarding API (activating clients), with the AADE code tables, ready-made JSON examples and the FAQ. - Sandbox base URL: https://provider-dev.timologisi.online (free account by registration). Production: https://provider.timologisi.online (after certification). - Every call sends the API key in the HTTP header `API-KEY`. One key serves all the issuer VAT numbers of the account. - `SendInvoices` takes exactly one document per call and returns MARK, UID, Authentication Code and the PDF link in the same response. - Full text of every page in one file: https://developers.novusconceptus.com/llms-full.txt - Greek version: https://developers.novusconceptus.com/el/llms.txt and https://developers.novusconceptus.com/el/llms-full.txt - OpenAPI (YAML) and Postman collections: https://developers.novusconceptus.com/tools/ --- Novus Conceptus · 5th certified e-invoicing provider in Greece # Certified e-invoicing provider API for Greece Issue invoices and receipts from your app with a single call. You send the document as JSON; we transmit it to AADE myDATA, get the MARK, build the PDF with the QR code and email it to your customer. [Start here](https://developers.novusconceptus.com/start/how-it-works/) [Your first document](https://developers.novusconceptus.com/start/first-invoice/) AADE-certified provider · Code **005** myDATA **2.0.2** All in One POS under **A.1158/2023** OpenAPI & Postman ## What do you want to do? - **Start from scratch** How the provider works, a sandbox account and an API key. [ How it works](https://developers.novusconceptus.com/start/how-it-works/) - **Issue my first receipt** One ready-made JSON, one call, and you see the PDF. [ Your first document](https://developers.novusconceptus.com/start/first-invoice/) - **Invoices, receipts, credit notes** Which document type to choose and what to send in each case. [ Invoices & receipts](https://developers.novusconceptus.com/guides/invoices/) - **Card or IRIS payment** Provider signature for the POS terminal and payment completion. [ Card / IRIS](https://developers.novusconceptus.com/guides/card-payments/) - **Food service** Order slips (8.6), cancellations and closing a table. [ Food service (8.6)](https://developers.novusconceptus.com/guides/food-service/) - **Goods movement** Delivery notes, invoice-delivery notes, cancellation. [ Goods movement](https://developers.novusconceptus.com/guides/delivery/) - **Invoicing the public sector** B2G e-invoice under EN 16931. [ Public sector (B2G)](https://developers.novusconceptus.com/guides/b2g/) - **Activate a new customer** Request, contract, approval and Provider declaration, with no paperwork. [ Onboarding API](https://developers.novusconceptus.com/onboarding-api/) Looking for something specific? [FAQ](https://developers.novusconceptus.com/faq/) · [AADE codes](https://developers.novusconceptus.com/aade/) · [Errors](https://developers.novusconceptus.com/provider-api/errors/) · [All JSON fields](https://developers.novusconceptus.com/provider-api/send-invoices/) · [Postman & examples](https://developers.novusconceptus.com/tools/) ## Why Novus - **One of the first providers** Certified by AADE in November 2020, provider code 005. - **More than 5,000 VAT numbers** Issue through Novus, directly or through the apps of 85+ software houses. - **Always on the current myDATA version** Every AADE change is implemented and announced in the [Changelog](https://developers.novusconceptus.com/changelog/) before it takes effect. - **ISO 27001** Certified information security management. Infrastructure on Microsoft Azure. - **Support from the developers of the API** By email and ticket, with a written SLA and response times. - **Sandbox right away** Sign-up, API key and first document in minutes, with no approval. Certification is free. ## From sandbox to production in 4 steps 1. **Sandbox account** Sign up on the developer portal and get an API key for the sandbox. [Account & API key](https://developers.novusconceptus.com/start/account/) 2. **Development** Start with Postman and the ready-made JSON files, then connect your app. [Postman & examples](https://developers.novusconceptus.com/tools/) 3. **Certification** Run the core scenarios from your app and submit the request online. [Certification](https://developers.novusconceptus.com/start/go-live/) 4. **Production** You get a production key, and your customers are activated through the Onboarding API. [Onboarding API](https://developers.novusconceptus.com/onboarding-api/) ## The two APIs - **Provider API** Issue and transmit documents, PDF, POS payments, food service, B2G. [ Documentation](https://developers.novusconceptus.com/provider-api/) · [OpenAPI (YAML)](https://developers.novusconceptus.com/openapi/novus-provider-api.openapi.yaml) · [Postman](https://developers.novusconceptus.com/postman/Novus_Provider_API.postman_collection.json) - **Onboarding API** Activate new customers: request, contract, signature, approval. [ Documentation](https://developers.novusconceptus.com/onboarding-api/) · [OpenAPI (YAML)](https://developers.novusconceptus.com/openapi/novus-onboarding-api.openapi.yaml) · [Postman](https://developers.novusconceptus.com/postman/Novus_Onboarding_API.postman_collection.json) ## Environments | | Sandbox | Production | |:---|:---|:---| | **Base URL** | `https://provider-dev.timologisi.online` | `https://provider.timologisi.online` | | **Portal** | [developer.portal.timologisi.online](https://developer.portal.timologisi.online) | [portal.timologisi.online](https://portal.timologisi.online) | | **Authentication** | Header `API-KEY` | Header `API-KEY` (a different key) | | **AADE** | myDATA 2.0.2 | myDATA 2.0.2 | ## About us **Novus Conceptus** is the **5th e-invoicing provider** licensed by AADE, the Greek tax authority. Businesses issue documents through our infrastructure directly, and also through the apps of the software houses we work with. When you need help with a specific document, send us its `invoiceUid` or the request / response in question. What changed in each version: [Changelog](https://developers.novusconceptus.com/changelog/). | | | |:---|:---| | **Company name** | NOVUS CONCEPTUS Ο.Ε. | | **Provider code** | `005` | | **Suitability license (ΥΠΑΗΕΣ)** | `2020_11_105Novus Conceptus _001_ timologisi.online_V1_181120` | | **Licensed** | 18 November 2020 · renewed 19 November 2025 | | **All in one Cash Register / POS** | **Novus All in One**, licensed under A.1158/2023 (15 March 2024) | Source: https://developers.novusconceptus.com/ --- # How it works Your app (ERP, POS, e-shop, PMS) sends the document as JSON to the **Novus Provider**, a certified e-invoicing provider. The provider: 1. runs its own checks (permissions, credits, food service/POS rules, etc.), 2. transmits it to **AADE (myDATA)**, the Greek tax authority, and gets a **MARK**, **UID** and **Authentication Code**, 3. generates the **PDF** with the QR code and all mandatory provider details, 4. emails it to the recipients you specified and archives it, 5. returns all of the above in the response, in the same call. **Note: Which documents go through the provider** Only types **1.1 to 11.5** (invoices, receipts, credit notes, special documents, delivery notes, retail). Types **12.x to 17.x** (recipient documents, expenses, adjustment entries) are **not** transmitted by a provider. ```mermaid sequenceDiagram autonumber participant APP as Your app
(ERP / POS) participant NP as Novus Provider API participant AADE as AADE myDATA participant C as Customer (recipient) APP->>NP: POST /api/v1/Provider/SendInvoices (JSON, API-KEY) NP->>NP: Novus checks (permissions, credits, rules) alt Novus checks fail NP-->>APP: HTTP 400 / 401 { "errors": [...] } else Success NP->>AADE: SendInvoices (XML, signed by the provider) AADE-->>NP: MARK, UID, AuthenticationCode or errors NP->>NP: PDF + QR, archiving NP-->>APP: HTTP 200 { response: [ statusCode, invoiceMark, invoiceUid, invoiceUrl, ... ] } NP-)C: Email with the PDF (if a recipient was specified) end ``` ## Key concepts | Term | What it is | Where you find it | |:---|:---|:---| | **MARK** | Unique Registration Number of the document in myDATA. | `response[].invoiceMark` | | **UID** | Document identifier: SHA-1 of the issuer's VAT number (ΑΦΜ), date, branch, type, series and number. **Unique**: a second submission with the same details is rejected. | `response[].invoiceUid` | | **Authentication Code** | Authentication string, mandatory for documents issued through a provider. | `response[].authenticationCode` | | **QR / invoiceUrl** | Link to the PDF and the provider's verification page. Printed as a QR code on the document. | `response[].invoiceUrl`, `qrUrl` | | **aadeQrUrl** | AADE's official verification link. For information only; no action needed. | `response[].aadeQrUrl` | | **Provider signature** | Provider signature for card/IRIS payments through a POS terminal (A.1155/2023). | [Card / IRIS payment](https://developers.novusconceptus.com/guides/card-payments/) | | **Credits** | The charge for each call, taken from your account balance. | `response[].credits`, [Credits](https://developers.novusconceptus.com/provider-api/credits/) | ## Who does what - **Your app** - Correct amounts, VAT, income/expense classifications and document type. - Numbering (series + number) with no gaps and no duplicates. - The print details (`providerAdditionalInvoiceDetails`). - Error handling and resending where needed. - **The Novus Provider** - Transmission to myDATA as a certified provider. - PDF with QR code, MARK, UID, Authentication Code and provider details. - Email to the recipient and archiving. - Automatic transmission later, if AADE is down (`statusCode = Offline`). **Warning: The provider does not "fix" data** The provider forwards the data to AADE exactly as it receives it. Amounts, VAT categories and classifications are the responsibility of the app that issues the document. ## The three possible outcomes of a submission | Outcome | How you recognize it | What you do | |:---|:---|:---| | **Issued** | HTTP 200 and `statusCode = "Success"` | Store MARK, UID, AuthenticationCode, invoiceUrl. | | **Issued, AADE was offline** | HTTP 200 and `statusCode = "Offline"` | Do **not** send it again. The provider transmits it automatically. See [Offline](https://developers.novusconceptus.com/provider-api/errors/#offline). | | **Not issued** | HTTP 4xx/5xx **or** HTTP 200 with `statusCode` = `ValidationError` / `XMLSyntaxError` / `TechnicalError` | Fix it and send it again. See [Errors & status codes](https://developers.novusconceptus.com/provider-api/errors/). | Source: https://developers.novusconceptus.com/start/how-it-works/ --- # Environments & API key There are two **completely separate** environments, each with its own portal, its own account and its own API key. | | Sandbox | Production | |:---|:---|:---| | Purpose | Development and testing | Real documents with tax validity | | Base URL | `https://provider-dev.timologisi.online` | `https://provider.timologisi.online` | | Portal | [developer.portal.timologisi.online](https://developer.portal.timologisi.online) | [portal.timologisi.online](https://portal.timologisi.online) | | Swagger | [provider-dev.timologisi.online/index.html](https://provider-dev.timologisi.online/index.html) | [provider.timologisi.online/index.html](https://provider.timologisi.online/index.html) | | Account | Automatic, when you sign up | After [certification](https://developers.novusconceptus.com/start/go-live/) | | Issuer VAT number (ΑΦΜ) | The VAT number you entered at sign-up is activated automatically | Each customer VAT number is activated after a contract and an authorization ([Onboarding API](https://developers.novusconceptus.com/onboarding-api/)) | | Credits | Test credits | Bought from the portal | | Data retention | Documents are **deleted after 30 days** | Permanent archiving | ## 1. Create an account (sandbox) 1. Open the [sign-up form](https://developer.portal.timologisi.online/?action=register). 2. Enter your email and VAT number. 3. Confirm the account from the email you receive and set a password. 4. Log in to the portal. Your **API key** is there. From the portal you can also: - view and search the documents you issued, - view the authorized VAT numbers, - upload customer logos. The `logoId` you get goes in the `additionalDetails.logoId` field. - (production) buy credits and request activation of a new VAT number. **Warning: The sandbox sends real emails too** The PDF of each document is sent to `recipients.email` and to the delivery addresses that AADE returns for the recipient. Onboarding API emails are sent as well. So, when testing: - use a **fictitious VAT number** as the recipient (as in the ready-made examples), not the VAT number of a real business, - put **only your own** addresses in all email fields. ## 2. Authentication Every call sends the key in the `API-KEY` HTTP header: ```http POST /api/v1/Provider/SendInvoices HTTP/1.1 Host: provider-dev.timologisi.online API-KEY: <το κλειδί σας> Content-Type: application/json ``` | Result | Meaning | |:---|:---| | `401 Unauthorized` with no body | The header is missing, the key is wrong or inactive, or you are using a sandbox key in production (or the other way round). | | `401` with `{"errors": ["You don't have the authority to send for this vat numbers ..."]}` | The key is correct, but the issuer's VAT number is not activated on your account. | **Important: Keep the key secret** The API key issues documents with tax validity and uses up your credits. - Do not put it in code that runs in a browser or in a public repository. - Store it encrypted, like the other credentials of your app. - If it leaks, contact us immediately so we can revoke it and issue a new one. ## 3. One key, many customers As a software house, you use **one API key** for all your customers. Each document states which customer it is issued for through `issuer.vatNumber`. The provider checks that this VAT number is activated on your account. Credits are shared by all VAT numbers on the account. ## 4. Technical requirements - **HTTPS / TLS 1.2+.** - **JSON in UTF-8.** Field names are case-insensitive, but we recommend camelCase as in the examples. - **Dates** in `yyyy-MM-dd` format and **times** in `HH:mm:ss` format. - **Decimals** as JSON numbers with a point (`124.25`), with up to 2 decimals for amounts. - **Special characters** inside strings: escape them as JSON requires (`\"`, `\\`, `\n`, `\r`, `\t`, `\b`, `\f`). - **Timeout:** we recommend at least 60 seconds for `SendInvoices`, because the call waits for the AADE response and for the PDF to be generated. Source: https://developers.novusconceptus.com/start/account/ --- # Your first document We will issue a **retail receipt (11.1)** in the **sandbox** with one line: 1 × coffee at €10.00 + 24% VAT, paid in cash. **Note: Before you start** - You have an [API key for the sandbox](https://developers.novusconceptus.com/start/account/). - Replace `123456789` with the VAT number (ΑΦΜ) you entered when you signed up. - Set `issueDate` to **today's** date. AADE does not accept a document from a provider with any other date ([error 238](https://developers.novusconceptus.com/provider-api/aade-errors/)). - Each time you send it again, change `aa`. The same series + number means the same UID, and it is rejected as a duplicate. ## 1. The request ```json title="retail-receipt-11.1.json" { "invoice": [ { "issuer": { "vatNumber": "123456789", "country": "GR", "branch": 0 }, "invoiceHeader": { "series": "A", "aa": "1001", "issueDate": "2026-09-24", "invoiceType": "11.1", "currency": "EUR" }, "paymentMethods": [ { "type": 3, "amount": 12.40 } ], "invoiceDetails": [ { "lineNumber": 1, "lineCode": "ESP-01", "lineDescription": "Espresso", "quantity": 1, "measurementUnit": 1, "measurementUnitLabel": "piece", "lineUnitPrice": 10.00, "totalNetPriceBeforeDiscount": 10.00, "totalDiscountValue": 0, "netValue": 10.00, "vatCategory": 1, "vatCategoryPercent": 24.00, "vatAmount": 2.40, "incomeClassification": [ { "classificationType": "E3_561_003", "classificationCategory": "category1_1", "amount": 10.00 } ] } ], "invoiceSummary": { "totalNetValue": 10.00, "totalVatAmount": 2.40, "totalWithheldAmount": 0, "totalFeesAmount": 0, "totalStampDutyAmount": 0, "totalOtherTaxesAmount": 0, "totalDeductionsAmount": 0, "totalGrossValue": 12.40, "incomeClassification": [ { "classificationType": "E3_561_003", "classificationCategory": "category1_1", "amount": 10.00 } ] }, "providerAdditionalInvoiceDetails": { "issuer": { "name": "TEST ISSUER ΙΚΕ", "profession": "Καφετέρια", "taxoffice": "Α' Αθηνών", "addressStreet": "Οδός Δοκιμής", "addressNumber": "1", "addressPostalCode": "10431", "addressCity": "Αθήνα", "addressCountry": "Ελλάδα" }, "counterpart": { "name": "Retail Client" }, "additionalDetails": { "documentLabel": "Απόδειξη Λιανικής Πώλησης", "paymentMethodInvoiceLabel": "Μετρητά", "documentSizeCode": 0 } } } ] } ``` What each block means: | Block | Role | |:---|:---| | `issuer` | The issuer. The VAT number must be activated on your account. `branch` is the branch registered in Taxis (head office = `0`). | | `invoiceHeader` | Series, number, date and [document type](https://developers.novusconceptus.com/aade/documents/#invoice-types). | | `paymentMethods` | [Payment methods](https://developers.novusconceptus.com/aade/lines-payments/#payment-methods). **The sum must equal `totalGrossValue`.** | | `invoiceDetails` | The lines, with [VAT category](https://developers.novusconceptus.com/aade/vat/#vat-category) and [income classification](https://developers.novusconceptus.com/aade/classifications/#income-classification-type). | | `invoiceSummary` | The totals. They must match the sum of the lines. | | `providerAdditionalInvoiceDetails` | Details **for the PDF only** (company name, address, labels). They are not sent to AADE. | ## 2. Send it **cURL** ```bash curl -X POST "https://provider-dev.timologisi.online/api/v1/Provider/SendInvoices" \ -H "API-KEY: $NOVUS_API_KEY" \ -H "Content-Type: application/json" \ --data @retail-receipt-11.1.json ``` **C# (.NET)** ```csharp using var http = new HttpClient { BaseAddress = new Uri("https://provider-dev.timologisi.online"), Timeout = TimeSpan.FromSeconds(60) }; http.DefaultRequestHeaders.Add("API-KEY", Environment.GetEnvironmentVariable("NOVUS_API_KEY")); var json = await File.ReadAllTextAsync("retail-receipt-11.1.json"); var res = await http.PostAsync("/api/v1/Provider/SendInvoices", new StringContent(json, System.Text.Encoding.UTF8, "application/json")); var body = await res.Content.ReadAsStringAsync(); Console.WriteLine($"{(int)res.StatusCode}: {body}"); ``` **Delphi** ```delphi uses System.Net.HttpClient, System.Classes, System.SysUtils, System.IOUtils; var Http: THTTPClient; Body: TStringStream; Resp: IHTTPResponse; begin Http := THTTPClient.Create; Body := TStringStream.Create(TFile.ReadAllText('retail-receipt-11.1.json', TEncoding.UTF8), TEncoding.UTF8); try Http.ResponseTimeout := 60000; Http.CustomHeaders['API-KEY'] := GetEnvironmentVariable('NOVUS_API_KEY'); Http.ContentType := 'application/json'; Resp := Http.Post('https://provider-dev.timologisi.online/api/v1/Provider/SendInvoices', Body); Writeln(Resp.StatusCode, ': ', Resp.ContentAsString(TEncoding.UTF8)); finally Body.Free; Http.Free; end; end; ``` **Python** ```python import json, os, requests with open("retail-receipt-11.1.json", encoding="utf-8") as f: payload = json.load(f) r = requests.post( "https://provider-dev.timologisi.online/api/v1/Provider/SendInvoices", headers={"API-KEY": os.environ["NOVUS_API_KEY"]}, json=payload, timeout=60, ) print(r.status_code, r.json()) ``` ## 3. The response ```json title="HTTP 200 OK" { "response": [ { "index": 1, "statusCode": "Success", "invoiceUid": "C10262E0AE13C6AFD7DD2C980900BB0DF266D9C5", "invoiceMark": 400001939576037, "authenticationCode": "1D0F38488D532D3BB715408E01283D39E8D56A3A", "invoiceUrl": "https://provider-dev.timologisi.online/api/v1/Provider/GetInvoicePdf/671899191d6d0b3d947bc4bb.pdf", "qrUrl": "https://provider-dev.timologisi.online/api/v1/Provider/GetInvoicePdf/671899191d6d0b3d947bc4bb.pdf", "aadeQrUrl": "<ο σύνδεσμος επαλήθευσης της ΑΑΔΕ>", "credits": "0,50", "errors": null, "providerSignature": null } ] } ``` Store `invoiceMark`, `invoiceUid`, `authenticationCode` and `invoiceUrl` in your database. You will need them for correlations (e.g. credit notes), searches and reprints. **Note: Done** Open `invoiceUrl` to see the PDF. If you got a `statusCode` other than `Success`, see [Errors & status codes](https://developers.novusconceptus.com/provider-api/errors/). The message in `errors[].error[].message` tells you exactly what to fix. ## Next steps - All document fields: [SendInvoices reference](https://developers.novusconceptus.com/provider-api/send-invoices/). - Every document type with a ready-made JSON: [Invoices & receipts](https://developers.novusconceptus.com/guides/invoices/). - Card/IRIS, food service, goods movement, B2G: see the matching guides in the menu on the left. Source: https://developers.novusconceptus.com/start/first-invoice/ --- # Certification & going live Before you get a production key, we certify that your app handles **the basics** correctly: it issues documents, credits them, prints them and handles errors. You need no appointment and no Word file, and you do not need to send us any MARK: we can see the documents you issued in the sandbox. Certification is free of charge. ```mermaid flowchart LR A["You run the core scenarios
from your app"] --> B["Certification
request"] B --> C{"Novus
review"} C -- "needs a fix" --> A C -- "approved" --> D["Production
key"] D --> E["Customer
activation"] ``` ## 1. Run the core scenarios - Run the scenarios **from your own app**, in the sandbox, with the VAT number (ΑΦΜ) you entered when you signed up. - [Postman](https://developers.novusconceptus.com/tools/) has every scenario ready (folders 1, 2, 3 and 9): check there exactly what your app must send. Certification, however, is done from your app, not from Postman. - Write down **the dates** you ran them. You will give them to us in the request. - Send the request **within 30 days**: in the sandbox, documents are deleted after 30 days. | # | What you do | In the request | |:--|:--|:--| | B1 | A document with **two lines**, one with 24% VAT and one with 13%: **11.1** if you do retail, **1.1** if you do wholesale (if you do both, send both). | Nothing. We check it ourselves. | | B2 | A **credit note** for B1: **11.4** for retail, **5.2** or **5.1** for wholesale ([which credit note](https://developers.novusconceptus.com/guides/credit-notes/)). | Nothing. We check it ourselves. | | B3 | The **printout** of B1, as your app produces it ([print rules](https://developers.novusconceptus.com/start/go-live/#kanones-ektyposis)). | PDF or photo. If you give your customer the provider's PDF (`invoiceUrl`), just say so. | | B4 | A **deliberate error** (e.g. payments that differ from the total → HTTP 400). Your user must see a clear message. | Declaration | | B5 | Send B1 **again**, exactly the same → AADE error **228**. Your app must show it as "already issued", with the MARK of the original, not as a failure. | Declaration | ## 2. The other modules: not certified Card payment, food service, goods movement, B2G, OSS and the Onboarding API are **not** certified. In the request you declare which ones you use, and you test your implementation yourself, with the guide and Postman. | Module | Guide | Postman | Watch out | |:---|:---|:---|:---| | **Card / IRIS** | [Card / IRIS payment](https://developers.novusconceptus.com/guides/card-payments/) | folder 4 | Every signature you request must be completed with `CompletionPosInvoices`. | | **Food service** | [Food service](https://developers.novusconceptus.com/guides/food-service/) | folder 5 | A table left open for more than **24 hours** blocks issuing for your customer's whole branch. | | **Goods movement** | [Goods movement](https://developers.novusconceptus.com/guides/delivery/) | folder 6 | | | **B2G** | [Public sector (B2G)](https://developers.novusconceptus.com/guides/b2g/) | folder 7 | You need a separate B2G sandbox key. | | **OSS** | [OSS](https://developers.novusconceptus.com/guides/oss/) | folder 8 | Your app calculates the foreign VAT. | | **Onboarding API** | [Onboarding API](https://developers.novusconceptus.com/onboarding-api/) | Onboarding collection | If you use webhooks, verify the signature of every call. | ## 3. Send the certification request When the scenarios have run, fill in the request: [Certification request](https://www.novusconceptus.com/certification) The request asks for: - company, app and version, - the email of your sandbox account and the issuer VAT number you used, - the dates you ran the scenarios, - the B3 printout (or a statement that you give the provider's PDF), - the declarations for B4 and B5, - the modules you use. ## 4. What happens next - We review your documents and the printout, and reply **in the same request**. - **If something needs a fix**, we tell you exactly what. You fix it, rerun only that scenario and reply in the same request. - **If it is approved**, we send you the instructions for the production account and key. ## 5. Activating customer VAT numbers (production only) For each customer (issuer VAT number) you need: 1. A **contract** between the customer and Novus Conceptus, signed by the legal representative. 2. An **authorization** of Novus Conceptus as provider, given by the customer in myAADE. 3. A **Provider declaration** to AADE. We submit it after approval. All of this happens automatically through the **Onboarding API**: you create a request, the customer signs the contract and you track the status until approval. You can also do it from the portal. See [Onboarding API](https://developers.novusconceptus.com/onboarding-api/). ## 6. Credits Each call uses credits from your account balance ([charges per type](https://developers.novusconceptus.com/provider-api/credits/)). You buy credits from the production portal. When the balance is not enough, the call is rejected with HTTP 400 `"You don't have enough balance to send this request."` and the document is **not** transmitted. ## Print rules If you use the provider's PDF (`invoiceUrl`), the rules are already covered. If you print **your own** document (e.g. on a thermal printer), it must include: - the provider's name and website: **Novus Conceptus | https://timologisi.online**, - the **QR code** (from `invoiceUrl` / `qrUrl`), - the **MARK**, **UID** and **Authentication Code**, - the issue date and time, clearly legible, - for POS payments: the payment details, that is the transaction id and the provider signature used, for each amount separately, - for offline issuing: the text **"Απώλεια Διασύνδεσης Παρόχου - ΑΑΔΕ"** (Provider - AADE connection lost) or **"Απώλεια Διασύνδεσης Οντότητας - Παρόχου"** (Entity - Provider connection lost), depending on the case. ## After going live - Follow the terms of use. - Monitor the responses for warnings and errors. - If you add a module later (e.g. card or food service), you do **not** need a new certification: follow its guide. - We announce every AADE change that affects you on the [Changelog](https://developers.novusconceptus.com/changelog/) page, before it takes effect. Source: https://developers.novusconceptus.com/start/go-live/ --- # Invoices & receipts All documents are issued with the same call, [`SendInvoices`](https://developers.novusconceptus.com/provider-api/send-invoices/). Only the **type** (`invoiceHeader.invoiceType`) and a few fields change. ## Which type to choose | Transaction | Type | Recipient (`counterpart`) | Ready-made JSON | |:---|:---:|:---:|:---| | Sale of goods to a business | `1.1` | yes | [1.1-sales-invoice.json](https://developers.novusconceptus.com/examples/invoicing/1.1-sales-invoice.json) | | Services to a business | `2.1` | yes | [2.1-service-invoice.json](https://developers.novusconceptus.com/examples/invoicing/2.1-service-invoice.json) | | Retail sale of goods to a consumer | `11.1` | no | [11.1-retail-receipt.json](https://developers.novusconceptus.com/examples/invoicing/11.1-retail-receipt.json) | | Retail services to a consumer | `11.2` | no | [11.2-service-receipt.json](https://developers.novusconceptus.com/examples/invoicing/11.2-service-receipt.json) | | Purchase from a non-obligated seller (title of acquisition) | `3.1` | yes | [3.1-title-of-acquisition.json](https://developers.novusconceptus.com/examples/invoicing/3.1-title-of-acquisition.json) | | Climate crisis resilience fee | `8.2` | optional | [8.2-climate-resilience-fee.json](https://developers.novusconceptus.com/examples/invoicing/8.2-climate-resilience-fee.json) | | Credit note / return | `5.1`, `5.2`, `11.4` | depends | [Credit notes & correlations](https://developers.novusconceptus.com/guides/credit-notes/) | | Invoice that is also a delivery note | `1.1` + `isDeliveryNote` | yes | [Goods movement](https://developers.novusconceptus.com/guides/delivery/) | **Note: Only types 1.1 to 11.5** Through a certified e-invoicing provider you can issue **only** types 1.1 to 11.5. Types 12.x to 17.x are not transmitted by a provider. All allowed types: [AADE code tables → Documents](https://developers.novusconceptus.com/aade/documents/#invoice-types). ## The 6 rules that prevent most errors 1. **One document per call.** `invoice` is an array with exactly one element. 2. **Today's date.** `issueDate` must be today's date. The only exception is sending with `transmissionFailure = 1` ([Offline](https://developers.novusconceptus.com/guides/offline/)). 3. **Payments = total.** The sum of `paymentMethods[].amount` equals `invoiceSummary.totalGrossValue`. If the customer pays later, send `type: 5` (On credit). 4. **No name for Greek VAT numbers (ΑΦΜ).** In `issuer` and `counterpart` with `country: "GR"`, do **not** send `name`. The name printed on the document goes in `providerAdditionalInvoiceDetails`. 5. **Classification on every line.** Every income line has an `incomeClassification` with an amount equal to `netValue`. The summary holds the totals per type and category. 6. **Two blocks, two purposes.** Everything in `providerAdditionalInvoiceDetails` goes **only to the PDF**. Everything else goes to AADE (the Greek tax authority). ## Common income classifications | Case | `classificationType` | `classificationCategory` | |:---|:---|:---| | Wholesale of goods (1.1) | `E3_561_001` | `category1_1` | | Services to a business (2.1) | `E3_561_001` | `category1_3` | | Retail sale of goods (11.1) | `E3_561_003` | `category1_1` | | Retail services (11.2, food service) | `E3_561_003` | `category1_3` | | Sale within the EU | `E3_561_005` | `category1_1` | | Sale to a non-EU country | `E3_561_006` | `category1_1` | | Informational (e.g. 8.6, OSS VAT line) | — | `category1_95` | AADE defines which combination is valid for each document type (in its "Συνδυασμοί χαρακτηρισμών" file, i.e. classification combinations). All codes: [Classifications](https://developers.novusconceptus.com/aade/classifications/). ## Ready-made examples All of them pass the totals check. Before you send them: - put your own sandbox VAT number in `issuer.vatNumber` (the examples use `123456789`), - set `issueDate` to today's date, - change `aa`. The recipient VAT number `987654324` is fictitious, but its check digit is valid. **Example: 1.1 — Sales Invoice** [ Download](https://developers.novusconceptus.com/examples/invoicing/1.1-sales-invoice.json) ```json { "invoice": [ { "issuer": { "vatNumber": "123456789", "country": "GR", "branch": 0 }, "counterpart": { "vatNumber": "987654324", "country": "GR", "branch": 0, "address": { "street": "Οδός Πελάτη", "number": "10", "postalCode": "15772", "city": "Ζωγράφου" } }, "invoiceHeader": { "series": "A", "aa": "1001", "issueDate": "2026-09-24", "invoiceType": "1.1", "currency": "EUR", "dispatchDate": "2026-09-24", "dispatchTime": "10:00:00", "vehicleNumber": "ABC-1234", "movePurpose": 1, "movePurposeLabel": "Πώληση" }, "paymentMethods": [ { "type": 5, "amount": 124 } ], "invoiceDetails": [ { "lineNumber": 1, "lineCode": "655-000023", "quantity": 1, "measurementUnitLabel": "ΤΜΧ", "lineUnitPrice": 120, "totalNetPriceBeforeDiscount": 120, "totalDiscountValue": 20, "netValue": 100, "vatCategory": 1, "vatCategoryPercent": 24, "vatAmount": 24, "lineDescription": "Αντικατάσταση Λέβητα", "incomeClassification": [ { "classificationType": "E3_561_001", "classificationCategory": "category1_1", "amount": 100 } ] } ], "invoiceSummary": { "totalNetValue": 100, "totalVatAmount": 24, "totalWithheldAmount": 0, "totalFeesAmount": 0, "totalStampDutyAmount": 0, "totalOtherTaxesAmount": 0, "totalDeductionsAmount": 0, "totalGrossValue": 124, "incomeClassification": [ { "classificationType": "E3_561_001", "classificationCategory": "category1_1", "amount": 100 } ] }, "providerAdditionalInvoiceDetails": { "issuer": { "name": "TEST ISSUER ΙΚΕ", "profession": "Εμπόριο ειδών θέρμανσης", "taxoffice": "Α' Αθηνών", "addressStreet": "Οδός Δοκιμής", "addressNumber": "1", "addressPostalCode": "10431", "addressCity": "Αθήνα", "addressCountry": "Ελλάδα", "phone": "2100000000", "email": "info@example.com", "webSite": "www.example.com", "registryNumber": "ΓΕΜΗ: 000000000000", "emtyLine2": "IBAN: GR00 0000 0000 0000 0000 0000 000" }, "counterpart": { "code": "C-0001", "name": "TEST CLIENT ΑΕ", "profession": "Χονδρικό εμπόριο", "taxoffice": "Ζωγράφου", "addressStreet": "Οδός Πελάτη", "addressNumber": "10", "addressPostalCode": "15772", "addressCity": "Ζωγράφου", "addressCountry": "Ελλάδα", "phone": "2100000001", "email": "client@example.com" }, "additionalDetails": { "documentLabel": "Τιμολόγιο Πώλησης", "documentLanguageCode": "EL", "documentSizeCode": 0, "documentComments": "Εξόφληση εντός 30 ημερών.", "paymentMethodInvoiceLabel": "Επί πιστώσει" } } } ] } ``` **Example: 2.1 — Service Invoice** [ Download](https://developers.novusconceptus.com/examples/invoicing/2.1-service-invoice.json) ```json { "invoice": [ { "issuer": { "vatNumber": "123456789", "country": "GR", "branch": 0 }, "counterpart": { "vatNumber": "987654324", "country": "GR", "branch": 0, "address": { "street": "Οδός Πελάτη", "number": "10", "postalCode": "15772", "city": "Ζωγράφου" } }, "invoiceHeader": { "series": "A", "aa": "1002", "issueDate": "2026-09-24", "invoiceType": "2.1", "currency": "EUR" }, "paymentMethods": [ { "type": 5, "amount": 100 }, { "type": 6, "amount": 24 } ], "invoiceDetails": [ { "lineNumber": 1, "lineCode": "655-000023", "quantity": 1, "measurementUnitLabel": "ΤΜΧ", "lineUnitPrice": 120, "totalNetPriceBeforeDiscount": 120, "totalDiscountValue": 20, "netValue": 100, "vatCategory": 1, "vatCategoryPercent": 24, "vatAmount": 24, "lineDescription": "Αντικατάσταση Λέβητα", "incomeClassification": [ { "classificationType": "E3_561_001", "classificationCategory": "category1_3", "amount": 100 } ] } ], "invoiceSummary": { "totalNetValue": 100, "totalVatAmount": 24, "totalWithheldAmount": 0, "totalFeesAmount": 0, "totalStampDutyAmount": 0, "totalOtherTaxesAmount": 0, "totalDeductionsAmount": 0, "totalGrossValue": 124, "incomeClassification": [ { "classificationType": "E3_561_001", "classificationCategory": "category1_3", "amount": 100 } ] }, "providerAdditionalInvoiceDetails": { "issuer": { "name": "TEST ISSUER ΙΚΕ", "profession": "Εμπόριο ειδών θέρμανσης", "taxoffice": "Α' Αθηνών", "addressStreet": "Οδός Δοκιμής", "addressNumber": "1", "addressPostalCode": "10431", "addressCity": "Αθήνα", "addressCountry": "Ελλάδα", "phone": "2100000000", "email": "info@example.com", "webSite": "www.example.com", "registryNumber": "ΓΕΜΗ: 000000000000", "emtyLine2": "IBAN: GR00 0000 0000 0000 0000 0000 000" }, "counterpart": { "code": "C-0001", "name": "TEST CLIENT ΑΕ", "profession": "Χονδρικό εμπόριο", "taxoffice": "Ζωγράφου", "addressStreet": "Οδός Πελάτη", "addressNumber": "10", "addressPostalCode": "15772", "addressCity": "Ζωγράφου", "addressCountry": "Ελλάδα", "phone": "2100000001", "email": "client@example.com" }, "additionalDetails": { "documentLabel": "Τιμολόγιο Παροχής Υπηρεσιών", "documentLanguageCode": "EL", "documentSizeCode": 0, "documentComments": "Εξόφληση εντός 30 ημερών.", "paymentMethodInvoiceLabel": "Επί πιστώσει" } } } ] } ``` **Example: 11.1 — Retail Sales Receipt** [ Download](https://developers.novusconceptus.com/examples/invoicing/11.1-retail-receipt.json) ```json { "invoice": [ { "issuer": { "vatNumber": "123456789", "country": "GR", "branch": 0 }, "invoiceHeader": { "series": "A", "aa": "1007", "issueDate": "2026-09-24", "invoiceType": "11.1", "currency": "EUR" }, "paymentMethods": [ { "type": 3, "amount": 124 } ], "invoiceDetails": [ { "lineNumber": 1, "lineCode": "655-000023", "quantity": 1, "measurementUnitLabel": "ΤΜΧ", "lineUnitPrice": 120, "totalNetPriceBeforeDiscount": 120, "totalDiscountValue": 20, "netValue": 100, "vatCategory": 1, "vatCategoryPercent": 24, "vatAmount": 24, "lineDescription": "Αντικατάσταση Λέβητα", "incomeClassification": [ { "classificationType": "E3_561_003", "classificationCategory": "category1_1", "amount": 100 } ] } ], "invoiceSummary": { "totalNetValue": 100, "totalVatAmount": 24, "totalWithheldAmount": 0, "totalFeesAmount": 0, "totalStampDutyAmount": 0, "totalOtherTaxesAmount": 0, "totalDeductionsAmount": 0, "totalGrossValue": 124, "incomeClassification": [ { "classificationType": "E3_561_003", "classificationCategory": "category1_1", "amount": 100 } ] }, "providerAdditionalInvoiceDetails": { "issuer": { "name": "TEST ISSUER ΙΚΕ", "profession": "Εμπόριο ειδών θέρμανσης", "taxoffice": "Α' Αθηνών", "addressStreet": "Οδός Δοκιμής", "addressNumber": "1", "addressPostalCode": "10431", "addressCity": "Αθήνα", "addressCountry": "Ελλάδα", "phone": "2100000000", "email": "info@example.com", "webSite": "www.example.com", "registryNumber": "ΓΕΜΗ: 000000000000", "emtyLine2": "IBAN: GR00 0000 0000 0000 0000 0000 000" }, "additionalDetails": { "documentLabel": "Απόδειξη Λιανικής Πώλησης", "documentLanguageCode": "EL", "documentSizeCode": 1, "documentComments": "Εξόφληση εντός 30 ημερών.", "paymentMethodInvoiceLabel": "Επί πιστώσει" } } } ] } ``` **Example: 11.2 — Service Receipt** [ Download](https://developers.novusconceptus.com/examples/invoicing/11.2-service-receipt.json) ```json { "invoice": [ { "issuer": { "vatNumber": "123456789", "country": "GR", "branch": 0 }, "invoiceHeader": { "series": "A", "aa": "1008", "issueDate": "2026-09-24", "invoiceType": "11.2", "currency": "EUR" }, "paymentMethods": [ { "type": 1, "amount": 124 } ], "invoiceDetails": [ { "lineNumber": 1, "lineCode": "655-000023", "quantity": 1, "measurementUnitLabel": "ΤΜΧ", "lineUnitPrice": 120, "totalNetPriceBeforeDiscount": 120, "totalDiscountValue": 20, "netValue": 100, "vatCategory": 1, "vatCategoryPercent": 24, "vatAmount": 24, "lineDescription": "Αντικατάσταση Λέβητα", "incomeClassification": [ { "classificationType": "E3_561_003", "classificationCategory": "category1_3", "amount": 100 } ] } ], "invoiceSummary": { "totalNetValue": 100, "totalVatAmount": 24, "totalWithheldAmount": 0, "totalFeesAmount": 0, "totalStampDutyAmount": 0, "totalOtherTaxesAmount": 0, "totalDeductionsAmount": 0, "totalGrossValue": 124, "incomeClassification": [ { "classificationType": "E3_561_003", "classificationCategory": "category1_3", "amount": 100 } ] }, "providerAdditionalInvoiceDetails": { "issuer": { "name": "TEST ISSUER ΙΚΕ", "profession": "Εμπόριο ειδών θέρμανσης", "taxoffice": "Α' Αθηνών", "addressStreet": "Οδός Δοκιμής", "addressNumber": "1", "addressPostalCode": "10431", "addressCity": "Αθήνα", "addressCountry": "Ελλάδα", "phone": "2100000000", "email": "info@example.com", "webSite": "www.example.com", "registryNumber": "ΓΕΜΗ: 000000000000", "emtyLine2": "IBAN: GR00 0000 0000 0000 0000 0000 000" }, "additionalDetails": { "documentLabel": "Απόδειξη Παροχής Υπηρεσιών", "documentLanguageCode": "EL", "documentSizeCode": 0, "documentComments": "Εξόφληση εντός 30 ημερών.", "paymentMethodInvoiceLabel": "Επί πιστώσει" } } } ] } ``` **Example: 3.1 — Title of Acquisition** [ Download](https://developers.novusconceptus.com/examples/invoicing/3.1-title-of-acquisition.json) ```json { "invoice": [ { "issuer": { "vatNumber": "123456789", "country": "GR", "branch": 0 }, "counterpart": { "vatNumber": "987654324", "country": "GR", "branch": 0, "address": { "street": "Οδός Πελάτη", "number": "10", "postalCode": "15772", "city": "Ζωγράφου" } }, "invoiceHeader": { "series": "A", "aa": "1003", "issueDate": "2026-09-24", "invoiceType": "3.1", "currency": "EUR", "exchangeRate": 1.19552, "dispatchDate": "2026-09-24", "dispatchTime": "10:00:00", "vehicleNumber": "ABC-1234", "movePurpose": 1, "movePurposeLabel": "Πώληση" }, "paymentMethods": [ { "type": 5, "amount": 100 } ], "invoiceDetails": [ { "lineNumber": 1, "lineCode": "655-000023", "quantity": 1, "measurementUnitLabel": "ΤΜΧ", "lineUnitPrice": 120, "totalNetPriceBeforeDiscount": 120, "totalDiscountValue": 20, "netValue": 100, "vatCategory": 8, "vatCategoryPercent": 0, "vatAmount": 0, "lineDescription": "Αντικατάσταση Λέβητα", "expensesClassification": [ { "classificationType": "E3_102_002", "classificationCategory": "category2_1", "amount": 100 } ] } ], "invoiceSummary": { "totalNetValue": 100, "totalVatAmount": 0, "totalWithheldAmount": 0, "totalFeesAmount": 0, "totalStampDutyAmount": 0, "totalOtherTaxesAmount": 0, "totalDeductionsAmount": 0, "totalGrossValue": 100, "expensesClassification": [ { "classificationType": "E3_102_002", "classificationCategory": "category2_1", "amount": 100 } ] }, "providerAdditionalInvoiceDetails": { "issuer": { "name": "TEST ISSUER ΙΚΕ", "profession": "Εμπόριο ειδών θέρμανσης", "taxoffice": "Α' Αθηνών", "addressStreet": "Οδός Δοκιμής", "addressNumber": "1", "addressPostalCode": "10431", "addressCity": "Αθήνα", "addressCountry": "Ελλάδα", "phone": "2100000000", "email": "info@example.com", "webSite": "www.example.com", "registryNumber": "ΓΕΜΗ: 000000000000", "emtyLine2": "IBAN: GR00 0000 0000 0000 0000 0000 000" }, "counterpart": { "code": "C-0001", "name": "TEST CLIENT ΑΕ", "profession": "Χονδρικό εμπόριο", "taxoffice": "Ζωγράφου", "addressStreet": "Οδός Πελάτη", "addressNumber": "10", "addressPostalCode": "15772", "addressCity": "Ζωγράφου", "addressCountry": "Ελλάδα", "phone": "2100000001", "email": "client@example.com" }, "additionalDetails": { "documentLabel": "Τίτλος Κτήσης", "documentLanguageCode": "EL", "documentSizeCode": 0, "documentComments": "Εξόφληση εντός 30 ημερών.", "paymentMethodInvoiceLabel": "Επί πιστώσει" } } } ] } ``` **Example: 8.2 — Climate crisis resilience fee** Declare the fee as an "other tax" with a fixed amount: `otherTaxesPercentCategory` 20–30, per overnight stay. See [Other taxes](https://developers.novusconceptus.com/aade/taxes/#other-taxes). [ Download](https://developers.novusconceptus.com/examples/invoicing/8.2-climate-resilience-fee.json) ```json { "invoice": [ { "issuer": { "vatNumber": "123456789", "country": "GR", "branch": 0 }, "counterpart": { "vatNumber": "987654324", "country": "GR", "branch": 0, "address": { "street": "Οδός Πελάτη", "number": "10", "postalCode": "15772", "city": "Ζωγράφου" } }, "invoiceHeader": { "series": "A", "aa": "1006", "issueDate": "2026-09-24", "invoiceType": "8.2", "currency": "EUR" }, "paymentMethods": [ { "type": 3, "amount": 6.0 } ], "invoiceDetails": [ { "lineNumber": 1, "lineCode": "CRF-01", "quantity": 2, "measurementUnitLabel": "ΔΙΑΝ.", "lineUnitPrice": 0, "totalNetPriceBeforeDiscount": 0, "totalDiscountValue": 0, "netValue": 0, "vatCategory": 8, "vatCategoryPercent": 0, "vatAmount": 0, "otherTaxesPercentCategory": 21, "otherTaxesAmount": 6.0, "lineDescription": "Τέλος ανθεκτικότητας κλιματικής κρίσης (2 διανυκτερεύσεις)", "incomeClassification": [ { "classificationCategory": "category1_95", "amount": 0 } ] } ], "invoiceSummary": { "totalNetValue": 0, "totalVatAmount": 0, "totalWithheldAmount": 0, "totalFeesAmount": 0, "totalStampDutyAmount": 0, "totalOtherTaxesAmount": 6.0, "totalDeductionsAmount": 0, "totalGrossValue": 6.0, "incomeClassification": [ { "classificationCategory": "category1_95", "amount": 0 } ] }, "providerAdditionalInvoiceDetails": { "issuer": { "name": "TEST ISSUER ΙΚΕ", "profession": "Εμπόριο ειδών θέρμανσης", "taxoffice": "Α' Αθηνών", "addressStreet": "Οδός Δοκιμής", "addressNumber": "1", "addressPostalCode": "10431", "addressCity": "Αθήνα", "addressCountry": "Ελλάδα", "phone": "2100000000", "email": "info@example.com", "webSite": "www.example.com", "registryNumber": "ΓΕΜΗ: 000000000000", "emtyLine2": "IBAN: GR00 0000 0000 0000 0000 0000 000" }, "counterpart": { "code": "C-0001", "name": "TEST CLIENT ΑΕ", "profession": "Χονδρικό εμπόριο", "taxoffice": "Ζωγράφου", "addressStreet": "Οδός Πελάτη", "addressNumber": "10", "addressPostalCode": "15772", "addressCity": "Ζωγράφου", "addressCountry": "Ελλάδα", "phone": "2100000001", "email": "client@example.com" }, "additionalDetails": { "documentLabel": "Τέλος Ανθεκτικότητας Κλιματικής Κρίσης", "documentLanguageCode": "EL", "documentSizeCode": 0, "documentComments": "Εξόφληση εντός 30 ημερών.", "paymentMethodInvoiceLabel": "Μετρητά" } } } ] } ``` Source: https://developers.novusconceptus.com/guides/invoices/ --- # Credit notes & correlations ## Which credit note | Case | Type | What to fill in | |:---|:---:|:---| | Credit for a **wholesale** invoice to a business (return, discount, cancellation) | `5.2` *(recommended)* | Nothing extra | | The same, correlated with the original invoice | `5.1` | `correlatedInvoices` with the MARK of the original. See the warning below. | | Cancelling or refunding a **retail** receipt (11.1, 11.2, 11.3, 11.5) | `11.4` | `correlatedInvoices` (optional) | Credit note amounts are **positive**. The type is what marks it as a credit. **Warning: Why 5.2 is recommended** AADE (the Greek tax authority) needs time to sync a new document, **up to 24 hours**. If you send a credit note with `correlatedInvoices` pointing to a MARK that is not synced yet, AADE replies that it cannot find the MARK and the credit note is rejected. To keep your application from stalling, prefer 5.2. Use 5.1 only when the original was issued well before. ## Cancelling a document An issued document **cannot be deleted or cancelled**. It can only be reversed with the proper credit note, with the same amounts and classifications. The `CancelDeliveryNote` / `CancelReceivingNote` calls apply only to delivery and receiving notes (9.x / 10.x). If the original was **self-billed** (`selfPricing: true`), issue the credit note as self-billed too, so that the reversal has the correct signs. ## Correlation | Field | What to put | |:---|:---| | `invoiceHeader.correlatedInvoices` | Array with the MARK of the original, e.g. `[400001930000001]`. You received the MARK in the response when the original was issued. | | `invoiceHeader.correlatedInvoicesLabel` | Text for the PDF, e.g. "Τιμολόγιο Πώλησης A 1001" (Sales Invoice A 1001). | If the original was issued `Offline` and has no MARK yet, wait until it gets one. Find it with [`RequestTransmittedDocs`](https://developers.novusconceptus.com/provider-api/other-endpoints/#requesttransmitteddocs) and `uid`. **Tip: Don't remember the MARK?** Search with [`RequestTransmittedDocs`](https://developers.novusconceptus.com/provider-api/other-endpoints/#requesttransmitteddocs) by series/number or UID. ## Ready-made examples **Example: 5.1 — Credit invoice, correlated** [ Download](https://developers.novusconceptus.com/examples/invoicing/5.1-credit-invoice-correlated.json) ```json { "invoice": [ { "issuer": { "vatNumber": "123456789", "country": "GR", "branch": 0 }, "counterpart": { "vatNumber": "987654324", "country": "GR", "branch": 0, "address": { "street": "Οδός Πελάτη", "number": "10", "postalCode": "15772", "city": "Ζωγράφου" } }, "invoiceHeader": { "series": "A", "aa": "1004", "issueDate": "2026-09-24", "invoiceType": "5.1", "currency": "EUR", "correlatedInvoices": [ 400001930000001 ], "correlatedInvoicesLabel": "Τιμολόγιο Πώλησης A 1001" }, "paymentMethods": [ { "type": 5, "amount": 124 } ], "invoiceDetails": [ { "lineNumber": 1, "lineCode": "655-000023", "quantity": 1, "measurementUnitLabel": "ΤΜΧ", "lineUnitPrice": 120, "totalNetPriceBeforeDiscount": 120, "totalDiscountValue": 20, "netValue": 100, "vatCategory": 1, "vatCategoryPercent": 24, "vatAmount": 24, "lineDescription": "Αντικατάσταση Λέβητα", "incomeClassification": [ { "classificationType": "E3_561_001", "classificationCategory": "category1_1", "amount": 100 } ] } ], "invoiceSummary": { "totalNetValue": 100, "totalVatAmount": 24, "totalWithheldAmount": 0, "totalFeesAmount": 0, "totalStampDutyAmount": 0, "totalOtherTaxesAmount": 0, "totalDeductionsAmount": 0, "totalGrossValue": 124, "incomeClassification": [ { "classificationType": "E3_561_001", "classificationCategory": "category1_1", "amount": 100 } ] }, "providerAdditionalInvoiceDetails": { "issuer": { "name": "TEST ISSUER ΙΚΕ", "profession": "Εμπόριο ειδών θέρμανσης", "taxoffice": "Α' Αθηνών", "addressStreet": "Οδός Δοκιμής", "addressNumber": "1", "addressPostalCode": "10431", "addressCity": "Αθήνα", "addressCountry": "Ελλάδα", "phone": "2100000000", "email": "info@example.com", "webSite": "www.example.com", "registryNumber": "ΓΕΜΗ: 000000000000", "emtyLine2": "IBAN: GR00 0000 0000 0000 0000 0000 000" }, "counterpart": { "code": "C-0001", "name": "TEST CLIENT ΑΕ", "profession": "Χονδρικό εμπόριο", "taxoffice": "Ζωγράφου", "addressStreet": "Οδός Πελάτη", "addressNumber": "10", "addressPostalCode": "15772", "addressCity": "Ζωγράφου", "addressCountry": "Ελλάδα", "phone": "2100000001", "email": "client@example.com" }, "additionalDetails": { "documentLabel": "Πιστωτικό Τιμολόγιο", "documentLanguageCode": "EL", "documentSizeCode": 0, "documentComments": "Εξόφληση εντός 30 ημερών.", "paymentMethodInvoiceLabel": "Επί πιστώσει" } } } ] } ``` **Example: 5.2 — Credit invoice, non-correlated** [ Download](https://developers.novusconceptus.com/examples/invoicing/5.2-credit-invoice-uncorrelated.json) ```json { "invoice": [ { "issuer": { "vatNumber": "123456789", "country": "GR", "branch": 0 }, "counterpart": { "vatNumber": "987654324", "country": "GR", "branch": 0, "address": { "street": "Οδός Πελάτη", "number": "10", "postalCode": "15772", "city": "Ζωγράφου" } }, "invoiceHeader": { "series": "A", "aa": "1005", "issueDate": "2026-09-24", "invoiceType": "5.2", "currency": "EUR" }, "paymentMethods": [ { "type": 5, "amount": 124 } ], "invoiceDetails": [ { "lineNumber": 1, "lineCode": "655-000023", "quantity": 1, "measurementUnitLabel": "ΤΜΧ", "lineUnitPrice": 120, "totalNetPriceBeforeDiscount": 120, "totalDiscountValue": 20, "netValue": 100, "vatCategory": 1, "vatCategoryPercent": 24, "vatAmount": 24, "lineDescription": "Αντικατάσταση Λέβητα", "incomeClassification": [ { "classificationType": "E3_561_001", "classificationCategory": "category1_1", "amount": 100 } ] } ], "invoiceSummary": { "totalNetValue": 100, "totalVatAmount": 24, "totalWithheldAmount": 0, "totalFeesAmount": 0, "totalStampDutyAmount": 0, "totalOtherTaxesAmount": 0, "totalDeductionsAmount": 0, "totalGrossValue": 124, "incomeClassification": [ { "classificationType": "E3_561_001", "classificationCategory": "category1_1", "amount": 100 } ] }, "providerAdditionalInvoiceDetails": { "issuer": { "name": "TEST ISSUER ΙΚΕ", "profession": "Εμπόριο ειδών θέρμανσης", "taxoffice": "Α' Αθηνών", "addressStreet": "Οδός Δοκιμής", "addressNumber": "1", "addressPostalCode": "10431", "addressCity": "Αθήνα", "addressCountry": "Ελλάδα", "phone": "2100000000", "email": "info@example.com", "webSite": "www.example.com", "registryNumber": "ΓΕΜΗ: 000000000000", "emtyLine2": "IBAN: GR00 0000 0000 0000 0000 0000 000" }, "counterpart": { "code": "C-0001", "name": "TEST CLIENT ΑΕ", "profession": "Χονδρικό εμπόριο", "taxoffice": "Ζωγράφου", "addressStreet": "Οδός Πελάτη", "addressNumber": "10", "addressPostalCode": "15772", "addressCity": "Ζωγράφου", "addressCountry": "Ελλάδα", "phone": "2100000001", "email": "client@example.com" }, "additionalDetails": { "documentLabel": "Πιστωτικό Τιμολόγιο", "documentLanguageCode": "EL", "documentSizeCode": 0, "documentComments": "Εξόφληση εντός 30 ημερών.", "paymentMethodInvoiceLabel": "Επί πιστώσει" } } } ] } ``` **Example: 11.4 — Retail credit note** [ Download](https://developers.novusconceptus.com/examples/invoicing/11.4-retail-credit-note.json) ```json { "invoice": [ { "issuer": { "vatNumber": "123456789", "country": "GR", "branch": 0 }, "invoiceHeader": { "series": "A", "aa": "1009", "issueDate": "2026-09-24", "invoiceType": "11.4", "currency": "EUR" }, "paymentMethods": [ { "type": 3, "amount": 124 } ], "invoiceDetails": [ { "lineNumber": 1, "lineCode": "655-000023", "quantity": 1, "measurementUnitLabel": "ΤΜΧ", "lineUnitPrice": 120, "totalNetPriceBeforeDiscount": 120, "totalDiscountValue": 20, "netValue": 100, "vatCategory": 1, "vatCategoryPercent": 24, "vatAmount": 24, "lineDescription": "Αντικατάσταση Λέβητα", "incomeClassification": [ { "classificationType": "E3_561_003", "classificationCategory": "category1_1", "amount": 100 } ] } ], "invoiceSummary": { "totalNetValue": 100, "totalVatAmount": 24, "totalWithheldAmount": 0, "totalFeesAmount": 0, "totalStampDutyAmount": 0, "totalOtherTaxesAmount": 0, "totalDeductionsAmount": 0, "totalGrossValue": 124, "incomeClassification": [ { "classificationType": "E3_561_003", "classificationCategory": "category1_1", "amount": 100 } ] }, "providerAdditionalInvoiceDetails": { "issuer": { "name": "TEST ISSUER ΙΚΕ", "profession": "Εμπόριο ειδών θέρμανσης", "taxoffice": "Α' Αθηνών", "addressStreet": "Οδός Δοκιμής", "addressNumber": "1", "addressPostalCode": "10431", "addressCity": "Αθήνα", "addressCountry": "Ελλάδα", "phone": "2100000000", "email": "info@example.com", "webSite": "www.example.com", "registryNumber": "ΓΕΜΗ: 000000000000", "emtyLine2": "IBAN: GR00 0000 0000 0000 0000 0000 000" }, "additionalDetails": { "documentLabel": "Πιστωτικό Στοιχείο Λιανικής", "documentLanguageCode": "EL", "documentSizeCode": 7, "documentComments": "Εξόφληση εντός 30 ημερών.", "paymentMethodInvoiceLabel": "Επί πιστώσει" } } } ] } ``` Source: https://developers.novusconceptus.com/guides/credit-notes/ --- # Taxes, fees, deductions Apart from VAT, a document can carry withholding tax, fees, other taxes, the digital transaction fee (formerly stamp duty) and deductions. There are **two ways** to report them. You choose **one** per document. | | Per line | At document level (`taxesTotals`) | |:---|:---|:---| | Where | On each `invoiceDetails[]`: `withheldAmount` + `withheldPercentCategory`, `feesAmount` + `feesPercentCategory`, etc. | In the `taxesTotals[]` array, one entry per tax | | When | When the tax applies to specific lines | When it applies to the whole document. **Required for B2G.** | | Printing | Automatic | With `taxTypeLabel` (required) and `reducesPayable` | ## How the total is calculated ```text totalGrossValue = totalNetValue + totalVatAmount − totalWithheldAmount + totalFeesAmount + totalStampDutyAmount + totalOtherTaxesAmount − totalDeductionsAmount ``` The sum of `paymentMethods[].amount` must equal this amount. ## taxesTotals: one entry per tax | `taxType` | Kind | `taxCategory` from the table | Reduces the amount payable | |:---:|:---|:---|:---:| | 1 | Withholding tax | [Withholding taxes](https://developers.novusconceptus.com/aade/taxes/#withheld-tax) | yes | | 2 | Fees | [Fees](https://developers.novusconceptus.com/aade/taxes/#fees) | no | | 3 | Other taxes | [Other taxes](https://developers.novusconceptus.com/aade/taxes/#other-taxes) | no | | 4 | Digital transaction fee | [Digital transaction fee](https://developers.novusconceptus.com/aade/taxes/#digital-transaction-fee) | no | | 5 | Deductions | — | yes | ```json title="Example: 4% withholding on a €100 invoice" "taxesTotals": [ { "taxType": 1, "taxCategory": 6, "underlyingValue": 100, "taxAmount": 4.00, "reducesPayable": true, "taxTypeLabel": "Παρακράτηση φόρου 4%" } ] ``` **Warning: Rate and amount must match** When the category is a percentage (e.g. 4%), the amount must be that percentage of the value. When the category is an "amount" (e.g. accommodation tax), you send the amount that applies. ## Ready-made examples Both files describe the same invoice (€100 + 24% VAT, with every kind of tax), once per line and once at document level. They are examples of **structure**, not tax advice. **Example: Taxes per line** [ Download](https://developers.novusconceptus.com/examples/invoicing/taxes-line-level.json) ```json { "invoice": [ { "issuer": { "vatNumber": "123456789", "country": "GR", "branch": 0 }, "counterpart": { "vatNumber": "987654324", "country": "GR", "branch": 0, "address": { "street": "Οδός Πελάτη", "number": "10", "postalCode": "15772", "city": "Ζωγράφου" } }, "invoiceHeader": { "series": "A", "aa": "1010", "issueDate": "2026-09-24", "invoiceType": "1.1", "currency": "EUR" }, "paymentMethods": [ { "type": 3, "amount": 125.7 } ], "invoiceDetails": [ { "lineNumber": 1, "lineCode": "SRV-100", "quantity": 1, "measurementUnit": 1, "measurementUnitLabel": "ΤΜΧ", "lineUnitPrice": 100, "totalNetPriceBeforeDiscount": 100, "totalDiscountValue": 0, "netValue": 100, "vatCategory": 1, "vatCategoryPercent": 24, "vatAmount": 24, "lineDescription": "Προϊόν Α", "withheldPercentCategory": 6, "withheldAmount": 4.0, "feesPercentCategory": 10, "feesAmount": 2.0, "otherTaxesPercentCategory": 17, "otherTaxesAmount": 3.0, "stampDutyPercentCategory": 1, "stampDutyAmount": 1.2, "deductionsAmount": 0.5, "incomeClassification": [ { "classificationType": "E3_561_001", "classificationCategory": "category1_1", "amount": 100 } ] } ], "invoiceSummary": { "totalNetValue": 100, "totalVatAmount": 24, "totalWithheldAmount": 4.0, "totalFeesAmount": 2.0, "totalStampDutyAmount": 1.2, "totalOtherTaxesAmount": 3.0, "totalDeductionsAmount": 0.5, "totalGrossValue": 125.7, "incomeClassification": [ { "classificationType": "E3_561_001", "classificationCategory": "category1_1", "amount": 100 } ] }, "providerAdditionalInvoiceDetails": { "issuer": { "name": "TEST ISSUER ΙΚΕ", "profession": "Εμπόριο ειδών θέρμανσης", "taxoffice": "Α' Αθηνών", "addressStreet": "Οδός Δοκιμής", "addressNumber": "1", "addressPostalCode": "10431", "addressCity": "Αθήνα", "addressCountry": "Ελλάδα", "phone": "2100000000", "email": "info@example.com", "webSite": "www.example.com", "registryNumber": "ΓΕΜΗ: 000000000000", "emtyLine2": "IBAN: GR00 0000 0000 0000 0000 0000 000" }, "counterpart": { "code": "C-0001", "name": "TEST CLIENT ΑΕ", "profession": "Χονδρικό εμπόριο", "taxoffice": "Ζωγράφου", "addressStreet": "Οδός Πελάτη", "addressNumber": "10", "addressPostalCode": "15772", "addressCity": "Ζωγράφου", "addressCountry": "Ελλάδα", "phone": "2100000001", "email": "client@example.com" }, "additionalDetails": { "documentLabel": "Τιμολόγιο Πώλησης", "documentLanguageCode": "EL", "documentSizeCode": 0, "documentComments": "Εξόφληση εντός 30 ημερών.", "paymentMethodInvoiceLabel": "Μετρητά" } } } ] } ``` **Example: Taxes at document level (taxesTotals)** [ Download](https://developers.novusconceptus.com/examples/invoicing/taxes-document-level.json) ```json { "invoice": [ { "issuer": { "vatNumber": "123456789", "country": "GR", "branch": 0 }, "counterpart": { "vatNumber": "987654324", "country": "GR", "branch": 0, "address": { "street": "Οδός Πελάτη", "number": "10", "postalCode": "15772", "city": "Ζωγράφου" } }, "invoiceHeader": { "series": "A", "aa": "1011", "issueDate": "2026-09-24", "invoiceType": "1.1", "currency": "EUR" }, "paymentMethods": [ { "type": 3, "amount": 125.7 } ], "invoiceDetails": [ { "lineNumber": 1, "lineCode": "SRV-100", "quantity": 1, "measurementUnit": 1, "measurementUnitLabel": "ΤΜΧ", "lineUnitPrice": 100, "totalNetPriceBeforeDiscount": 100, "totalDiscountValue": 0, "netValue": 100, "vatCategory": 1, "vatCategoryPercent": 24, "vatAmount": 24, "lineDescription": "Προϊόν Α", "incomeClassification": [ { "classificationType": "E3_561_001", "classificationCategory": "category1_1", "amount": 100 } ] } ], "taxesTotals": [ { "taxType": 1, "taxCategory": 6, "underlyingValue": 100, "taxAmount": 4.0, "reducesPayable": true, "taxTypeLabel": "Παρακράτηση φόρου 4%" }, { "taxType": 2, "taxCategory": 10, "underlyingValue": 100, "taxAmount": 2.0, "reducesPayable": false, "taxTypeLabel": "Λοιπά τέλη" }, { "taxType": 3, "taxCategory": 17, "underlyingValue": 100, "taxAmount": 3.0, "reducesPayable": false, "taxTypeLabel": "Λοιποί φόροι" }, { "taxType": 4, "taxCategory": 1, "underlyingValue": 100, "taxAmount": 1.2, "reducesPayable": false, "taxTypeLabel": "Ψηφιακό τέλος συναλλαγής 1,2%" }, { "taxType": 5, "underlyingValue": 100, "taxAmount": 0.5, "reducesPayable": true, "taxTypeLabel": "Κρατήσεις" } ], "invoiceSummary": { "totalNetValue": 100, "totalVatAmount": 24, "totalWithheldAmount": 4.0, "totalFeesAmount": 2.0, "totalStampDutyAmount": 1.2, "totalOtherTaxesAmount": 3.0, "totalDeductionsAmount": 0.5, "totalGrossValue": 125.7, "incomeClassification": [ { "classificationType": "E3_561_001", "classificationCategory": "category1_1", "amount": 100 } ] }, "providerAdditionalInvoiceDetails": { "issuer": { "name": "TEST ISSUER ΙΚΕ", "profession": "Εμπόριο ειδών θέρμανσης", "taxoffice": "Α' Αθηνών", "addressStreet": "Οδός Δοκιμής", "addressNumber": "1", "addressPostalCode": "10431", "addressCity": "Αθήνα", "addressCountry": "Ελλάδα", "phone": "2100000000", "email": "info@example.com", "webSite": "www.example.com", "registryNumber": "ΓΕΜΗ: 000000000000", "emtyLine2": "IBAN: GR00 0000 0000 0000 0000 0000 000" }, "counterpart": { "code": "C-0001", "name": "TEST CLIENT ΑΕ", "profession": "Χονδρικό εμπόριο", "taxoffice": "Ζωγράφου", "addressStreet": "Οδός Πελάτη", "addressNumber": "10", "addressPostalCode": "15772", "addressCity": "Ζωγράφου", "addressCountry": "Ελλάδα", "phone": "2100000001", "email": "client@example.com" }, "additionalDetails": { "documentLabel": "Τιμολόγιο Πώλησης", "documentLanguageCode": "EL", "documentSizeCode": 0, "documentComments": "Εξόφληση εντός 30 ημερών.", "paymentMethodInvoiceLabel": "Μετρητά" } } } ] } ``` Source: https://developers.novusconceptus.com/guides/taxes/ --- # Card / IRIS payments Under decision **A.1155/2023**, when a business's POS terminal is "locked" (interconnected), a card or IRIS charge can only be made with a **provider signature**. The certified e-invoicing provider gives the signature, the POS uses it to charge the customer, and then you complete the document. **Note: Who needs this** Only businesses whose POS must be interconnected. AADE (the Greek tax authority) decides this per business and per terminal, and the provider cannot know it. That is why the `skipSignature` parameter exists. Under AADE circular **E.2044/2024**, the cases outside interconnection include **distance sales (e-shop)**, payments via payment link, and businesses with no obligation to use a fiscal cash register (ΦΗΜ) (e.g. POL.1002/2014, wholesale only). In those cases, send with `skipSignature=true`. For each customer's specific case, their accountant gives the final answer. ## Two integrations A card payment involves **two separate integrations**. The provider does not talk to the terminal. | Integration | What it does | API and sandbox | |:---|:---|:---| | **Application ↔ Provider (Novus)** | Gives the provider signature and, after the charge, transmits the document to AADE (MARK). | Novus: this documentation | | **Application ↔ POS / NSP** (e.g. Viva, Mellon, Cardlink, Worldline, Nexi, Euronet, EDPS) | Sends the amount and the token to the terminal, charges the card and returns the `transactionId`. | Your NSP | At the NSP you declare Novus Conceptus as your provider. AADE has two identifiers for us, `provider_id` **005** and `license_id` **105**: test in the NSP's sandbox which one it accepts. ## skipSignature: the switch | `SendInvoices?skipSignature=` | What happens with payment `type` 7 (card) or 8 (IRIS) | |:---|:---| | `true` *(default)* | The document is issued immediately (MARK, UID, AuthCode). No signature is returned. For a POS that is **not** locked. | | `false` | The document is **put on hold** and does not go to AADE yet. A `providerSignature` is returned for the POS. For a **locked** POS. | If the document has no payment of type 7 or 8, `skipSignature` has no effect. ## Flow 1: issue and pay together (checkout) ```mermaid sequenceDiagram autonumber participant APP as Checkout / ERP participant NP as Novus Provider participant POS as POS / NSP (bank) participant AADE as AADE APP->>NP: SendInvoices?skipSignature=false
paymentMethods: type 7, terminalId, posNspId NP-->>APP: providerSignature[].signatures[].token (+ data) APP->>POS: charge with the token POS-->>APP: transactionId, final paymentType (card or IRIS) APP->>NP: CompletionPosInvoices [ signatureToken, transactionId, paymentAmount, paymentType ] NP->>AADE: transmit document + payment NP-->>APP: MARK, UID, AuthCode, invoiceUrl ``` **Warning: A signature is not an issued document** With `skipSignature=false`, in `SendInvoices` the Provider runs only its own checks and returns the signature. The document **is transmitted to AADE only in `CompletionPosInvoices`**, that is after the customer has paid. If AADE rejects it at that point (e.g. a wrong classification, VAT or totals), the document **is not issued, while the card has been charged**. So, before you ask for a signature, you must be sure the document will pass: - In the sandbox, test the whole flow (signature and completion) for every combination of document type, VAT and classification that you will send with a card. In production, stick to those. - In your app, before the call, check what AADE rejects most often: totals and rounding (errors 207, 208, 312), classification combinations, VAT category and exemptions, the recipient's VAT number, a unique series and number (error 228). - For a document with anything unusual, issue first and charge afterwards with [Flow 2](https://developers.novusconceptus.com/guides/card-payments/#flow-2-paying-an-earlier-document-on-credit). If it happens anyway, the customer has paid for a document that was not issued. How that is settled (refund, new charge, re-issue) is an accounting matter: agree it **in advance** with your customer's accountant. **Step 1:** send the document with `skipSignature=false` and, in the payment, `terminalId` and [`posNspId`](https://developers.novusconceptus.com/aade/lines-payments/#pos-nsp): ```json "paymentMethods": [ { "type": 7, "amount": 124.00, "terminalId": "TID00001", "posNspId": 1 } ] ``` **Step 2:** the response contains the signature: ```json "providerSignature": [ { "invoiceUid": "5E1F953760F9496F5520A961DA3BE07B30ED07F8", "signatures": [ { "token": "3045022100F0B3EAEAAC535A0C6549B42619C65895...", "data": "5E1F953760F9496F5520A961DA3BE07B30ED07F8;;20260924155441;10000;2400;12400;12400;TID00001", "createdDate": "2026-09-24T12:54:41Z", "expiryDate": "2026-09-25T12:54:41Z", "isExpired": false, "paymentBalance": 124, "issuerVatNumber": "123456789" } ] } ] ``` - **`token`:** pass it **as is** to the NSP/bank API. It is already in the format the NSP expects (HEX or BASE64, based on `posNspId`). Do not convert it. - **`data`:** the data that was signed. Some NSPs require it together with the token. - **Validity:** 24 hours. For food service transactions (`specialInvoiceCategory = 12`) it is valid for 2 hours. **Step 3:** charge on the POS. The customer can switch payment method (e.g. from card to IRIS). Keep the `transactionId` and the final payment type. **Step 4:** complete the document: ```http POST /api/v1/Provider/CompletionPosInvoices ``` ```json [ { "signatureToken": "", "transactionId": "123456788555", "paymentAmount": 124, "tipAmount": 0, "paymentType": 7 } ] ``` | Field | Required | Note | |:---|:---:|:---| | `signatureToken` | yes | The `token` from step 2. | | `transactionId` | yes | From the POS/NSP. | | `paymentAmount` | yes | > 0 and not greater than the signature's `paymentBalance`. | | `tipAmount` | no | Tip. | | `paymentType` | no | The **final** type from the POS: 7 or 8. If missing, 7 is assumed. | The response has the same format as `SendInvoices`, with MARK, UID, AuthCode and invoiceUrl. ## Flow 2: paying an earlier document (on credit) The document was issued earlier (e.g. `type: 5`, on credit) and is now paid by card. 1. `POST /api/v1/Provider/AskSignatureForOldInvoice?terminalId=TID00001&posNspId=1`. The **body** is just the MARK: `400001930000001`. The response returns `token`, `data`, `paymentBalance`. 2. Charge on the POS with the token. 3. `POST /api/v1/Provider/CompletionAskSignatureForOldInvoice?signatureToken=…&transactionId=…&paymentAmount=…&tipAmount=0&paymentType=7`. The **body** is again just the MARK. Details: [Other endpoints](https://developers.novusconceptus.com/provider-api/other-endpoints/#asksignatureforoldinvoice). ## Failed payment, cancellation, timeout In Flow 1 (issue and pay together), until `CompletionPosInvoices` the document stays pending and has **not** been transmitted to AADE. If the charge on the POS does not go through, or the completion fails: | What happened on the POS | What you do | |:---|:---| | The card was declined or the transaction was cancelled, and the customer tries the card again | Charge again with **the same token** while it is valid (24 hours, 2 hours for food service). When it succeeds, call `CompletionPosInvoices`. | | The customer finally pays another way (e.g. cash) | Resend **the same document, with the same number**, with the new payment method. Do not call `CompletionPosInvoices` for the unused signature. | | Timeout: you don't know whether the charge went through | First check the transaction status on the POS / NSP. If it was charged, call `CompletionPosInvoices` with the `transactionId`. If not, follow the first two rows. | | The charge succeeded, but `CompletionPosInvoices` returned an AADE error | The customer paid, the document was not issued. How it is settled is an accounting matter: follow what you have agreed with your customer's accountant. To avoid it, see the warning in [Flow 1](https://developers.novusconceptus.com/guides/card-payments/#flow-1-issue-and-pay-together-checkout). | Never call `CompletionPosInvoices` without a successful charge: the completion transmits the document as paid by card or IRIS. In Flow 2 the document has already been issued. If the charge does not go through, you don't call the completion and the document stays unpaid. ## Testing - Novus does **not** provide a POS or a simulator. For the charge, use your NSP's sandbox or test terminal. - The provider sandbox returns a real signature, in the format the NSP of the `posNspId` expects ([HEX or BASE64](https://developers.novusconceptus.com/aade/lines-payments/#pos-nsp)). - Without a terminal you can test the whole flow on the provider side: in the sandbox, `CompletionPosInvoices` also accepts a test `transactionId`. It is ready in [Postman](https://developers.novusconceptus.com/tools/), folder 4 (4.1 and 4.2). - Card / IRIS payments are not certified. You declare them in the [certification request](https://developers.novusconceptus.com/start/go-live/#modules). ## Errors you will see | Message | What it means | |:---|:---| | `If one of the payment methods requires pos then the Terminal Id (tid) field is required.` | `terminalId` is missing with `skipSignature=false`. | | `If one of the payment methods requires pos then the Pos Nsp Id fields is required.` | `posNspId` is missing. | | `The transactionId field is required.` | Completion without `transactionId`. | | `One ore more of the tokens is not verified.` | Wrong or tampered token. | | `One ore more of the signature token balance is not enough.` | `paymentAmount` exceeds the remaining balance of the signature. | | `The paymentType field only accepts values 7 or 8.` | Another type was sent in the completion. | ## Good to know - Each payment line with a signature costs **0.25 credits** extra ([Credits](https://developers.novusconceptus.com/provider-api/credits/)). - The `paymentType` requested in `SendInvoices` is not final. The final type is declared in the completion. - If you print your own document, print the `transactionId` and the signature used for each amount ([printing rules](https://developers.novusconceptus.com/start/go-live/#kanones-ektyposis)). - In a future version, `skipSignature` will be removed and the signature will always be returned for types 7/8. ## Special cases | Case | How to do it | |:---|:---| | **Several invoices, one card charge** | One 8.4 (POS Collection Receipt) for the total amount, with the MARKs of the invoices being paid in `invoiceHeader.multipleConnectedMarks`. One signature, one charge, one completion. | | **Deposit** (e.g. a booking invoiced later) | When you take the deposit, issue an 8.4 with `skipSignature=false`. When the final document is issued, put the MARK of the 8.4 in `multipleConnectedMarks`. | | **Refund to the card** | Issue the proper credit note (e.g. 11.4) with payment 7 or 8 and `skipSignature=false`, as for a sale. With the signature, the terminal performs the refund. | | **Mail order, instalments, pre-authorization** | Same signature as a simple sale. The differences concern only how your application talks to the terminal. | | **Provider code at the NSP** | AADE has two identifiers for Novus Conceptus: `provider_id` **005** and `license_id` **105**. Each bank / NSP asks for one of the two in its own field (e.g. `aadeProviderId`). Test in the NSP's sandbox which one it accepts. | | **Viva: VAT 2400 in `data`** | The VAT field in the signature's `data` is always `2400`, whatever the VAT rates. It does not affect the charge. Pass `token` and `data` exactly as you receive them. | ## POS receipts (8.4 / 8.5) For businesses that collect or refund amounts via POS (e.g. on behalf of third parties, with `thirdPartyCollection`). **Example: 11.1 with card payment (for skipSignature=false)** [ Download](https://developers.novusconceptus.com/examples/pos/11.1-card-payment.json) ```json { "invoice": [ { "issuer": { "vatNumber": "123456789", "country": "GR", "branch": 0 }, "invoiceHeader": { "series": "A", "aa": "1101", "issueDate": "2026-09-24", "invoiceType": "11.1", "currency": "EUR" }, "paymentMethods": [ { "type": 7, "amount": 124, "terminalId": "TID00001", "posNspId": 1 } ], "invoiceDetails": [ { "lineNumber": 1, "lineCode": "655-000023", "quantity": 1, "measurementUnitLabel": "ΤΜΧ", "lineUnitPrice": 120, "totalNetPriceBeforeDiscount": 120, "totalDiscountValue": 20, "netValue": 100, "vatCategory": 1, "vatCategoryPercent": 24, "vatAmount": 24, "lineDescription": "Αντικατάσταση Λέβητα", "incomeClassification": [ { "classificationType": "E3_561_003", "classificationCategory": "category1_1", "amount": 100 } ] } ], "invoiceSummary": { "totalNetValue": 100, "totalVatAmount": 24, "totalWithheldAmount": 0, "totalFeesAmount": 0, "totalStampDutyAmount": 0, "totalOtherTaxesAmount": 0, "totalDeductionsAmount": 0, "totalGrossValue": 124, "incomeClassification": [ { "classificationType": "E3_561_003", "classificationCategory": "category1_1", "amount": 100 } ] }, "providerAdditionalInvoiceDetails": { "issuer": { "name": "TEST ISSUER ΙΚΕ", "profession": "Εμπόριο ειδών θέρμανσης", "taxoffice": "Α' Αθηνών", "addressStreet": "Οδός Δοκιμής", "addressNumber": "1", "addressPostalCode": "10431", "addressCity": "Αθήνα", "addressCountry": "Ελλάδα", "phone": "2100000000", "email": "info@example.com", "webSite": "www.example.com", "registryNumber": "ΓΕΜΗ: 000000000000", "emtyLine2": "IBAN: GR00 0000 0000 0000 0000 0000 000" }, "additionalDetails": { "documentLabel": "Απόδειξη Λιανικής Πώλησης", "documentLanguageCode": "EL", "documentSizeCode": 1, "documentComments": "Εξόφληση εντός 30 ημερών.", "paymentMethodInvoiceLabel": "Κάρτα" } } } ] } ``` **Example: 8.4 — POS Collection Receipt** [ Download](https://developers.novusconceptus.com/examples/pos/8.4-pos-collection-receipt.json) ```json { "invoice": [ { "issuer": { "vatNumber": "123456789", "country": "GR", "branch": 0 }, "invoiceHeader": { "series": "A", "aa": "1012", "issueDate": "2026-09-24", "invoiceType": "8.4", "currency": "EUR", "multipleConnectedMarks": [ 400001930000001 ] }, "paymentMethods": [ { "type": 7, "amount": 10, "terminalId": "TID00001", "posNspId": 1 } ], "invoiceDetails": [ { "lineNumber": 1, "lineCode": "#0001", "quantity": 1, "measurementUnitLabel": "LT", "lineUnitPrice": 20, "totalNetPriceBeforeDiscount": 20, "totalDiscountValue": 10, "netValue": 10, "vatCategory": 8, "vatCategoryPercent": 0, "vatAmount": 0, "lineDescription": "Είδος δοκιμής", "incomeClassification": [ { "classificationCategory": "category1_95", "amount": 10 } ] } ], "invoiceSummary": { "totalNetValue": 10, "totalVatAmount": 0, "totalWithheldAmount": 0, "totalFeesAmount": 0, "totalStampDutyAmount": 0, "totalOtherTaxesAmount": 0, "totalDeductionsAmount": 0, "totalGrossValue": 10, "incomeClassification": [ { "classificationCategory": "category1_95", "amount": 10 } ] }, "providerAdditionalInvoiceDetails": { "issuer": { "name": "TEST ISSUER ΙΚΕ", "profession": "Εμπόριο ειδών θέρμανσης", "taxoffice": "Α' Αθηνών", "addressStreet": "Οδός Δοκιμής", "addressNumber": "1", "addressPostalCode": "10431", "addressCity": "Αθήνα", "addressCountry": "Ελλάδα", "phone": "2100000000", "email": "info@example.com", "webSite": "www.example.com", "registryNumber": "ΓΕΜΗ: 000000000000", "emtyLine2": "IBAN: GR00 0000 0000 0000 0000 0000 000" }, "additionalDetails": { "documentLabel": "Απόδειξη Είσπραξης POS", "documentLanguageCode": "EL", "documentSizeCode": 0, "paymentMethodInvoiceLabel": "POS" } } } ] } ``` **Example: 8.5 — POS Refund Receipt** [ Download](https://developers.novusconceptus.com/examples/pos/8.5-pos-refund-receipt.json) ```json { "invoice": [ { "issuer": { "vatNumber": "123456789", "country": "GR", "branch": 0 }, "invoiceHeader": { "series": "A", "aa": "1013", "issueDate": "2026-09-24", "invoiceType": "8.5", "currency": "EUR" }, "paymentMethods": [ { "type": 7, "amount": 10, "terminalId": "TID00001", "posNspId": 1 } ], "invoiceDetails": [ { "lineNumber": 1, "lineCode": "#0001", "quantity": 1, "measurementUnitLabel": "LT", "lineUnitPrice": 20, "totalNetPriceBeforeDiscount": 20, "totalDiscountValue": 10, "netValue": 10, "vatCategory": 8, "vatCategoryPercent": 0, "vatAmount": 0, "lineDescription": "Είδος δοκιμής", "incomeClassification": [ { "classificationCategory": "category1_95", "amount": 10 } ] } ], "invoiceSummary": { "totalNetValue": 10, "totalVatAmount": 0, "totalWithheldAmount": 0, "totalFeesAmount": 0, "totalStampDutyAmount": 0, "totalOtherTaxesAmount": 0, "totalDeductionsAmount": 0, "totalGrossValue": 10, "incomeClassification": [ { "classificationCategory": "category1_95", "amount": 10 } ] }, "providerAdditionalInvoiceDetails": { "issuer": { "name": "TEST ISSUER ΙΚΕ", "profession": "Εμπόριο ειδών θέρμανσης", "taxoffice": "Α' Αθηνών", "addressStreet": "Οδός Δοκιμής", "addressNumber": "1", "addressPostalCode": "10431", "addressCity": "Αθήνα", "addressCountry": "Ελλάδα", "phone": "2100000000", "email": "info@example.com", "webSite": "www.example.com", "registryNumber": "ΓΕΜΗ: 000000000000", "emtyLine2": "IBAN: GR00 0000 0000 0000 0000 0000 000" }, "additionalDetails": { "documentLabel": "Απόδειξη Επιστροφής POS", "documentLanguageCode": "EL", "documentSizeCode": 0, "paymentMethodInvoiceLabel": "POS" } } } ] } ``` Source: https://developers.novusconceptus.com/guides/card-payments/ --- # Food service: order slip 8.6 Every table order is transmitted to myDATA as a **food service order slip (8.6)**. When the customer pays, you issue the receipt or invoice that **closes** all order slips of the table (A.1138/2020, as amended by A.1170/2023). ```mermaid flowchart LR A["Step 1: Order
8.6 (tableAA)"] --> B["Step 2: Item cancellation
8.6 with recType 7"] B --> C["Step 3: Close the table
11.1 with multipleConnectedMarks"] A -. "or full cancellation" .-> D["8.6 with totalCancelDeliveryOrders"] ``` **Important: The 24-hour rule** Every 8.6 must be closed (with a document or a full cancellation) **within 24 hours**. If one stays open, the certified e-invoicing provider **blocks issuing for the whole branch**, with HTTP 401 `You don't have the authority to send invoices for this branch becouse you have open table more than 24h.`, until it is closed. This is required by law. ## 1. New order One 8.6 per order. The data is the same as for a retail receipt, with these differences: | Field | Value | |:---|:---| | `invoiceHeader.invoiceType` | `"8.6"` | | `invoiceHeader.tableAA` | **GUID of the table.** The same for all orders of the same table until it is closed. You generate it. | | `invoiceDetails[].itemDescr` | The item description (sent to AADE, the Greek tax authority). | | `invoiceDetails[].incomeClassification` | **Only** `category1_95`, without `classificationType`. | | `paymentMethods` | **Not** sent. | Keep the **MARK** of every 8.6: you will need it when you close the table. ## 2. Item cancellation (partial) A new 8.6 on the **same** `tableAA`, with **only** the cancelled items and `"recType": 7` on each line. Amounts are positive. Keep this MARK too. ## 3. Closing the table Issue the document with the actual value: `11.1` or `1.1` for a charge, `11.4` or `5.x` for a credit. It contains: | Field | Value | |:---|:---| | `invoiceHeader.multipleConnectedMarks` | **All** MARKs of the table: orders **and** cancellations. | | `invoiceHeader.specialInvoiceCategory` | `12` (Food service transactions). | | `invoiceDetails` | What remains: ordered minus cancelled. **Same total quantity and net value** as the open order slips. | | `paymentMethods` | As usual. For card payments, see [Card / IRIS payments](https://developers.novusconceptus.com/guides/card-payments/). | The provider checks that quantity and value match the open order slips. If they do not match, the document is rejected before it reaches AADE. **Tip: Order slip issued Offline (no MARK)?** Put its UID in `multipleConnectedUids` instead of a MARK in `multipleConnectedMarks`. The provider does the conversion. ## Full cancellation of an order An 8.6 with: - `totalCancelDeliveryOrders: true`, - `multipleConnectedMarks` with the MARKs being cancelled, - **one** line with zero amounts and `vatCategory: 8`. ## Which tables are open? | Call | Returns | |:---|:---| | GET `/api/v1/Provider/GetOpenTables?VatNumber=…&Branch=0` | The `tableAA` values with open order slips | | GET `/api/v1/Provider/GetOpenOrdersForTable?TableId=…&VatNumber=…&Branch=0` | For each open order slip: `mark`, `uid`, `quantityProducts`, `totalNet` | Useful at end of day, so that no table is forgotten. ## Ready-made examples: one table from start to finish Greek salad + tzatziki + feta → cancel the Greek salad → pay for the tzatziki + feta. **Example: 1 — New order (8.6)** [ Download](https://developers.novusconceptus.com/examples/food/1-new-order-8.6.json) ```json { "invoice": [ { "issuer": { "vatNumber": "123456789", "country": "GR", "branch": 0 }, "invoiceHeader": { "series": "A", "aa": "1018", "issueDate": "2026-09-24", "invoiceType": "8.6", "currency": "EUR", "tableAA": "A98EFBDE-5FBB-4128-BBD8-B6DDA701AB20" }, "invoiceDetails": [ { "lineNumber": 1, "lineCode": "#0131", "itemDescr": "Χωριάτικη", "quantity": 1, "measurementUnit": 1, "measurementUnitLabel": "ΤΜΧ", "lineUnitPrice": 100, "totalNetPriceBeforeDiscount": 100, "totalDiscountValue": 0, "netValue": 100, "vatCategory": 2, "vatCategoryPercent": 13, "vatAmount": 13, "lineDescription": "Χωριάτικη", "incomeClassification": [ { "classificationCategory": "category1_95", "amount": 100 } ] }, { "lineNumber": 2, "lineCode": "#0501", "itemDescr": "ΤΖΑΤΖΙΚΙ", "quantity": 1, "measurementUnit": 1, "measurementUnitLabel": "ΤΜΧ", "lineUnitPrice": 5, "totalNetPriceBeforeDiscount": 5, "totalDiscountValue": 0, "netValue": 5, "vatCategory": 1, "vatCategoryPercent": 24, "vatAmount": 1.2, "lineDescription": "ΤΖΑΤΖΙΚΙ", "incomeClassification": [ { "classificationCategory": "category1_95", "amount": 5 } ] }, { "lineNumber": 3, "lineCode": "#0605", "itemDescr": "ΦΕΤΑ", "quantity": 1, "measurementUnit": 1, "measurementUnitLabel": "ΤΜΧ", "lineUnitPrice": 10, "totalNetPriceBeforeDiscount": 10, "totalDiscountValue": 0, "netValue": 10, "vatCategory": 1, "vatCategoryPercent": 24, "vatAmount": 2.4, "lineDescription": "ΦΕΤΑ", "incomeClassification": [ { "classificationCategory": "category1_95", "amount": 10 } ] } ], "invoiceSummary": { "totalNetValue": 115, "totalVatAmount": 16.6, "totalWithheldAmount": 0, "totalFeesAmount": 0, "totalStampDutyAmount": 0, "totalOtherTaxesAmount": 0, "totalDeductionsAmount": 0, "totalGrossValue": 131.6, "incomeClassification": [ { "classificationCategory": "category1_95", "amount": 115 } ] }, "providerAdditionalInvoiceDetails": { "issuer": { "name": "TEST ISSUER ΙΚΕ", "profession": "Εμπόριο ειδών θέρμανσης", "taxoffice": "Α' Αθηνών", "addressStreet": "Οδός Δοκιμής", "addressNumber": "1", "addressPostalCode": "10431", "addressCity": "Αθήνα", "addressCountry": "Ελλάδα", "phone": "2100000000", "email": "info@example.com", "webSite": "www.example.com", "registryNumber": "ΓΕΜΗ: 000000000000", "emtyLine2": "IBAN: GR00 0000 0000 0000 0000 0000 000" }, "additionalDetails": { "documentLabel": "ΔΕΛΤΙΟ ΠΑΡΑΓΓΕΛΙΑΣ", "documentLanguageCode": "EL", "documentSizeCode": 7, "paymentMethodInvoiceLabel": "Επί πιστώσει" } } } ] } ``` **Example: 2 — Cancel the Greek salad (8.6, recType 7)** [ Download](https://developers.novusconceptus.com/examples/food/2-partial-cancellation-8.6.json) ```json { "invoice": [ { "issuer": { "vatNumber": "123456789", "country": "GR", "branch": 0 }, "invoiceHeader": { "series": "A", "aa": "1019", "issueDate": "2026-09-24", "invoiceType": "8.6", "currency": "EUR", "tableAA": "A98EFBDE-5FBB-4128-BBD8-B6DDA701AB20" }, "invoiceDetails": [ { "lineNumber": 1, "lineCode": "#0131", "itemDescr": "Χωριάτικη", "recType": 7, "quantity": 1, "measurementUnit": 1, "measurementUnitLabel": "ΤΜΧ", "lineUnitPrice": 100, "totalNetPriceBeforeDiscount": 100, "totalDiscountValue": 0, "netValue": 100, "vatCategory": 2, "vatCategoryPercent": 13, "vatAmount": 13, "lineDescription": "Χωριάτικη", "incomeClassification": [ { "classificationCategory": "category1_95", "amount": 100 } ] } ], "invoiceSummary": { "totalNetValue": 100, "totalVatAmount": 13, "totalWithheldAmount": 0, "totalFeesAmount": 0, "totalStampDutyAmount": 0, "totalOtherTaxesAmount": 0, "totalDeductionsAmount": 0, "totalGrossValue": 113, "incomeClassification": [ { "classificationCategory": "category1_95", "amount": 100 } ] }, "providerAdditionalInvoiceDetails": { "issuer": { "name": "TEST ISSUER ΙΚΕ", "profession": "Εμπόριο ειδών θέρμανσης", "taxoffice": "Α' Αθηνών", "addressStreet": "Οδός Δοκιμής", "addressNumber": "1", "addressPostalCode": "10431", "addressCity": "Αθήνα", "addressCountry": "Ελλάδα", "phone": "2100000000", "email": "info@example.com", "webSite": "www.example.com", "registryNumber": "ΓΕΜΗ: 000000000000", "emtyLine2": "IBAN: GR00 0000 0000 0000 0000 0000 000" }, "additionalDetails": { "documentLabel": "ΔΕΛΤΙΟ ΠΑΡΑΓΓΕΛΙΑΣ - ΜΕΡΙΚΗ ΑΚΥΡΩΣΗ", "documentLanguageCode": "EL", "documentSizeCode": 7, "paymentMethodInvoiceLabel": "Επί πιστώσει" } } } ] } ``` **Example: 3 — Close the table (11.1)** In `multipleConnectedMarks`, put the MARKs you received in steps 1 and 2. [ Download](https://developers.novusconceptus.com/examples/food/3-close-table-11.1.json) ```json { "invoice": [ { "issuer": { "vatNumber": "123456789", "country": "GR", "branch": 0 }, "invoiceHeader": { "series": "A", "aa": "1020", "issueDate": "2026-09-24", "invoiceType": "11.1", "currency": "EUR", "multipleConnectedMarks": [ 400001930000011, 400001930000012 ], "specialInvoiceCategory": 12 }, "paymentMethods": [ { "type": 3, "amount": 18.6 } ], "invoiceDetails": [ { "lineNumber": 1, "lineCode": "#0501", "quantity": 1, "measurementUnit": 1, "measurementUnitLabel": "ΤΜΧ", "lineUnitPrice": 5, "totalNetPriceBeforeDiscount": 5, "totalDiscountValue": 0, "netValue": 5, "vatCategory": 1, "vatCategoryPercent": 24, "vatAmount": 1.2, "lineDescription": "ΤΖΑΤΖΙΚΙ", "incomeClassification": [ { "classificationType": "E3_561_003", "classificationCategory": "category1_3", "amount": 5 } ] }, { "lineNumber": 2, "lineCode": "#0605", "quantity": 1, "measurementUnit": 1, "measurementUnitLabel": "ΤΜΧ", "lineUnitPrice": 10, "totalNetPriceBeforeDiscount": 10, "totalDiscountValue": 0, "netValue": 10, "vatCategory": 1, "vatCategoryPercent": 24, "vatAmount": 2.4, "lineDescription": "ΦΕΤΑ", "incomeClassification": [ { "classificationType": "E3_561_003", "classificationCategory": "category1_3", "amount": 10 } ] } ], "invoiceSummary": { "totalNetValue": 15, "totalVatAmount": 3.6, "totalWithheldAmount": 0, "totalFeesAmount": 0, "totalStampDutyAmount": 0, "totalOtherTaxesAmount": 0, "totalDeductionsAmount": 0, "totalGrossValue": 18.6, "incomeClassification": [ { "classificationType": "E3_561_003", "classificationCategory": "category1_3", "amount": 15 } ] }, "providerAdditionalInvoiceDetails": { "issuer": { "name": "TEST ISSUER ΙΚΕ", "profession": "Εμπόριο ειδών θέρμανσης", "taxoffice": "Α' Αθηνών", "addressStreet": "Οδός Δοκιμής", "addressNumber": "1", "addressPostalCode": "10431", "addressCity": "Αθήνα", "addressCountry": "Ελλάδα", "phone": "2100000000", "email": "info@example.com", "webSite": "www.example.com", "registryNumber": "ΓΕΜΗ: 000000000000", "emtyLine2": "IBAN: GR00 0000 0000 0000 0000 0000 000" }, "additionalDetails": { "documentLabel": "Απόδειξη Λιανικής Πώλησης", "documentLanguageCode": "EL", "documentSizeCode": 7, "paymentMethodInvoiceLabel": "Μετρητά" } } } ] } ``` **Example: Full cancellation of another order (8.6)** [ Download](https://developers.novusconceptus.com/examples/food/4-cancel-whole-order-8.6.json) ```json { "invoice": [ { "issuer": { "vatNumber": "123456789", "country": "GR", "branch": 0 }, "invoiceHeader": { "series": "A", "aa": "1021", "issueDate": "2026-09-24", "invoiceType": "8.6", "currency": "EUR", "multipleConnectedMarks": [ 400001930000013 ], "tableAA": "3C1B2A77-0D4E-4F5B-9C61-2B8E7A9D0F12", "totalCancelDeliveryOrders": true }, "invoiceDetails": [ { "lineNumber": 1, "lineCode": "#0", "itemDescr": "ΚΑΘΟΛΙΚΗ ΑΚΥΡΩΣΗ", "quantity": 1, "measurementUnit": 1, "measurementUnitLabel": "ΤΜΧ", "lineUnitPrice": 0, "totalNetPriceBeforeDiscount": 0, "totalDiscountValue": 0, "netValue": 0, "vatCategory": 8, "vatCategoryPercent": 0, "vatAmount": 0, "lineDescription": "ΚΑΘΟΛΙΚΗ ΑΚΥΡΩΣΗ" } ], "invoiceSummary": { "totalNetValue": 0, "totalVatAmount": 0, "totalWithheldAmount": 0, "totalFeesAmount": 0, "totalStampDutyAmount": 0, "totalOtherTaxesAmount": 0, "totalDeductionsAmount": 0, "totalGrossValue": 0 }, "providerAdditionalInvoiceDetails": { "issuer": { "name": "TEST ISSUER ΙΚΕ", "profession": "Εμπόριο ειδών θέρμανσης", "taxoffice": "Α' Αθηνών", "addressStreet": "Οδός Δοκιμής", "addressNumber": "1", "addressPostalCode": "10431", "addressCity": "Αθήνα", "addressCountry": "Ελλάδα", "phone": "2100000000", "email": "info@example.com", "webSite": "www.example.com", "registryNumber": "ΓΕΜΗ: 000000000000", "emtyLine2": "IBAN: GR00 0000 0000 0000 0000 0000 000" }, "additionalDetails": { "documentLabel": "ΔΕΛΤΙΟ ΠΑΡΑΓΓΕΛΙΑΣ - ΚΑΘΟΛΙΚΗ ΑΚΥΡΩΣΗ", "documentLanguageCode": "EL", "documentSizeCode": 7, "paymentMethodInvoiceLabel": "Επί πιστώσει" } } } ] } ``` Source: https://developers.novusconceptus.com/guides/food-service/ --- # Goods movement: delivery notes ## Three ways | Case | What to send | Ready-made JSON | |:---|:---|:---| | Invoice that is **also** a delivery note | `1.1` (or `11.1`) with `isDeliveryNote: true` + `otherDeliveryNoteHeader` | [1.1-sales-invoice-delivery-note.json](https://developers.novusconceptus.com/examples/delivery/1.1-sales-invoice-delivery-note.json) | | Standalone delivery note | `9.3` with no payment method, with zero or actual values | [9.3-delivery-note.json](https://developers.novusconceptus.com/examples/delivery/9.3-delivery-note.json) | | Invoice that closes delivery notes sent earlier | `1.1` with `multipleConnectedMarks` = the MARKs of the delivery notes | [1.1-invoice-closing-delivery-notes.json](https://developers.novusconceptus.com/examples/delivery/1.1-invoice-closing-delivery-notes.json) | ## Goods movement fields | Field | What it is | |:---|:---| | `invoiceHeader.isDeliveryNote` | `true` when the invoice is also a delivery note. | | `invoiceHeader.movePurpose` | [Purpose of movement](https://developers.novusconceptus.com/aade/movement/#move-purpose). Values 6, 15, 16, 17 and 18 are no longer accepted. | | `invoiceHeader.otherDeliveryNoteHeader.loadingAddress` / `deliveryAddress` | Loading and delivery address (required). | | `…startShippingBranch` / `completeShippingBranch` | Start/end branch, if different. | | `invoiceHeader.dispatchDate`, `dispatchTime`, `vehicleNumber` | The **planned** shipment. | | `invoiceDetails[].itemCode`, `itemDescr`, `TaricNo` | Item code and description for AADE (the Greek tax authority). | | `invoiceDetails[].incomeClassification` | For a standalone 9.3: `category3` (Goods movement). | | `additionalDetails.dispatchPlaceFrom` / `dispatchPlaceTo` | Texts for the PDF. | ## What changed with myDATA 2.0 (digital delivery note) - `dispatchDate`, `dispatchTime` and `vehicleNumber` now declare the **plan**. The actual transport events (start, transshipment, delivery) are declared by the carrier and the recipient directly to AADE, with the digital delivery note calls. These calls are **not** made through the certified e-invoicing provider. - `otherTransportDetails` has been removed. If you send it, AADE returns an error. - New types: **9.1** (Delivery note, correlated), **9.2** (Summary delivery note), **10.1 / 10.2** (Quantitative receiving note). - New fields: | Field | Where | When | |:---|:---|:---| | `toWeigh` | header | Goods "to be weighed". Only in 9.1, 9.2, 9.3. | | `nonObligatedRecipient` | header | The recipient does not take part in the digital process. | | `withoutDigitalTransportTracking` | header | The delivery note is not part of digital tracking and is completed when issued. | | `receivingNotePurpose` (+ `otherReceivingNotePurposeTitle` for 7) | header | **Required** in 10.1 / 10.2. [Values](https://developers.novusconceptus.com/aade/movement/#receiving-note-purpose) | | `movePurposeLine` (+ `otherMovePurposeLineTitle` for 19) | line | A different purpose for a single line. | | `packingsDeclarations[].Packages[]` | document | Packaging: `packagingType` (1–6), `quantity`. | ```json title="Excerpt: Quantitative receiving note 10.2" "invoiceHeader": { "series": "DPP", "aa": "15", "issueDate": "2026-09-24", "invoiceType": "10.2", "receivingNotePurpose": 6 }, "packingsDeclarations": [ { "Packages": [ { "packagingType": 1, "quantity": 3 } ] } ] ``` ## Cancelling a delivery note A delivery note is not "deleted". It is cancelled with a separate call, and the cancellation gets its own MARK (`cancellationMark`): | Call | For | |:---|:---| | POST `/api/v1/Provider/CancelDeliveryNote` `{ "mark": "…", "entityVatNumber": "…" }` | Delivery notes (9.x) | | POST `/api/v1/Provider/CancelReceivingNote` `{ "mark": "…", "entityVatNumber": "…" }` | Quantitative receiving notes (10.x) | ## Ready-made examples **Example: 1.1 — Sales Invoice - Delivery Note** [ Download](https://developers.novusconceptus.com/examples/delivery/1.1-sales-invoice-delivery-note.json) ```json { "invoice": [ { "issuer": { "vatNumber": "123456789", "country": "GR", "branch": 0 }, "counterpart": { "vatNumber": "987654324", "country": "GR", "branch": 0, "address": { "street": "Οδός Πελάτη", "number": "10", "postalCode": "15772", "city": "Ζωγράφου" } }, "invoiceHeader": { "series": "A", "aa": "1014", "issueDate": "2026-09-24", "invoiceType": "1.1", "currency": "EUR", "dispatchDate": "2026-09-24", "dispatchTime": "10:00:00", "vehicleNumber": "ABC-1234", "movePurpose": 1, "movePurposeLabel": "Πώληση", "isDeliveryNote": true, "otherDeliveryNoteHeader": { "loadingAddress": { "street": "Οδός Αποθήκης", "number": "5", "postalCode": "19300", "city": "Ασπρόπυργος" }, "deliveryAddress": { "street": "Οδός Πελάτη", "number": "10", "postalCode": "15772", "city": "Ζωγράφου" }, "startShippingBranch": 0, "completeShippingBranch": 0 } }, "paymentMethods": [ { "type": 5, "amount": 124 } ], "invoiceDetails": [ { "lineNumber": 1, "lineCode": "655-000023", "itemDescr": "Αντικατάσταση Λέβητα", "quantity": 1, "measurementUnit": 1, "measurementUnitLabel": "ΤΜΧ", "lineUnitPrice": 100, "totalNetPriceBeforeDiscount": 100, "totalDiscountValue": 0, "netValue": 100, "vatCategory": 1, "vatCategoryPercent": 24, "vatAmount": 24, "lineDescription": "Αντικατάσταση Λέβητα", "incomeClassification": [ { "classificationType": "E3_561_001", "classificationCategory": "category1_1", "amount": 100 } ] } ], "invoiceSummary": { "totalNetValue": 100, "totalVatAmount": 24, "totalWithheldAmount": 0, "totalFeesAmount": 0, "totalStampDutyAmount": 0, "totalOtherTaxesAmount": 0, "totalDeductionsAmount": 0, "totalGrossValue": 124, "incomeClassification": [ { "classificationType": "E3_561_001", "classificationCategory": "category1_1", "amount": 100 } ] }, "providerAdditionalInvoiceDetails": { "issuer": { "name": "TEST ISSUER ΙΚΕ", "profession": "Εμπόριο ειδών θέρμανσης", "taxoffice": "Α' Αθηνών", "addressStreet": "Οδός Δοκιμής", "addressNumber": "1", "addressPostalCode": "10431", "addressCity": "Αθήνα", "addressCountry": "Ελλάδα", "phone": "2100000000", "email": "info@example.com", "webSite": "www.example.com", "registryNumber": "ΓΕΜΗ: 000000000000", "emtyLine2": "IBAN: GR00 0000 0000 0000 0000 0000 000" }, "counterpart": { "code": "C-0001", "name": "TEST CLIENT ΑΕ", "profession": "Χονδρικό εμπόριο", "taxoffice": "Ζωγράφου", "addressStreet": "Οδός Πελάτη", "addressNumber": "10", "addressPostalCode": "15772", "addressCity": "Ζωγράφου", "addressCountry": "Ελλάδα", "phone": "2100000001", "email": "client@example.com" }, "additionalDetails": { "documentLabel": "Τιμολόγιο Πώλησης - Δελτίο Αποστολής_Διακίνηση Αγαθών", "documentLanguageCode": "EL", "documentSizeCode": 0, "documentComments": "Εξόφληση εντός 30 ημερών.", "paymentMethodInvoiceLabel": "Επί πιστώσει", "dispatchPlaceFrom": "Οδός Αποθήκης 5, 19300 Ασπρόπυργος", "dispatchPlaceTo": "Οδός Πελάτη 10, 15772 Ζωγράφου" } } } ] } ``` **Example: 11.1 — Retail Receipt - Delivery Note** [ Download](https://developers.novusconceptus.com/examples/delivery/11.1-retail-receipt-delivery-note.json) ```json { "invoice": [ { "issuer": { "vatNumber": "123456789", "country": "GR", "branch": 0 }, "counterpart": { "vatNumber": "987654324", "country": "GR", "branch": 0, "address": { "street": "Οδός Πελάτη", "number": "10", "postalCode": "15772", "city": "Ζωγράφου" } }, "invoiceHeader": { "series": "A", "aa": "1015", "issueDate": "2026-09-24", "invoiceType": "11.1", "currency": "EUR", "dispatchDate": "2026-09-24", "dispatchTime": "10:00:00", "vehicleNumber": "ABC-1234", "movePurpose": 1, "movePurposeLabel": "Πώληση", "isDeliveryNote": true, "otherDeliveryNoteHeader": { "loadingAddress": { "street": "Οδός Αποθήκης", "number": "5", "postalCode": "19300", "city": "Ασπρόπυργος" }, "deliveryAddress": { "street": "Οδός Πελάτη", "number": "10", "postalCode": "15772", "city": "Ζωγράφου" }, "startShippingBranch": 0, "completeShippingBranch": 0 } }, "paymentMethods": [ { "type": 5, "amount": 124 } ], "invoiceDetails": [ { "lineNumber": 1, "lineCode": "655-000023", "itemDescr": "Αντικατάσταση Λέβητα", "quantity": 1, "measurementUnit": 1, "measurementUnitLabel": "ΤΜΧ", "lineUnitPrice": 120, "totalNetPriceBeforeDiscount": 120, "totalDiscountValue": 20, "netValue": 100, "vatCategory": 1, "vatCategoryPercent": 24, "vatAmount": 24, "lineDescription": "Αντικατάσταση Λέβητα", "incomeClassification": [ { "classificationType": "E3_561_003", "classificationCategory": "category1_1", "amount": 100 } ] } ], "invoiceSummary": { "totalNetValue": 100, "totalVatAmount": 24, "totalWithheldAmount": 0, "totalFeesAmount": 0, "totalStampDutyAmount": 0, "totalOtherTaxesAmount": 0, "totalDeductionsAmount": 0, "totalGrossValue": 124, "incomeClassification": [ { "classificationType": "E3_561_003", "classificationCategory": "category1_1", "amount": 100 } ] }, "providerAdditionalInvoiceDetails": { "issuer": { "name": "TEST ISSUER ΙΚΕ", "profession": "Εμπόριο ειδών θέρμανσης", "taxoffice": "Α' Αθηνών", "addressStreet": "Οδός Δοκιμής", "addressNumber": "1", "addressPostalCode": "10431", "addressCity": "Αθήνα", "addressCountry": "Ελλάδα", "phone": "2100000000", "email": "info@example.com", "webSite": "www.example.com", "registryNumber": "ΓΕΜΗ: 000000000000", "emtyLine2": "IBAN: GR00 0000 0000 0000 0000 0000 000" }, "counterpart": { "code": "C-0001", "name": "TEST CLIENT ΑΕ", "profession": "Χονδρικό εμπόριο", "taxoffice": "Ζωγράφου", "addressStreet": "Οδός Πελάτη", "addressNumber": "10", "addressPostalCode": "15772", "addressCity": "Ζωγράφου", "addressCountry": "Ελλάδα", "phone": "2100000001", "email": "client@example.com" }, "additionalDetails": { "documentLabel": "Απόδειξη λιανικής - Δελτίο Αποστολής", "documentLanguageCode": "EL", "documentSizeCode": 0, "documentComments": "Εξόφληση εντός 30 ημερών.", "paymentMethodInvoiceLabel": "Επί πιστώσει" } } } ] } ``` **Example: 9.3 — Delivery Note** [ Download](https://developers.novusconceptus.com/examples/delivery/9.3-delivery-note.json) ```json { "invoice": [ { "issuer": { "vatNumber": "123456789", "country": "GR", "branch": 0 }, "counterpart": { "vatNumber": "987654324", "country": "GR", "branch": 0, "address": { "street": "Οδός Πελάτη", "number": "10", "postalCode": "15772", "city": "Ζωγράφου" } }, "invoiceHeader": { "series": "A", "aa": "1016", "issueDate": "2026-09-24", "invoiceType": "9.3", "dispatchDate": "2026-09-24", "dispatchTime": "18:33:00", "vehicleNumber": "ABC-1234", "otherDeliveryNoteHeader": { "loadingAddress": { "street": "Οδός Αποθήκης", "number": "5", "postalCode": "19300", "city": "Ασπρόπυργος" }, "deliveryAddress": { "street": "Οδός Πελάτη", "number": "10", "postalCode": "15772", "city": "Ζωγράφου" }, "startShippingBranch": 0, "completeShippingBranch": 0 }, "movePurpose": 1, "movePurposeLabel": "Πώληση" }, "invoiceDetails": [ { "lineNumber": 1, "itemDescr": "Είδος δοκιμής", "lineCode": "#0001", "quantity": 1, "measurementUnit": 1, "measurementUnitLabel": "LT", "lineUnitPrice": 0, "totalNetPriceBeforeDiscount": 0, "totalDiscountValue": 0, "netValue": 0, "vatCategory": 8, "vatCategoryPercent": 0, "vatAmount": 0, "lineDescription": "Είδος δοκιμής", "incomeClassification": [ { "classificationCategory": "category3", "amount": 0 } ] } ], "invoiceSummary": { "totalNetValue": 0, "totalVatAmount": 0, "totalWithheldAmount": 0, "totalFeesAmount": 0, "totalStampDutyAmount": 0, "totalOtherTaxesAmount": 0, "totalDeductionsAmount": 0, "totalGrossValue": 0, "incomeClassification": [ { "classificationCategory": "category3", "amount": 0 } ] }, "providerAdditionalInvoiceDetails": { "issuer": { "name": "TEST ISSUER ΙΚΕ", "profession": "Εμπόριο ειδών θέρμανσης", "taxoffice": "Α' Αθηνών", "addressStreet": "Οδός Δοκιμής", "addressNumber": "1", "addressPostalCode": "10431", "addressCity": "Αθήνα", "addressCountry": "Ελλάδα", "phone": "2100000000", "email": "info@example.com", "webSite": "www.example.com", "registryNumber": "ΓΕΜΗ: 000000000000", "emtyLine2": "IBAN: GR00 0000 0000 0000 0000 0000 000" }, "counterpart": { "code": "C-0001", "name": "TEST CLIENT ΑΕ", "profession": "Χονδρικό εμπόριο", "taxoffice": "Ζωγράφου", "addressStreet": "Οδός Πελάτη", "addressNumber": "10", "addressPostalCode": "15772", "addressCity": "Ζωγράφου", "addressCountry": "Ελλάδα", "phone": "2100000001", "email": "client@example.com" }, "additionalDetails": { "documentLabel": "Δελτίο Αποστολής_Διακίνηση Αγαθών", "documentLanguageCode": "EL", "documentSizeCode": 0, "documentComments": "Εξόφληση εντός 30 ημερών.", "paymentMethodInvoiceLabel": "Επί πιστώσει", "dispatchPlaceFrom": "Οδός Αποθήκης 5, 19300 Ασπρόπυργος", "dispatchPlaceTo": "Οδός Πελάτη 10, 15772 Ζωγράφου" } } } ] } ``` **Example: 1.1 — Invoice that closes delivery notes** [ Download](https://developers.novusconceptus.com/examples/delivery/1.1-invoice-closing-delivery-notes.json) ```json { "invoice": [ { "issuer": { "vatNumber": "123456789", "country": "GR", "branch": 0 }, "counterpart": { "vatNumber": "987654324", "country": "GR", "branch": 0, "address": { "street": "Οδός Πελάτη", "number": "10", "postalCode": "15772", "city": "Ζωγράφου" } }, "invoiceHeader": { "series": "A", "aa": "1017", "issueDate": "2026-09-24", "invoiceType": "1.1", "currency": "EUR", "multipleConnectedMarks": [ 400001930000001, 400001930000002 ] }, "paymentMethods": [ { "type": 5, "amount": 124 } ], "invoiceDetails": [ { "lineNumber": 1, "lineCode": "655-000023", "quantity": 1, "measurementUnit": 1, "measurementUnitLabel": "ΤΜΧ", "lineUnitPrice": 120, "totalNetPriceBeforeDiscount": 120, "totalDiscountValue": 20, "netValue": 100, "vatCategory": 1, "vatCategoryPercent": 24, "vatAmount": 24, "lineDescription": "Αντικατάσταση Λέβητα", "incomeClassification": [ { "classificationType": "E3_561_001", "classificationCategory": "category1_1", "amount": 100 } ] } ], "invoiceSummary": { "totalNetValue": 100, "totalVatAmount": 24, "totalWithheldAmount": 0, "totalFeesAmount": 0, "totalStampDutyAmount": 0, "totalOtherTaxesAmount": 0, "totalDeductionsAmount": 0, "totalGrossValue": 124, "incomeClassification": [ { "classificationType": "E3_561_001", "classificationCategory": "category1_1", "amount": 100 } ] }, "providerAdditionalInvoiceDetails": { "issuer": { "name": "TEST ISSUER ΙΚΕ", "profession": "Εμπόριο ειδών θέρμανσης", "taxoffice": "Α' Αθηνών", "addressStreet": "Οδός Δοκιμής", "addressNumber": "1", "addressPostalCode": "10431", "addressCity": "Αθήνα", "addressCountry": "Ελλάδα", "phone": "2100000000", "email": "info@example.com", "webSite": "www.example.com", "registryNumber": "ΓΕΜΗ: 000000000000", "emtyLine2": "IBAN: GR00 0000 0000 0000 0000 0000 000" }, "counterpart": { "code": "C-0001", "name": "TEST CLIENT ΑΕ", "profession": "Χονδρικό εμπόριο", "taxoffice": "Ζωγράφου", "addressStreet": "Οδός Πελάτη", "addressNumber": "10", "addressPostalCode": "15772", "addressCity": "Ζωγράφου", "addressCountry": "Ελλάδα", "phone": "2100000001", "email": "client@example.com" }, "additionalDetails": { "documentLabel": "Τιμολόγιο Πώλησης - Δελτίο Αποστολής", "documentLanguageCode": "EL", "documentSizeCode": 0, "documentComments": "Εξόφληση εντός 30 ημερών.", "paymentMethodInvoiceLabel": "Επί πιστώσει" } } } ] } ``` Source: https://developers.novusconceptus.com/guides/delivery/ --- # Public sector (B2G) E-invoicing to public sector bodies in Greece, following the EN 16931 standard. You send **the same JSON** as for a normal invoice, to the [`SendInvoicesB2G`](https://developers.novusconceptus.com/provider-api/send-invoices-b2g/) endpoint, with three additions: 1. the `providerB2gAdditionalInvoiceDetails` block (contract, budget, public body), 2. on every line: `QuantityUnitsUblCode`, `itemClassificationIdentifiers` (CPV) and `itemCodification`, 3. taxes and deductions **only** through `taxesTotals` ([Taxes](https://developers.novusconceptus.com/guides/taxes/)). **Warning: Before the first invoice to a public body** Your customer contacts the public body and confirms the routing details: Contracting Authority Code, budget type, contract ID (ΑΔΑΜ), and the ΑΔΑ (Diavgeia decision number) of the budget commitment. Wrong details mean that the invoice does not reach the right payment system. ## Rules | Rule | | |:---|:---| | Types | 1.1, 1.6, 2.1, 2.4, 3.1, 3.2, 5.2, 6.1, 6.2, 7.1 | | Payment method | Always `type: 5` (on credit) | | Taxes / deductions | Only in `taxesTotals` | | Credits | 1 per invoice, from a separate B2G balance | ## providerB2gAdditionalInvoiceDetails | Field | EN 16931 | What you enter | |:---|:---:|:---| | `contractReference` | BT-12 | Contract ID (ΑΔΑΜ) in the public procurement register (ΚΗΜΔΗΣ). `"0"` if there is none. **Empty** on a credit note. | | `purchaseOrderReference` | BT-13 | Purchase order number of the public body, if there is one. | | `buyerReference` | BT-10 | Department of the public body that receives the invoice. | | `buyerLegalRegistrationIdentifier` | BT-47 | Legal registration identifier of the buyer. | | `buyerIdentifiers[].buyerIdentifier` | BT-46 | **Routing:** the Contracting Authority Code from the Register of Contracting Authorities (e.g. `1007.909.0001`). | | `budget.type` | BT-11 | `1` Regular Budget · `2` Public Investment Programme (ΠΔΕ) · `3` other. | | `budget.identifier` | BT-11 | For 1 and 3: the ΑΔΑ (Diavgeia decision number) of the budget commitment. For 2: the project registration number (Ενάριθμος). **On a credit note, for 1 and 3, empty.** | | `credits[].accountIdentifier` | BT-84 | IBAN of the issuer. | | `credits[].accountName` | BT-85 | Account holder. | | `credits[].serviceProviderIdentifier` | BT-86 | BIC of the bank. | | `dueDate` | BT-9 | Payment due date (`yyyy-MM-dd`). | | `partyName` | BT-70 | Who the goods or services are delivered to. | | `deliveryDetails` (`street`, `city`, `postalCode`) | BT-75/77/78 | Delivery address. | ## Per line | Field | EN 16931 | What you enter | |:---|:---:|:---| | `QuantityUnitsUblCode` | BT-130 | Unit per UN/ECE Rec. 20, e.g. `EA` (each), `KGM`, `LTR`, `HUR`. | | `itemClassificationIdentifiers[]` | BT-158 | CPV code: `classificationIdentifier` (e.g. `15555100-4`), `classificationIdentifierScheme` = `STI`, `classificationIdentifierSchemeVersion` (e.g. `2008`). | | `itemCodification` | BT-153 | Short item name. | ## Testing in the sandbox For B2G you need a **separate sandbox API key**. Ask Novus for it. In your tests you must send these values: | Field | Value | |:---|:---| | `issuer.vatNumber` | `177472438` | | `counterpart.vatNumber` | `997875116` | | `buyerIdentifiers[].buyerIdentifier` | `1007.909.0001` | | `invoiceHeader.series` | The VAT number you use in your tests (`123456789` in the examples) | ## Ready-made examples **Example: 1.1 — Sales invoice** [ Download](https://developers.novusconceptus.com/examples/b2g/1.1-sales-invoice.json) ```json { "invoice": [ { "issuer": { "vatNumber": "177472438", "country": "GR", "branch": 0 }, "counterpart": { "vatNumber": "997875116", "country": "GR", "branch": 0, "address": { "street": "Οδός Πελάτη", "number": "10", "postalCode": "15772", "city": "Ζωγράφου" } }, "invoiceHeader": { "series": "123456789", "aa": "1022", "issueDate": "2026-09-24", "invoiceType": "1.1", "currency": "EUR", "dispatchDate": "2026-09-24", "dispatchTime": "10:00:00", "vehicleNumber": "ABC-1234", "movePurpose": 1, "movePurposeLabel": "Πώληση" }, "paymentMethods": [ { "type": 5, "amount": 124.25 } ], "invoiceDetails": [ { "lineNumber": 1, "lineCode": "655-000023", "QuantityUnitsUblCode": "EA", "quantity": 1, "measurementUnitLabel": "ΤΜΧ", "lineUnitPrice": 120, "totalNetPriceBeforeDiscount": 120, "totalDiscountValue": 20, "netValue": 100, "vatCategory": 1, "vatCategoryPercent": 24, "vatAmount": 24, "lineDescription": "Αντικατάσταση Λέβητα", "incomeClassification": [ { "classificationType": "E3_561_001", "classificationCategory": "category1_1", "amount": 100 } ], "itemClassificationIdentifiers": [ { "classificationIdentifier": "15555100-4", "classificationIdentifierScheme": "STI", "classificationIdentifierSchemeVersion": "2008" } ], "itemCodification": "ΓΙΑ.ΠΡ.ΠΑΡ.ΠΗΛ.950ΓΡ." } ], "taxesTotals": [ { "taxType": 3, "taxCategory": 4, "underlyingValue": 1, "taxAmount": 0.25, "reducesPayable": false, "taxTypeLabel": "ksenodoxeio 4.00" } ], "invoiceSummary": { "totalNetValue": 100, "totalVatAmount": 24, "totalWithheldAmount": 0, "totalFeesAmount": 0, "totalStampDutyAmount": 0, "totalOtherTaxesAmount": 0.25, "totalDeductionsAmount": 0, "totalGrossValue": 124.25, "incomeClassification": [ { "classificationType": "E3_561_001", "classificationCategory": "category1_1", "amount": 100 } ] }, "providerAdditionalInvoiceDetails": { "issuer": { "name": "TEST ISSUER ΙΚΕ", "profession": "Εμπόριο ειδών θέρμανσης", "taxoffice": "Α' Αθηνών", "addressStreet": "Οδός Δοκιμής", "addressNumber": "1", "addressPostalCode": "10431", "addressCity": "Αθήνα", "addressCountry": "Ελλάδα", "phone": "2100000000", "email": "info@example.com", "webSite": "www.example.com", "registryNumber": "ΓΕΜΗ: 000000000000", "emtyLine2": "IBAN: GR00 0000 0000 0000 0000 0000 000" }, "counterpart": { "code": "C-0001", "name": "TEST CLIENT ΑΕ", "profession": "Χονδρικό εμπόριο", "taxoffice": "Ζωγράφου", "addressStreet": "Οδός Πελάτη", "addressNumber": "10", "addressPostalCode": "15772", "addressCity": "Ζωγράφου", "addressCountry": "Ελλάδα", "phone": "2100000001", "email": "client@example.com" }, "additionalDetails": { "documentLabel": "Τιμολόγιο Πώλησης", "documentLanguageCode": "EL", "documentSizeCode": 0, "documentComments": "Εξόφληση εντός 30 ημερών.", "paymentMethodInvoiceLabel": "Επί πιστώσει" } }, "providerB2gAdditionalInvoiceDetails": { "contractReference": "26SYMV000000001", "buyerReference": "ΔΟΚΙΜΑΣΤΙΚΟΣ ΦΟΡΕΑΣ", "buyerLegalRegistrationIdentifier": "123412312", "credits": [ { "accountIdentifier": "GR00 0000 0000 0000 0000 0000 000", "accountName": "TEST ISSUER ΙΚΕ", "serviceProviderIdentifier": "BANKGRAA" } ], "partyName": "ΔΟΚΙΜΑΣΤΙΚΟΣ ΦΟΡΕΑΣ", "dueDate": "2026-10-24", "budget": { "type": 1, "identifier": "123412312" }, "buyerIdentifiers": [ { "buyerIdentifier": "1007.909.0001" } ], "deliveryDetails": { "street": "Οδός Φορέα 1", "city": "Αθήνα", "postalCode": "10431" } } } ] } ``` **Example: 1.1 — with VAT exemption** [ Download](https://developers.novusconceptus.com/examples/b2g/1.1-sales-invoice-vat-exemption.json) ```json { "invoice": [ { "issuer": { "vatNumber": "177472438", "country": "GR", "branch": 0 }, "counterpart": { "vatNumber": "997875116", "country": "GR", "branch": 0, "address": { "street": "Οδός Πελάτη", "number": "10", "postalCode": "15772", "city": "Ζωγράφου" } }, "invoiceHeader": { "series": "123456789", "aa": "1023", "issueDate": "2026-09-24", "invoiceType": "1.1", "currency": "EUR", "dispatchDate": "2026-09-24", "dispatchTime": "10:00:00", "vehicleNumber": "ABC-1234", "movePurpose": 1, "movePurposeLabel": "Πώληση" }, "paymentMethods": [ { "type": 5, "amount": 112 } ], "invoiceDetails": [ { "lineNumber": 1, "lineCode": "655-000023", "QuantityUnitsUblCode": "EA", "quantity": 1, "measurementUnitLabel": "ΤΜΧ", "lineUnitPrice": 50, "totalNetPriceBeforeDiscount": 50, "totalDiscountValue": 0, "netValue": 50, "vatCategory": 7, "vatCategoryPercent": 0, "vatAmount": 0, "vatExemptionCategory": 6, "vatExemptionCategoryLabel": "Χωρίς ΦΠΑ - άρθρο 24 του Κώδικα ΦΠΑ", "lineDescription": "Αντικατάσταση Λέβητα", "incomeClassification": [ { "classificationType": "E3_561_001", "classificationCategory": "category1_1", "amount": 50 } ], "itemClassificationIdentifiers": [ { "classificationIdentifier": "15555100-4", "classificationIdentifierScheme": "STI", "classificationIdentifierSchemeVersion": "2008" } ], "itemCodification": "ΓΙΑ.ΠΡ.ΠΑΡ.ΠΗΛ.950ΓΡ." }, { "lineNumber": 2, "lineCode": "655-000023", "QuantityUnitsUblCode": "EA", "quantity": 1, "measurementUnitLabel": "ΤΜΧ", "lineUnitPrice": 50, "totalNetPriceBeforeDiscount": 50, "totalDiscountValue": 0, "netValue": 50, "vatCategory": 1, "vatCategoryPercent": 24, "vatAmount": 12, "lineDescription": "Αντικατάσταση Λέβητα", "incomeClassification": [ { "classificationType": "E3_561_001", "classificationCategory": "category1_1", "amount": 50 } ], "itemClassificationIdentifiers": [ { "classificationIdentifier": "15555100-4", "classificationIdentifierScheme": "STI", "classificationIdentifierSchemeVersion": "2008" } ], "itemCodification": "ΓΙΑ.ΠΡ.ΠΑΡ.ΠΗΛ.950ΓΡ." } ], "invoiceSummary": { "totalNetValue": 100, "totalVatAmount": 12, "totalWithheldAmount": 0, "totalFeesAmount": 0, "totalStampDutyAmount": 0, "totalOtherTaxesAmount": 0, "totalDeductionsAmount": 0, "totalGrossValue": 112, "incomeClassification": [ { "classificationType": "E3_561_001", "classificationCategory": "category1_1", "amount": 100 } ] }, "providerAdditionalInvoiceDetails": { "issuer": { "name": "TEST ISSUER ΙΚΕ", "profession": "Εμπόριο ειδών θέρμανσης", "taxoffice": "Α' Αθηνών", "addressStreet": "Οδός Δοκιμής", "addressNumber": "1", "addressPostalCode": "10431", "addressCity": "Αθήνα", "addressCountry": "Ελλάδα", "phone": "2100000000", "email": "info@example.com", "webSite": "www.example.com", "registryNumber": "ΓΕΜΗ: 000000000000", "emtyLine2": "IBAN: GR00 0000 0000 0000 0000 0000 000" }, "counterpart": { "code": "C-0001", "name": "TEST CLIENT ΑΕ", "profession": "Χονδρικό εμπόριο", "taxoffice": "Ζωγράφου", "addressStreet": "Οδός Πελάτη", "addressNumber": "10", "addressPostalCode": "15772", "addressCity": "Ζωγράφου", "addressCountry": "Ελλάδα", "phone": "2100000001", "email": "client@example.com" }, "additionalDetails": { "documentLabel": "Τιμολόγιο Πώλησης", "documentLanguageCode": "EL", "documentSizeCode": 0, "documentComments": "Εξόφληση εντός 30 ημερών.", "paymentMethodInvoiceLabel": "Επί πιστώσει" } }, "providerB2gAdditionalInvoiceDetails": { "contractReference": "26SYMV000000001", "buyerReference": "ΔΟΚΙΜΑΣΤΙΚΟΣ ΦΟΡΕΑΣ", "buyerLegalRegistrationIdentifier": "123412312", "credits": [ { "accountIdentifier": "GR00 0000 0000 0000 0000 0000 000", "accountName": "TEST ISSUER ΙΚΕ", "serviceProviderIdentifier": "BANKGRAA" } ], "partyName": "ΔΟΚΙΜΑΣΤΙΚΟΣ ΦΟΡΕΑΣ", "dueDate": "2026-10-24", "budget": { "type": 1, "identifier": "123412312" }, "buyerIdentifiers": [ { "buyerIdentifier": "1007.909.0001" } ], "deliveryDetails": { "street": "Οδός Φορέα 1", "city": "Αθήνα", "postalCode": "10431" } } } ] } ``` **Example: 1.1 — Fuel invoice** [ Download](https://developers.novusconceptus.com/examples/b2g/1.1-fuel-invoice.json) ```json { "invoice": [ { "issuer": { "vatNumber": "177472438", "country": "GR", "branch": 0 }, "counterpart": { "vatNumber": "997875116", "country": "GR", "branch": 0, "address": { "street": "Οδός Πελάτη", "number": "10", "postalCode": "15772", "city": "Ζωγράφου" } }, "invoiceHeader": { "series": "123456789", "aa": "1024", "issueDate": "2026-09-24", "invoiceType": "1.1", "currency": "EUR", "dispatchDate": "2026-09-24", "dispatchTime": "10:00:00", "vehicleNumber": "ABC-1234", "movePurpose": 1, "movePurposeLabel": "Πώληση", "fuelInvoice": true }, "paymentMethods": [ { "type": 5, "amount": 124.25 } ], "invoiceDetails": [ { "lineNumber": 1, "lineCode": "655-000023", "QuantityUnitsUblCode": "EA", "quantity": 1, "fuelCode": 40, "measurementUnitLabel": "ΤΜΧ", "lineUnitPrice": 120, "totalNetPriceBeforeDiscount": 120, "totalDiscountValue": 20, "netValue": 100, "vatCategory": 1, "vatCategoryPercent": 24, "vatAmount": 24, "lineDescription": "Αντικατάσταση Λέβητα", "incomeClassification": [ { "classificationType": "E3_561_001", "classificationCategory": "category1_1", "amount": 100 } ], "itemClassificationIdentifiers": [ { "classificationIdentifier": "15555100-4", "classificationIdentifierScheme": "STI", "classificationIdentifierSchemeVersion": "2008" } ], "itemCodification": "ΓΙΑ.ΠΡ.ΠΑΡ.ΠΗΛ.950ΓΡ." } ], "taxesTotals": [ { "taxType": 3, "taxCategory": 4, "underlyingValue": 1, "taxAmount": 0.25, "reducesPayable": false, "taxTypeLabel": "ksenodoxeio 4.00" } ], "invoiceSummary": { "totalNetValue": 100, "totalVatAmount": 24, "totalWithheldAmount": 0, "totalFeesAmount": 0, "totalStampDutyAmount": 0, "totalOtherTaxesAmount": 0.25, "totalDeductionsAmount": 0, "totalGrossValue": 124.25, "incomeClassification": [ { "classificationType": "E3_561_001", "classificationCategory": "category1_1", "amount": 100 } ] }, "providerAdditionalInvoiceDetails": { "issuer": { "name": "TEST ISSUER ΙΚΕ", "profession": "Εμπόριο ειδών θέρμανσης", "taxoffice": "Α' Αθηνών", "addressStreet": "Οδός Δοκιμής", "addressNumber": "1", "addressPostalCode": "10431", "addressCity": "Αθήνα", "addressCountry": "Ελλάδα", "phone": "2100000000", "email": "info@example.com", "webSite": "www.example.com", "registryNumber": "ΓΕΜΗ: 000000000000", "emtyLine2": "IBAN: GR00 0000 0000 0000 0000 0000 000" }, "counterpart": { "code": "C-0001", "name": "TEST CLIENT ΑΕ", "profession": "Χονδρικό εμπόριο", "taxoffice": "Ζωγράφου", "addressStreet": "Οδός Πελάτη", "addressNumber": "10", "addressPostalCode": "15772", "addressCity": "Ζωγράφου", "addressCountry": "Ελλάδα", "phone": "2100000001", "email": "client@example.com" }, "additionalDetails": { "documentLabel": "Τιμολόγιο Πώλησης", "documentLanguageCode": "EL", "documentSizeCode": 0, "documentComments": "Εξόφληση εντός 30 ημερών.", "paymentMethodInvoiceLabel": "Επί πιστώσει" } }, "providerB2gAdditionalInvoiceDetails": { "contractReference": "26SYMV000000001", "buyerReference": "ΔΟΚΙΜΑΣΤΙΚΟΣ ΦΟΡΕΑΣ", "buyerLegalRegistrationIdentifier": "123412312", "credits": [ { "accountIdentifier": "GR00 0000 0000 0000 0000 0000 000", "accountName": "TEST ISSUER ΙΚΕ", "serviceProviderIdentifier": "BANKGRAA" } ], "partyName": "ΔΟΚΙΜΑΣΤΙΚΟΣ ΦΟΡΕΑΣ", "dueDate": "2026-10-24", "budget": { "type": 1, "identifier": "123412312" }, "buyerIdentifiers": [ { "buyerIdentifier": "1007.909.0001" } ], "deliveryDetails": { "street": "Οδός Φορέα 1", "city": "Αθήνα", "postalCode": "10431" } } } ] } ``` **Example: 1.1 — Sales invoice / delivery note** [ Download](https://developers.novusconceptus.com/examples/b2g/1.1-sales-invoice-delivery-note.json) ```json { "invoice": [ { "issuer": { "vatNumber": "177472438", "country": "GR", "branch": 0 }, "counterpart": { "vatNumber": "997875116", "country": "GR", "branch": 0, "address": { "street": "Οδός Πελάτη", "number": "10", "postalCode": "15772", "city": "Ζωγράφου" } }, "invoiceHeader": { "series": "123456789", "aa": "1025", "issueDate": "2026-09-24", "invoiceType": "1.1", "currency": "EUR", "dispatchDate": "2026-09-24", "dispatchTime": "10:00:00", "vehicleNumber": "ABC-1234", "movePurpose": 1, "movePurposeLabel": "Πώληση", "isDeliveryNote": true, "otherDeliveryNoteHeader": { "loadingAddress": { "street": "Οδός Αποθήκης", "number": "5", "postalCode": "19300", "city": "Ασπρόπυργος" }, "deliveryAddress": { "street": "Οδός Πελάτη", "number": "10", "postalCode": "15772", "city": "Ζωγράφου" }, "startShippingBranch": 0, "completeShippingBranch": 0 } }, "paymentMethods": [ { "type": 5, "amount": 124.25 } ], "invoiceDetails": [ { "lineNumber": 1, "lineCode": "655-000023", "QuantityUnitsUblCode": "EA", "quantity": 1, "itemDescr": "Αντικατάσταση Λέβητα", "measurementUnit": 1, "measurementUnitLabel": "ΤΜΧ", "lineUnitPrice": 120, "totalNetPriceBeforeDiscount": 120, "totalDiscountValue": 20, "netValue": 100, "vatCategory": 1, "vatCategoryPercent": 24, "vatAmount": 24, "lineDescription": "Αντικατάσταση Λέβητα", "incomeClassification": [ { "classificationType": "E3_561_001", "classificationCategory": "category1_1", "amount": 100 } ], "itemClassificationIdentifiers": [ { "classificationIdentifier": "15555100-4", "classificationIdentifierScheme": "STI", "classificationIdentifierSchemeVersion": "2008" } ], "itemCodification": "ΓΙΑ.ΠΡ.ΠΑΡ.ΠΗΛ.950ΓΡ." } ], "taxesTotals": [ { "taxType": 3, "taxCategory": 4, "underlyingValue": 1, "taxAmount": 0.25, "reducesPayable": false, "taxTypeLabel": "ksenodoxeio 4.00" } ], "invoiceSummary": { "totalNetValue": 100, "totalVatAmount": 24, "totalWithheldAmount": 0, "totalFeesAmount": 0, "totalStampDutyAmount": 0, "totalOtherTaxesAmount": 0.25, "totalDeductionsAmount": 0, "totalGrossValue": 124.25, "incomeClassification": [ { "classificationType": "E3_561_001", "classificationCategory": "category1_1", "amount": 100 } ] }, "providerAdditionalInvoiceDetails": { "issuer": { "name": "TEST ISSUER ΙΚΕ", "profession": "Εμπόριο ειδών θέρμανσης", "taxoffice": "Α' Αθηνών", "addressStreet": "Οδός Δοκιμής", "addressNumber": "1", "addressPostalCode": "10431", "addressCity": "Αθήνα", "addressCountry": "Ελλάδα", "phone": "2100000000", "email": "info@example.com", "webSite": "www.example.com", "registryNumber": "ΓΕΜΗ: 000000000000", "emtyLine2": "IBAN: GR00 0000 0000 0000 0000 0000 000" }, "counterpart": { "code": "C-0001", "name": "TEST CLIENT ΑΕ", "profession": "Χονδρικό εμπόριο", "taxoffice": "Ζωγράφου", "addressStreet": "Οδός Πελάτη", "addressNumber": "10", "addressPostalCode": "15772", "addressCity": "Ζωγράφου", "addressCountry": "Ελλάδα", "phone": "2100000001", "email": "client@example.com" }, "additionalDetails": { "documentLabel": "Τιμολόγιο Πώλησης", "documentLanguageCode": "EL", "documentSizeCode": 0, "documentComments": "Εξόφληση εντός 30 ημερών.", "paymentMethodInvoiceLabel": "Επί πιστώσει", "dispatchPlaceFrom": "Οδός Αποθήκης 5, 19300 Ασπρόπυργος", "dispatchPlaceTo": "Οδός Πελάτη 10, 15772 Ζωγράφου" } }, "providerB2gAdditionalInvoiceDetails": { "contractReference": "26SYMV000000001", "buyerReference": "ΔΟΚΙΜΑΣΤΙΚΟΣ ΦΟΡΕΑΣ", "buyerLegalRegistrationIdentifier": "123412312", "credits": [ { "accountIdentifier": "GR00 0000 0000 0000 0000 0000 000", "accountName": "TEST ISSUER ΙΚΕ", "serviceProviderIdentifier": "BANKGRAA" } ], "partyName": "ΔΟΚΙΜΑΣΤΙΚΟΣ ΦΟΡΕΑΣ", "dueDate": "2026-10-24", "budget": { "type": 1, "identifier": "123412312" }, "buyerIdentifiers": [ { "buyerIdentifier": "1007.909.0001" } ], "deliveryDetails": { "street": "Οδός Φορέα 1", "city": "Αθήνα", "postalCode": "10431" } } } ] } ``` **Example: 2.1 — Service invoice** [ Download](https://developers.novusconceptus.com/examples/b2g/2.1-service-invoice.json) ```json { "invoice": [ { "issuer": { "vatNumber": "177472438", "country": "GR", "branch": 0 }, "counterpart": { "vatNumber": "997875116", "country": "GR", "branch": 0, "address": { "street": "Οδός Πελάτη", "number": "10", "postalCode": "15772", "city": "Ζωγράφου" } }, "invoiceHeader": { "series": "123456789", "aa": "1026", "issueDate": "2026-09-24", "invoiceType": "2.1", "currency": "EUR" }, "paymentMethods": [ { "type": 5, "amount": 124.25 } ], "invoiceDetails": [ { "lineNumber": 1, "lineCode": "655-000023", "QuantityUnitsUblCode": "EA", "quantity": 1, "measurementUnitLabel": "ΤΜΧ", "lineUnitPrice": 120, "totalNetPriceBeforeDiscount": 120, "totalDiscountValue": 20, "netValue": 100, "vatCategory": 1, "vatCategoryPercent": 24, "vatAmount": 24, "lineDescription": "Αντικατάσταση Λέβητα", "incomeClassification": [ { "classificationType": "E3_561_001", "classificationCategory": "category1_3", "amount": 100 } ], "itemClassificationIdentifiers": [ { "classificationIdentifier": "15555100-4", "classificationIdentifierScheme": "STI", "classificationIdentifierSchemeVersion": "2008" } ], "itemCodification": "ΓΙΑ.ΠΡ.ΠΑΡ.ΠΗΛ.950ΓΡ." } ], "taxesTotals": [ { "taxType": 3, "taxCategory": 4, "underlyingValue": 1, "taxAmount": 0.25, "reducesPayable": false, "taxTypeLabel": "ksenodoxeio 4.00" } ], "invoiceSummary": { "totalNetValue": 100, "totalVatAmount": 24, "totalWithheldAmount": 0, "totalFeesAmount": 0, "totalStampDutyAmount": 0, "totalOtherTaxesAmount": 0.25, "totalDeductionsAmount": 0, "totalGrossValue": 124.25, "incomeClassification": [ { "classificationType": "E3_561_001", "classificationCategory": "category1_3", "amount": 100 } ] }, "providerAdditionalInvoiceDetails": { "issuer": { "name": "TEST ISSUER ΙΚΕ", "profession": "Εμπόριο ειδών θέρμανσης", "taxoffice": "Α' Αθηνών", "addressStreet": "Οδός Δοκιμής", "addressNumber": "1", "addressPostalCode": "10431", "addressCity": "Αθήνα", "addressCountry": "Ελλάδα", "phone": "2100000000", "email": "info@example.com", "webSite": "www.example.com", "registryNumber": "ΓΕΜΗ: 000000000000", "emtyLine2": "IBAN: GR00 0000 0000 0000 0000 0000 000" }, "counterpart": { "code": "C-0001", "name": "TEST CLIENT ΑΕ", "profession": "Χονδρικό εμπόριο", "taxoffice": "Ζωγράφου", "addressStreet": "Οδός Πελάτη", "addressNumber": "10", "addressPostalCode": "15772", "addressCity": "Ζωγράφου", "addressCountry": "Ελλάδα", "phone": "2100000001", "email": "client@example.com" }, "additionalDetails": { "documentLabel": "Τιμολόγιο Πώλησης", "documentLanguageCode": "EL", "documentSizeCode": 0, "documentComments": "Εξόφληση εντός 30 ημερών.", "paymentMethodInvoiceLabel": "Επί πιστώσει" } }, "providerB2gAdditionalInvoiceDetails": { "contractReference": "26SYMV000000001", "buyerReference": "ΔΟΚΙΜΑΣΤΙΚΟΣ ΦΟΡΕΑΣ", "buyerLegalRegistrationIdentifier": "123412312", "credits": [ { "accountIdentifier": "GR00 0000 0000 0000 0000 0000 000", "accountName": "TEST ISSUER ΙΚΕ", "serviceProviderIdentifier": "BANKGRAA" } ], "partyName": "ΔΟΚΙΜΑΣΤΙΚΟΣ ΦΟΡΕΑΣ", "dueDate": "2026-10-24", "budget": { "type": 1, "identifier": "123412312" }, "buyerIdentifiers": [ { "buyerIdentifier": "1007.909.0001" } ], "deliveryDetails": { "street": "Οδός Φορέα 1", "city": "Αθήνα", "postalCode": "10431" } } } ] } ``` **Example: 5.2 — Credit note** [ Download](https://developers.novusconceptus.com/examples/b2g/5.2-credit-invoice.json) ```json { "invoice": [ { "issuer": { "vatNumber": "177472438", "country": "GR", "branch": 0 }, "counterpart": { "vatNumber": "997875116", "country": "GR", "branch": 0, "address": { "street": "Οδός Πελάτη", "number": "10", "postalCode": "15772", "city": "Ζωγράφου" } }, "invoiceHeader": { "series": "123456789", "aa": "1027", "issueDate": "2026-09-24", "invoiceType": "5.2", "currency": "EUR" }, "paymentMethods": [ { "type": 5, "amount": 124.25 } ], "invoiceDetails": [ { "lineNumber": 1, "lineCode": "655-000023", "QuantityUnitsUblCode": "EA", "quantity": 1, "measurementUnitLabel": "ΤΜΧ", "lineUnitPrice": 120, "totalNetPriceBeforeDiscount": 120, "totalDiscountValue": 20, "netValue": 100, "vatCategory": 1, "vatCategoryPercent": 24, "vatAmount": 24, "lineDescription": "Αντικατάσταση Λέβητα", "incomeClassification": [ { "classificationType": "E3_561_001", "classificationCategory": "category1_3", "amount": 100 } ], "itemClassificationIdentifiers": [ { "classificationIdentifier": "15555100-4", "classificationIdentifierScheme": "STI", "classificationIdentifierSchemeVersion": "2008" } ], "itemCodification": "ΓΙΑ.ΠΡ.ΠΑΡ.ΠΗΛ.950ΓΡ." } ], "taxesTotals": [ { "taxType": 3, "taxCategory": 4, "underlyingValue": 1, "taxAmount": 0.25, "reducesPayable": false, "taxTypeLabel": "ksenodoxeio 4.00" } ], "invoiceSummary": { "totalNetValue": 100, "totalVatAmount": 24, "totalWithheldAmount": 0, "totalFeesAmount": 0, "totalStampDutyAmount": 0, "totalOtherTaxesAmount": 0.25, "totalDeductionsAmount": 0, "totalGrossValue": 124.25, "incomeClassification": [ { "classificationType": "E3_561_001", "classificationCategory": "category1_3", "amount": 100 } ] }, "providerAdditionalInvoiceDetails": { "issuer": { "name": "TEST ISSUER ΙΚΕ", "profession": "Εμπόριο ειδών θέρμανσης", "taxoffice": "Α' Αθηνών", "addressStreet": "Οδός Δοκιμής", "addressNumber": "1", "addressPostalCode": "10431", "addressCity": "Αθήνα", "addressCountry": "Ελλάδα", "phone": "2100000000", "email": "info@example.com", "webSite": "www.example.com", "registryNumber": "ΓΕΜΗ: 000000000000", "emtyLine2": "IBAN: GR00 0000 0000 0000 0000 0000 000" }, "counterpart": { "code": "C-0001", "name": "TEST CLIENT ΑΕ", "profession": "Χονδρικό εμπόριο", "taxoffice": "Ζωγράφου", "addressStreet": "Οδός Πελάτη", "addressNumber": "10", "addressPostalCode": "15772", "addressCity": "Ζωγράφου", "addressCountry": "Ελλάδα", "phone": "2100000001", "email": "client@example.com" }, "additionalDetails": { "documentLabel": "Τιμολόγιο Πώλησης", "documentLanguageCode": "EL", "documentSizeCode": 0, "documentComments": "Εξόφληση εντός 30 ημερών.", "paymentMethodInvoiceLabel": "Επί πιστώσει" } }, "providerB2gAdditionalInvoiceDetails": { "contractReference": "", "buyerReference": "ΔΟΚΙΜΑΣΤΙΚΟΣ ΦΟΡΕΑΣ", "buyerLegalRegistrationIdentifier": "123412312", "credits": [ { "accountIdentifier": "GR00 0000 0000 0000 0000 0000 000", "accountName": "TEST ISSUER ΙΚΕ", "serviceProviderIdentifier": "BANKGRAA" } ], "partyName": "ΔΟΚΙΜΑΣΤΙΚΟΣ ΦΟΡΕΑΣ", "dueDate": "2026-10-24", "budget": { "type": 1, "identifier": "" }, "buyerIdentifiers": [ { "buyerIdentifier": "1007.909.0001" } ], "deliveryDetails": { "street": "Οδός Φορέα 1", "city": "Αθήνα", "postalCode": "10431" } } } ] } ``` Source: https://developers.novusconceptus.com/guides/b2g/ --- # OSS: sales to consumers in the EU Since 1 July 2021, when a business registered in the **One Stop Shop (OSS)** makes distance sales (e-shop) to a **consumer** in another EU member state, it charges the VAT of the customer's country and pays it through the OSS return. In myDATA it is **not** reported as Greek VAT. | Applies to | Does not apply to | |:---|:---| | B2C sale to a consumer in another EU country | B2B with a valid VIES VAT number | | Distance sales (e.g. e-shop) | Sales within Greece | | Business registered in OSS | Exports outside the EU | ## How you send it Usually with **11.1** (retail receipt) and **two lines**. Both have `vatCategory: 7` (0%) and `vatExemptionCategory: 30` (article 57, OSS Union scheme). | | Line 1: net value | Line 2: VAT of the customer's country | |:---|:---|:---| | `netValue` | The net value of the sale | The amount of the foreign VAT | | `vatCategory` / `vatExemptionCategory` | `7` / `30` | `7` / `30` | | `incomeClassification` | `E3_561_007` + `category1_1` | Only `category1_95` (informational) | | Printed text | e.g. "Πώληση εμπορεύματος" (Sale of goods) | e.g. "ΦΠΑ Γερμανίας 19%" (German VAT 19%) | This way the customer sees the VAT of their own country on the receipt, and myDATA records the income correctly, without Greek VAT. **Note: Your application calculates the foreign VAT** Rates per country change, e.g. Germany 19%, France 20%, Italy 22%, Spain/Netherlands/Belgium 21%. Check the current rates regularly. The e-invoicing provider forwards the amounts as it receives them. **Example: 11.1 — OSS retail receipt (customer in Germany, €100 + 19%)** [ Download](https://developers.novusconceptus.com/examples/oss/11.1-oss-retail-receipt.json) ```json { "invoice": [ { "issuer": { "vatNumber": "123456789", "country": "GR", "branch": 0 }, "invoiceHeader": { "series": "A", "aa": "1028", "issueDate": "2026-09-24", "invoiceType": "11.1", "currency": "EUR" }, "paymentMethods": [ { "type": 1, "amount": 119 } ], "invoiceDetails": [ { "lineNumber": 1, "quantity": 1, "measurementUnitLabel": "ΤΜΧ", "lineUnitPrice": 100, "totalNetPriceBeforeDiscount": 100, "totalDiscountValue": 0, "netValue": 100, "vatCategory": 7, "vatCategoryPercent": 0, "vatAmount": 0, "vatExemptionCategory": 30, "vatExemptionCategoryLabel": "Χωρίς ΦΠΑ – άρθρο 57(πρώην 47γ)του Κώδικα ΦΠΑ (OSS_ενωσιακό καθεστώς", "lineDescription": "ΠΩΛΗΣΗ ΕΜΠΟΡΕΥΜΑΤΟΣ", "incomeClassification": [ { "classificationType": "E3_561_007", "classificationCategory": "category1_1", "amount": 100 } ] }, { "lineNumber": 2, "quantity": 1, "measurementUnitLabel": "ΤΜΧ", "lineUnitPrice": 19, "totalNetPriceBeforeDiscount": 19, "totalDiscountValue": 0, "netValue": 19, "vatCategory": 7, "vatCategoryPercent": 0, "vatAmount": 0, "vatExemptionCategory": 30, "vatExemptionCategoryLabel": "Χωρίς ΦΠΑ – άρθρο 57(πρώην 47γ)του Κώδικα ΦΠΑ (OSS_ενωσιακό καθεστώς", "lineDescription": "ΦΠΑ ΕΜΠΟΡΕΥΜΑΤΟΣ", "incomeClassification": [ { "classificationCategory": "category1_95", "amount": 19 } ] } ], "invoiceSummary": { "totalNetValue": 119, "totalVatAmount": 0, "totalWithheldAmount": 0, "totalFeesAmount": 0, "totalStampDutyAmount": 0, "totalOtherTaxesAmount": 0, "totalDeductionsAmount": 0, "totalGrossValue": 119, "incomeClassification": [ { "classificationType": "E3_561_007", "classificationCategory": "category1_1", "amount": 100 }, { "classificationCategory": "category1_95", "amount": 19 } ] }, "providerAdditionalInvoiceDetails": { "issuer": { "name": "TEST ISSUER ΙΚΕ", "profession": "Εμπόριο ειδών θέρμανσης", "taxoffice": "Α' Αθηνών", "addressStreet": "Οδός Δοκιμής", "addressNumber": "1", "addressPostalCode": "10431", "addressCity": "Αθήνα", "addressCountry": "Ελλάδα", "phone": "2100000000", "email": "info@example.com", "webSite": "www.example.com", "registryNumber": "ΓΕΜΗ: 000000000000", "emtyLine2": "IBAN: GR00 0000 0000 0000 0000 0000 000" }, "additionalDetails": { "documentLabel": "Απόδειξη Λιανικής Πώλησης - OSS", "documentLanguageCode": "EL", "documentSizeCode": 0, "paymentMethodInvoiceLabel": "Κατάθεση στην τράπεζα" } } } ] } ``` Source: https://developers.novusconceptus.com/guides/oss/ --- # Offline & retries The law requires every document to reach AADE (the Greek tax authority) in real time. When something goes down, what you do depends on **which** connection was lost. ## A. You cannot reach the provider **How you can tell:** timeout, network error or HTTP 5xx on `SendInvoices`. 1. Wait a little (e.g. 30 seconds, then 1 minute, and so on). Do **not** retry immediately. If you can, first check with [`RequestTransmittedDocs`](https://developers.novusconceptus.com/provider-api/other-endpoints/#requesttransmitteddocs) (series/number or UID) whether the document already exists. 2. **Resend the same document** (same series, number, date). If you get AADE error **228** ("already sent"), the first attempt **had succeeded**. The MARK and AuthCode are in the message. 3. If the certified e-invoicing provider is still unreachable, issue the document locally and give it to the customer. 4. As soon as the connection is back, and **within 1 day** of `issueDate`, send it with **`"transmissionFailure": 1`** and the original date. 5. The provider adds the note **"Απώλεια Διασύνδεσης Οντότητας - Παρόχου - Transmission Failure_1"** (loss of connection between entity and provider) to the PDF. ## B. The provider cannot reach AADE **How you can tell:** HTTP 200 with `statusCode = "Offline"`, `invoiceMark = 0` and an empty `authenticationCode`. 1. **Do not resend it.** The document has been issued with a UID. You get a PDF with the note **"Απώλεια Διασύνδεσης Παρόχου - ΑΑΔΕ - Transmission Failure_2"** (loss of connection between provider and AADE). 2. As soon as AADE is back, the provider transmits the document automatically and creates a **second PDF** with the MARK and AuthCode. 3. To get the final MARK and PDF: [`RequestTransmittedDocs`](https://developers.novusconceptus.com/provider-api/other-endpoints/#requesttransmitteddocs) with `uid=`. 4. **Check that it got a MARK**, as below. ### Check that it got a MARK While AADE is not responding, the provider runs only its own checks. The document goes through AADE's checks when it is transmitted, so an `Offline` document with a data error may not be accepted. That is why you check every `Offline` document with [`RequestTransmittedDocs`](https://developers.novusconceptus.com/provider-api/other-endpoints/#requesttransmitteddocs) and `uid=`: | What you see | What it means | |:---|:---| | One record, with `mark` 0 | Not transmitted yet. Check again later. | | Two records: one with `mark` 0 and one with AADE's MARK | Transmitted. Keep the MARK, the Authentication Code and the new PDF of the second record. | | After 24 hours, still only the record with `mark` 0 | Most likely AADE did not accept it because of a data error. Contact us with the `invoiceUid`. | ## When do I resend? | What you got | Resend? | How | |:---|:---:|:---| | `Success` | no | Done. | | `Offline` | **never** | The provider takes care of it. Check that it got a MARK ([how](https://developers.novusconceptus.com/guides/offline/#check-offline)). | | HTTP 400 / `ValidationError` / `XMLSyntaxError` | yes, after you fix it | The document was **not** issued, so you can keep the same series/number. | | `TechnicalError` | yes | Same data, after a short wait. | | Timeout / 5xx | yes | Same data. Error 228 means it had already been issued. If the connection does not come back, follow A. | All codes: [Errors & statusCode](https://developers.novusconceptus.com/provider-api/errors/) · [AADE error codes](https://developers.novusconceptus.com/provider-api/aade-errors/). Source: https://developers.novusconceptus.com/guides/offline/ --- # Provider API Issue tax documents and transmit them to myDATA (version 2.0.2) of AADE, the Greek tax authority. Every call needs the `API-KEY` header, except the public document links. | | | |:---|:---| | **Base URL** | Sandbox `https://provider-dev.timologisi.online` · Production `https://provider.timologisi.online` | | **Authentication** | Header `API-KEY: `, a different key for each environment. See [Account & API key](https://developers.novusconceptus.com/start/account/). | | **Format** | JSON (`Content-Type: application/json`), UTF-8. Field names are case-insensitive. | | **Files** | [OpenAPI (YAML)](https://developers.novusconceptus.com/openapi/novus-provider-api.openapi.yaml) · [Postman](https://developers.novusconceptus.com/postman/Novus_Provider_API.postman_collection.json) | ## Endpoints | | Endpoint | What it does | |:---|:---|:---| | POST | [`/api/v1/Provider/SendInvoices`](https://developers.novusconceptus.com/provider-api/send-invoices/) | Issue and transmit a document. Types 1.1 – 11.5 only; types 12.x – 17.x are not transmitted by a provider. | | POST | [`/api/v1/Provider/SendInvoicesB2G`](https://developers.novusconceptus.com/provider-api/send-invoices-b2g/) | E-invoice to a public sector body (EN 16931). | | GET | [`/api/v1/Provider/RequestTransmittedDocs`](https://developers.novusconceptus.com/provider-api/other-endpoints/#requesttransmitteddocs) | Search the documents you have issued. | | POST | [`/api/v1/Provider/CancelDeliveryNote`](https://developers.novusconceptus.com/provider-api/other-endpoints/#canceldeliverynote) | Cancel a delivery note (9.x). | | POST | [`/api/v1/Provider/CancelReceivingNote`](https://developers.novusconceptus.com/provider-api/other-endpoints/#cancelreceivingnote) | Cancel a quantitative receiving note (10.x). | | GET | [`/api/v1/Provider/GetCreditsBalance`](https://developers.novusconceptus.com/provider-api/other-endpoints/#getcreditsbalance) | Your credits balance. | | GET | [`/api/v1/Provider/GetInvoicePdf/{fileName}`](https://developers.novusconceptus.com/provider-api/other-endpoints/#getinvoicepdf) | The PDF behind `invoiceUrl` (public). | | GET | [`/api/v1/Provider/GetInvoice/{uid}/{fileType}`](https://developers.novusconceptus.com/provider-api/other-endpoints/#getinvoice) | The document by UID, as `pdf` or `myDATA` (public; this is the `downloadingInvoiceUrl`). | | GET | [`/api/v1/Provider/GetInvoicePdfByAuthenticationCode/{code}`](https://developers.novusconceptus.com/provider-api/other-endpoints/#getinvoicepdfbyauthenticationcode) | The PDF by Authentication Code (public). | | POST | [`/api/v1/Provider/CompletionPosInvoices`](https://developers.novusconceptus.com/provider-api/other-endpoints/#completionposinvoices) | Completion after the charge on the POS terminal. | | POST | [`/api/v1/Provider/AskSignatureForOldInvoice`](https://developers.novusconceptus.com/provider-api/other-endpoints/#asksignatureforoldinvoice) | Provider signature to pay an already issued document through a POS terminal. | | POST | [`/api/v1/Provider/CompletionAskSignatureForOldInvoice`](https://developers.novusconceptus.com/provider-api/other-endpoints/#completionasksignatureforoldinvoice) | Completion of that payment. | | GET | [`/api/v1/Provider/GetOpenTables`](https://developers.novusconceptus.com/provider-api/other-endpoints/#getopentables) | Tables with open 8.6 order slips. | | GET | [`/api/v1/Provider/GetOpenOrdersForTable`](https://developers.novusconceptus.com/provider-api/other-endpoints/#getopenordersfortable) | The open order slips of one table. | To add a new customer (VAT number, ΑΦΜ) to your API key, use the [Onboarding API](https://developers.novusconceptus.com/onboarding-api/). Source: https://developers.novusconceptus.com/provider-api/ --- # SendInvoices Issues a document, transmits it to myDATA of AADE (the Greek tax authority), generates the PDF and sends it to the recipient. POST {baseUrl}/api/v1/Provider/SendInvoices?skipSignature={true|false}` | | | |:---|:---| | **Authentication** | Header `API-KEY` | | **Content-Type** | `application/json` | | **Documents per call** | **1**. The body is an array for compatibility with the AADE schema, but the API accepts exactly one document per call. | | **Cost** | Credits depend on the document type. See [Credits](https://developers.novusconceptus.com/provider-api/credits/). | | **Retries** | Based on the **UID**. AADE computes it from the issuer's VAT number (ΑΦΜ), date, branch, type, series and number. If you send the same document again, it is rejected with AADE error `228`, and the message contains the MARK of the original. | ## Query parameters | Name | Type | Default | Description | |:---|:---|:---|:---| | `skipSignature` | boolean | `true` | Applies only to payments with `type` 7 (card) or 8 (IRIS). `true`: the document is issued immediately, without a provider signature. `false`: the document is **not** transmitted yet. The response contains a provider signature, you charge the card on the POS, and then you complete the document with [CompletionPosInvoices](https://developers.novusconceptus.com/provider-api/other-endpoints/#completionposinvoices). See [Card / IRIS payment](https://developers.novusconceptus.com/guides/card-payments/). | ## Request body ```text { "invoice": [ ← exactly one item { "issuer": PartyType (required) "counterpart": PartyType (B2B: required) "invoiceHeader": InvoiceHeader (required) "paymentMethods": PaymentMethod[] (required, except 8.6 / 9.x / 10.x) "invoiceDetails": InvoiceRow[] (required) "taxesTotals": TaxTotal[] (optional) "invoiceSummary": InvoiceSummary (required) "packingsDeclarations": [...] (optional, goods movement documents only) "transmissionFailure": 1 (optional) "providerAdditionalInvoiceDetails": (required, PDF data) } ] } ``` Legend: required must be sent · optional may be omitted · new new in myDATA 2.0.x · **PDF** = used only on the printed document, not sent to AADE · **Novus** = a field of the certified e-invoicing provider (Novus), not of AADE. ### invoice | Field | Type | | Description | |:---|:---|:---:|:---| | `issuer` | [PartyType](https://developers.novusconceptus.com/provider-api/send-invoices/#partytype) | required | The issuer. `issuer.vatNumber` must be active in your account. | | `counterpart` | [PartyType](https://developers.novusconceptus.com/provider-api/send-invoices/#partytype) | optional | The recipient. AADE requires it on invoices (1.x, 2.x, 5.x …). Omit it on retail receipts (11.x). | | `invoiceHeader` | [InvoiceHeader](https://developers.novusconceptus.com/provider-api/send-invoices/#invoiceheader) | required | | | `paymentMethods` | [PaymentMethod](https://developers.novusconceptus.com/provider-api/send-invoices/#paymentmethods)[] | required | Required for all types **except** 8.6, 9.1, 9.2, 9.3, 10.1, 10.2. **Not allowed** on 8.6. The sum of `amount` must equal `invoiceSummary.totalGrossValue`. | | `invoiceDetails` | [InvoiceRow](https://developers.novusconceptus.com/provider-api/send-invoices/#invoicedetails)[] | required | At least one line. | | `taxesTotals` | [TaxTotal](https://developers.novusconceptus.com/provider-api/send-invoices/#taxestotals)[] | optional | Taxes other than VAT, at document level. If you use it, do not also send the same taxes per line. | | `invoiceSummary` | [InvoiceSummary](https://developers.novusconceptus.com/provider-api/send-invoices/#invoicesummary) | required | | | `packingsDeclarations` new | [PackingsDeclaration](https://developers.novusconceptus.com/provider-api/send-invoices/#packingsdeclarations)[] | optional | Only on goods movement documents. | | `transmissionFailure` | integer | optional | `1` = the document was issued while your application could not reach the Provider, and you are sending it now. Send it within 1 day of `issueDate`. The Provider sets `2` itself, and **rejects** it if you send it. See [Offline](https://developers.novusconceptus.com/provider-api/errors/#offline). | | `providerAdditionalInvoiceDetails` | [ProviderAdditionalInvoiceDetails](https://developers.novusconceptus.com/provider-api/send-invoices/#provideradditionalinvoicedetails) | required | Data for the PDF only: names, addresses, labels, recipients. | **Note: Fields you do NOT send** `uid`, `mark`, `authenticationCode`, `qrCodeUrl` and `downloadingInvoiceUrl` are filled in by AADE or the Provider. In `paymentMethods`, `transactionId`, `ProvidersSignature`, `tipAmount` and `ECRToken` are rejected: the POS flow fills them in. ### PartyType Used for `issuer`, `counterpart` and `otherCorrelatedEntities[].entityData`. All fields are sent to AADE. | Field | Type | | Description | |:---|:---|:---:|:---| | `vatNumber` | string | required | VAT number. No leading or trailing spaces: the Provider rejects a `counterpart.vatNumber` that contains them. | | `country` | string | required | ISO 3166-1 alpha-2, e.g. `GR`. | | `branch` | integer | required | Branch number as registered in Taxis. Head office = `0`. | | `name` | string | optional | Company name. **AADE does not accept it for Greek entities** (country `GR`), so send it only for foreign recipients. | | `address` | [Address](https://developers.novusconceptus.com/provider-api/send-invoices/#address) | optional | For the issuer: not accepted for Greek entities. For a foreign recipient: required, with `postalCode` and `city`. | | `documentIdNo` | string(100) | optional | Number of the recipient's official identity document (e.g. passport). Only for tax free (`specialInvoiceCategory = 4`). | | `supplyAccountNo` | string(100) | optional | Electricity supply number. Only on fuel invoices (`fuelInvoice = true`). | | `countryDocumentId` | string | optional | Country that issued the `documentIdNo`. Only for tax free. | #### Address | Field | Type | | Description | |:---|:---|:---:|:---| | `street` | string | optional | Street | | `number` | string | optional | Street number | | `postalCode` | string | required | Postal code | | `city` | string | required | City | ### invoiceHeader | Field | Type | | Description | |:---|:---|:---:|:---| | `series` | string(50) | required | Series. `"0"` if the document has no series. | | `aa` | string(50) | required | Sequential number within the series. | | `issueDate` | date `yyyy-MM-dd` | required | **Today's date** for documents issued through a Provider (AADE error `238`). Exception: `transmissionFailure = 1`. | | `invoiceType` | string | required | [Document type](https://developers.novusconceptus.com/aade/documents/#invoice-types). Through a Provider, **only types 1.1 to 11.5** are allowed. Types 12.x to 17.x are never transmitted by a Provider. | | `vatPaymentSuspension` | boolean | optional | VAT payment suspension. | | `currency` | string | optional | ISO 4217, e.g. `EUR`. | | `exchangeRate` | decimal(5) | optional | Only when `currency` is not `EUR`. | | `correlatedInvoices` | long[] | optional | MARKs of the correlated documents, e.g. the original invoice of a 5.1 credit note. | | `correlatedInvoicesLabel` | string | optional | **PDF.** The printed reference to the correlated documents. Required when you send `correlatedInvoices`. | | `correlatedInvoicesUids` | string[] | optional | **Novus.** UIDs of the correlated documents, which the Provider converts to MARKs. *For now, this applies only when completing POS payments and when resending offline documents.* In a normal call, use `correlatedInvoices`. | | `selfPricing` | boolean | optional | Self-billing. | | `dispatchDate` | date | optional | **Planned** dispatch date. Since myDATA 2.0, the carrier declares the actual transport details in the digital delivery note flow. | | `dispatchTime` | time `HH:mm:ss` | optional | Planned dispatch time. | | `vehicleNumber` | string | optional | Planned vehicle registration number. | | `movePurpose` | integer | optional | [Purpose of movement](https://developers.novusconceptus.com/aade/movement/#move-purpose). Values 6, 15, 16, 17 and 18 are no longer accepted. | | `movePurposeLabel` | string | optional | **PDF.** The printed text of the purpose of movement. | | `otherMovePurposeTitle` | string | optional | Only when `movePurpose = 19`. | | `fuelInvoice` | boolean | optional | Fuel sales document. | | `specialInvoiceCategory` | integer | optional | [Special invoice category](https://developers.novusconceptus.com/aade/documents/#special-invoice-category). | | `invoiceVariationType` | integer | optional | [Invoice variation type](https://developers.novusconceptus.com/aade/documents/#invoice-variation-type). **Not allowed** through a Provider. | | `otherCorrelatedEntities` | [EntityType](https://developers.novusconceptus.com/provider-api/send-invoices/#entitytype)[] | optional | Other correlated entities: carrier, tax representative, etc. | | `otherDeliveryNoteHeader` | [OtherDeliveryNoteHeader](https://developers.novusconceptus.com/provider-api/send-invoices/#otherdeliverynoteheader) | optional | Required on delivery notes (9.x) and on invoices with `isDeliveryNote = true`. | | `isDeliveryNote` | boolean | optional | The invoice is also a delivery note, e.g. a 1.1 with transport details. | | `thirdPartyCollection` | boolean | optional | Only on 8.4 / 8.5. | | `multipleConnectedMarks` | long[] | optional | Multiple connected MARKs. Mainly for closing 8.6 order slips. Not accepted on 1.6, 2.4 and 5.1. | | `multipleConnectedUids` | string[] | optional | **Novus.** The same, with UIDs. Useful for 8.6 order slips issued while AADE was offline. | | `tableAA` | string (GUID) | optional | Table identifier. **Required on 8.6**, and used when the table is closed. See [Food service](https://developers.novusconceptus.com/guides/food-service/). | | `totalCancelDeliveryOrders` | boolean | optional | Only on 8.6: cancels all order slips in `multipleConnectedMarks`. | | `reverseDeliveryNote` | boolean | optional | Only on 9.3: reverse movement. | | `reverseDeliveryNotePurpose` | integer | optional | [Purpose of reverse movement](https://developers.novusconceptus.com/aade/movement/#reverse-delivery-purpose). Required when `reverseDeliveryNote = true`. | | `toWeigh` new | boolean | optional | "To be weighed". Only on 9.1, 9.2 and 9.3. | | `receivingNotePurpose` new | integer | optional | [Purpose of the quantitative receiving note](https://developers.novusconceptus.com/aade/movement/#receiving-note-purpose). **Required** on 10.1 and 10.2, and accepted only there. | | `otherReceivingNotePurposeTitle` new | string | optional | Only when `receivingNotePurpose = 7`. | | `nonObligatedRecipient` new | boolean | optional | Only on goods movement documents: the recipient is not obliged to take part in digital goods movement. | | `withoutDigitalTransportTracking` new | boolean | optional | Only on goods movement documents: the document does not take part in digital transport tracking. Its status becomes *Completed* when it is issued. | #### EntityType | Field | Type | | Description | |:---|:---|:---:|:---| | `type` | integer | required | [Correlated entity type](https://developers.novusconceptus.com/aade/documents/#entity-type). | | `entityData` | [PartyType](https://developers.novusconceptus.com/provider-api/send-invoices/#partytype) | required | | #### OtherDeliveryNoteHeader | Field | Type | | Description | |:---|:---|:---:|:---| | `loadingAddress` | [Address](https://developers.novusconceptus.com/provider-api/send-invoices/#address) | required | Loading address. | | `deliveryAddress` | [Address](https://developers.novusconceptus.com/provider-api/send-invoices/#address) | required | Delivery address. | | `startShippingBranch` | integer | optional | The issuer's branch where the movement starts, if it differs from the issuing branch. | | `completeShippingBranch` | integer | optional | The recipient's branch where the movement ends, if it differs. | ### paymentMethods | Field | Type | | Description | |:---|:---|:---:|:---| | `type` | integer | required | [Payment method](https://developers.novusconceptus.com/aade/lines-payments/#payment-methods). | | `amount` | decimal(2) | required | The amount paid with this method. The amounts of all methods must add up to `totalGrossValue`. | | `paymentMethodInfo` | string | optional | Additional information sent to AADE, e.g. an IBAN. | | `terminalId` | string(200) | optional | **Novus.** POS terminal ID (TID). Required for `type` 7/8 with `skipSignature=false`. Also accepted under its AADE name, `tid`. | | `posNspId` | integer | optional | **Novus.** [POS provider / NSP](https://developers.novusconceptus.com/aade/lines-payments/#pos-nsp) of the terminal. Required for `type` 7/8 with `skipSignature=false`. Determines the signature format. | ### invoiceDetails | Field | Type | | Description | |:---|:---|:---:|:---| | `lineNumber` | integer | required | Line number, starting at 1. | | `lineCode` | string | optional | **PDF.** Printed item code. | | `lineDescription` | string | required | **PDF.** Printed line description. | | `recType` | integer | optional | [Line type](https://developers.novusconceptus.com/aade/lines-payments/#rec-type). `7` (negative sign) is used for partial cancellation of an 8.6. | | `TaricNo` | string(10) | optional | TARIC code. Only on invoices that are also delivery notes, and on goods movement documents. | | `itemCode` | string(50) | optional | Item code **sent to AADE**. Same restriction as `TaricNo`. | | `itemDescr` | string(300) | optional | Item description **sent to AADE**. Tax free, goods movement documents and 8.6. | | `fuelCode` | integer | optional | [Fuel code](https://developers.novusconceptus.com/aade/lines-payments/#fuel-codes). Only when `fuelInvoice = true`. | | `quantity` | decimal | optional | Quantity (≥ 0). | | `measurementUnit` | integer | optional | [Unit of measurement](https://developers.novusconceptus.com/aade/lines-payments/#measurement-units). | | `measurementUnitLabel` | string | optional | **PDF.** The printed unit, e.g. `τεμ.` (pcs). | | `otherMeasurementUnitQuantity` | integer | optional | Required when `measurementUnit = 7`. | | `otherMeasurementUnitTitle` | string | optional | Required when `measurementUnit = 7`, e.g. `3_Παλέτες` (3 pallets). | | `invoiceDetailType` | integer | optional | [Line designation](https://developers.novusconceptus.com/aade/lines-payments/#invoice-detail-type). For 1.5 settlement invoices. | | `lineUnitPrice` | decimal | required | **PDF.** Unit price. | | `totalNetPriceBeforeDiscount` | decimal | required | **PDF.** `lineUnitPrice × quantity`. | | `totalDiscountValue` | decimal | required | **PDF.** Total line discount (`0` if none). | | `netValue` | decimal(2) | required | Net value of the line, after discount. | | `vatCategory` | integer | required | [VAT category](https://developers.novusconceptus.com/aade/vat/#vat-category). | | `vatCategoryPercent` | decimal | required | **PDF.** The printed VAT rate, e.g. `24.00`. | | `vatAmount` | decimal(2) | required | VAT amount of the line. | | `vatExemptionCategory` | integer | optional | [VAT exemption reason](https://developers.novusconceptus.com/aade/vat/#vat-exemption). **Required when `vatCategory = 7`.** | | `vatExemptionCategoryLabel` | string | optional | **PDF.** The printed exemption text. | | `dienergia` | [Ship](https://developers.novusconceptus.com/provider-api/send-invoices/#ship) | optional | Declaration of activity (article 27, POL 1177/2018, ships). | | `discountOption` | boolean | optional | Discount option. | | `withheldAmount` / `withheldPercentCategory` | decimal / integer | optional | Withholding tax ([categories](https://developers.novusconceptus.com/aade/taxes/#withheld-tax)). | | `stampDutyAmount` / `stampDutyPercentCategory` | decimal / integer | optional | Digital transaction fee, formerly stamp duty ([categories](https://developers.novusconceptus.com/aade/taxes/#digital-transaction-fee)). | | `feesAmount` / `feesPercentCategory` | decimal / integer | optional | Fees ([categories](https://developers.novusconceptus.com/aade/taxes/#fees)). | | `otherTaxesAmount` / `otherTaxesPercentCategory` | decimal / integer | optional | Other taxes ([categories](https://developers.novusconceptus.com/aade/taxes/#other-taxes)). | | `deductionsAmount` | decimal(2) | optional | Deductions. | | `lineComments` | string | optional | Comments sent to AADE (not printed). | | `incomeClassification` | [Classification](https://developers.novusconceptus.com/provider-api/send-invoices/#classification)[] | optional | Income classification of the line. | | `expensesClassification` | [Classification](https://developers.novusconceptus.com/provider-api/send-invoices/#classification)[] | optional | Expense classification, e.g. in self-billing. | | `quantity15` | decimal | optional | Quantity at 15 °C. Only on fuel invoices. | | `notVAT195` new | boolean | optional | The line amounts are not included in the VAT return (output VAT). Only on types 1.1 to 11.5. | | `movePurposeLine` new | integer | optional | [Purpose of movement](https://developers.novusconceptus.com/aade/movement/#move-purpose) of the line, when it differs from the header. | | `otherMovePurposeLineTitle` new | string(150) | optional | Required when `movePurposeLine = 19`. | #### Ship (dienergia) | Field | Type | | Description | |:---|:---|:---:|:---| | `applicationId` | string | required | Number of the declaration of activity. | | `applicationDate` | date | required | Declaration date. | | `doy` | string | optional | Tax office (ΔΟΥ) of the declaration. | | `shipId` | string | required | Ship details. | #### Classification | Field | Type | | Description | |:---|:---|:---:|:---| | `classificationType` | string | optional | [Income type](https://developers.novusconceptus.com/aade/classifications/#income-classification-type) (`E3_…`) or [expense type](https://developers.novusconceptus.com/aade/classifications/#expenses-classification-type) (`E3_…`, `VAT_…`). | | `classificationCategory` | string | required | [Income category](https://developers.novusconceptus.com/aade/classifications/#income-classification-category) (`category1_…`, `category3`) or [expense category](https://developers.novusconceptus.com/aade/classifications/#expenses-classification-category) (`category2_…`). | | `amount` | decimal(2) | required | The classified amount. | | `vatAmount`, `vatCategory`, `vatExemptionCategory` | | optional | Only in expense classification. | | `id` | integer | optional | Sequential number of the classification. | ### taxesTotals Withholding tax, fees, other taxes, digital transaction fee and deductions **for the whole document**. On B2G invoices, this is the only allowed way. | Field | Type | | Description | |:---|:---|:---:|:---| | `taxType` | integer | required | [Tax type](https://developers.novusconceptus.com/aade/taxes/#taxes-totals-type): 1 withholding tax, 2 fees, 3 other taxes, 4 digital transaction fee, 5 deductions. | | `taxCategory` | integer | optional | The category from the table that matches the `taxType`. | | `underlyingValue` | decimal | optional | The amount the tax is calculated on. | | `taxAmount` | decimal(2) | required | Tax amount. | | `id` | integer | optional | Sequential number. | | `reducesPayable` | boolean | optional | **PDF.** `true` if the amount reduces the amount payable, e.g. withholding tax. | | `taxTypeLabel` | string | required | **PDF.** The printed label of the tax, e.g. `Φόρος διαμονής 4*` (accommodation tax, 4-star). | ### invoiceSummary | Field | Type | | Description | |:---|:---|:---:|:---| | `totalNetValue` | decimal(2) | required | Sum of `netValue`. | | `totalVatAmount` | decimal(2) | required | Sum of `vatAmount`. | | `totalWithheldAmount` | decimal(2) | required | `0` if none. | | `totalFeesAmount` | decimal(2) | required | `0` if none. | | `totalStampDutyAmount` | decimal(2) | required | Total digital transaction fee. `0` if none. | | `totalOtherTaxesAmount` | decimal(2) | required | `0` if none. | | `totalDeductionsAmount` | decimal(2) | required | `0` if none. | | `totalGrossValue` | decimal(2) | required | `net value + VAT − withholding tax + fees + digital transaction fee + other taxes − deductions`. Must equal the sum of `paymentMethods[].amount`. | | `incomeClassification` | [Classification](https://developers.novusconceptus.com/provider-api/send-invoices/#classification)[] | optional | Sum of the line classifications, per type and category. | | `expensesClassification` | [Classification](https://developers.novusconceptus.com/provider-api/send-invoices/#classification)[] | optional | The same, for expenses. | ### packingsDeclarations new Only on goods movement documents. Each item has a `Packages` list: | Field | Type | | Description | |:---|:---|:---:|:---| | `Packages[].packagingType` | integer | required | Packaging type (1–6). See the AADE "Ψηφιακό Δελτίο Αποστολής" (digital delivery note) specification, table 8.23. | | `Packages[].quantity` | integer | required | Number of packages. | | `Packages[].otherPackagingTypeTitle` | string(150) | optional | Title for "other" packaging. | ### providerAdditionalInvoiceDetails Everything here is used **only for the PDF and the email** to the recipient. Nothing is sent to AADE. #### issuer (required) | Field | | Description | |:---|:---:|:---| | `name`, `profession`, `taxoffice` | required | Company name, business activity and tax office. | | `addressStreet`, `addressNumber`, `addressPostalCode`, `addressCity`, `addressCountry` | required | The address as printed. | | `phone`, `fax`, `email`, `webSite`, `registryNumber` | optional | `registryNumber` = GEMI number (Greek business registry). | | `emtyLine`, `emtyLine2` | optional | Two free-text lines below the issuer, e.g. an IBAN. *(The names are spelled `emty…`.)* | #### counterpart (optional) | Field | | Description | |:---|:---:|:---| | `code` | optional | Your customer code. | | `vat` | optional | VAT number printed on **retail** documents (11.1/11.2) when the customer asks for it. | | `name`, `profession`, `taxoffice` | optional | On invoices (B2B), we recommend that you always fill them in. | | `addressStreet`, `addressNumber`, `addressPostalCode`, `addressCity`, `addressCountry`, `phone`, `email` | optional | | #### additionalDetails (required) | Field | Type | | Description | |:---|:---|:---:|:---| | `documentLabel` | string | required | The printed document title, e.g. `Τιμολόγιο Πώλησης` (sales invoice). | | `paymentMethodInvoiceLabel` | string | required | The printed payment method, e.g. `Μετρητά` (cash). | | `documentSizeCode` | integer | optional | [PDF template](https://developers.novusconceptus.com/aade/documents/#document-size): A4, A5, 80mm, 57mm. Default `0` (A4). | | `documentLanguageCode` | string | optional | `EL` (default) or `EN`. | | `documentComments` | string | optional | Free-text comments that are printed. Use `\n` for a line break. | | `recipients.email` | string | optional | The email address the PDF is sent to after issue. The PDF is also sent to the reception addresses that AADE returns, if the recipient has declared that they receive documents electronically. The sender, subject and text of the email are fixed. | | `digitsQty` | integer 2–5 | optional | Decimal places for quantities. Default `3`. | | `digitsItemPrice` | integer 2–5 | optional | Decimal places for unit prices. Default `2`. | | `dispatchPlaceFrom`, `dispatchPlaceTo` | string | optional | Place of loading / destination, printed on goods movement documents. | | `logoId` | GUID | optional | A logo you uploaded in the portal. | | `oldLogoId` | integer | optional | *Legacy.* Only for old accounts. | ## Provider checks (before AADE) The Provider runs these checks **before** it transmits the document. If any check fails, the document is **not** sent to AADE and **no credits are charged**. The response is HTTP 400/401 with the body `{"errors": [""]}`. Messages are in English, as shown in the "Message" column. | HTTP | Rule | Message | |:---:|:---|:---| | 401 | `API-KEY` is missing or invalid. | *(empty body)* | | 400 | `invoice` is empty. | `There is no invoice in the request.` | | 400 | More than one document in `invoice[]`. | `At this moment you can send only one invoice per request.` | | 401 | The account is not allowed to issue documents (e.g. it is suspended). | `You don't have the authority to send invoices this time.` | | 400 | Type 8.6 with `paymentMethods`. | `Invoice type 8.6 can't have payment methods.` | | 400 | No `paymentMethods` (types other than 8.6, 9.x, 10.x). | `Invoice needs to have payment methods.` | | 400 | Schema / required field errors. | One message per field, e.g. `The DocumentLabel field is required.` | | 400 | `transmissionFailure = 2`. | `You have transmissionFailure with value 2 in one or more invoices.` | | 400 | `counterpart.vatNumber` has leading or trailing spaces. | `Counterpart VAT number should not contain leading or trailing spaces.` | | 400 | `transmissionFailure = 1` and `issueDate` is more than 1 day old. | `If you have one or more invoices with transmissionFailure = 1, the invoice issue date cannot be more than 1 day old.` | | 400 | Σ `paymentMethods[].amount` ≠ `totalGrossValue`. | `The sum of the payment methods amount must be equal to the total gross value of the invoices.` | | 400 | `skipSignature=false`, payment 7/8 without `terminalId`/`tid`. | `If one of the payment methods requires pos then the Terminal Id (tid) field is required.` | | 400 | `skipSignature=false`, payment 7/8 without `posNspId`. | `If one of the payment methods requires pos then the Pos Nsp Id fields is required.` | | 400 | `transactionId`, `ProvidersSignature`, `tipAmount` or `ECRToken` is filled in. | `The transactionId, ProvidersSignature, tipAmount, ECRToken fields is not allowed to be filled.` | | 401 | `issuer.vatNumber` is not active in your account. | `You don't have the authority to send for this vat numbers ...` | | 401 | Food service: the branch has an 8.6 table open for more than 24 hours. | `You don't have the authority to send invoices for this branch becouse you have open table more than 24h.` | | 400 | Food service: inconsistent cancellation with `recType = 7`. | `You can't send this invoice because it includes inconsistent recType 7 details, ...` | | 400 | Food service: the closing document does not match the open order slips. | `Multiple connected marks are not as invoice details. ...` / `The total quantity of products and the total net value in the closing order invoice ... do not match ...` | | 400 | Not enough credits. | `You don't have enough balance to send this request.` | ## Response HTTP **200** means that the Provider processed the call. Whether the document was **issued** is shown in `response[0].statusCode`. ```json { "response": [ { "index": 1, "statusCode": "Success", "invoiceUid": "C10262E0AE13C6AFD7DD2C980900BB0DF266D9C5", "invoiceMark": 400001939576037, "authenticationCode": "1D0F38488D532D3BB715408E01283D39E8D56A3A", "invoiceUrl": "https://provider.timologisi.online/api/v1/Provider/GetInvoicePdf/671899191d6d0b3d947bc4bb.pdf", "qrUrl": "https://provider.timologisi.online/api/v1/Provider/GetInvoicePdf/671899191d6d0b3d947bc4bb.pdf", "aadeQrUrl": "…", "credits": "1,00", "paymentMethodMark": 0, "providerSignature": null, "receptionProviders": null, "receptionEmails": null, "errors": null } ] } ``` | Field | Type | Description | |:---|:---|:---| | `index` | integer | Position of the document in the call (from 1). | | `statusCode` | string | `Success`, `Offline`, `ValidationError`, `XMLSyntaxError`, `TechnicalError`. See [statusCode](https://developers.novusconceptus.com/provider-api/errors/#statuscode). | | `invoiceUid` | string(40) | The UID. Also returned with `Offline`. | | `invoiceMark` | long | The MARK. `0` with `Offline` or on error. | | `authenticationCode` | string | The Authentication Code. Empty with `Offline`. | | `invoiceUrl` | string | Link to the PDF. Print it as a QR code, or use it to view and download the document. | | `qrUrl` | string | Same as `invoiceUrl`. Kept for compatibility. | | `aadeQrUrl` | string | The official AADE verification link. For information only. | | `credits` | string | Credits charged, with a **comma as decimal separator**, e.g. `"0,50"`. | | `paymentMethodMark` | long | MARK of the payment method record (POS flows). | | `providerSignature` | array | Only with `skipSignature=false` and a card / IRIS payment. See [Card / IRIS payment](https://developers.novusconceptus.com/guides/card-payments/). | | `receptionProviders` | object | The Providers through which the recipient receives e-invoices, when AADE returns them. | | `receptionEmails` | object | The email addresses the recipient has declared for receiving e-invoices, when AADE returns them. | | `errors` | array | `[{ "error": [ { "code": "…", "message": "…" } ] }]` when `statusCode` is an error. See [AADE error codes](https://developers.novusconceptus.com/provider-api/aade-errors/). | See also: [Errors & statusCode](https://developers.novusconceptus.com/provider-api/errors/) · [AADE error codes](https://developers.novusconceptus.com/provider-api/aade-errors/) · [Credits](https://developers.novusconceptus.com/provider-api/credits/) Source: https://developers.novusconceptus.com/provider-api/send-invoices/ --- # SendInvoicesB2G E-invoice to a public sector body in Greece (EN 16931). The guide, with the values to use for testing: [Public sector (B2G)](https://developers.novusconceptus.com/guides/b2g/). POST {baseUrl}/api/v1/Provider/SendInvoicesB2G` The body is the **same** as for [SendInvoices](https://developers.novusconceptus.com/provider-api/send-invoices/) (one document per call), with these differences: | | | |:---|:---| | **Allowed types** | 1.1, 1.6, 2.1, 2.4, 3.1, 3.2, 5.2, 6.1, 6.2, 7.1 | | **Payment** | `paymentMethods[].type` = `5` (on credit) | | **Taxes** | Withholding tax, fees, other taxes, digital transaction fee and deductions **only** in `taxesTotals` | | **Extra object** | `providerB2gAdditionalInvoiceDetails` (required) | | **Extra line fields** | `QuantityUnitsUblCode`, `itemClassificationIdentifiers`, `itemCodification` (required) | | **Activation** | Separately for each customer (VAT number, ΑΦΜ), by Novus. | | **Credits** | 1 per invoice, from the separate B2G balance (not from your Provider API credits) | | **Testing** | You need a separate B2G sandbox API key. Ask Novus for it. | ## providerB2gAdditionalInvoiceDetails | Field | BT | Type | Description | |:---|:---:|:---|:---| | `contractReference` | BT-12 | string | Contract ID (ΑΔΑΜ) in the public procurement register (ΚΗΜΔΗΣ). `"0"` if there is none. Empty on a credit note. | | `purchaseOrderReference` | BT-13 | string | Purchase order number of the public body. | | `buyerReference` | BT-10 | string | The department of the public body that receives the invoice. | | `buyerLegalRegistrationIdentifier` | BT-47 | string | Legal registration identifier of the buyer. | | `buyerIdentifiers[].buyerIdentifier` | BT-46 | string | **Routing:** the Contracting Authority Code from the Register of Contracting Authorities, e.g. `1007.909.0001`. | | `budget.type` | BT-11 | integer | `1` Regular Budget, `2` Public Investment Programme (ΠΔΕ), `3` other. | | `budget.identifier` | BT-11 | string | For 1 and 3: the ΑΔΑ (Diavgeia decision number) of the budget commitment. For 2: the project registration number (Ενάριθμος). On a credit note with 1 or 3: empty. | | `credits[].accountIdentifier` | BT-84 | string | IBAN of the issuer. | | `credits[].accountName` | BT-85 | string | Account holder. | | `credits[].serviceProviderIdentifier` | BT-86 | string | BIC of the bank. | | `dueDate` | BT-9 | date | Payment due date. | | `partyName` | BT-70 | string | Who the goods or services are delivered to. | | `vatPaidByBuyer` | — | boolean | Optional. | | `deliveryDetails.street` / `city` / `postalCode` | BT-75/77/78 | string | Delivery address. | ## Extra line fields | Field | BT | Description | |:---|:---:|:---| | `QuantityUnitsUblCode` | BT-130 | Unit of measure per UN/ECE Rec. 20 (e.g. `EA`, `KGM`, `LTR`, `HUR`). | | `itemClassificationIdentifiers[]` | BT-158 | The CPV code of the item, as an object with: `classificationIdentifier` (the CPV code, e.g. `15555100-4`), `classificationIdentifierScheme` (`STI` for CPV) and `classificationIdentifierSchemeVersion` (e.g. `2008`). | | `itemCodification` | BT-153 | Short item name. | Examples: [B2G guide](https://developers.novusconceptus.com/guides/b2g/#examples). Source: https://developers.novusconceptus.com/provider-api/send-invoices-b2g/ --- # Other endpoints Every call needs the `API-KEY` header, except the three public document links. **On this page:** [RequestTransmittedDocs](https://developers.novusconceptus.com/provider-api/other-endpoints/#requesttransmitteddocs) · [CancelDeliveryNote](https://developers.novusconceptus.com/provider-api/other-endpoints/#canceldeliverynote) · [CancelReceivingNote](https://developers.novusconceptus.com/provider-api/other-endpoints/#cancelreceivingnote) · [GetCreditsBalance](https://developers.novusconceptus.com/provider-api/other-endpoints/#getcreditsbalance) · [GetInvoicePdf](https://developers.novusconceptus.com/provider-api/other-endpoints/#getinvoicepdf) · [GetInvoice](https://developers.novusconceptus.com/provider-api/other-endpoints/#getinvoice) · [GetInvoicePdfByAuthenticationCode](https://developers.novusconceptus.com/provider-api/other-endpoints/#getinvoicepdfbyauthenticationcode) · [CompletionPosInvoices](https://developers.novusconceptus.com/provider-api/other-endpoints/#completionposinvoices) · [AskSignatureForOldInvoice](https://developers.novusconceptus.com/provider-api/other-endpoints/#asksignatureforoldinvoice) · [CompletionAskSignatureForOldInvoice](https://developers.novusconceptus.com/provider-api/other-endpoints/#completionasksignatureforoldinvoice) · [GetOpenTables](https://developers.novusconceptus.com/provider-api/other-endpoints/#getopentables) · [GetOpenOrdersForTable](https://developers.novusconceptus.com/provider-api/other-endpoints/#getopenordersfortable) ## Invoices ### RequestTransmittedDocs GET `/api/v1/Provider/RequestTransmittedDocs` Search the documents you have issued. Use it to find a MARK (e.g. after `Offline`) or for reconciliation. For an `Offline` document you see, with the same `uid`, one record with `mark` 0 and, once it is transmitted, a second one with AADE's MARK ([checking Offline](https://developers.novusconceptus.com/guides/offline/#check-offline)). | Query | Required | Description | |:---|:---:|:---| | `issuerVatNumber` | yes | VAT number (ΑΦΜ) of the issuer. | | `issuedFrom`, `issuedTo` | yes | Issue date range, `yyyy-MM-dd`. | | `uid`, `invoiceMark`, `authenticationcode` | | For one specific document. | | `series`, `aa`, `invoiceType`, `branch`, `counterpartVatNumber` | | Filters. | | `resultNumber` | | Maximum number of results. | | `nextPageKey` | | The page you request. Results come in pages of 100. | ```json title="200 OK" { "providerTransmittedDocs": [ { "uid": "15B0B6AEB08979B44EE68110CD734458F22ED6DE", "mark": 400001939575310, "authenticationCode": "904E2E03B5C4B0B0826BB2B8375F61E5F73118AD", "issuer": { "vatNumber": "123456789", "branch": 0 }, "counterpart": { "vatNumber": "987654324" }, "invoiceHeader": { "series": "A", "aa": "1001", "issueDate": "2026-09-24T00:00:00Z", "invoiceType": "1.1" }, "invoiceSummary": { "totalNetValue": 100, "totalVatAmount": 24, "totalGrossValue": 124 }, "cost": 1, "pdfUrl": "https://provider-dev.timologisi.online/api/v1/Provider/GetInvoicePdf/671893b51d6d0b3d947bc4b9.pdf", "insertedDateTime": "2026-09-24T06:12:05.55Z" } ] } ``` In the sandbox, documents are deleted after 30 days. ### CancelDeliveryNote POST `/api/v1/Provider/CancelDeliveryNote` Cancel a delivery note (9.x) without issuing a new one. Costs 0.25 credits. ```json title="Body" { "mark": "400001958007000", "entityVatNumber": "123456789" } ``` The response has the [same format as SendInvoices](https://developers.novusconceptus.com/provider-api/send-invoices/#response). On success, `statusCode` is `Success` and `cancellationMark` holds the MARK of the cancellation. ### CancelReceivingNote POST `/api/v1/Provider/CancelReceivingNote` The same, for quantitative receiving notes (10.x, myDATA 2.0.2). ### GetCreditsBalance GET `/api/v1/Provider/GetCreditsBalance` ```json title="200 OK" { "userId": "…", "creditsBalance": 1520.5 } ``` ## Documents (public, no API key) ### GetInvoicePdf GET `/api/v1/Provider/GetInvoicePdf/{fileName}` The PDF behind `invoiceUrl` / `qrUrl`. Returns `application/pdf`. ### GetInvoice GET `/api/v1/Provider/GetInvoice/{uid}/{fileType}` The document by **UID**. This is the `downloadingInvoiceUrl` that the provider sends to AADE for the recipient (A.1128/2025). | `fileType` | Returns | |:---|:---| | `pdf` (default, or no value) | `application/pdf` | | `myDATA` | The detailed myDATA XML (`InvoicesDoc_detailed`) | ### GetInvoicePdfByAuthenticationCode GET `/api/v1/Provider/GetInvoicePdfByAuthenticationCode/{authenticationCode}` The PDF by Authentication Code. ## POS payments The flow, with diagrams: [Card / IRIS payment](https://developers.novusconceptus.com/guides/card-payments/). ### CompletionPosInvoices POST `/api/v1/Provider/CompletionPosInvoices` Completes the documents sent with `SendInvoices?skipSignature=false`, after the terminal has charged the card or IRIS. The body is an **array**: ```json [ { "signatureToken": "", "transactionId": "123456788555", "paymentAmount": 124, "tipAmount": 0, "paymentType": 7 } ] ``` | Field | Required | Description | |:---|:---:|:---| | `signatureToken` | yes | The `providerSignature[].signatures[].token` from SendInvoices. | | `transactionId` | yes | From the POS / NSP. | | `paymentAmount` | yes | Greater than 0 and up to the `paymentBalance` of the signature. | | `tipAmount` | | Tip. | | `paymentType` | | The final type from the terminal: `7` card or `8` IRIS. Default `7`. | Returns the [SendInvoices response](https://developers.novusconceptus.com/provider-api/send-invoices/#response). ### AskSignatureForOldInvoice POST `/api/v1/Provider/AskSignatureForOldInvoice?terminalId={tid}&posNspId={id}` Provider signature to pay, through a POS terminal, a document issued earlier (e.g. on credit). **Warning: Unusual body** The body is **just the MARK of the document, as a JSON number**, e.g. `400001930000001`, not an object. `terminalId` and [`posNspId`](https://developers.novusconceptus.com/aade/lines-payments/#pos-nsp) go in the query string. ```json title="200 OK" { "token": "…", "data": "…", "createdDate": "…", "expiryDate": "…", "paymentBalance": 124.00, "issuerVatNumber": "123456789" } ``` ### CompletionAskSignatureForOldInvoice POST `/api/v1/Provider/CompletionAskSignatureForOldInvoice?signatureToken=…&transactionId=…&paymentAmount=…&tipAmount=0&paymentType=7` Body: **just the MARK of the document, as a JSON number**. `paymentType` is optional (7 or 8, default 7). ## Food service (8.6) The guide: [Food service](https://developers.novusconceptus.com/guides/food-service/). ### GetOpenTables GET `/api/v1/Provider/GetOpenTables?VatNumber=123456789&Branch=0` Returns the tables (`tableAA`, GUID) that still have open order slips. ```json title="200 OK" [ "A98EFBDE-5FBB-4128-BBD8-B6DDA701AB20" ] ``` ### GetOpenOrdersForTable GET `/api/v1/Provider/GetOpenOrdersForTable?TableId={guid}&VatNumber=123456789&Branch=0` ```json title="200 OK" [ { "mark": "400001930000011", "uid": "…", "quantityProducts": 2, "totalNet": 15.00 } ] ``` Returns 404 when the table has no open order slips. Source: https://developers.novusconceptus.com/provider-api/other-endpoints/ --- # Errors & statusCode A document can fail at two different levels. Your application must handle **both**. ```mermaid flowchart TD A[POST SendInvoices] --> B{HTTP status} B -- "401" --> U[Invalid API key or VAT number
without permission
fix your settings] B -- "400" --> V["Rejected by the provider
body: { errors: [...] }
NOT sent to AADE
fix and send again"] B -- "5xx / timeout / no connection" --> T["The provider does not respond
send again with transmissionFailure = 1
(within 1 day)"] B -- "200" --> S{"response[0].statusCode"} S -- Success --> OK[Issued ✔] S -- Offline --> OFF["Issued ✔ — AADE was not responding
the provider will transmit it
DO NOT send it again
then check that it got a MARK"] S -- "ValidationError
XMLSyntaxError
TechnicalError" --> E["Rejected by AADE
see errors[].error[]
fix and send again"] ``` ## HTTP status codes | HTTP | What it means | Body | Issued? | |:---:|:---|:---|:---:| | **200** | The call was processed. Check `statusCode`. | `{ "response": [ … ] }` | Depends on `statusCode` | | **400** | Rejected by the provider's checks. See the [list of rules](https://developers.novusconceptus.com/provider-api/send-invoices/#provider-validation-before-aade). | `{ "errors": ["…"] }` | No | | **401** | `API-KEY` is missing or invalid, or the issuer's VAT number (ΑΦΜ) is not active on your account. | empty or `{ "errors": ["…"] }` | No | | **404** | Not found, e.g. unknown table or document. | `{ "errors": ["…"] }` | — | | **5xx** | Unexpected error at the provider. | varies | Assume it was **not** issued, see below | ## statusCode | `statusCode` | Issued? | What you do | |:---|:---:|:---| | `Success` | | Store `invoiceMark`, `invoiceUid`, `authenticationCode`, `invoiceUrl`. | | `Offline` | | The document **was issued**, with a UID. AADE was not responding and the provider will transmit it automatically. **Do not send it again**, but check later that it got a MARK. See [Offline](https://developers.novusconceptus.com/provider-api/errors/#offline). | | `ValidationError` | | AADE rejected the data. Read `errors[].error[].code` and `message`, fix and send again. Codes: [AADE error codes](https://developers.novusconceptus.com/provider-api/aade-errors/). | | `XMLSyntaxError` | | A value is outside the AADE schema, e.g. an invalid `invoiceType` or code. Fix and send again. | | `TechnicalError` | | Unexpected error at AADE. Try again later. | **Warning: HTTP 200 does not mean success** A rejected document (`ValidationError`) also returns **HTTP 200**. The document is issued only when `statusCode` is `Success` or `Offline`. Example of a rejection by AADE: ```json { "response": [ { "index": 1, "statusCode": "ValidationError", "invoiceMark": 0, "invoiceUid": null, "invoiceUrl": null, "credits": null, "errors": [ { "error": [ { "code": "228", "message": "The UID: C10262E0AE13C6AFD7DD2C980900BB0DF266D9C5 is invalid . It has already been sent for another invoice (MARK:400001939576037 , AUTHENTICATION_CODE:1D0F38488D532D3BB715408E01283D39E8D56A3A)" } ] } ] } ] } ``` **Tip: Error 228: already sent** This usually means that your previous attempt **succeeded**, but you never received the response (e.g. timeout). The message contains the MARK and the Authentication Code of the original. Use these instead of issuing the document again. You can also find the original with [RequestTransmittedDocs](https://developers.novusconceptus.com/provider-api/other-endpoints/#requesttransmitteddocs), filtered by `uid`. ## Offline & retries - **You cannot reach the provider** (timeout, network error, 5xx): send the same document again. If the provider still does not respond, issue the document locally and send it within 1 day with `"transmissionFailure": 1`. - **`statusCode = "Offline"`:** the document **was issued**, but AADE was not responding and the provider will transmit it later. **Never send it again.** You find the final MARK with `RequestTransmittedDocs?uid=…`. - **Check that an `Offline` document finally got a MARK.** While AADE is not responding, only the provider's checks run, not AADE's. A document with a data error may not be accepted once it is transmitted. [How to check](https://developers.novusconceptus.com/guides/offline/#check-offline). In detail, step by step: [Offline & retries](https://developers.novusconceptus.com/guides/offline/). ## Error body formats at a glance **Provider (HTTP 400/401/404)** ```json { "errors": [ "The sum of the payment methods amount must be equal to the total gross value of the invoices." ] } ``` **AADE (HTTP 200)** ```json { "response": [ { "statusCode": "ValidationError", "errors": [ { "error": [ { "code": "203", "message": "…" } ] } ] } ] } ``` Source: https://developers.novusconceptus.com/provider-api/errors/ --- # AADE error codes These errors come **from AADE** (the Greek tax authority), inside `response[].errors[].error[]`, with HTTP 200 and `statusCode` = `ValidationError`, `XMLSyntaxError` or `TechnicalError`. For the provider's own errors, *before* the document reaches AADE, see [Errors & statusCode](https://developers.novusconceptus.com/provider-api/errors/). Source: AADE myDATA 2.0.2, §7.2 (ERP) and §7.2 (providers). Codes marked apply to providers only. | Code | Status | Element | Message in the response | Description (AADE, Greek) | |:---:|:---|:---|:---|:---| | `101` | XMLSyntaxError | Application | XML Syntax Validation Error | Σφάλμα επικύρωσης σύνταξης XML | | `102` | ValidationError | Application | Vat number {vatNumber} does not belong to active corporation | Ο ΑΦΜ {ΑΦΜ} δεν ανήκει σε ενεργή εταιρεία | | `103` | ValidationError | Application | Please pass mark in the request parameters | Περάστε το MARK στις παραμέτρους αιτήματος | | `104` | ValidationError | Application | Requested Invoice was not found | Το αιτούμενο τιμολόγιο δεν βρέθηκε | | `105` | ValidationError | Application | User VAT number {vatNumber} is not authorized to execute this method for VAT number {vatNumber} | Ο ΑΦΜ χρήστη {ΑΦΜ} δεν είναι εξουσιοδοτημένος να εκτελέσει αυτήν τη μέθοδο για τον ΑΦΜ {ΑΦΜ} | | `201` | ValidationError | Invoice | User VAT number {vatNumber} is not authorized to execute this method | Ο ΑΦΜ χρήστη {ΑΦΜ} δεν είναι εξουσιοδοτημένος να εκτελέσει αυτήν τη μέθοδο | | `202` | ValidationError | Invoice | Invalid Greek VAT number | Μη έγκυρος ελληνικός ΑΦΜ | | `203` | ValidationError | Invoice | Gross Value doesn't match with sum of net value plus taxes | Η Ακαθάριστη Αξία δεν ταιριάζει με το άθροισμα της καθαρής αξίας συν τους φόρους | | `204` | ValidationError | Invoice | {Field} is mandatory for this invoice type | Το {Πεδίο} είναι υποχρεωτικό για αυτόν τον τύπο τιμολογίου | | `205` | ValidationError | Invoice | {Field} is forbidden for this invoice type | Το {Πεδίο} είναι απαγορευμένο για αυτόν τον τύπο τιμολογίου | | `206` | TechnicalError | Invoice | Unexpected technical error for invoice line | Μη αναμενόμενο τεχνικό σφάλμα για τη γραμμή τιμολογίων | | `207` | ValidationError | Invoice | The sum of net values of the invoice lines doesn't match with total net value of the invoice | Το άθροισμα των καθαρών αξιών των γραμμών τιμολογίου δεν ταιριάζει με τη συνολική καθαρή αξία του τιμολογίου | | `208` | ValidationError | Invoice | The sum of gross values of the invoice lines doesn't match with total gross value of the invoice | Το άθροισμα των μικτών αξιών των γραμμών τιμολογίου δεν ταιριάζει με τη συνολική ακαθάριστη αξία του τιμολογίου | | `209` | ValidationError | Invoice | The sum of vat amount of the invoice lines doesn't match with total vat amount of the invoice | Το άθροισμα του ποσού ΦΠΑ των γραμμών τιμολογίου δεν ταιριάζει με το συνολικό ποσό ΦΠΑ του τιμολογίου | | `210` | ValidationError | Invoice | The sum of withheld amount of the invoice lines doesn't match with total withheld amount of the invoice | Το άθροισμα του παρακρατηθέντος ποσού των γραμμών τιμολογίου δεν ταιριάζει με το συνολικό παρακρατούμενο ποσό του τιμολογίου | | `211` | ValidationError | Invoice | Exchange Rate must be greater than 0 when the currency is not Euro | Η συναλλαγματική ισοτιμία πρέπει να είναι μεγαλύτερη από 0 όταν το νόμισμα δεν είναι ευρώ | | `212` | ValidationError | Invoice | AA element must be number with value between 0 and 18446744073709551615 for issuer from Greece | Το στοιχείο AA πρέπει να είναι αριθμός με τιμή μεταξύ 0 και 18446744073709551615 για εκδότη από την Ελλάδα | | `213` | ValidationError | Invoice | {Field} must have value 0 for this invoice type | Το {Πεδίο} πρέπει να έχει τιμή 0 για αυτόν τον τύπο τιμολογίου | | `214` | ValidationError | Invoice | Element {Element} must be sent only if it is true | Το στοιχείο {Στοιχείο} πρέπει να αποσταλεί μόνο εάν είναι αληθές | | `215` | ValidationError | Invoice | Vat category must have value {value} for this invoice type [Possible { value } values: {7, 8} | Η κατηγορία ΦΠΑ πρέπει να έχει τιμή {τιμή} για αυτόν τον τύπο τιμολογίου [Πιθανές τιμές {τιμή}: {7, 8}] | | `216` | ValidationError | Invoice | Vat category must have value other than 8 for this invoice type | Η κατηγορία ΦΠΑ πρέπει να έχει αξία διαφορετική από 8 για αυτόν τον τύπο τιμολογίου | | `217` | ValidationError | Invoice | When vatCategory has value 7, element vatExemptionCategory is mandatory | Όταν η Κατηγορία ΦΠΑ έχει τιμή 7, το στοιχείο Κατηγορία Απαλλαγής ΦΠΑ είναι υποχρεωτικό | | `218` | ValidationError | Invoice | Vat Amount must have value 0 for this invoice type | Το Ποσό ΦΠΑ πρέπει να έχει τιμή 0 για αυτόν τον τύπο τιμολογίου | | `219` | ValidationError | Invoice | Issuer Name is forbidden for Issuer from Greece | Το Όνομα Εκδότη απαγορεύεται για τον Εκδότη από την Ελλάδα | | `220` | ValidationError | Invoice | Counterpart Name is forbidden for Counterpart from Greece | Το όνομα Αντισυμβαλλόμενος απαγορεύεται για τον Αντισυμβαλλόμενο από την Ελλάδα | | `221` | ValidationError | Invoice | {Field} is forbidden for the lines that have invoiceDetailType = 2 for this invoice type | Το {Πεδίο} είναι απαγορευμένο για τις γραμμές που έχουν Τύπο Στοιχείου Τιμολογίου = 2 για αυτόν τον τύπο τιμολογίου | | `222` | ValidationError | Invoice | {Field} must have value greater than 0 for this invoice type | Το {Πεδίο} πρέπει να έχει τιμή μεγαλύτερη από 0 για αυτόν τον τύπο τιμολογίου | | `223` | ValidationError | Invoice | Unsupported invoice type | Μη υποστηριζόμενος τύπος τιμολογίου | | `224` | ValidationError | Invoice | Taxes are allowed either per invoice line or per invoice (not in both) | Επιτρέπονται φόροι είτε ανά γραμμή τιμολογίου είτε ανά τιμολόγιο (όχι και στα δύο) | | `225` | ValidationError | Invoice | {Field} must exist (cannot be null) since the {Field} is not null (invoice line {lineNumber}) | Το {Πεδίο} πρέπει να υπάρχει (δεν μπορεί να είναι κενό) καθώς το {Πεδίο} δεν είναι κενό (γραμμή τιμολογίου {Αριθμός Γραμμής}) | | `226` | ValidationError | Invoice | The sum of {field} amount of the invoice {section} doesn't match with total {field} amount of the invoice | Το άθροισμα του ποσού {Πεδίο} του τιμολογίου {ενότητα} δεν ταιριάζει με το συνολικό ποσό {Πεδίο} του τιμολογίου | | `227` | ValidationError | Invoice | {Field1} cannot exist (must be null) since the {Field1} is null (invoice line : {lineNumber}) [ Possible {Field1, Field2} values: {‘feesAmount’, feesPercentCategory’}, {‘stampDutyAmount, ‘stampDutyPercentCategory’ }, {‘withheldAmount’, ‘withheldPercentCategory’}] | Το {Πεδίο1} δεν μπορεί να υπάρχει (πρέπει να είναι κενό) καθώς το {Πεδίο1} είναι κενό (γραμμή τιμολογίου: {Αριθμός Γραμμής}) [Πιθανές τιμές {Πεδίο1, Πεδίο2}: {'Ποσό Τελών', Κατηγορία Ποσοστού Τελών'}, {'Ποσό Ψηφιακού Τέλους συναλλαγής,' Κατηγορία Ποσοστού Ψηφιακού Τέλους συναλλαγής}, {'Παρακρατηθέν Ποσό', 'Κατηγορία Παρακρατηθέντος Ποσοστού'}] | | `228` (Providers only) | ValidationError | Invoice | {Field} is invalid [Possible {Field} values: {UID, InvoiceType} [Αφορά μόνο τους παρόχους] | Το {Πεδίο} δεν είναι έγκυρο [Πιθανές τιμές {Πεδίο}: {UID, Τύπος Τιμολογίου} [Αφορά μόνο τους παρόχους] | | `229` | ValidationError | Invoice | {Field1} is not correct according to the given: {Field2} (invoice line: {lineNumber}) [ Possible {Field1, Field2} values: {‘feesAmount’, feesPercentCategory’}, {‘stampDutyAmount, ‘stampDutyPercentCategory’ }, {‘withheldAmount’, ‘withheldPercentCategory’}] [Αφορά μόνο τους παρόχους] | Το {Πεδίο1} δεν είναι σωστό σύμφωνα με το δεδομένο: {Πεδίο2} (γραμμή τιμολογίου: {Αριθμός Γραμμής}) [Πιθανές τιμές {Πεδίο1, Πεδίο2}: {'Ποσό Τελών', Κατηγορία Ποσοστού Τελών'}, {'Ποσό Ψηφιακού Τέλους συναλλαγής,' Κατηγορία Ποσοστού Ψηφιακού Τέλους συναλλαγής}, {'Παρακρατηθέν Ποσό', 'Κατηγορία Παρακρατηθέντος Ποσοστού'}] [Αφορά μόνο τους παρόχους] | | `230` | ValidationError | Invoice | {Field} is mandatory for invoice detail (number} [Possible {Field} values: {E3 classifications, VAT classifications} | Το {Πεδίο} είναι υποχρεωτικό για στοιχεία τιμολογίου (αριθμός} [Πιθανές τιμές {Πεδίο} : {Ταξινομήσεις E3, ταξινομήσεις ΦΠΑ} | | `231` | ValidationError | Invoice | {Field} is forbidden for invoice detail (number} [Possible {Field} values: {E3 classifications, VAT classifications} | Το {Πεδίο} απαγορεύεται για στοιχεία τιμολογίου (αριθμός} [Πιθανές τιμές {Πεδίο} : {Ταξινομήσεις E3, ταξινομήσεις ΦΠΑ} | | `233` | ValidationError | Invoice | UID: " + {uid} + " has already been sent [Αφορά μόνο τους παρόχους] | UID: Το " + {uid} + " έχει ήδη σταλεί [Αφορά μόνο τους παρόχους] | | `234` | ValidationError | Invoice | The values 7 or 8 are not allowed for Vat Category for this invoice type | Οι τιμές 7 ή 8 δεν επιτρέπονται για την κατηγορία ΦΠΑ για αυτόν τον τύπο τιμολογίου | | `235` | ValidationError | Invoice | Issuer must be different from counterpart | Ο εκδότης πρέπει να είναι διαφορετικός από τον αντίστοιχο | | `236` (Providers only) | ValidationError | Invoice | The Sender (vatnumber): " + {afm} + " must be different from the issuer (vatnumber) | Ο Αποστολέας (ΑΦΜ): " + {ΑΦΜ} + " πρέπει να είναι διαφορετικός από τον εκδότη (ΑΦΜ) | | `237` | ValidationError | Invoice | Underlying Value(s) of taxes cannot be greater than the total net value of invoice | Η υποκείμενη αξία(εις) των φόρων δεν μπορεί να είναι μεγαλύτερη από τη συνολική καθαρή αξία του τιμολογίου | | `239` | ValidationError | Invoice | Taxamount(s) of taxes cannot be greater than the total net value of invoice | Ο φόρος (α) των φόρων δεν μπορεί να είναι μεγαλύτερος από τη συνολική καθαρή αξία του τιμολογίου | | `240` | ValidationError | Invoice | Taxamount {Taxamount } of taxline: {A/A} cannot be greater than the corresponding underlying value | Ποσό Φόρου {Ποσό Φόρου} της Γραμμής Φόρου: Το {A/A} δεν μπορεί να είναι μεγαλύτερο από την αντίστοιχη υποκείμενη αξία | | `241` | ValidationError | Invoice | {Field1} cannot be greater than the corresponding invoiceline net value (invoice line: + {linenumber} ) [ Possible {Field1} values: {‘feesAmount’, ‘otherTaxesPercentAmount’, ‘stampDutyAmount, ‘withheldAmount’}] | Το {Πεδίο1} δεν μπορεί να είναι μεγαλύτερο από την αντίστοιχη καθαρή αξία γραμμής τιμολογίου (Γραμμή Τιμολογίου: + {αριθμός γραμμής}) [Πιθανές τιμές {Πεδίο1}: {'Ποσό Τελών', 'Ποσό Ποσοστού Λοιπών Φόρων', 'Ποσό Τέλους Ψηφιακού Τέλους συναλλαγής, 'Παρακρατηθέν Ποσό'}] | | `242` | ValidationError | Invoice | {Field} 's country for this invoice type must be Greece [Possible {Field} values: {Issuer, Counterpart} | Η χώρα του {Πεδίο} για αυτόν τον τύπο τιμολογίου πρέπει να είναι η Ελλάδα [Πιθανές τιμές {Πεδίο}: {Εκδότης, Αντισυμβαλλόμενος} | | `243` | ValidationError | Invoice | {Field} 's country for this invoice type must be in Europe but not Greece [Possible {Field} values: {Issuer, Counterpart} | Η χώρα του {Πεδίο} για αυτόν τον τύπο τιμολογίου πρέπει να είναι στην Ευρώπη αλλά όχι στην Ελλάδα [Πιθανές τιμές {Πεδίο}: {Εκδότης, Αντισυμβαλλόμενος} | | `244` | ValidationError | Invoice | {Field} 's country for this invoice type must not be in EU [Possible {Field} values: {Issuer, Counterpart} | Η χώρα του {Πεδίο} για αυτόν τον τύπο τιμολογίου δεν πρέπει να είναι στην ΕΕ [Πιθανές τιμές {Πεδίο}: {Εκδότης, Αντισυμβαλλόμενος} | | `245` (Providers only) | ValidationError | Invoice | Provider is not authorised to issue Invoices for: {vatNumber} | Ο πάροχος δεν είναι εξουσιοδοτημένος να εκδίδει τιμολόγια για: {ΑΦΜ} | | `246` | ValidationError | Invoice | Invoice of type 1.5 must have at least one line with detailtype = 1 and one with detail type=2 | Το τιμολόγιο τύπου 1.5 πρέπει να έχει τουλάχιστον μία γραμμή με: Τύπος Στοιχείου = 1 και μία με: Τύπος Στοιχείου = 2 | | `247` | ValidationError | Invoice | Invoice line: {lineNumber}. {Field} is forbidden. [Possible {Field} values: {recType=1, recType=4, recType=5} | Γραμμή τιμολογίου: {Αριθμός Γραμμής}. Το {Πεδίο} είναι απαγορευμένο. [Πιθανές τιμές {Πεδίο}: {Τύπος rec =1, Τύπος rec =4, Τύπος rec =5} | | `248` | ValidationError | Invoice | Invoice with MARK {mark} cannot be cancelled because was not posted by VAT number {vat} | Το τιμολόγιο με MARK {mark} δεν μπορεί να ακυρωθεί επειδή δεν δημοσιεύτηκε από τον ΑΦΜ {ΑΦΜ} | | `249` | ValidationError | Invoice | Invoice with MARK {mark} cannot be cancelled because of being posted by provider | Το τιμολόγιο με MARK {mark} δεν μπορεί να ακυρωθεί λόγω δημοσίευσης από τον πάροχο | | `250` | ValidationError | Invoice | Invoice with MARK {mark} cannot be cancelled because of being posted by myDATA Invoicing | Το τιμολόγιο με MARK {mark} δεν μπορεί να ακυρωθεί επειδή δημοσιεύτηκε από την τιμολόγηση myDATA | | `251` | ValidationError | Invoice | Invoice with MARK {mark} cannot be cancelled because of being already cancelled | Το τιμολόγιο με MARK {mark} δεν μπορεί να ακυρωθεί επειδή έχει ήδη ακυρωθεί | | `252` | ValidationError | Invoice | Record with MARK {mark} is not a valid Invoice | Η εγγραφή με MARK {mark} δεν είναι έγκυρο τιμολόγιο | | `253` | ValidationError | Invoice | IssueDate is invalid, it must be greater or equal than {date} and less or equal than current date [Δεν αφορά τους παρόχους] | Η Ημερομηνία Έκδοσης δεν είναι έγκυρη, πρέπει να είναι μεγαλύτερη ή ίση με {ημερομηνία} και μικρότερη ή ίση με την τρέχουσα ημερομηνία [Δεν αφορά τους παρόχους] | | `254` | ValidationError | Invoice | TaxLine (TaxTotals) : + {taxlinenumber} . {field + fieldData} is forbidden | Γραμμή Φόρου (Σύνολα Φόρου): + {Αριθμός Γραμμής Φόρου}. Το {Πεδίο + Δεδομένα Πεδίου} απαγορεύεται | | `255` | ValidationError | Invoice | Invoice with MARK {mark} cannot be cancelled because it is connected with active invoice with MARK {mark1} | Το τιμολόγιο με MARK {mark} δεν μπορεί να ακυρωθεί επειδή είναι συνδεδεμένο με ενεργό τιμολόγιο με MARK {mark1} | | `256` | ValidationError | Invoice | Invoice with MARK {mark} cannot be classified because of being already cancelled | Το τιμολόγιο με MARK {mark} δεν μπορεί να ταξινομηθεί επειδή έχει ήδη ακυρωθεί | | `257` | ValidationError | Invoice | Invoice with MARK {mark} cannot be cancelled because of being posted by TaxRegister | Το τιμολόγιο με MARK {mark} δεν μπορεί να ακυρωθεί επειδή έχει αναρτηθεί από το Φορολογικό Μητρώο | | `258` | ValidationError | Invoice | All invoice rows should have {Field} [Possible {Field} values: {recType=3} | Όλες οι σειρές τιμολογίων πρέπει να έχουν {Πεδίο} [Πιθανές τιμές {Πεδίο}: {Τύπος rec =3} | | `259` | ValidationError | Invoice | Invoice cannot be posted because it replaces invoice with MARK {mark} having same UID and is still connected with active invoices | Το τιμολόγιο δεν μπορεί να αναρτηθεί επειδή αντικαθιστά το τιμολόγιο με MARK {mark} που έχει το ίδιο UID και εξακολουθεί να συνδέεται με ενεργά τιμολόγια | | `260` | ValidationError | Invoice | IssueDate is invalid, it must be less or equal than current date | Η Ημερομηνία Έκδοσης δεν είναι έγκυρη, πρέπει να είναι μικρότερη ή ίση με την τρέχουσα ημερομηνία | | `261` | ValidationError | Invoice | Each Invoice row must have unique line number | Κάθε σειρά τιμολογίου πρέπει να έχει μοναδικό αριθμό γραμμής | | `262` | ValidationError | Invoice | {field} length must be less or equal than {number} | Το μήκος {Πεδίο} πρέπει να είναι μικρότερο ή ίσο από το {αριθμός} | | `263` | ValidationError | Invoice | Invoice with invoiceVariationType {field} and IssueDate {issueDate} cannot be sent earlier than { date} [Possible {field} values: {invoiceVariationType=1,2,3,4} | Το τιμολόγιο με Τύπο Τροποποίησης Τιμολογίου {Πεδίο} και Ημερομηνία Έκδοσης {Ημερομηνία Έκδοσης} δεν μπορεί να σταλεί νωρίτερα από {ημερομηνία} [Πιθανές τιμές {Πεδίο}: {Τύπος Τροποποίησης Τιμολογίου =1,2,3,4} | | `264` | ValidationError | Invoice | Invoice with invoiceVariationType {field} cannot be sent for issueDate's year earlier than 2021 [Possible {field} values: {invoiceVariationType=1,2,3, 4} | Το τιμολόγιο με Τύπο Τροποποίησης Τιμολογίου {Πεδίο} δεν μπορεί να σταλεί για έτος Ημερομηνίας Έκδοσης νωρίτερα από το 2021 [Πιθανές τιμές {Πεδίο}: {Τύπος Τροποποίησης Τιμολογίου=1,2,3,4} | | `265` | ValidationError | Invoice | The maximum allowed number of invoices contained in one message is 5000 | Ο μέγιστος επιτρεπόμενος αριθμός τιμολογίων που περιέχονται σε ένα μήνυμα είναι 5000 | | `266` | ValidationError | Invoice | {msg11} is forbidden {msg2} [Possible {msg1} values: {‘Invoice with SpecialInvoiceCategoryType field with value 4 (taxfree invoice)’} [Possible {msg2} values: {‘for invoices sent by provider channel’} | Το {msg11} είναι απαγορευμένο {msg2} [Πιθανές τιμές {msg1}: {'Τιμολόγιο με πεδίο Τύπος Ειδικής Κατηγορίας Τιμολογίου με τιμή 4 (αφορολόγητο τιμολόγιο)'} [Πιθανές τιμές {msg2}: {'για τιμολόγια που αποστέλλονται από το κανάλι παρόχου'} | | `267` | ValidationError | Invoice | {msg11} is allowed {msg2} [Possible {msg1} values: {‘Invoice with SpecialInvoiceCategoryType field with value 4 (taxfree invoice)’} [Possible {msg2} values: {‘only for invoices sent by erp or timologio channel’} | Το {msg11} επιτρέπεται {msg2} [Πιθανές τιμές {msg1}: {'Τιμολόγιο με πεδίο Τύπος Ειδικής Κατηγορίας Τιμολογίου με τιμή 4 (αφορολόγητο τιμολόγιο)'} [Πιθανές τιμές {msg2}: {'μόνο για τιμολόγια που αποστέλλονται από κανάλι erp ή timologio'} | | `268` | ValidationError | Invoice | In case of fuelInvoice, at least one line must have fuelCode different from 999 | Στην περίπτωση του Τιμολογίου Καυσίμων, τουλάχιστον μία γραμμή πρέπει να έχει Κωδικό Καυσίμων διαφορετικό από το 999 | | `269` | ValidationError | Invoice | In case of fuelInvoice, the net value of the invoice line with fuelCode 999 must be less or equal than sum of net values of the other invoice lines | Στην περίπτωση του Τιμολογίου Καυσίμων, η καθαρή αξία της γραμμής τιμολογίου με τον Κωδικό Καυσίμων 999 πρέπει να είναι μικρότερη ή ίση από το άθροισμα των καθαρών αξιών των άλλων γραμμών τιμολογίων | | `270` | ValidationError | Invoice | In case of fuelInvoice, only one line can have fuelCode equal with 999 | Στην περίπτωση του Τιμολογίου Καυσίμων, μόνο μία γραμμή μπορεί να έχει Κωδικό Καυσίμων ίσο με 999 | | `271` | ValidationError | Invoice | Invoice Line Number: {linenumber}. VatExemptionCategory field is used only in case of vatCategory = 7 | Αριθμός γραμμής τιμολογίου: {αριθμός γραμμής}. Το πεδίο Κατηγορία Απαλλαγής ΦΠΑ χρησιμοποιείται μόνο στην περίπτωση Κατηγορία ΦΠΑ = 7 | | `272` | ValidationError | Invoice | {field} is mandatory + {moreInfo} [{moreInfo} μπορεί να είναι null] | Το {Πεδίο} είναι υποχρεωτικό + {Περισσότερες Πληροφορίες} [{Περισσότερες Πληροφορίες} μπορεί να είναι κενό] | | `273` | ValidationError | Invoice | {field} is not allowed + {moreInfo} [{moreInfo} μπορεί να είναι null] | Το {Πεδίο} δεν επιτρέπεται + {Περισσότερες Πληροφορίες} [{περισσότερες πληροφορίες} μπορεί να είναι κενό] | | `274` | ValidationError | Invoice | {field} are mandatory for this invoicetype + {moreInfo} [{moreInfo} μπορεί να είναι null] | Το {Πεδίο} είναι υποχρεωτικό για αυτόν τον τύπο τιμολογίου + {Περισσότερες Πληροφορίες} [{περισσότερες πληροφορίες} μπορεί να είναι κενό] | | `275` | ValidationError | Invoice | The message cannot contain invoices and invoices/consignment notes with the same uid | Το μήνυμα δεν μπορεί να περιέχει τιμολόγια και τιμολόγια/δελτία αποστολής με το ίδιο uid | | `276` | ValidationError | Invoice | {field} length must be equal with {number} | Το μήκος του {Πεδίο} πρέπει να είναι ίσο με τον {αριθμός} | | `277` | ValidationError | Invoice | The message cannot contain invoices of type: {invoiceType} with the same uid | Το μήνυμα δεν μπορεί να περιέχει τιμολόγια τύπου: {Τύπος Τιμολογίου} με το ίδιο uid | | `278` | ValidationError | Invoice | IssueDate is invalid, it must be greater or equal with current date | Η Ημερομηνία Έκδοσης δεν είναι έγκυρη, πρέπει να είναι μεγαλύτερη ή ίση με την τρέχουσα ημερομηνία | | `279` | ValidationError | Invoice | Invoice with MARK {mark} cannot be cancelled + {moreInfo} [{moreInfo} μπορεί να είναι null] | Το τιμολόγιο με MARK {mark} δεν μπορεί να ακυρωθεί + {Περισσότερες Πληροφορίες} [{περισσότερες πληροφορίες} μπορεί να είναι κενό] | | `280` | ValidationError | Invoice | DispatchDate is invalid, it must be greater or equal with current date | Η Ημερομηνία Αποστολής δεν είναι έγκυρη, πρέπει να είναι μεγαλύτερη ή ίση με την τρέχουσα ημερομηνία | | `281` | ValidationError | Invoice | Invoice of type 8.6 with totalCancelDeliveryOrders = true, must have only one row. The net value and vat amount of this row must be equal with 0 and its vat category must have value 8 | Τιμολόγιο τύπου 8.6 με totalCancelDeliveryOrders = αληθής, πρέπει να έχει μόνο μία σειρά. Η καθαρή αξία και το ποσό του ΦΠΑ αυτής της σειράς πρέπει να είναι ίσα με 0 και η κατηγορία του ΦΠΑ πρέπει να έχει τιμή 8 | | `282` | ValidationError | Invoice | {msg1} must have value greater or equal than 0 for this invoice type [Possible {msg1} values: {‘NetValue per line, which have recType = 6,’} | Το {msg1} πρέπει να έχει τιμή μεγαλύτερη ή ίση του μηδενός για αυτό΄ν τον τύπο του παραστατικού [Πιθανές {msg1} τιμές: {‘Η καθαρή αξία κάθε γραμμής,με recType = 6,’} | | `283` | ValidationError | Invoice | Invoice with MARK {mark} is {invoiceType Value} invoice type. With CancelDeliveryNote method only 9.3 invoice type can be cancelled. | Το παραστατικό με ΜΑΡΚ {mark} είναι {invoicetype value}. Με την CancelDeliveryNote μέθοδο μόνο 9.3 παραστατικά μπορούν να ακυρωθούν | | `284` | ValidationError | Invoice | Please pass entityVatNumber in the request parameters | Περάστε το ΑΦΜ οντότητας στις παραμέτρους σώμα του http αιτήματος | | `285` | ValidationError | Invoice | Provider with VAT number {vatNumber} is not authorised to execute this method for: {entityVatNumber} | Ο πάροχος με {ΑΦΜ Παρόχου} δεν είναι εξουσιοδοτημένος να εκτελεί αυτή τη μέθοδο για: {ΑΦΜ Οντότητας} | | `286` | ValidationError | Invoice | Issuer must be same with counterpart | Ο εκδότης πρέπει να είναι ίδιος με τον λήπτη | | `287` | ValidationError | Invoice | {Field} 's country for this invoice type must not be Greece [Possible {Field} values: {Issuer, Counterpart} | Η χώρα του {Πεδίο} για αυτόν τον τύπο τιμολογίου δεν πρέπει να είναι η Ελλάδα [Πιθανές τιμές {Πεδίο}: {Εκδότης, Αντισυμβαλλόμενος} | | `288` (Providers only) | ValidationError | Invoice | Invoice submission is allowed within two days from the issue date when TransmissionFlag = 4 | Η υποβολή τιμολογίου επιτρέπεται εντός δύο ημερών από την ημερομηνία έκδοσης όταν το TransmissionFlag = 4 | | `289` | ValidationError | Invoice | {Field} VAT number must be 000000000 [Possible {Field} values: {Issuer’s, Counterpart’s} | Το ΑΦΜ του {Πεδίο} πρέπει να είναι 000000000 [Πιθανές τιμές {Πεδίο}: {Εκδότης, Αντισυμβαλλόμενος} | | `290` | ValidationError | Invoice | Both nonObligatedRecipient=true and withoutDigitalTransportTrac king=true are not allowed | Δεν επιτρέπονται ταυτόχρονα nonObligatedRecipient=true and withoutDigitalTransportTrac king=true | | `301` | ValidationError | Classification | Invoices with ΜΑΡΚ {mark} requested not found | Τα τιμολόγια με MARK {mark} δεν βρέθηκαν | | `302` | ValidationError | Classification | Duplicate classification line number {lineNumber} | Διπλότυπος αριθμός γραμμής ταξινόμησης {Αριθμός Γραμμής} | | `303` | ValidationError | Classification | Line number {lineNumber} not found in invoice with MARK {mark} | Ο αριθμός γραμμής {Αριθμός Γραμμής} δεν βρέθηκε στο τιμολόγιο με MARK {mark} | | `304` | ValidationError | Classification | All invoice rows or none should have classifications included | Όλες οι σειρές τιμολογίων ή καμία θα πρέπει να περιλαμβάνουν ταξινομήσεις | | `305` | ValidationError | Classification | Invoice line: {lineNumber}. Duplicate classification type {classificationType} and category{classificationCateg ory} | Γραμμή τιμολογίου: {Αριθμός Γραμμής}. Διπλότυπος τύπος ταξινόμησης {Τύπος Ταξινόμησης} και κατηγορία {Κατηγορία Ταξινόμησης} | | `306` | ValidationError | Classification | Invoice line: {lineNumber}. Sum of classifications are not equal to line's net value | Γραμμή τιμολογίου: {Αριθμός Γραμμής}. Το άθροισμα των ταξινομήσεων δεν είναι ίσο με την καθαρή αξία της γραμμής | | `307` | ValidationError | Classification | Classification type {classificationType} is forbidden for Classification category {classificationCategory} | Ο τύπος ταξινόμησης {Τύπος Ταξινόμησης} απαγορεύεται για την κατηγορία ταξινόμησης {Κατηγορία Ταξινόμησης} | | `308` | ValidationError | Classification | Classification category {classificationCategory} is forbidden for Invoice type {classificationType} | Η κατηγορία ταξινόμησης {Κατηγορία Ταξινόμησης} απαγορεύεται για τον τύπο τιμολογίου {Τύπος Ταξινόμησης} | | `309` | ValidationError | Classification | {ClassificationMode} classifications are forbidden for invoice with mark {mark} on behalf of vat number {vatNumber} for invoice row with detail type {detailType} | Ταξινομήσεις {Τρόπος Ταξινόμησης} απαγορεύονται για τιμολόγιο με σήμα {mark} για λογαριασμό του ΑΦΜ {ΑΦΜ} για σειρά τιμολογίου με τύπο στοιχείου {Τύπος Στοιχείου} | | `310` | TechnicalError | Classification | All classifications of invoice or none should have category value {classificationCategory} | Όλες οι ταξινομήσεις τιμολογίων ή καμία θα πρέπει να έχουν τιμή κατηγορίας {Κατηγορία Ταξινόμησης} | | `311` | ValidationError | Classification | Classification with type {classificationType} and category " {classificationCategory} not found in invoice summary | Ταξινόμηση με τύπο {Τύπος Ταξινόμησης} και κατηγορία " {Κατηγορία Ταξινόμησης} δεν βρέθηκε στην περίληψη τιμολογίων | | `312` | ValidationError | Classification | Sum of classifications with type {classificationType} and category {classificationCategory} not matching with related total in invoice summary | Άθροισμα ταξινομήσεων με τύπο {Τύπος Ταξινόμησης} και κατηγορία {Κατηγορία Ταξινόμησης} που δεν ταιριάζει με το σχετικό σύνολο στην περίληψη τιμολογίων | | `313` | ValidationError | Classification | Classification type {classificationType} is forbidden for Classification category {classificationCategory} combined with invoice type {invoiceType} | Ο τύπος ταξινόμησης {Τύπος Ταξινόμησης} απαγορεύεται για την κατηγορία ταξινόμησης {Κατηγορία Ταξινόμησης} σε συνδυασμό με τον τύπο τιμολογίου {Τύπος Τιμολογίου} | | `314` | ValidationError | Classification | All invoices should contain either income or expenses classifications section, not both or none | Όλα τα τιμολόγια πρέπει να περιέχουν είτε την ενότητα ταξινομήσεων εσόδων ή εξόδων, όχι και τις δύο ή καμία | | `315` | ValidationError | Classification | VAT classifications have no category | Οι χαρακτηρισμοί (ταξινομήσεις) ΦΠΑ δεν έχουν κατηγορία | | `316` | ValidationError | Classification | VAT classifications are not allowed in case of VAT exemption | Δεν επιτρέπονται χαρακτηρισμοί (ταξινομήσεις) ΦΠΑ σε περίπτωση απαλλαγής από τον ΦΠΑ | | `317` | ValidationError | Classification | Invoice detail { lineNumber } : VAT classification must be of type 366 in case vatExemptionCategory = 16 | Στοιχεία τιμολογίου {Αριθμός Γραμμής}: Η ταξινόμηση ΦΠΑ πρέπει να είναι τύπου 366 σε περίπτωση Κατηγορία Απαλλαγής ΦΠΑ = 16 | | `318` | ValidationError | Invoice | Element {Field} must have same value with correlated's one | Το στοιχείο {Πεδίο} πρέπει να έχει την ίδια τιμή με το συσχετισμένο | | `319` | ValidationError | Invoice | Net value of correlated invoice already exceeded by sum of net values of invoices correlated to it | Η καθαρή αξία του συσχετισμένου τιμολογίου έχει ήδη υπερβεί το άθροισμα των καθαρών αξιών των τιμολογίων που σχετίζονται με αυτό | | `320` | ValidationError | Invoice | Invalid correlated invoice type | Μη έγκυρος τύπος συσχετισμένου τιμολογίου | | `321` | ValidationError | Classification | Classifications are not allowed only in the invoice summary | Δεν επιτρέπονται ταξινομήσεις μόνο στην περίληψη τιμολογίων | | `322` | ValidationError | Invoice | Unsupported correlated invoice type | Μη υποστηριζόμενος τύπος συσχετισμένου τιμολογίου | | `323` | ValidationError | Classification | User cannot use directly this service due to annual gross income limits | Ο χρήστης δεν μπορεί να χρησιμοποιήσει απευθείας αυτήν την υπηρεσία λόγω των ετήσιων ορίων ακαθάριστου εισοδήματος | | `324` | ValidationError | Classification | Classification rejection or deviation is not allowed to be sent with this method | Η απόρριψη ή η απόκλιση ταξινόμησης δεν επιτρέπεται να αποστέλλεται με αυτήν τη μέθοδο | | `325` | ValidationError | Classification | Initial invoice's combination of vatCategory {vatCategory} and vatExemptionCategory {vatExemptionCategory} not found in ExpensesClassificationDoc | Ο συνδυασμός του αρχικού τιμολογίου Κατηγορίας ΦΠΑ {ΚατηγορίαΦΠΑ} και της Κατηγορίας Απαλλαγής ΦΠΑ {ΚατηγορίαΑπαλλαγήςΦΠΑ} δεν βρέθηκαν στο Έγγραφο χαρακτηρισμού εξόδων | | `326` | ValidationError | Classification | Initial invoice's combination of vatCategory {vatCategory}, vatExemptionCategory {vatExemptionCategory}, amount {amount} and VAT amount {vatAmount} not matching classification’s | Ο συνδυασμός του αρχικού τιμολογίου Κατηγορίας ΦΠΑ {ΚατηγορίαΦΠΑ}, Κατηγορίας Απαλλαγής ΦΠΑ {ΚατηγορίαΑπαλλαγήςΦΠΑ}, αξίας {αξίας} και ποσού ΦΠΑ {ποσόΦΠΑ} δεν ταιριάζουν με τους χαρακτηρισμούς | | `327` | ValidationError | Classification | Combination vatCategory {vatCategory}, vatExemptionCategory {vatExemptionCategory}: Amount must have same analogy with VAT amount | Συνδυασμός Κατηγορίας ΦΠΑ {ΚατηγορίαΦΠΑ}, Κατηγορίας Απαλλαγής ΦΠΑ {ΚατηγορίαΑπαλλαγήςΦΠΑ}: το ποσό πρέπει να έχει την ίδια αναλογία με το ποσό ΦΠΑ | | `328` | ValidationError | Classification | Combination vatCategory {vatCategory}, vatExemptionCategory {vatExemptionCategory}: VAT amount exceedes the one of initial's invoice for same combination | Συνδυασμός Κατηγορίας ΦΠΑ {ΚατηγορίαΦΠΑ}, Κατηγορίας Απαλλαγής ΦΠΑ {ΚατηγορίαΑπαλλαγήςΦΠΑ}: το ποσό ΦΠΑ υπερβαίνει αυτό του αρχικού τιμολογίου για τον ίδιο συνδυασμό | | `329` | ValidationError | Classification | Combination vatCategory {vatCategory}, vatExemptionCategory {vatExemptionCategory}: Combination not found in initial invoice | Συνδυασμός Κατηγορίας ΦΠΑ {ΚατηγορίαΦΠΑ}, Κατηγορίας Απαλλαγής ΦΠΑ {ΚατηγορίαΑπαλλαγήςΦΠΑ}: Ο συνδυασμός δε βρέθηκε στο αρχικό παραστατικό | | `330` | ValidationError | Classification | Unexpected technical error for classification line | Απροσδόκητο τεχνικό σφάλμα για τη γραμμή ταξινόμησης | | `331` | ValidationError | Classification | Could not load/found valid validation doc for classification with category {classification_category} and type {classification_type} | Δεν ήταν δυνατή η φόρτωση/δεν βρέθηκε έγκυρο έγγραφο επικύρωσης για ταξινόμηση με κατηγορία {κατηγορία_ταξινόμησης} και τύπο {τύπος_ταξινόμησης} | | `332` | ValidationError | Classification | In case of VAT exemption sum of E3 classifications' amounts and sum of VAT classifications' vat amounts must be equal to invoice total net value plus taxes to be classified plus excluded vat amount | Σε περίπτωση απαλλαγής ΦΠΑ, το άθροισμα των ποσών των ταξινομήσεων Ε3 και το άθροισμα των ποσών ΦΠΑ των ταξινομήσεων ΦΠΑ πρέπει να είναι ίσο με τη συνολική καθαρή αξία του τιμολογίου συν τους φόρους που πρέπει να ταξινομηθούν συν το ποσό του μη εξαιρούμενου ΦΠΑ | | `333` | ValidationError | Classification | Sum of E3 classifications' amounts must be equal to invoice total net value plus taxes to be classified | Το άθροισμα των ποσών των ταξινομήσεων E3 πρέπει να είναι ίσο με τη συνολική καθαρή αξία του τιμολογίου συν τους φόρους που πρέπει να ταξινομηθούν | | `334` | ValidationError | Classification | Combination vatCategory {field1} , vatExemptionCategory {field2} : In case of without VAT obligation, a classification with similar VAT exemption category, VAT category of 24% or 17% and classification type 366 is required [Possible {field1} values: {‘null’, [1-8]}] [Possible {field2} values: {‘null’, [εύρος τιμών των αιτιών εξαίρεσης από το σχετικό παράρτημα]}] | Συνδυασμός Κατηγορία ΦΠΑ {Πεδίο1}, Κατηγορία Απαλλαγής ΦΠΑ {Πεδίο2}: Σε περίπτωση χωρίς υποχρέωση ΦΠΑ, απαιτείται ταξινόμηση με παρόμοια κατηγορία απαλλαγής ΦΠΑ, κατηγορία ΦΠΑ 24% ή 17% και τύπο ταξινόμησης 366 [Πιθανές τιμές {Πεδίο1}: {'κενό', [1-8]}] [Πιθανές τιμές {Πεδίο2}: {'κενό', [εύρος τιμών των αιτιών εξαίρεσης από το σχετικό παράρτημα]}] | | `335` | TechnicalError | Classification | SendExpensesClassificationP erInvoice method is not supported for fuel invoices or invoices of type 1.5 | Η Ταξινόμηση Εξόδων Αποστολής ανά Τιμολόγιο δεν υποστηρίζεται για τιμολόγια καυσίμων ή τιμολόγια τύπου 1.5 | | `336` | ValidationError | Classification | In case of VAT exemption a percentage of vat amount must be referred in E3 classification with category 2.5 | Σε περίπτωση απαλλαγής από ΦΠΑ, πρέπει να αναφέρεται ποσοστό του ποσού ΦΠΑ στην ταξινόμηση Ε3 με κατηγορία 2.5 | | `337` | ValidationError | Classification | Combination vatCategory {field1}, vatExemptionCategory {field2}: Fields vatAmount, vatCategory and vatExemptionCategory must be null when classifications are posted per line [Possible {field1} values: {‘null’, [1-8]}] [Possible {field2} values: {‘null’, [εύρος τιμών των αιτιών εξαίρεσης ΦΠΑ από το σχετικό πίνακα του παραρτήματος]}] | Συνδυασμός Κατηγορία ΦΠΑ {Πεδίο1}, Κατηγορία Απαλλαγής ΦΠΑ {Πεδίο2}: Τα πεδία Ποσό ΦΠΑ, Κατηγορία ΦΠΑ και Κατηγορία Απαλλαγής ΦΠΑ πρέπει να είναι μηδενικά όταν δημοσιεύονται ταξινομήσεις ανά γραμμή [Πιθανές τιμές {Πεδίο1}: {'κενό', [1-8]}] [Πιθανές τιμές {Πεδίο2}: {'κενό', [εύρος τιμών των αιτιών εξαίρεσης ΦΠΑ από το σχετικό πίνακα του παραρτήματος]}] | | `338` | ValidationError | Classification | Classification is forbidden for invoice row {linenumber} because of its recType or its detailType Value | Απαγορεύεται ο χαρακτηρισμός για τη σειρά τιμολογίων {αριθμός γραμμής} λόγω του Τύπος rec ή του Τύπου Στοιχείου: Τιμή | | `339` | ValidationError | Classification | {msg} classification is forbidden for invoice row {linenumber} because of its detailType value [Possible {msg} values: {‘incomeClassification’, ‘expensesClassification’}] | {μήνυμα} χαρακτηρισμός δεν επιτρέπεται για τη γραμμή παραστατικού {αριθμός γραμμής} λόγω της τιμής του Τύπου Στοιχείου [Πιθανές τιμές {msg}: {'Χαρακτηρισμός εσόδων', ''Χαρακτηρισμός Εξόδων'}] | | `340` | ValidationError | Classification | ClassificationPostMode field must not be contained in xml | Το πεδίο Τρόπος Ανάρτησης Χαρακτηρισμού (ClassificationPostMode) δεν πρέπει να περιέχεται σε xml | | `341` | ValidationError | Classification | Expenses VAT classification code NOT_VAT_295 is not allowed to be posted for invoices of type 14.1 and 14.3 | Ο κωδικός κατάταξης ΦΠΑ δαπανών NOT_VAT_295 δεν επιτρέπεται να αναρτάται για τιμολόγια τύπου 14.1 και 14.3 | | `401` | ValidationError | Invoice | Resending payments methods is not allowed for initial's invoice type | Η εκ νέου αποστολή μεθόδων πληρωμής δεν επιτρέπεται για τον τύπο τιμολογίου του αρχικού | | `402` | ValidationError | Payment | At least one payment method detail must be of POS type | Τουλάχιστον ένα στοιχείο τρόπου πληρωμής πρέπει να είναι τύπου POS | | `403` | ValidationError | Payment | Invoice with MARK {mark} was sent by provider. Payment Methods must contain provider signature | Το τιμολόγιο με MARK {mark} στάλθηκε από τον πάροχο. Οι Τρόποι Πληρωμής πρέπει να περιέχουν την υπογραφή του παρόχου | | `404` | ValidationError | Payment | Invoice with MARK {mark} was sent by ERP. Payment Methods must not contain provider signature" | Το τιμολόγιο με MARK {mark} στάλθηκε από ERP. Οι τρόποι πληρωμής δεν πρέπει να περιέχουν υπογραφή παρόχου" | | `405` | ValidationError | Payment | Invoice with MARK {mark} was sent by provider. Payment Methods must not contain ECR token" | Το τιμολόγιο με MARK {mark} στάλθηκε από τον πάροχο. Οι τρόποι πληρωμής δεν πρέπει να περιέχουν διακριτικό ECR" | | `406` | ValidationError | Payment | Invoice with MARK {mark} was sent by ERP. Payment Methods must contain ECR token | Το τιμολόγιο με MARK {mark} στάλθηκε από ERP. Οι τρόποι πληρωμής πρέπει να περιέχουν διακριτικό ECR | | `407` | ValidationError | Payment | Payment Methods total amount must be equal to or less than initial invoice's total value | Το συνολικό ποσό των τρόπων πληρωμής πρέπει να είναι ίσο ή μικρότερο από τη συνολική αξία του αρχικού τιμολογίου | | `408` | ValidationError | Payment | Invoice with ΜΑΡΚ {invoice_mark}: Payment Methods cannot be resent for invoices created by timologio application | Τιμολόγιο με MARK {mark_τιμολογίου}: Δεν είναι δυνατή η εκ νέου αποστολή των τρόπων πληρωμής για τιμολόγια που δημιουργούνται από την εφαρμογή timologio | | `409` | ValidationError | Payment | EndToΕndReferenceID field is forbidden for paymentMethodDetails of type equal to POS | Το πεδίο EndToEndReferenceID απαγορεύεται για λεπτομέρειες μεθόδου πληρωμής τύπου ίσου με POS" | | `-` | TechnicalError | - | Unexpected condition error | Μη αναμενόμενο σφάλμα συνθήκης | Source: https://developers.novusconceptus.com/provider-api/aade-errors/ --- # Charges (credits) Every successful call is charged in **credits**, from your account balance. One balance covers all VAT numbers (ΑΦΜ), i.e. all customers, on your account. | Call / document type | Credits | |:---|---:| | Invoices 1.x, 2.x, 3.x, 5.x, 6.x, 7.1, 8.1, 8.2 | 1.00 | | Goods movement documents 9.1, 9.2, 9.3, 10.1, 10.2 | 1.00 | | Retail documents 11.1 – 11.5 | 0.50 | | POS receipts 8.4, 8.5 | 0.50 | | Food service order slip 8.6 | 0.50 | | B2G invoice (`SendInvoicesB2G`) | 1.00 | | Provider signature for card / IRIS payment, per payment line | 0.25 | | `CancelDeliveryNote` / `CancelReceivingNote` | 0.25 | - Every response returns the credits charged in the `credits` field, as text with a comma as the decimal separator, e.g. `"0,50"`. - You see your balance with GET `/api/v1/Provider/GetCreditsBalance`. - If your balance is not enough, the call is rejected with HTTP 400 `You don't have enough balance to send this request.` and the document is **not** transmitted. - In the sandbox, credits are for testing only. In production, you buy credits from the [portal](https://portal.timologisi.online). **Note** The prices above are the default charge per call. The price of each credits package is set by your commercial agreement. Source: https://developers.novusconceptus.com/provider-api/credits/ --- # Onboarding API: how it works With the Onboarding API you activate new clients (VAT numbers, ΑΦΜ) on your API key, with no emails and no paperwork. You send the client's details, the client signs the contract, Novus approves, and the system completes the activation and the Provider declaration to AADE (the Greek tax authority) on its own. ```mermaid sequenceDiagram autonumber participant SH as You (software house) participant NP as Novus Onboarding API participant CL as Client participant NV as Novus (review) participant AADE as AADE SH->>NP: POST /api/v1/requests (client details) NP-->>SH: requestId, status PENDING_SIGNATURE NP-)CL: Email with the contract (PDF) and an upload link CL->>NP: Uploads the signed contract (or you do: POST …/signed-contract) NP-->>SH: status UNDER_REVIEW (webhook) NV->>NP: Approval (or ACTION_REQUIRED with a reason) NP->>NP: Activates the VAT number on your API key, archives the contract NP->>AADE: Provider declaration NP-->>SH: status APPROVED, provisioning COMPLETED (webhook) NP-)CL: Email: "accept the declaration in myAADE within 10 days" ``` ## Request statuses | Status | Meaning | What you do | |:---|:---|:---| | `PENDING_SIGNATURE` | The contract was generated and sent to the client. | Wait for the signature, or upload it yourself. | | `UNDER_REVIEW` | A signed contract exists and Novus is reviewing it. | Nothing. This usually takes 1 business day. | | `ACTION_REQUIRED` | The contract was not accepted (e.g. it is not legible). The reason is in `message`. | Upload a new signed contract. | | `APPROVED` | Approved. The technical completion is shown in `provisioning`. | When `provisioning.status = COMPLETED`, you issue documents for this VAT number as normal. | | `REJECTED` | Rejected. Final status. | See `message`. | | `CANCELLED` | Cancelled by you or by Novus. Final status. | If needed, create a new request. | ```mermaid stateDiagram-v2 [*] --> PENDING_SIGNATURE: NEW_CONTRACT [*] --> UNDER_REVIEW: LINK_EXISTING PENDING_SIGNATURE --> UNDER_REVIEW: signed contract UNDER_REVIEW --> ACTION_REQUIRED: Novus asks for a correction ACTION_REQUIRED --> UNDER_REVIEW: new contract UNDER_REVIEW --> APPROVED UNDER_REVIEW --> REJECTED PENDING_SIGNATURE --> CANCELLED ACTION_REQUIRED --> CANCELLED UNDER_REVIEW --> CANCELLED ``` ## Two request types: the system decides | `requestType` | When | Contract? | |:---|:---|:---| | `NEW_CONTRACT` | The VAT number has no contract with Novus. | Yes. The client signs it. | | `LINK_EXISTING` | The VAT number already has a contract, e.g. through another software house. | No. Only the link to your API key is created, after approval. | The contract and the Provider declaration happen **once per client**, no matter how many software houses serve that client. ## The contract - It is generated automatically from the request details and is already signed by Novus. - It is sent to the client's `contactInfo.email` together with an upload link. The email is **always** sent, because the contract is between Novus and the client. - Any legible signature is accepted: scanned handwritten, via gov.gr, or digital. It must include **all pages**, upright and clean. PDF only, up to 15 MB. - If the client makes **B2C** sales, the request must also include the client's internet service provider (`ispDetails`). AADE requires this. ## After approval 1. The VAT number is activated on your API key and you can start issuing. 2. Novus sends the Provider declaration to AADE. The client must **accept it in myAADE within 10 days**. Otherwise it is deemed tacitly accepted (A.1112/2025). 3. Ending the cooperation after approval is possible **only through Novus**. ## In the sandbox In the sandbox, no Provider declaration is submitted to AADE and no real contract is created. **Emails, however, are sent as normal** (e.g. the contract to `contactInfo.email`), so use only your own test addresses. You can also test with real VAT numbers. To move a test request to `APPROVED`, send us its `requestId`. ## Next steps - All calls: [Endpoints](https://developers.novusconceptus.com/onboarding-api/endpoints/) - Real-time notifications: [Webhooks](https://developers.novusconceptus.com/onboarding-api/webhooks/) - For your application: [OpenAPI (YAML)](https://developers.novusconceptus.com/openapi/novus-onboarding-api.openapi.yaml) · [Postman](https://developers.novusconceptus.com/postman/Novus_Onboarding_API.postman_collection.json). In Postman, set `apiKey` in the collection **Variables** and run the folder "1. Ροή onboarding" (onboarding flow) in order. Source: https://developers.novusconceptus.com/onboarding-api/ --- # Onboarding API: endpoints | | | |:---|:---| | **Base URL** | Sandbox `https://provider-dev.timologisi.online` · Production `https://provider.timologisi.online` | | **Authentication** | Header `API-KEY`, the **same key** as for the Provider API. The key identifies which software house is calling. Never send it in the body or the URL. | | **Limit** | 60 calls / minute per key. The `X-RateLimit-Remaining` header shows how many remain. Above the limit: `429 RATE_LIMITED` with `Retry-After`. | | **Dates** | Date-time in ISO-8601 UTC. Plain date as `YYYY-MM-DD`. | | **Files** | [OpenAPI (YAML)](https://developers.novusconceptus.com/openapi/novus-onboarding-api.openapi.yaml) · [Postman](https://developers.novusconceptus.com/postman/Novus_Onboarding_API.postman_collection.json) | | | Endpoint | What it does | |:---|:---|:---| | POST | [`/api/v1/requests`](https://developers.novusconceptus.com/onboarding-api/endpoints/#create) | Create a request for one client | | GET | [`/api/v1/requests`](https://developers.novusconceptus.com/onboarding-api/endpoints/#list) | List your requests | | GET | [`/api/v1/requests/{requestId}`](https://developers.novusconceptus.com/onboarding-api/endpoints/#get) | Request status | | GET | [`/api/v1/requests/{requestId}/history`](https://developers.novusconceptus.com/onboarding-api/endpoints/#history) | Change history | | GET | [`/api/v1/requests/{requestId}/contract`](https://developers.novusconceptus.com/onboarding-api/endpoints/#contract) | Download the contract (PDF) | | POST | [`/api/v1/requests/{requestId}/signed-contract`](https://developers.novusconceptus.com/onboarding-api/endpoints/#upload) | Upload the signed contract | | DELETE | [`/api/v1/requests/{requestId}`](https://developers.novusconceptus.com/onboarding-api/endpoints/#cancel) | Cancel a request | | POST GET DELETE | [`/api/v1/webhooks…`](https://developers.novusconceptus.com/onboarding-api/webhooks/) | Webhooks | ## Response format All JSON endpoints wrap their response in an envelope: **Success** ```json { "success": true, "data": { … } } ``` **Error** ```json { "success": false, "error": { "code": "VALIDATION_ERROR", "message": "Ο έλεγχος των πεδίων απέτυχε.", "details": [ { "field": "companyDetails.vatNumber", "code": "INVALID_VALUE", "message": "companyDetails.vatNumber must be a valid nine digit Greek VAT number." } ] } } ``` The `error` object may also contain `context` (e.g. `existingRequestId`, `currentStatus`) and, only on `500`, `traceId`. ## Create a request POST `/api/v1/requests` | Header | | |:---|:---| | `Idempotency-Key` | Optional. A GUID of your own, **one per client**, unchanged across all retries. If the response is lost and you resend with the same key, you get back the original request (`200` instead of `201`). Do not reuse it for another VAT number, or for a request that was cancelled or rejected: `409`. | ```json title="Body (B2B + B2C)" { "companyDetails": { "legalName": "Παπαδόπουλος Α.Ε.", "tradeName": "PapaCorp", "vatNumber": "094019245", "taxOffice": "Α΄ Αθηνών", "transactionTypes": [ "B2B", "B2C" ] }, "address": { "city": "Αθήνα", "streetAddress": "Ερμού 15", "postalCode": "10563" }, "contactInfo": { "email": "info@papacorp.gr", "phone": "2101234567", "backupPhone": "6971234567" }, "administrator": { "fullName": "Γιάννης Παπαδόπουλος", "vatNumber": "090000045" }, "ispDetails": { "providerName": "Cosmote", "contractNumber": "CSM-2026-1", "contractDate": "2026-09-01" } } ``` | Field | Required | Rules | |:---|:---:|:---| | `companyDetails.legalName` | yes | | | `companyDetails.tradeName` | | | | `companyDetails.vatNumber` | yes | 9 digits **with a valid check digit**. Test values such as `123456789` are rejected. | | `companyDetails.taxOffice` | yes | | | `companyDetails.transactionTypes` | yes | At least one of `B2B`, `B2C`. `B2G` is **not** accepted. | | `address.city`, `address.streetAddress` | yes | | | `address.postalCode` | | | | `contactInfo.email` | yes | The contract is sent here. | | `contactInfo.phone` | yes | E.164 (`+30…`) or a Greek 10-digit number | | `contactInfo.backupPhone` | | Same format | | `administrator.fullName` | yes | The legal representative | | `administrator.vatNumber` | yes | A valid VAT number (check digit) | | `ispDetails.providerName`, `contractNumber`, `contractDate` | **if B2C** | The client's internet service provider, all three fields. `contractDate` cannot be in the future. If `B2B` only, omit `ispDetails`. | All field errors are returned together in `error.details[]`. The system decides the **request type**. You do not send it: - `NEW_CONTRACT`: the VAT number has no active contract with Novus. A PDF contract is generated and the request goes to `PENDING_SIGNATURE`. - `LINK_EXISTING`: the VAT number already has an active contract through another software house. `contract` is `null`, no signature is needed, and the request goes straight to `UNDER_REVIEW`. The client **automatically receives an email** with the contract and a link to upload it themselves. So the request can move to `UNDER_REVIEW` without any action on your side. | HTTP | When | |:---:|:---| | `201` | The request was created. | | `200` | Retry with the **same** `Idempotency-Key`: the original request is returned. | | `409` | `DUPLICATE_OPEN_REQUEST`: an open request already exists for the VAT number, and `error.context.existingRequestId` shows which one. `CLIENT_ALREADY_LINKED`: the VAT number is already active on your key. Or an `Idempotency-Key` was reused for another VAT number / for a cancelled or rejected request. | | `422` | `VALIDATION_ERROR`: see `details[]`. | **201 · NEW_CONTRACT** ```json { "success": true, "data": { "requestId": "req_8f7b2c9a", "requestType": "NEW_CONTRACT", "status": "PENDING_SIGNATURE", "message": "Η αίτηση καταχωρήθηκε. Απαιτείται υπογραφή της σύμβασης από τον πελάτη.", "contract": { "contractNumber": "10000", "contractDate": "2026-09-17", "templateVersion": "v6", "downloadUrl": "https://provider.timologisi.online/api/v1/requests/req_8f7b2c9a/contract" }, "provisioning": null, "aadeStatement": null, "createdAt": "2026-09-17T08:42:00Z" } } ``` **201 · LINK_EXISTING** ```json { "success": true, "data": { "requestId": "req_3a1c7d02", "requestType": "LINK_EXISTING", "status": "UNDER_REVIEW", "message": "Το ΑΦΜ έχει ήδη ενεργή σύμβαση. Η αίτηση σύνδεσης εστάλη για έλεγχο.", "contract": null, "provisioning": null, "aadeStatement": null, "createdAt": "2026-09-17T08:42:00Z" } } ``` **409 · DUPLICATE_OPEN_REQUEST** ```json { "success": false, "error": { "code": "DUPLICATE_OPEN_REQUEST", "message": "Υπάρχει ήδη ανοιχτή αίτηση για αυτό το ΑΦΜ.", "context": { "existingRequestId": "req_8f7b2c9a" } } } ``` ## List requests GET `/api/v1/requests?status=UNDER_REVIEW,ACTION_REQUIRED&page=1&pageSize=50` Returns **only your own** requests. | Query | Description | |:---|:---| | `status` | One or more statuses, separated by commas | | `requestType` | `NEW_CONTRACT` or `LINK_EXISTING` | | `vatNumber` | Client VAT number | | `createdFrom`, `createdTo` | Date range (`YYYY-MM-DD`) | | `page` | From 1 (default 1) | | `pageSize` | 1 to 200 (default 50) | | `sort` | `createdAt:desc` (default), `createdAt:asc`, `updatedAt:desc`, `updatedAt:asc` | `data` is `{ "items": [ … ], "total": 137, "page": 1, "pageSize": 50 }`. ## Request status GET `/api/v1/requests/{requestId}` The **actual** status of the request. After `APPROVED`, `provisioning` and `aadeStatement` are filled in. | Field | Meaning | |:---|:---| | `status` | See [the statuses](https://developers.novusconceptus.com/onboarding-api/#request-statuses). | | `message` | The latest message, e.g. why the request is in `ACTION_REQUIRED`. | | `contract` | Number, date, `templateVersion`, `downloadUrl`. After an upload, also `signedVersion` (increases with each upload) and `sha256`. In `LINK_EXISTING` it is `null`, and this is not an error. | | `provisioning` | After `APPROVED`. `status`: `PENDING` → `IN_PROGRESS` → `COMPLETED` or `FAILED`. Steps `clientAdded`, `clientLinked`, `contractUploaded`, `statementSent`, each `PENDING`, `IN_PROGRESS`, `DONE` or `FAILED`. Plus `error`. | | `aadeStatement` | The Provider declaration to AADE (the Greek tax authority). `status`: `SUBMITTED`, `ACCEPTED` (the client accepted it), `PRESUMED_ACCEPTED` (10 days passed with no action), `RECALLED`. Plus `acceptDate`. | **Note: When the client can start issuing** When `provisioning.status = COMPLETED`. If you see `FAILED`, Novus has already been notified and is handling it. **Do not send the request again.** **Example: Example: approved and activated request** ```json { "success": true, "data": { "requestId": "req_8f7b2c9a", "requestType": "NEW_CONTRACT", "status": "APPROVED", "message": "Η αίτηση εγκρίθηκε.", "contract": { "contractNumber": "10000", "contractDate": "2026-09-17", "templateVersion": "v6", "signedVersion": 1, "sha256": "9f2c1d6e8a0b4c7d5e3f1a2b8c9d0e4f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d", "downloadUrl": "https://provider.timologisi.online/api/v1/requests/req_8f7b2c9a/contract" }, "provisioning": { "status": "COMPLETED", "clientAdded": "DONE", "clientLinked": "DONE", "contractUploaded": "DONE", "statementSent": "DONE", "error": null }, "aadeStatement": { "status": "SUBMITTED", "acceptDate": null }, "createdAt": "2026-09-17T08:42:00Z", "updatedAt": "2026-09-17T11:03:00Z" } } ``` ## Change history GET `/api/v1/requests/{requestId}/history` A chronological list of changes. It is useful, for example, when the client uploaded the contract themselves. Each entry has: | Field | | |:---|:---| | `occurredAt` | When | | `status`, `previousStatus` | From which status to which | | `message` | Message | | `actor` | Who caused the change: `SOFTWARE_HOUSE`, `CLIENT`, `NOVUS`, `SYSTEM` | ## Download the contract GET `/api/v1/requests/{requestId}/contract?kind=unsigned` Returns `application/pdf`. | Query | | |:---|:---| | `kind` | `unsigned` (default) or `signed` | | `version` | Version of the signed file. Without it, the latest is returned. | **Warning: Not a public link** It needs your API key. Do not send the `downloadUrl` to the client as is. Download the PDF and forward it yourself. A `LINK_EXISTING` request has no contract: `409 NOT_APPLICABLE`. The same applies when the version you asked for does not exist. ## Upload the signed contract POST `/api/v1/requests/{requestId}/signed-contract` `multipart/form-data`, one file in the **`contractFile`** field. ```bash curl -X POST "https://provider-dev.timologisi.online/api/v1/requests/req_8f7b2c9a/signed-contract" \ -H "API-KEY: $NOVUS_API_KEY" \ -F "contractFile=@signed-contract.pdf;type=application/pdf" ``` Rules: - exactly **one** file, - a **real PDF** (the magic bytes are checked, not the extension), up to **15 MB**, not corrupted or password-protected, - the request is in `PENDING_SIGNATURE` or `ACTION_REQUIRED`, with `requestType = NEW_CONTRACT`. Old files are **not deleted**. Each upload is a new version. On success (`200`) the request moves to `UNDER_REVIEW`. | HTTP | `error.code` | When | |:---:|:---|:---| | `400` | `BAD_REQUEST` | Invalid multipart, more than one file, or a corrupted / password-protected PDF | | `409` | `INVALID_TRANSITION` | Wrong status, e.g. a file is already under review | | `409` | `NOT_APPLICABLE` | The request is `LINK_EXISTING` | | `413` | `FILE_TOO_LARGE` | Over 15 MB | | `415` | `UNSUPPORTED_FILE_TYPE` | Not a PDF | The client can also upload the file themselves, from the link in the email. ## Cancel a request DELETE `/api/v1/requests/{requestId}` Optional body `{ "reason": "…" }` (up to 500 characters). Allowed **only before approval**. On a request that is already approved or in a final status: `409 INVALID_TRANSITION`. Ending the cooperation after approval is possible only in agreement with Novus, not through the API. ## Error codes | HTTP | `error.code` | Meaning | |:---:|:---|:---| | 400 | `BAD_REQUEST` | Malformed JSON or multipart | | 401 | `UNAUTHORIZED` | The API key is missing or invalid | | 403 | `FORBIDDEN` | The action is not allowed with this key | | 404 | `NOT_FOUND` | It does not exist **or belongs to another software house**. `404` is returned instead of `403`, so that its existence is not revealed. | | 409 | `DUPLICATE_OPEN_REQUEST` | An open request already exists for the VAT number (`context.existingRequestId`) | | 409 | `CLIENT_ALREADY_LINKED` | The VAT number is already active on your key | | 409 | `CLIENT_ALREADY_ACTIVE` | The VAT number got an active contract before approval | | 409 | `INVALID_TRANSITION` | Not allowed in the current status (`context.currentStatus`) | | 409 | `NOT_APPLICABLE` | Does not apply to this request type | | 413 | `FILE_TOO_LARGE` | File over 15 MB | | 415 | `UNSUPPORTED_FILE_TYPE` | Not a PDF | | 422 | `VALIDATION_ERROR` | Invalid fields, see `details[]` | | 429 | `RATE_LIMITED` | More than 60 calls / minute. Retry after `Retry-After` seconds. | | 500 | `INTERNAL_ERROR` | Unexpected error, with `traceId`. Send us the `traceId`. | | 502 | `UPSTREAM_ERROR` | Temporary failure of an external service. Retry later. | Source: https://developers.novusconceptus.com/onboarding-api/endpoints/ --- # Webhooks Instead of constantly calling `GET /api/v1/requests/{requestId}` (polling), register an HTTPS endpoint of your own. Novus calls it every time something changes in one of your requests. ## Registration POST `/api/v1/webhooks` ```json { "url": "https://to-logismiko-sas.gr/novus-events", "events": [ "request.status_changed", "request.provisioned" ] } ``` | Field | | |:---|:---| | `url` | Your HTTPS endpoint | | `events` | The events you want, at least one (see [below](https://developers.novusconceptus.com/onboarding-api/webhooks/#events)) | The response (`201`) contains `endpointId`, `url`, `events`, `createdAt` and a **`secret`**. The `secret` is returned **only this once**, so store it: you use it to verify the signature of every call. | Call | | |:---|:---| | GET `/api/v1/webhooks` | Your endpoints (without the secrets) | | DELETE `/api/v1/webhooks/{endpointId}` | Stops notifications to this endpoint (`204`) | | GET `/api/v1/webhooks/deliveries?endpointId=…&page=1&pageSize=50` | Delivery history, for debugging: what was sent and what you replied (`eventId`, `event`, `attempt`, `responseStatus`, `deliveredAt`, `succeeded`). Filters: `endpointId`, `eventId`. | ## Events | `event` | When | |:---|:---| | `request.created` | A request was created | | `request.status_changed` | The status of a request changed. The most useful event. | | `request.provisioned` | The client was activated (`provisioning.status = COMPLETED`) and can start issuing | | `request.provisioning_failed` | Activation failed. Novus is notified automatically and handles it. **Do not send the request again.** | | `client.statement_recalled` | The Provider declaration to AADE (the Greek tax authority) was recalled | ## The call you receive ```http POST https://to-logismiko-sas.gr/novus-events Content-Type: application/json X-Novus-Event-Id: evt_8f7b2c9a1d4e X-Novus-Signature: sha256=4f1c… ``` ```json { "event": "request.status_changed", "eventId": "evt_8f7b2c9a1d4e", "occurredAt": "2026-09-17T10:15:00Z", "data": { "requestId": "req_8f7b2c9a", "status": "APPROVED", "previousStatus": "UNDER_REVIEW", "message": "Η αίτηση εγκρίθηκε." } } ``` **Warning: A webhook tells you that something changed. It is not the source of truth** Always confirm with [`GET /api/v1/requests/{requestId}`](https://developers.novusconceptus.com/onboarding-api/endpoints/#get) before you act. - **Reply `2xx`** as fast as possible and do your processing afterwards. Anything else is retried after **1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours**, and then abandoned. - **Duplicates:** the same event can arrive again on a retry, with the same `X-Novus-Event-Id`. Ignore the ones you have already seen. - **Signature:** **always** verify `X-Novus-Signature`. ## Verifying the signature `X-Novus-Signature` = `sha256=` + the HMAC-SHA256 of the **exact body**, keyed with your `secret`, in lowercase hex. Compute it on the bytes as you received them, before any JSON parsing. **C#** ```csharp using System.Security.Cryptography; using System.Text; static bool IsValid(string rawBody, string header, string secret) { using var hmac = new HMACSHA256(Encoding.UTF8.GetBytes(secret)); var expected = "sha256=" + Convert.ToHexString(hmac.ComputeHash(Encoding.UTF8.GetBytes(rawBody))).ToLowerInvariant(); return CryptographicOperations.FixedTimeEquals(Encoding.UTF8.GetBytes(expected), Encoding.UTF8.GetBytes(header ?? "")); } ``` **Delphi** ```delphi uses System.Hash, System.SysUtils; function IsValid(const RawBody, Header, Secret: string): Boolean; var Expected: string; begin Expected := 'sha256=' + LowerCase(THash.DigestAsString( THashSHA2.GetHMACAsBytes(TEncoding.UTF8.GetBytes(RawBody), TEncoding.UTF8.GetBytes(Secret)))); Result := SameStr(Expected, Header); end; ``` **Node.js** ```javascript const crypto = require('crypto'); function isValid(rawBody, header, secret) { const expected = 'sha256=' + crypto.createHmac('sha256', secret).update(rawBody, 'utf8').digest('hex'); return header && crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(header)); } ``` **Python** ```python import hmac, hashlib def is_valid(raw_body: bytes, header: str, secret: str) -> bool: expected = "sha256=" + hmac.new(secret.encode(), raw_body, hashlib.sha256).hexdigest() return hmac.compare_digest(expected, header or "") ``` Source: https://developers.novusconceptus.com/onboarding-api/webhooks/ --- # AADE code tables Every value table used in the JSON, aligned with **version 2.0.2** of the AADE myDATA documentation (2026-09-10). They are grouped into 6 pages, and the search box (top right) finds both codes (e.g. `E3_561_003`) and descriptions (e.g. "cash"). | Table | JSON field | Page | |:---|:---|:---| | [Invoice types](https://developers.novusconceptus.com/aade/documents/#invoice-types) | `invoiceHeader.invoiceType` | Document types | | [Special invoice category](https://developers.novusconceptus.com/aade/documents/#special-invoice-category) | `invoiceHeader.specialInvoiceCategory` | Document types | | [Invoice variation (deviation) type](https://developers.novusconceptus.com/aade/documents/#invoice-variation-type) | `invoiceHeader.invoiceVariationType` | Document types | | [Correlated entity type](https://developers.novusconceptus.com/aade/documents/#entity-type) | `invoiceHeader.otherCorrelatedEntities[].type` | Document types | | [Document size codes (PDF layout)](https://developers.novusconceptus.com/aade/documents/#document-size) | `providerAdditionalInvoiceDetails.additionalDetails.documentSizeCode` | Document types | | [VAT category](https://developers.novusconceptus.com/aade/vat/#vat-category) | `invoiceDetails[].vatCategory` | VAT | | [VAT exemption category](https://developers.novusconceptus.com/aade/vat/#vat-exemption) | `invoiceDetails[].vatExemptionCategory` | VAT | | [Withholding tax category](https://developers.novusconceptus.com/aade/taxes/#withheld-tax) | `withheldPercentCategory / taxesTotals.taxCategory (taxType=1)` | Taxes, fees, deductions | | [Fees category](https://developers.novusconceptus.com/aade/taxes/#fees) | `feesPercentCategory / taxesTotals.taxCategory (taxType=2)` | Taxes, fees, deductions | | [Other taxes category](https://developers.novusconceptus.com/aade/taxes/#other-taxes) | `otherTaxesPercentCategory / taxesTotals.taxCategory (taxType=3)` | Taxes, fees, deductions | | [Digital transaction fee category (former stamp duty)](https://developers.novusconceptus.com/aade/taxes/#digital-transaction-fee) | `stampDutyPercentCategory / taxesTotals.taxCategory (taxType=4)` | Taxes, fees, deductions | | [Tax type (taxesTotals)](https://developers.novusconceptus.com/aade/taxes/#taxes-totals-type) | `taxesTotals[].taxType` | Taxes, fees, deductions | | [Income classification category](https://developers.novusconceptus.com/aade/classifications/#income-classification-category) | `incomeClassification[].classificationCategory` | Income & expense classifications | | [Income classification type](https://developers.novusconceptus.com/aade/classifications/#income-classification-type) | `incomeClassification[].classificationType` | Income & expense classifications | | [Expenses classification category](https://developers.novusconceptus.com/aade/classifications/#expenses-classification-category) | `expensesClassification[].classificationCategory` | Income & expense classifications | | [Expenses classification type](https://developers.novusconceptus.com/aade/classifications/#expenses-classification-type) | `expensesClassification[].classificationType` | Income & expense classifications | | [Payment methods](https://developers.novusconceptus.com/aade/lines-payments/#payment-methods) | `paymentMethods[].type` | Lines & payments | | [Payment network service provider (posNspId)](https://developers.novusconceptus.com/aade/lines-payments/#pos-nsp) | `paymentMethods[].posNspId` | Lines & payments | | [Measurement units](https://developers.novusconceptus.com/aade/lines-payments/#measurement-units) | `invoiceDetails[].measurementUnit` | Lines & payments | | [Line type (recType)](https://developers.novusconceptus.com/aade/lines-payments/#rec-type) | `invoiceDetails[].recType` | Lines & payments | | [Invoice detail type (marking)](https://developers.novusconceptus.com/aade/lines-payments/#invoice-detail-type) | `invoiceDetails[].invoiceDetailType` | Lines & payments | | [Fuel codes](https://developers.novusconceptus.com/aade/lines-payments/#fuel-codes) | `invoiceDetails[].fuelCode` | Lines & payments | | [Purpose of movement](https://developers.novusconceptus.com/aade/movement/#move-purpose) | `invoiceHeader.movePurpose / invoiceDetails[].movePurposeLine` | Goods movement | | [Reverse delivery note purpose](https://developers.novusconceptus.com/aade/movement/#reverse-delivery-purpose) | `invoiceHeader.reverseDeliveryNotePurpose` | Goods movement | | [Receiving note purpose](https://developers.novusconceptus.com/aade/movement/#receiving-note-purpose) | `invoiceHeader.receivingNotePurpose` | Goods movement | Official source: [https://www.aade.gr/epiheiriseis/mydata-ilektronika-biblia-aade/tehnikes-prodiagrafes-ekdoseis](https://www.aade.gr/epiheiriseis/mydata-ilektronika-biblia-aade/tehnikes-prodiagrafes-ekdoseis) Source: https://developers.novusconceptus.com/aade/ --- # Document types _Παραστατικά · AADE myDATA 2.0.2_ Document type and the flags of the invoice header. **On this page:** [Invoice types](https://developers.novusconceptus.com/aade/documents/#invoice-types) · [Special invoice category](https://developers.novusconceptus.com/aade/documents/#special-invoice-category) · [Invoice variation (deviation) type](https://developers.novusconceptus.com/aade/documents/#invoice-variation-type) · [Correlated entity type](https://developers.novusconceptus.com/aade/documents/#entity-type) · [Document size codes (PDF layout)](https://developers.novusconceptus.com/aade/documents/#document-size) ## Invoice types _Είδη παραστατικών · field `invoiceHeader.invoiceType` · AADE myDATA 2.0.2 — Appendix 8.1_ **Note: Through a provider: only types 1.1 to 11.5** The provider issues and transmits **only** documents of types **1.x to 11.x**. Types 12.x to 17.x (recipient documents, expenses, adjustment entries) are **not** transmitted by a provider, so they are not listed here. **Sales invoice** (Τιμολόγιο Πώλησης) | Code | Description | Description (AADE, Greek) | Notes | |:---:|:---|:---|:---| | `1.1` | Sales invoice | Τιμολόγιο Πώλησης | | | `1.2` | Sales invoice / Intra-community supplies | Τιμολόγιο Πώλησης / Ενδοκοινοτικές Παραδόσεις | | | `1.3` | Sales invoice / Third-country supplies | Τιμολόγιο Πώλησης / Παραδόσεις Τρίτων Χωρών | | | `1.4` | Sales invoice / Sale on behalf of third parties | Τιμολόγιο Πώλησης / Πώληση για Λογαριασμό Τρίτων | | | `1.5` | Sales invoice / Clearance of third-party sales - Fee from third-party sales | Τιμολόγιο Πώλησης / Εκκαθάριση Πωλήσεων Τρίτων - Αμοιβή από Πωλήσεις Τρίτων | | | `1.6` | Sales invoice / Supplementary document | Τιμολόγιο Πώλησης / Συμπληρωματικό Παραστατικό | | **Service invoice** (Τιμολόγιο Παροχής Υπηρεσιών) | Code | Description | Description (AADE, Greek) | Notes | |:---:|:---|:---|:---| | `2.1` | Service invoice | Τιμολόγιο Παροχής | | | `2.2` | Service invoice / Intra-community services | Τιμολόγιο Παροχής / Ενδοκοινοτική Παροχή Υπηρεσιών | | | `2.3` | Service invoice / Services to third-country recipient | Τιμολόγιο Παροχής / Παροχή Υπηρεσιών σε λήπτη Τρίτης Χώρας | | | `2.4` | Service invoice / Supplementary document | Τιμολόγιο Παροχής / Συμπληρωματικό Παραστατικό | | **Proof of acquisition (title of acquisition)** (Τίτλος Κτήσης) | Code | Description | Description (AADE, Greek) | Notes | |:---:|:---|:---|:---| | `3.1` | Title of acquisition (issuer not obliged) | Τίτλος Κτήσης (μη υπόχρεος Εκδότης) | | | `3.2` | Title of acquisition (obliged issuer refused to issue) | Τίτλος Κτήσης (άρνηση έκδοσης από υπόχρεο Εκδότη) | | **Credit invoice** (Πιστωτικό Τιμολόγιο) | Code | Description | Description (AADE, Greek) | Notes | |:---:|:---|:---|:---| | `5.1` | Credit invoice / Correlated | Πιστωτικό Τιμολόγιο / Συσχετιζόμενο | | | `5.2` | Credit invoice / Non-correlated | Πιστωτικό Τιμολόγιο / Μη Συσχετιζόμενο | | **Self-delivery / self-supply** (Στοιχείο Αυτοπαράδοσης - Ιδιοχρησιμοποίησης) | Code | Description | Description (AADE, Greek) | Notes | |:---:|:---|:---|:---| | `6.1` | Self-delivery record | Στοιχείο Αυτοπαράδοσης | | | `6.2` | Self-supply record | Στοιχείο Ιδιοχρησιμοποίησης | | **Contract - income** (Συμβόλαιο - Έσοδο) | Code | Description | Description (AADE, Greek) | Notes | |:---:|:---|:---|:---| | `7.1` | Contract - income | Συμβόλαιο - Έσοδο | | **Special record (income) – receipt** (Ειδικό Στοιχείο (Έσοδο) – Απόδειξη Είσπραξης) | Code | Description | Description (AADE, Greek) | Notes | |:---:|:---|:---|:---| | `8.1` | Rents - income | Ενοίκια - Έσοδο | | | `8.2` | Climate crisis resilience fee | Τέλος ανθεκτικότητας κλιματικής κρίσης | | | `8.4` | POS collection receipt | Απόδειξη Είσπραξης POS | | | `8.5` | POS refund receipt | Απόδειξη Επιστροφής POS | | **Order slip** (Δελτίο Παραγγελίας) | Code | Description | Description (AADE, Greek) | Notes | |:---:|:---|:---|:---| | `8.6` | Food & beverage order slip | Δελτίο Παραγγελίας Εστίασης | See the Food service (8.6) guide. | **Delivery / transport documents** (Παραστατικά Διακίνησης) | Code | Description | Description (AADE, Greek) | Notes | |:---:|:---|:---|:---| | `9.1` | Delivery note - correlated | Δελτίο Αποστολής Συσχετιζόμενο | New in myDATA 2.0 | | `9.2` | Consolidated delivery note | Συγκεντρωτικό Δελτίο Αποστολής | New in myDATA 2.0 | | `9.3` | Delivery note | Δελτίο Αποστολής | | | `10.1` | Quantitative receiving note - correlated | Δελτίο Ποσοτικής Παραλαβής Συσχετιζόμενο | New in myDATA 2.0. receivingNotePurpose is required. | | `10.2` | Quantitative receiving note - non-correlated | Δελτίο Ποσοτικής Παραλαβής Μη Συσχετιζόμενο | New in myDATA 2.0. receivingNotePurpose is required. | **Retail documents** (Παραστατικά Λιανικής) | Code | Description | Description (AADE, Greek) | Notes | |:---:|:---|:---|:---| | `11.1` | Retail sales receipt | ΑΛΠ | | | `11.2` | Service provision receipt | ΑΠΥ | | | `11.3` | Simplified invoice | Απλοποιημένο Τιμολόγιο | | | `11.4` | Retail credit note | Πιστωτικό Στοιχ. Λιανικής | | | `11.5` | Retail sales receipt on behalf of third parties | Απόδειξη Λιανικής Πώλησης για Λογ/σμό Τρίτων | | ## Special invoice category _Ειδική Κατηγορία Παραστατικού · field `invoiceHeader.specialInvoiceCategory` · AADE myDATA 2.0.2 — Appendix 8.19_ | Code | Description | Description (AADE, Greek) | Notes | |:---:|:---|:---|:---| | `1` | Subsidies - grants | Επιδοτήσεις – Επιχορηγήσεις | | | `2` | Hotel retail income - room charges | Έσοδα Λιανικής Ξενοδοχείων – Χρεώσεις Δωματίου | | | `3` | Accounting entry | Λογιστική Εγγραφή | | | `4` | Tax free | Tax Free | Not through a provider (AADE errors 266/267). Only through an ERP or timologio. | | `5` | Complex domestic-foreign transactions | Σύνθετες συναλλαγές ημεδαπής – αλλοδαπής | | | `6` | Beneficiaries of art. 3 of JMD 139818 ΕΞ2022 | Δικαιούχοι του άρθρου 3 της υπό στοιχεία 139818 ΕΞ2022/28.09.2022 (Β’5083) ΚΥΑ | | | `7` | Purchase of agricultural goods/services (art. 41 VAT Code) | Αγορά αγροτικών αγαθών υπηρεσιών Άρθρο 41 του Κώδικα ΦΠΑ | | | `8` | (Read-only) Retail income - cash registers AADE_1 | Έσοδα Λιανικών ΦΗΜ ΑΑΔΕ_1 | Read-only. Not accepted from an ERP / provider. | | `9` | (Read-only) Retail income - cash registers AADE_2 | Έσοδα Λιανικών ΦΗΜ ΑΑΔΕ_2 | Read-only. Not accepted from an ERP / provider. | | `10` | Retail income - business cash registers deviation | Έσοδα Λιανικών ΦΗΜ Επιχείρησης Απόκλιση | | | `11` | Heating allowance | Επίδομα Θέρμανσης | | | `12` | Food & beverage transactions | Συναλλαγές εστίασης | | | `13` | Correlation difficulty indicator | Ένδειξη Δυσχέρεια Συσχέτισης | Applies only to type 11.4. | ## Invoice variation (deviation) type _Τύπος Απόκλισης Παραστατικού · field `invoiceHeader.invoiceVariationType` · AADE myDATA 2.0.2 — Appendix 8.18_ | Code | Description | Description (AADE, Greek) | Notes | |:---:|:---|:---|:---| | `1` | Omission transmitted by recipient | Διαβίβαση Παράλειψης από Λήπτη | Allowed types: 1.1, 1.6, 2.1, 2.4, 5.2, 8.1, 8.2 | | `2` | Omission transmitted by issuer | Διαβίβαση Παράλειψης από Εκδότη | Allowed types: 11.3, 11.4 | | `3` | Deviation transmitted by recipient | Διαβίβαση Απόκλισης από Λήπτη | Allowed types: 11.3, 11.4 (for 2021 documents only: 1.1 and 5.2) | | `4` | Deviation transmitted by issuer | Διαβίβαση Απόκλισης από Εκδότη | Allowed types: 11.3, 11.4 | ## Correlated entity type _Κατηγορία Οντότητας · field `invoiceHeader.otherCorrelatedEntities[].type` · AADE myDATA 2.0.2 — Appendix 8.20_ | Code | Description | Description (AADE, Greek) | |:---:|:---|:---| | `1` | Tax representative | Φορολογικός Εκπρόσωπος | | `2` | Intermediary | Διαμεσολαβητής | | `3` | Carrier | Μεταφορέας | | `4` | Recipient of the sender (seller) | Λήπτης του Αποστολέα (Πωλητή) | | `5` | Sender (seller) | Αποστολέας (Πωλητής) | | `6` | Other correlated entities | Λοιπές Συσχετιζόμενες Οντότητες | ## Document size codes (PDF layout) _Μέγεθος εκτύπωσης · field `providerAdditionalInvoiceDetails.additionalDetails.documentSizeCode` · Novus Conceptus_ Provider field. Selects the PDF template. Unknown value = 0 (A4). | Code | Description | Description (AADE, Greek) | |:---:|:---|:---| | `0` | A4 (default) | A4 (προεπιλογή) | | `1` | Thermal printer 80mm - design 1 | Θερμικός εκτυπωτής 80mm - σχέδιο 1 | | `2` | Thermal printer 80mm - design 2 | Θερμικός εκτυπωτής 80mm - σχέδιο 2 | | `3` | Thermal printer 57mm | Θερμικός εκτυπωτής 57mm | | `4` | Thermal printer 80mm - design 3 | Θερμικός εκτυπωτής 80mm - σχέδιο 3 | | `5` | Thermal printer 80mm - design 4 | Θερμικός εκτυπωτής 80mm - σχέδιο 4 | | `6` | A5 | A5 | | `7` | Thermal printer 57mm - simple | Θερμικός εκτυπωτής 57mm - απλό | Source: https://developers.novusconceptus.com/aade/documents/ --- # VAT _ΦΠΑ · AADE myDATA 2.0.2_ VAT categories and VAT exemption reasons. **On this page:** [VAT category](https://developers.novusconceptus.com/aade/vat/#vat-category) · [VAT exemption category](https://developers.novusconceptus.com/aade/vat/#vat-exemption) ## VAT category _Κατηγορία ΦΠΑ · field `invoiceDetails[].vatCategory` · AADE myDATA 2.0.2 — Appendix 8.2_ | Code | Description (AADE, Greek) | Description | Rate / amount | |:---:|:---|:---|:---| | `1` | ΦΠΑ συντελεστής 24% | VAT 24% | 24% | | `2` | ΦΠΑ συντελεστής 13% | VAT 13% | 13% | | `3` | ΦΠΑ συντελεστής 6% | VAT 6% | 6% | | `4` | ΦΠΑ συντελεστής 17% | VAT 17% | 17% | | `5` | ΦΠΑ συντελεστής 9% | VAT 9% | 9% | | `6` | ΦΠΑ συντελεστής 4% | VAT 4% | 4% | | `7` | Άνευ Φ.Π.Α. | Without VAT (0%) — requires vatExemptionCategory | 0% | | `8` | Εγγραφές χωρίς ΦΠΑ (πχ Μισθοδοσία, Αποσβέσεις) | Records without VAT (e.g. payroll, depreciation) | - | | `9` | ΦΠΑ συντελεστής 3% (αρ.31 ν.5057/2023) | VAT 3% (art. 31 L.5057/2023) | 3% | | `10` | ΦΠΑ συντελεστής 4% (αρ.31 ν.5057/2023) | VAT 4% (art. 31 L.5057/2023) | 4% | ## VAT exemption category _Κατηγορία Αιτίας Εξαίρεσης ΦΠΑ · field `invoiceDetails[].vatExemptionCategory` · AADE myDATA 2.0.2 — Appendix 8.3_ Required when vatCategory = 7. Since myDATA 1.0.11 the codes stay the same, but the legal reference follows the new VAT Code (Law 5144/2024). The previous reference (Law 2859/2000) is shown for information. | Code | Description (AADE, Greek) | Previous reference (L.2859/2000) | |:---:|:---|:---| | `1` | Χωρίς ΦΠΑ - άρθρο 2 και 3 του Κώδικα ΦΠΑ | Χωρίς ΦΠΑ - άρθρο 2 και 3 του Κώδικα ΦΠΑ | | `2` | Χωρίς ΦΠΑ - άρθρο 5 του Κώδικα ΦΠΑ | Χωρίς ΦΠΑ - άρθρο 5 του Κώδικα ΦΠΑ | | `3` | Χωρίς ΦΠΑ - άρθρο 17 του Κώδικα ΦΠΑ | Χωρίς ΦΠΑ - άρθρο 13 του Κώδικα ΦΠΑ | | `4` | Χωρίς ΦΠΑ - άρθρο 18 του Κώδικα ΦΠΑ | Χωρίς ΦΠΑ - άρθρο 14 του Κώδικα ΦΠΑ | | `5` | Χωρίς ΦΠΑ - άρθρο 21 του Κώδικα ΦΠΑ | Χωρίς ΦΠΑ - άρθρο 16 του Κώδικα ΦΠΑ | | `6` | Χωρίς ΦΠΑ - άρθρο 24 του Κώδικα ΦΠΑ | Χωρίς ΦΠΑ - άρθρο 19 του Κώδικα ΦΠΑ | | `7` | Χωρίς ΦΠΑ - άρθρο 27 του Κώδικα ΦΠΑ | Χωρίς ΦΠΑ - άρθρο 22 του Κώδικα ΦΠΑ | | `8` | Χωρίς ΦΠΑ - άρθρο 29 του Κώδικα ΦΠΑ | Χωρίς ΦΠΑ - άρθρο 24 του Κώδικα ΦΠΑ | | `9` | Χωρίς ΦΠΑ - άρθρο 30 του Κώδικα ΦΠΑ | Χωρίς ΦΠΑ - άρθρο 25 του Κώδικα ΦΠΑ | | `10` | Χωρίς ΦΠΑ - άρθρο 31 του Κώδικα ΦΠΑ | Χωρίς ΦΠΑ - άρθρο 26 του Κώδικα ΦΠΑ | | `11` | Χωρίς ΦΠΑ - άρθρο 32 του Κώδικα ΦΠΑ | Χωρίς ΦΠΑ - άρθρο 27 του Κώδικα ΦΠΑ | | `12` | Χωρίς ΦΠΑ - άρθρο 32 του Κώδικα ΦΠΑ - Πλοία Ανοικτής Θαλάσσης | Χωρίς ΦΠΑ - άρθρο 27 του Κώδικα ΦΠΑ - Πλοία Ανοικτής Θαλάσσης | | `13` | Χωρίς ΦΠΑ - άρθρο 32.1.γ. του Κώδικα ΦΠΑ - Πλοία Ανοικτής Θαλάσσης | Χωρίς ΦΠΑ - άρθρο 27.1.γ. του Κώδικα ΦΠΑ - Πλοία Ανοικτής Θαλάσσης | | `14` | Χωρίς ΦΠΑ - άρθρο 33 του Κώδικα ΦΠΑ | Χωρίς ΦΠΑ - άρθρο 28 του Κώδικα ΦΠΑ | | `15` | Χωρίς ΦΠΑ - άρθρο 44 του Κώδικα ΦΠΑ | Χωρίς ΦΠΑ - άρθρο 39 του Κώδικα ΦΠΑ | | `16` | Χωρίς ΦΠΑ - άρθρο 45 του Κώδικα ΦΠΑ | Χωρίς ΦΠΑ - άρθρο 39α του Κώδικα ΦΠΑ | | `17` | Χωρίς ΦΠΑ - άρθρο 47 του Κώδικα ΦΠΑ | Χωρίς ΦΠΑ - άρθρο 40 του Κώδικα ΦΠΑ | | `18` | Χωρίς ΦΠΑ - άρθρο 48 του Κώδικα ΦΠΑ | Χωρίς ΦΠΑ - άρθρο 41 του Κώδικα ΦΠΑ | | `19` | Χωρίς ΦΠΑ - άρθρο 54 του Κώδικα ΦΠΑ | Χωρίς ΦΠΑ - άρθρο 47 του Κώδικα ΦΠΑ | | `20` | ΦΠΑ εμπεριεχόμενος - άρθρο 50 του Κώδικα ΦΠΑ | ΦΠΑ εμπεριεχόμενος - άρθρο 43 του Κώδικα ΦΠΑ | | `21` | ΦΠΑ εμπεριεχόμενος - άρθρο 51 του Κώδικα ΦΠΑ | ΦΠΑ εμπεριεχόμενος - άρθρο 44 του Κώδικα ΦΠΑ | | `22` | ΦΠΑ εμπεριεχόμενος - άρθρο 52 του Κώδικα ΦΠΑ | ΦΠΑ εμπεριεχόμενος - άρθρο 45 του Κώδικα ΦΠΑ | | `23` | ΦΠΑ εμπεριεχόμενος - άρθρο 53 του Κώδικα ΦΠΑ | ΦΠΑ εμπεριεχόμενος - άρθρο 46 του Κώδικα ΦΠΑ | | `24` | Χωρίς ΦΠΑ - άρθρο 8 του Κώδικα ΦΠΑ | Χωρίς ΦΠΑ - άρθρο 6 του Κώδικα ΦΠΑ | | `25` | Χωρίς ΦΠΑ - ΠΟΛ.1029/1995 | Χωρίς ΦΠΑ - ΠΟΛ.1029/1995 | | `26` | Χωρίς ΦΠΑ - ΠΟΛ.1167/2015 | Χωρίς ΦΠΑ - ΠΟΛ.1167/2015 | | `27` | Λοιπές Εξαιρέσεις ΦΠΑ | Λοιπές Εξαιρέσεις ΦΠΑ | | `28` | Χωρίς ΦΠΑ – άρθρο 29 περ. β’ παρ.1 του Κώδικα ΦΠΑ (Tax Free) | Χωρίς ΦΠΑ – άρθρο 24 περ. β’ παρ.1 του Κώδικα ΦΠΑ (Tax Free) | | `29` | Χωρίς ΦΠΑ – άρθρο 56 του Κώδικα ΦΠΑ (OSS μη ενωσιακό καθεστώς) | Χωρίς ΦΠΑ – άρθρο 47β του Κώδικα ΦΠΑ (OSS μη ενωσιακό καθεστώς) | | `30` | Χωρίς ΦΠΑ – άρθρο 57 του Κώδικα ΦΠΑ (OSS ενωσιακό καθεστώς) | Χωρίς ΦΠΑ – άρθρο 47γ του Κώδικα ΦΠΑ (OSS ενωσιακό καθεστώς) | | `31` | Χωρίς ΦΠΑ – άρθρο 58 του Κώδικα ΦΠΑ (IOSS) | Χωρίς ΦΠΑ – άρθρο 47δ του Κώδικα ΦΠΑ (IOSS) | Source: https://developers.novusconceptus.com/aade/vat/ --- # Taxes, fees, deductions _Φόροι, τέλη, κρατήσεις · AADE myDATA 2.0.2_ Withholding taxes, fees, other taxes, digital transaction fee and the taxesTotals types. **On this page:** [Withholding tax category](https://developers.novusconceptus.com/aade/taxes/#withheld-tax) · [Fees category](https://developers.novusconceptus.com/aade/taxes/#fees) · [Other taxes category](https://developers.novusconceptus.com/aade/taxes/#other-taxes) · [Digital transaction fee category (former stamp duty)](https://developers.novusconceptus.com/aade/taxes/#digital-transaction-fee) · [Tax type (taxesTotals)](https://developers.novusconceptus.com/aade/taxes/#taxes-totals-type) ## Withholding tax category _Κατηγορία Παρακρατούμενων Φόρων · field `withheldPercentCategory / taxesTotals.taxCategory (taxType=1)` · AADE myDATA 2.0.2 — Appendix 8.4_ | Code | Description (AADE, Greek) | Rate / amount | |:---:|:---|:---| | `1` | Περιπτ. β’ - Τόκοι - 15% | 15% | | `2` | Περιπτ. γ’ - Δικαιώματα - 20% | 20% | | `3` | Περιπτ. δ’ - Αμοιβές Συμβουλών Διοίκησης - 20% | 20% | | `4` | Περιπτ. δ’ - Τεχνικά Έργα - 3% | 3% | | `5` | Υγρά καύσιμα και προϊόντα καπνοβιομηχανίας 1% | 1% | | `6` | Λοιπά Αγαθά 4% | 4% | | `7` | Παροχή Υπηρεσιών 8% | 8% | | `8` | Προκαταβλητέος Φόρος Αρχιτεκτόνων και Μηχανικών επί Συμβατικών Αμοιβών, για Εκπόνηση Μελετών και Σχεδίων 4% | 4% | | `9` | Προκαταβλητέος Φόρος Αρχιτεκτόνων και Μηχανικών επί Συμβατικών Αμοιβών, που αφορούν οποιασδήποτε άλλης φύσης έργα 10% | 10% | | `10` | Προκαταβλητέος Φόρος στις Αμοιβές Δικηγόρων 15% | 15% | | `11` | Παρακράτηση Φόρου Μισθωτών Υπηρεσιών παρ. 1 αρ. 15 ν. 4172/2013 | ποσό | | `12` | Παρακράτηση Φόρου Μισθωτών Υπηρεσιών παρ. 2 αρ. 15 ν. 4172/2013 - Αξιωματικών Εμπορικού Ναυτικού | 15% | | `13` | Παρακράτηση Φόρου Μισθωτών Υπηρεσιών παρ. 2 αρ. 15 ν. 4172/2013 - Κατώτερο Πλήρωμα Εμπορικού Ναυτικού | 10% | | `14` | Παρακράτηση Ειδικής Εισφοράς Αλληλεγγύης | ποσό | | `15` | Παρακράτηση Φόρου Αποζημίωσης λόγω Διακοπής Σχέσης Εργασίας παρ. 3 αρ. 15 ν. 4172/2013 | ποσό | | `16` | Παρακρατήσεις συναλλαγών αλλοδαπής βάσει συμβάσεων αποφυγής διπλής φορολογίας (Σ.Α.Δ.Φ.) | ποσό | | `17` | Λοιπές Παρακρατήσεις Φόρου | ποσό | | `18` | Παρακράτηση Φόρου Μερίσματα περ.α παρ. 1 αρ. 64 ν. 4172/2013 | 5% | ## Fees category _Κατηγορία Τελών · field `feesPercentCategory / taxesTotals.taxCategory (taxType=2)` · AADE myDATA 2.0.2 — Appendix 8.7_ | Code | Description (AADE, Greek) | Rate / amount | |:---:|:---|:---| | `1` | Για μηνιαίο λογαριασμό μέχρι και 50 ευρώ 12% | 12% | | `2` | Για μηνιαίο λογαριασμό από 50,01 μέχρι και 100 ευρώ 15% | 15% | | `3` | Για μηνιαίο λογαριασμό από 100,01 μέχρι και 150 ευρώ 18% | 18% | | `4` | Για μηνιαίο λογαριασμό από 150,01 ευρώ και άνω 20% | 20% | | `5` | Τέλος καρτοκινητής επί της αξίας του χρόνου ομιλίας (12%) | 12% | | `6` | Τέλος στη συνδρομητική τηλεόραση 10% | 10% | | `7` | Τέλος συνδρομητών σταθερής τηλεφωνίας 5% | 5% | | `8` | Περιβαλλοντικό Τέλος & πλαστικής σακούλας ν. 2339/2001 αρ. 6α 0,07 ευρώ ανά τεμάχιο | ποσό | | `9` | Εισφορά δακοκτονίας 2% | 2% | | `10` | Λοιπά τέλη | ποσό | | `11` | Τέλη Λοιπών Φόρων | ποσό | | `12` | Εισφορά δακοκτονίας | ποσό | | `13` | Για μηνιαίο λογαριασμό κάθε σύνδεσης (10%) | 10% | | `14` | Τέλος καρτοκινητής επί της αξίας του χρόνου ομιλίας (10%) | 10% | | `15` | Τέλος κινητής και καρτοκινητής για φυσικά πρόσωπα ηλικίας 15 έως και 29 ετών (0%) | 0% | | `16` | Εισφορά προστασίας περιβάλλοντος πλαστικών προϊόντων 0,04 λεπτά ανά τεμάχιο [άρθρο 4 ν. 4736/2020] | ποσό | | `17` | Τέλος ανακύκλωσης 0,08 λεπτά ανά τεμάχιο [άρθρο 80 ν. 4819/2021] | ποσό | | `18` | Τέλος διαμονής παρεπιδημούντων | ποσό | | `19` | Τέλος επί των ακαθάριστων εσόδων των εστιατορίων και συναφών καταστημάτων | ποσό | | `20` | Τέλος επί των ακαθάριστων εσόδων των κέντρων διασκέδασης | ποσό | | `21` | Τέλος επί των ακαθάριστων εσόδων των καζίνο | ποσό | | `22` | Λοιπά τέλη επί των ακαθάριστων εσόδων | ποσό | ## Other taxes category _Κατηγορία Λοιπών Φόρων · field `otherTaxesPercentCategory / taxesTotals.taxCategory (taxType=3)` · AADE myDATA 2.0.2 — Appendix 8.5_ | Code | Description (AADE, Greek) | Rate / amount | |:---:|:---|:---| | `1` | α1) ασφάλιστρα κλάδου πυρός 20% | 15% | | `2` | α2) ασφάλιστρα κλάδου πυρός 20% | 5% | | `3` | β) ασφάλιστρα κλάδου ζωής 4% | 4% | | `4` | γ) ασφάλιστρα λοιπών κλάδων 15% | 15% | | `5` | δ) απαλλασσόμενα φόρου ασφαλίστρων 0% | 0% | | `6` | Ξενοδοχεία 1-2 αστέρων 0,50 € | ποσό | | `7` | Ξενοδοχεία 3 αστέρων 1,50 € | ποσό | | `8` | Ξενοδοχεία 4 αστέρων 3,00 € | ποσό | | `9` | Ξενοδοχεία 4 αστέρων 4,00 € | ποσό | | `10` | Ενοικιαζόμενα - επιπλωμένα δωμάτια - διαμερίσματα 0,50 € | ποσό | | `11` | Ειδικός Φόρος στις διαφημίσεις που προβάλλονται από την τηλεόραση (ΕΦΤΔ) 5% | 5% | | `12` | 3.1 Φόρος πολυτελείας 10% επί της φορολογητέας αξίας για τα ενδοκοινοτικώς αποκτούμενα και εισαγόμενα από τρίτες χώρες 10% | 10% | | `13` | 3.2 Φόρος πολυτελείας 10% επί της τιμής πώλησης προ Φ.Π.Α. για τα εγχωρίως παραγόμενα είδη 10% | 10% | | `14` | Δικαίωμα του Δημοσίου στα εισιτήρια των καζίνο (80% επί του εισιτηρίου) | 80% | | `15` | ασφάλιστρα κλάδου πυρός 20% | 20% | | `16` | Λοιποί Τελωνειακοί Δασμοί-Φόροι | ποσό | | `17` | Λοιποί Φόροι | ποσό | | `18` | Επιβαρύνσεις Λοιπών Φόρων | ποσό | | `19` | ΕΦΚ | ποσό | | `20` | Ξενοδοχεία 1-2 αστέρων 1,50€ (ανά Δωμ./Διαμ.) | ποσό | | `21` | Ξενοδοχεία 3 αστέρων 3,00€ (ανά Δωμ./Διαμ.) | ποσό | | `22` | Ξενοδοχεία 4 αστέρων 7,00€ (ανά Δωμ./Διαμ.) | ποσό | | `23` | Ξενοδοχεία 5 αστέρων 10,00€ (ανά Δωμ./Διαμ.) | ποσό | | `24` | Ενοικιαζόμενα επιπλωμένα δωμάτια – διαμερίσματα 1,50€ (ανά Δωμ./Διαμ.) | ποσό | | `25` | Ακίνητα βραχυχρόνιας μίσθωσης 1,50€ | ποσό | | `26` | Ακίνητα βραχυχρόνιας μίσθωσης μονοκατοικίες άνω των 80 τ.μ. 10,00€ | ποσό | | `27` | Αυτοεξυπηρετούμενα καταλύματα – τουριστικές επιπλωμένες επαύλεις (βίλες) 10,00€ | ποσό | | `28` | Ακίνητα βραχυχρόνιας μίσθωσης 0,50€ | ποσό | | `29` | Ακίνητα βραχυχρόνιας μίσθωσης μονοκατοικίες άνω των 80 τ.μ. 4,00€ | ποσό | | `30` | Αυτοεξυπηρετούμενα καταλύματα – τουριστικές επιπλωμένες επαύλεις (βίλες) 4,00€ | ποσό | ## Digital transaction fee category (former stamp duty) _Κατηγορία Συντελεστή Ψηφιακού Τέλους συναλλαγής · field `stampDutyPercentCategory / taxesTotals.taxCategory (taxType=4)` · AADE myDATA 2.0.2 — Appendix 8.6_ Since myDATA 1.0.11, "Stamp duty" (Χαρτόσημο) is called "Digital transaction fee" (Ψηφιακό Τέλος συναλλαγής). Only the name changed: the JSON fields stay the same (stampDutyAmount, stampDutyPercentCategory, totalStampDutyAmount). | Code | Description (AADE, Greek) | Rate / amount | |:---:|:---|:---| | `1` | Συντελεστής 1,2 % | 1,20% | | `2` | Συντελεστής 2,4 % | 2,40% | | `3` | Συντελεστής 3,6 % | 3,60% | | `4` | Λοιπές περιπτώσεις | ποσό | ## Tax type (taxesTotals) _Είδος Φόρου · field `taxesTotals[].taxType` · AADE myDATA 2.0.2 — §5.5_ | Code | Description | Description (AADE, Greek) | Notes | |:---:|:---|:---|:---| | `1` | Withheld tax | Παρακρατούμενος Φόρος | taxCategory from table 8.4 | | `2` | Fees | Τέλη | taxCategory from table 8.7 | | `3` | Other taxes | Λοιποί Φόροι | taxCategory from table 8.5 | | `4` | Digital transaction fee (former stamp duty) | Ψηφιακό Τέλος συναλλαγής (πρώην Χαρτόσημο) | taxCategory from table 8.6 | | `5` | Deductions | Κρατήσεις | | Source: https://developers.novusconceptus.com/aade/taxes/ --- # Income & expense classifications _Χαρακτηρισμοί εσόδων / εξόδων · AADE myDATA 2.0.2_ Classification categories (category…) and types (E3_…). **On this page:** [Income classification category](https://developers.novusconceptus.com/aade/classifications/#income-classification-category) · [Income classification type](https://developers.novusconceptus.com/aade/classifications/#income-classification-type) · [Expenses classification category](https://developers.novusconceptus.com/aade/classifications/#expenses-classification-category) · [Expenses classification type](https://developers.novusconceptus.com/aade/classifications/#expenses-classification-type) ## Income classification category _Κωδικός Κατηγορίας Χαρακτηρισμού Εσόδων · field `incomeClassification[].classificationCategory` · AADE myDATA 2.0.2 — Appendix 8.8_ | Code | Description (AADE, Greek) | |:---:|:---| | `category1_1` | Έσοδα από Πώληση Εμπορευμάτων (+) / (-) | | `category1_2` | Έσοδα από Πώληση Προϊόντων (+) / (-) | | `category1_3` | Έσοδα από Παροχή Υπηρεσιών (+) / (-) | | `category1_4` | Έσοδα από Πώληση Παγίων (+) / (-) | | `category1_5` | Λοιπά Έσοδα/ Κέρδη (+) / (-) | | `category1_6` | Αυτοπαραδόσεις / Ιδιοχρησιμοποιήσεις (+) / (-) | | `category1_7` | Έσοδα για λ/σμο τρίτων (+) / (-) | | `category1_8` | Έσοδα προηγούμενων χρήσεων (+)/ (-) | | `category1_9` | Έσοδα επομένων χρήσεων (+) / (-) | | `category1_10` | Λοιπές Εγγραφές Τακτοποίησης Εσόδων (+) / (-) | | `category1_95` | Λοιπά Πληροφοριακά Στοιχεία Εσόδων (+) / (-) | | `category3` | Διακίνηση | ## Income classification type _Κωδικός Τύπου Χαρακτηρισμού Εσόδων · field `incomeClassification[].classificationType` · AADE myDATA 2.0.2 — Appendix 8.9_ | Code | Description (AADE, Greek) | |:---:|:---| | `E3_106` | Ιδιοπαραγωγή παγίων - Αυτοπαραδόσεις - Καταστροφές αποθεμάτων/Εμπορεύματα | | `E3_205` | Ιδιοπαραγωγή παγίων - Αυτοπαραδόσεις - Καταστροφές αποθεμάτων/Πρώτες ύλες και λοιπά υλικά | | `E3_210` | Ιδιοπαραγωγή παγίων - Αυτοπαραδόσεις - Καταστροφές αποθεμάτων/Προϊόντα και παραγωγή σε εξέλιξη | | `E3_305` | Ιδιοπαραγωγή παγίων - Αυτοπαραδόσεις – Καταστροφές αποθεμάτων/Πρώτες ύλες και λοιπά υλικά | | `E3_310` | Ιδιοπαραγωγή παγίων - Αυτοπαραδόσεις - Καταστροφές αποθεμάτων/Προϊόντα και παραγωγή σε εξέλιξη | | `E3_318` | Ιδιοπαραγωγή παγίων - Αυτοπαραδόσεις - Καταστροφές αποθεμάτων/Έξοδα παραγωγής | | `E3_561_001` | Πωλήσεις αγαθών και υπηρεσιών Χονδρικές - Επιτηδευματιών | | `E3_561_002` | Πωλήσεις αγαθών και υπηρεσιών Χονδρικές βάσει άρθρου 39α παρ 5 του Κώδικα Φ.Π.Α. (Ν.2859/2000) | | `E3_561_003` | Πωλήσεις αγαθών και υπηρεσιών Λιανικές - Ιδιωτική Πελατεία | | `E3_561_004` | Πωλήσεις αγαθών και υπηρεσιών Λιανικές βάσει άρθρου 39α παρ 5 του Κώδικα Φ.Π.Α. (Ν.2859/2000) | | `E3_561_005` | Πωλήσεις αγαθών και υπηρεσιών Εξωτερικού Ενδοκοινοτικές | | `E3_561_006` | Πωλήσεις αγαθών και υπηρεσιών Εξωτερικού Τρίτες Χώρες | | `E3_561_007` | Πωλήσεις αγαθών και υπηρεσιών Λοιπά | | `E3_562` | Λοιπά συνήθη έσοδα | | `E3_563` | Πιστωτικοί τόκοι και συναφή έσοδα | | `E3_564` | Πιστωτικές συναλλαγματικές διαφορές | | `E3_565` | Έσοδα συμμετοχών | | `E3_566` | Κέρδη από διάθεση μη κυκλοφορούντων περιουσιακών στοιχείων | | `E3_567` | Κέρδη από αναστροφή προβλέψεων και απομειώσεων | | `E3_568` | Κέρδη από επιμέτρηση στην εύλογη αξία | | `E3_570` | Ασυνήθη έσοδα και κέρδη | | `E3_595` | Έξοδα σε ιδιοπαραγωγή | | `E3_596` | Επιδοτήσεις - Επιχορηγήσεις | | `E3_597` | Επιδοτήσεις - Επιχορηγήσεις για επενδυτικούς σκοπούς - κάλυψη δαπανών | | `E3_880_001` | Πωλήσεις Παγίων Χονδρικές | | `E3_880_002` | Πωλήσεις Παγίων Λιανικές | | `E3_880_003` | Πωλήσεις Παγίων Εξωτερικού Ενδοκοινοτικές | | `E3_880_004` | Πωλήσεις Παγίων Εξωτερικού Τρίτες Χώρες | | `E3_881_001` | Πωλήσεις για λογ/σμο Τρίτων Χονδρικές | | `E3_881_002` | Πωλήσεις για λογ/σμο Τρίτων Λιανικές | | `E3_881_003` | Πωλήσεις για λογ/σμο Τρίτων Εξωτερικού Ενδοκοινοτικές | | `E3_881_004` | Πωλήσεις για λογ/σμο Τρίτων Εξωτερικού Τρίτες Χώρες | | `E3_598_001` | Πωλήσεις αγαθών που υπάγονται σε ΕΦΚ | | `E3_598_003` | Πωλήσεις για λογαριασμό αγροτών μέσω αγροτικού συνεταιρισμού κλπ | ## Expenses classification category _Κωδικός Κατηγορίας Χαρακτηρισμού Εξόδων · field `expensesClassification[].classificationCategory` · AADE myDATA 2.0.2 — Appendix 8.10_ | Code | Description (AADE, Greek) | |:---:|:---| | `category2_1` | Αγορές Εμπορευμάτων (-) / (+) | | `category2_2` | Αγορές Α'-Β' Υλών (-) / (+) | | `category2_3` | Λήψη Υπηρεσιών (-) / (+) | | `category2_4` | Γενικά Έξοδα με δικαίωμα έκπτωσης ΦΠΑ (-) / (+) | | `category2_5` | Γενικά Έξοδα χωρίς δικαίωμα έκπτωσης ΦΠΑ (-) / (+) | | `category2_6` | Αμοιβές και Παροχές προσωπικού (-) / (+) | | `category2_7` | Αγορές Παγίων (-) / (+) | | `category2_8` | Αποσβέσεις Παγίων (-) / (+) | | `category2_9` | Έξοδα για λ/σμο τρίτων (-) / (+) | | `category2_10` | Έξοδα προηγούμενων χρήσεων (-) / (+) | | `category2_11` | Έξοδα επομένων χρήσεων (-) / (+) | | `category2_12` | Λοιπές Εγγραφές Τακτοποίησης Εξόδων (-) / (+) | | `category2_13` | Αποθέματα Έναρξης Περιόδου (-) / (+) | | `category2_14` | Αποθέματα Λήξης Περιόδου (-) / (+) | | `category2_95` | Λοιπά Πληροφοριακά Στοιχεία Εξόδων (-) / (+) | ## Expenses classification type _Κωδικός Τύπου Χαρακτηρισμού Εξόδων · field `expensesClassification[].classificationType` · AADE myDATA 2.0.2 — Appendix 8.11_ | Code | Description (AADE, Greek) | |:---:|:---| | `E3_101` | Εμπορεύματα έναρξης | | `E3_102_001` | Αγορές εμπορευμάτων χρήσης (καθαρό ποσό)/Χονδρικές | | `E3_102_002` | Αγορές εμπορευμάτων χρήσης (καθαρό ποσό)/Λιανικές | | `E3_102_003` | Αγορές εμπορευμάτων χρήσης (καθαρό ποσό)/Αγαθών του άρθρου 39α παρ.5 του Κώδικα Φ.Π.Α. (ν.2859/2000) | | `E3_102_004` | Αγορές εμπορευμάτων χρήσης (καθαρό ποσό)/Εξωτερικού Ενδοκοινοτικές | | `E3_102_005` | Αγορές εμπορευμάτων χρήσης (καθαρό ποσό)/Εξωτερικού Τρίτες Χώρες | | `E3_102_006` | Αγορές εμπορευμάτων χρήσης (καθαρό ποσό)Λοιπά | | `E3_104` | Εμπορεύματα λήξης | | `E3_201` | Πρώτες ύλες και υλικά έναρξης/Παραγωγή | | `E3_202_001` | Αγορές πρώτων υλών και υλικών χρήσης (καθαρό ποσό)/Χονδρικές | | `E3_202_002` | Αγορές πρώτων υλών και υλικών χρήσης (καθαρό ποσό)/Λιανικές | | `E3_202_003` | Αγορές πρώτων υλών και υλικών χρήσης (καθαρό ποσό)/Εξωτερικού Ενδοκοινοτικές | | `E3_202_004` | Αγορές πρώτων υλών και υλικών χρήσης (καθαρό ποσό)/Εξωτερικού Τρίτες Χώρες | | `E3_202_005` | Αγορές πρώτων υλών και υλικών χρήσης (καθαρό ποσό)/Λοιπά | | `E3_204` | Αποθέματα λήξης πρώτων υλών και υλικών/Παραγωγή | | `E3_207` | Προϊόντα και παραγωγή σε εξέλιξη έναρξης/Παραγωγή | | `E3_209` | Προϊόντα και παραγωγή σε εξέλιξη λήξης/Παραγωγή | | `E3_301` | Πρώτες ύλες και υλικά έναρξης/Αγροτική | | `E3_302_001` | Αγορές πρώτων υλών και υλικών χρήσης (καθαρό ποσό)/Χονδρικές | | `E3_302_002` | Αγορές πρώτων υλών και υλικών χρήσης (καθαρό ποσό)/Λιανικές | | `E3_302_003` | Αγορές πρώτων υλών και υλικών χρήσης (καθαρό ποσό)/Εξωτερικού Ενδοκοινοτικές | | `E3_302_004` | Αγορές πρώτων υλών και υλικών χρήσης (καθαρό ποσό)/Εξωτερικού Τρίτες Χώρες | | `E3_302_005` | Αγορές πρώτων υλών και υλικών χρήσης (καθαρό ποσό)/Λοιπά | | `E3_304` | Αποθέματα λήξης πρώτων υλών και υλικών/Αγροτική | | `E3_307` | Προϊόντα και παραγωγή σε εξέλιξη έναρξης/Αγροτική | | `E3_309` | Προϊόντα και παραγωγή σε εξέλιξη λήξης/Αγροτική | | `E3_312` | Αποθέματα έναρξης (ζώων - φυτών) | | `E3_313_001` | Αγορές ζώων - φυτών (καθαρό ποσό)/Χονδρικές | | `E3_313_002` | Αγορές ζώων - φυτών (καθαρό ποσό)/Λιανικές | | `E3_313_003` | Αγορές ζώων - φυτών (καθαρό ποσό)/Εξωτερικού Ενδοκοινοτικές | | `E3_313_004` | Αγορές ζώων - φυτών (καθαρό ποσό)/Εξωτερικού Τρίτες Χώρες | | `E3_313_005` | Αγορές ζώων - φυτών (καθαρό ποσό)/Λοιπά | | `E3_315` | Αποθέματα τέλους (ζώων - φυτών)/Αγροτική | | `E3_581_001` | Παροχές σε εργαζόμενους/Μικτές αποδοχές | | `E3_581_002` | Παροχές σε εργαζόμενους/Εργοδοτικές εισφορές | | `E3_581_003` | Παροχές σε εργαζόμενους/Λοιπές παροχές | | `E3_582` | Ζημιές επιμέτρησης περιουσιακών στοιχείων | | `E3_583` | Χρεωστικές συναλλαγματικές διαφορές | | `E3_584` | Ζημιές από διάθεση-απόσυρση μη κυκλοφορούντων περιουσιακών στοιχείων | | `E3_585_001` | Προμήθειες διαχείρισης ημεδαπής - αλλοδαπής (management fees) | | `E3_585_002` | Δαπάνες από συνδεδεμένες επιχειρήσεις | | `E3_585_003` | Δαπάνες από μη συνεργαζόμενα κράτη ή από κράτη με προνομιακό φορολογικό καθεστώς | | `E3_585_004` | Δαπάνες για ενημερωτικές ημερίδες | | `E3_585_005` | Έξοδα υποδοχής και φιλοξενίας | | `E3_585_006` | Έξοδα ταξιδιών | | `E3_585_007` | Ασφαλιστικές Εισφορές Αυτοαπασχολούμενων | | `E3_585_008` | Έξοδα και προμήθειες παραγγελιοδόχου για λογαριασμό αγροτών | | `E3_585_009` | Λοιπές Αμοιβές για υπηρεσίες ημεδαπής | | `E3_585_010` | Λοιπές Αμοιβές για υπηρεσίες αλλοδαπής | | `E3_585_011` | Ενέργεια | | `E3_585_012` | Ύδρευση | | `E3_585_013` | Τηλεπικοινωνίες | | `E3_585_014` | Ενοίκια | | `E3_585_015` | Διαφήμιση και προβολή | | `E3_585_016` | Λοιπά έξοδα | | `E3_585_017` | Διάφορα λειτουργικά έξοδα Ζ2 | | `E3_586` | Χρεωστικοί τόκοι και συναφή έξοδα | | `E3_587` | Αποσβέσεις | | `E3_588` | Ασυνήθη έξοδα, ζημιές και πρόστιμα | | `E3_589` | Προβλέψεις (εκτός από προβλέψεις για το προσωπικό) | | `E3_882_001` | Αγορές ενσώματων παγίων χρήσης/Χονδρικές | | `E3_882_002` | Αγορές ενσώματων παγίων χρήσης/Λιανικές | | `E3_882_003` | Αγορές ενσώματων παγίων χρήσης/Εξωτερικού Ενδοκοινοτικές | | `E3_882_004` | Αγορές ενσώματων παγίων χρήσης/Εξωτερικού Τρίτες Χώρες | | `E3_883_001` | Αγορές μη ενσώματων παγίων χρήσης/Χονδρικές | | `E3_883_002` | Αγορές μη ενσώματων παγίων χρήσης/Λιανικές | | `E3_883_003` | Αγορές μη ενσώματων παγίων χρήσης/Εξωτερικού Ενδοκοινοτικές | | `E3_883_004` | Αγορές μη ενσώματων παγίων χρήσης/Εξωτερικού Τρίτες Χώρες | | `VAT_361` | Αγορές & δαπάνες στο εσωτερικό της χώρας | | `VAT_362` | Αγορές & εισαγωγές επενδ. Αγαθών (πάγια) | | `VAT_363` | Λοιπές εισαγωγές εκτός επενδ. Αγαθών (πάγια) | | `VAT_364` | Ενδοκοινοτικές αποκτήσεις αγαθών | | `VAT_365` | Ενδοκοινοτικές λήψεις υπηρεσιών άρθρ. 14.2.α | | `VAT_366` | Λοιπές πράξεις λήπτη | | `E3_103` | Απομείωση εμπορευμάτων | | `E3_203` | Απομείωση πρώτων υλών και υλικών | | `E3_303` | Απομείωση πρώτων υλών και υλικών | | `E3_208` | Απομείωση προϊόντων και παραγωγής σε εξέλιξη | | `E3_308` | Απομείωση προϊόντων και παραγωγής σε εξέλιξη | | `E3_314` | Απομείωση ζώων - φυτών – εμπορευμάτων | | `E3_106` | Ιδιοπαραγωγή παγίων - Αυτοπαραδόσεις - Καταστροφές αποθεμάτων | | `E3_205` | Ιδιοπαραγωγή παγίων - Αυτοπαραδόσεις - Καταστροφές αποθεμάτων | | `E3_305` | Ιδιοπαραγωγή παγίων - Αυτοπαραδόσεις - Καταστροφές αποθεμάτων | | `E3_210` | Ιδιοπαραγωγή παγίων - Αυτοπαραδόσεις - Καταστροφές αποθεμάτων | | `E3_310` | Ιδιοπαραγωγή παγίων - Αυτοπαραδόσεις - Καταστροφές αποθεμάτων | | `E3_318` | Ιδιοπαραγωγή παγίων - Αυτοπαραδόσεις - Καταστροφές αποθεμάτων | | `E3_598_002` | Αγορές αγαθών που υπάγονται σε ΕΦΚ | | `NOT_VAT_295` | Μη συμμετοχή στο ΦΠΑ (έξοδα – εισροές Φ2) | Source: https://developers.novusconceptus.com/aade/classifications/ --- # Lines & payments _Γραμμές & πληρωμές · AADE myDATA 2.0.2_ Payment methods, POS providers (NSP), units of measure, line types, fuel codes. **On this page:** [Payment methods](https://developers.novusconceptus.com/aade/lines-payments/#payment-methods) · [Payment network service provider (posNspId)](https://developers.novusconceptus.com/aade/lines-payments/#pos-nsp) · [Measurement units](https://developers.novusconceptus.com/aade/lines-payments/#measurement-units) · [Line type (recType)](https://developers.novusconceptus.com/aade/lines-payments/#rec-type) · [Invoice detail type (marking)](https://developers.novusconceptus.com/aade/lines-payments/#invoice-detail-type) · [Fuel codes](https://developers.novusconceptus.com/aade/lines-payments/#fuel-codes) ## Payment methods _Τρόποι Πληρωμής · field `paymentMethods[].type` · AADE myDATA 2.0.2 — Appendix 8.12_ | Code | Description | Description (AADE, Greek) | Notes | |:---:|:---|:---|:---| | `1` | Domestic business payment account | Επαγ. Λογαριασμός Πληρωμών Ημεδαπής | | | `2` | Foreign business payment account | Επαγ. Λογαριασμός Πληρωμών Αλλοδαπής | | | `3` | Cash | Μετρητά | | | `4` | Cheque | Επιταγή | | | `5` | On credit | Επί Πιστώσει | | | `6` | Web banking | Web Banking | | | `7` | POS / e-POS (card) | POS / e-POS | See the Card / IRIS payments guide (provider signature). | | `8` | IRIS instant payments | Άμεσες Πληρωμές IRIS | See the Card / IRIS payments guide (provider signature). | ## Payment network service provider (posNspId) _Πάροχος Υπηρεσιών Πληρωμών (NSP) · field `paymentMethods[].posNspId` · Novus Conceptus_ Provider field. Tells which POS provider (NSP) the terminal belongs to, so that the provider signature is returned in the format and field order that this NSP expects. | Code | NSP | Signature format | Signed fields, in order | |:---:|:---|:---|:---| | `1` | Mellon | HEX | UID;MARK;DATETIME;NET;VAT;TOTAL;AMOUNT_TO_PAY;TID | | `2` | Viva | BASE64 | UID;MARK;DATETIME;AMOUNT_TO_PAY;NET;VAT;TOTAL;TID | | `3` | Cardlink | HEX | UID;MARK;DATETIME;NET;VAT;TOTAL;AMOUNT_TO_PAY;TID | | `4` | Euronet | BASE64 | UID;MARK;DATETIME;AMOUNT_TO_PAY;NET;VAT;TOTAL;TID | | `5` | Nexi | BASE64 | UID;MARK;DATETIME;AMOUNT_TO_PAY;NET;VAT;TOTAL;TID | | `6` | EDPS | BASE64 | UID;MARK;DATETIME;AMOUNT_TO_PAY;NET;VAT;TOTAL;TID | | `7` | Worldline | BASE64 | UID;MARK;DATETIME;NET;VAT;TOTAL;AMOUNT_TO_PAY;TID | | `98` | Other (HEX) | HEX | UID;MARK;DATETIME;AMOUNT_TO_PAY;NET;VAT;TOTAL;TID | | `99` | Other (BASE64) | BASE64 | UID;MARK;DATETIME;AMOUNT_TO_PAY;NET;VAT;TOTAL;TID | ## Measurement units _Είδος Ποσότητας · field `invoiceDetails[].measurementUnit` · AADE myDATA 2.0.2 — Appendix 8.13_ | Code | Description | Description (AADE, Greek) | |:---:|:---|:---| | `1` | Pieces | Τεμάχια | | `2` | Kilograms | Κιλά | | `3` | Litres | Λίτρα | | `4` | Metres | Μέτρα | | `5` | Square metres | Τετραγωνικά Μέτρα | | `6` | Cubic metres | Κυβικά Μέτρα | | `7` | Pieces - other cases (use otherMeasurementUnitQuantity / otherMeasurementUnitTitle) | Τεμάχια_Λοιπές Περιπτώσεις | ## Line type (recType) _Είδος Γραμμής · field `invoiceDetails[].recType` · AADE myDATA 2.0.2 — Appendix 8.16_ | Code | Description | Description (AADE, Greek) | Notes | |:---:|:---|:---|:---| | `1` | (For future use) Special withholding-tax line | Ειδική Γραμμή Παρακρατούμενων Φόρων | Inactive, reserved for future use. | | `2` | Fee line with VAT | Γραμμή Τέλους με Φ.Π.Α. | | | `3` | Other-taxes line with VAT | Γραμμή Λοιπών Φόρων με Φ.Π.Α. | | | `4` | (For future use) Special digital-transaction-fee line | Ειδική Γραμμή Ψηφιακού Τέλους συναλλαγής | Inactive, reserved for future use. | | `5` | (For future use) Special deductions line | Ειδική Γραμμή Κρατήσεων | Inactive, reserved for future use. | | `6` | Gift voucher | Δωροεπιταγή | | | `7` | Negative sign of values | Αρνητικό πρόσημο αξιών | For the partial cancellation of an 8.6 order slip (see the Food service guide). | ## Invoice detail type (marking) _Επισήμανση · field `invoiceDetails[].invoiceDetailType` · AADE myDATA 2.0.2 — Appendix 8.15_ | Code | Description | Description (AADE, Greek) | |:---:|:---|:---| | `1` | Clearance of third-party sales | Εκκαθάριση Πωλήσεων Τρίτων | | `2` | Fee from third-party sales | Αμοιβή από Πωλήσεις Τρίτων | ## Fuel codes _Κωδικοί Καυσίμων · field `invoiceDetails[].fuelCode` · AADE myDATA 2.0.2 — Appendix 8.17_ | Code | Description (AADE, Greek) | Notes | |:---:|:---|:---| | `10` | Benzine 95RON | | | `11` | Benzine 95RON+ | | | `12` | Benzine 100RON | | | `13` | Benzine LRP | | | `14` | Βενζίνη αεροπλάνων | | | `15` | Ειδικό καύσιμο αεριωθουμένων | | | `20` | Diesel | | | `21` | Diesel premium | | | `30` | Diesel Heatnn | | | `31` | Diesel Heat premium | | | `32` | Diesel Light | | | `33` | Diesel άλλων χρήσεων | | | `34` | Diesel ναυτιλίας | | | `35` | Κηροζίνη JP1 | | | `36` | Κηροζίνη άλλων χρήσεων | | | `37` | Μαζούτ | | | `38` | Μαζούτ ναυτιλίας | | | `40` | LPG (υγραέριο) | | | `41` | Υγραέριο (LPG) και μεθάνιο βιομηχανικό /εμπορικό κινητήρων (χύδην) | | | `42` | Υγραέριο (LPG) και μεθάνιο θέρμανσης και λοιπών χρήσεων (χύδην) | | | `43` | Υγραέριο (LPG) και μεθάνιο βιομηχανικό /εμπορικό κινητήρων (σε φιάλες) | | | `44` | Υγραέριο (LPG) και μεθάνιο θέρμανσης και λοιπών χρήσεων (σε φιάλες) | | | `50` | CNG (πεπιεσμένο φυσικό αέριο) | | | `60` | Αρωματικοί Υδρογονάνθρακες Δασμολογικής Κλάσης 2707 | | | `61` | Κυκλικοί Υδρογονάνθρακες Δασμολογικής Κλάσης 2902 | | | `70` | Ελαφρύ πετρέλαιο (WHITE SPIRIT) | | | `71` | Ελαφριά λάδια | | | `72` | Βιοντίζελ | | | `999` | Λοιπές χρεώσεις υπηρεσιών | For small non-fuel charges on a fuel invoice. | Source: https://developers.novusconceptus.com/aade/lines-payments/ --- # Goods movement _Διακίνηση · AADE myDATA 2.0.2_ Movement purpose, reverse movement, quantitative receiving note. **On this page:** [Purpose of movement](https://developers.novusconceptus.com/aade/movement/#move-purpose) · [Reverse delivery note purpose](https://developers.novusconceptus.com/aade/movement/#reverse-delivery-purpose) · [Receiving note purpose](https://developers.novusconceptus.com/aade/movement/#receiving-note-purpose) ## Purpose of movement _Σκοπός Διακίνησης · field `invoiceHeader.movePurpose / invoiceDetails[].movePurposeLine` · AADE myDATA 2.0.2 — Appendix 8.14_ | Code | Description | Description (AADE, Greek) | Notes | |:---:|:---|:---|:---| | `1` | Sale | Πώληση | | | `2` | Sale on behalf of third parties | Πώληση για Λογαριασμό Τρίτων | | | `3` | Sampling | Δειγματισμός | | | `4` | Exhibition | Έκθεση | | | `5` | Return | Επιστροφή | | | `6` | (No longer accepted) Safekeeping | Φύλαξη | No longer accepted (since myDATA 1.0.11). | | `7` | Processing / assembly | Επεξεργασία Συναρμολόγηση | | | `8` | Between the entity's premises | Μεταξύ Εγκαταστάσεων Οντότητας | | | `9` | Purchase | Αγορά | | | `10` | Supply of ships and aircraft | Εφοδιασμός πλοίων και αεροσκαφών | | | `11` | Free distribution | Δωρεάν διάθεση | | | `12` | Warranty | Εγγύηση | | | `13` | Loan for use | Χρησιδανεισμός | | | `14` | Storage at third parties | Αποθήκευση σε Τρίτους | | | `15` | (No longer accepted) Return from safekeeping | Επιστροφή από Φύλαξη | No longer accepted (since myDATA 1.0.11). | | `16` | (No longer accepted) Recycling | Ανακύκλωση | No longer accepted (since myDATA 1.0.11). | | `17` | (No longer accepted) Destruction of useless material | Καταστροφή άχρηστου υλικού | No longer accepted (since myDATA 1.0.11). | | `18` | (No longer accepted) Movement of fixed assets (internal) | Διακίνηση Παγίων (Ενδοδιακίνηση) | No longer accepted (since myDATA 1.0.11). | | `19` | Other movements | Λοιπές Διακινήσεις | Fill in otherMovePurposeTitle (header) / otherMovePurposeLineTitle (line). | | `20` | Transport - courier services | Μεταφορές - Ταχυμεταφορές | | ## Reverse delivery note purpose _Αιτία Έκδοσης Αντίστροφης Διακίνησης · field `invoiceHeader.reverseDeliveryNotePurpose` · AADE myDATA 2.0.2 — Appendix 8.21_ | Code | Description | Description (AADE, Greek) | |:---:|:---|:---| | `1` | Issuer not obliged | ΜΗ ΥΠΟΧΡΕΟΣ ΕΚΔΟΣΗΣ | | `2` | Refusal / omission to issue | ΑΡΝΗΣΗ ΕΚΔΟΣΗΣ/ΕΚ ΠΑΡΑΔΡΟΜΗΣ ΜΗ ΕΚΔΟΣΗ | | `3` | Intra-community acquisition | ΕΝΔΟΚΟΙΝΟΤΙΚΗ ΑΠΟΚΤΗΣΗ | | `4` | Third-country acquisition | ΑΠΟΚΤΗΣΗ ΤΡΙΤΗ ΧΩΡΑ | | `5` | Reverse obligation | ΑΝΤΙΣΤΡΟΦΗ ΥΠΟΧΡΕΩΣΗΣ | ## Receiving note purpose _Αιτία Έκδοσης Δελτίου Ποσοτικής Παραλαβής · field `invoiceHeader.receivingNotePurpose` · AADE myDATA 2.0.2 — Appendix 8.24_ New in myDATA 2.0.2. Required (and accepted only) in types 10.1 and 10.2. | Code | Description | Description (AADE, Greek) | Notes | |:---:|:---|:---|:---| | `1` | Issuer not obliged | ΔΠΠ - ΜΗ ΥΠΟΧΡΕΟΣ ΕΚΔΟΣΗΣ | 10.1, 10.2 | | `2` | Refusal / omission to issue | ΔΠΠ - ΑΡΝΗΣΗ ΕΚΔΟΣΗΣ/ΕΚ ΠΑΡΑΔΡΟΜΗΣ ΜΗ ΕΚΔΟΣΗ | 10.1, 10.2 | | `3` | Intra-community acquisition | ΔΠΠ - ΕΝΔΟΚΟΙΝΟΤΙΚΗ ΑΠΟΚΤΗΣΗ | 10.1, 10.2 | | `4` | Third-country acquisition | ΔΠΠ - ΑΠΟΚΤΗΣΗ ΤΡΙΤΗ ΧΩΡΑ | 10.1, 10.2 | | `5` | Quantitative check | ΔΠΠ - ΠΟΣΟΤΙΚΟΣ ΕΛΕΓΧΟΣ | Only 10.1 | | `6` | Non / partial delivery | ΔΠΠ - ΜΗ/ΜΕΡΙΚΗ ΠΑΡΑΔΟΣΗ | 10.1, 10.2 | | `7` | Other cases (fill otherReceivingNotePurposeTitle) | ΔΠΠ - ΛΟΙΠΕΣ ΠΕΡΙΠΤΩΣΕΙΣ | 10.1, 10.2 | Source: https://developers.novusconceptus.com/aade/movement/ --- # Postman & examples Everything a developer needs to get started: one **YAML** file (OpenAPI) and one **Postman collection** for each API. ## The files | API | OpenAPI (YAML) | Postman | |:---|:---|:---| | **Provider API**: issuing documents | [ novus-provider-api.openapi.yaml](https://developers.novusconceptus.com/openapi/novus-provider-api.openapi.yaml) | [ Novus_Provider_API.postman_collection.json](https://developers.novusconceptus.com/postman/Novus_Provider_API.postman_collection.json) | | **Onboarding API**: activating customers | [ novus-onboarding-api.openapi.yaml](https://developers.novusconceptus.com/openapi/novus-onboarding-api.openapi.yaml) | [ Novus_Onboarding_API.postman_collection.json](https://developers.novusconceptus.com/postman/Novus_Onboarding_API.postman_collection.json) | - You can read the **YAML** (OpenAPI 3.1) as text or feed it to a code generator (NSwag, OpenAPI Generator, Kiota). It starts with the flow and the important notes. Every field that takes an AADE code lists the allowed values with their descriptions. - The **Postman collection** has every call, organized into scenarios, with explanations and ready-made tests. ## Postman in 3 steps 1. In Postman: **Import** → drag in the collection file. 2. Open the collection → **Variables** tab and fill in: | Variable | Provider API | Onboarding API | |:---|:---|:---| | `apiKey` | Your sandbox API key ([where to find it](https://developers.novusconceptus.com/start/account/)) | The same key | | `issuerVat` | The VAT number (ΑΦΜ) you signed up with | — | | `vatNumber` | — | The VAT number of the customer you are activating | | `b2gApiKey` | B2G only: the separate B2G key | — | 3. Run **folder 1** of the collection, one request at a time, in order. `baseUrl` points to the **sandbox** by default (`https://provider-dev.timologisi.online`). For production, change it to `https://provider.timologisi.online`. **Tip: You do not need to change the date and number** In the Provider API collection, **today's date** (`{{today}}`) and a **new number** (`{{aa}}`) are set automatically before each call. The MARKs, UIDs and tokens that later steps need are saved automatically. In the Postman **Console** you see the `statusCode`, the MARK and the AADE errors of each response. ## Provider API scenarios | Folder | What it tests | In order | |:---|:---|:---:| | **1. Flow: your first document** | Credits → receipt 11.1 → search → PDF → myDATA XML | ✔ | | **2. Invoices & receipts** | 1.1, 2.1, 11.2, 3.1, 8.2, taxes per line and at document level | | | **3. Credit notes** | Invoice → 5.1 that credits it · 5.2 · 11.4 | ✔ | | **4. Card / IRIS through POS** | Provider signature → completion · paying an old invoice by card · 8.4 · 8.5 | ✔ | | **5. Food service (8.6)** | Order → item cancellation → open tables → closing with 11.1 · full cancellation | ✔ | | **6. Goods movement** | Invoice / receipt - delivery note · 9.3 → invoice that closes it · delivery note cancellation | ✔ | | **7. B2G (public sector)** | 6 invoices to public bodies (needs `b2gApiKey`) | | | **8. OSS** | 11.1 to a consumer in another EU member state | | | **9. Error scenarios** | 401 without a key · 400 wrong payment total · 228 duplicate | ✔ | For the Onboarding API, the flow and the scenarios are described in [How it works](https://developers.novusconceptus.com/onboarding-api/). **Note: The whole collection with one command** With the Postman **Runner**, or with [Newman](https://www.npmjs.com/package/newman) in your CI, you run all scenarios in order: ```bash newman run Novus_Provider_API.postman_collection.json \ --env-var apiKey=ΤΟ_ΚΛΕΙΔΙ_ΣΑΣ --env-var issuerVat=ΤΟΝ_ΑΦΜ_ΣΑΣ ``` Without `b2gApiKey`, folder 7 fails, which is expected. ## Ready-made JSON Each file is a **valid request** for `SendInvoices` (or `SendInvoicesB2G`). Amounts, VAT, totals and classifications are checked automatically for every release of the docs. Before you send them, change the issuer VAT number, `issueDate` and `aa`. | Category | Files | Guide | |:---|:---|:---| | Invoices & receipts | [1.1](https://developers.novusconceptus.com/examples/invoicing/1.1-sales-invoice.json) · [2.1](https://developers.novusconceptus.com/examples/invoicing/2.1-service-invoice.json) · [3.1](https://developers.novusconceptus.com/examples/invoicing/3.1-title-of-acquisition.json) · [8.2](https://developers.novusconceptus.com/examples/invoicing/8.2-climate-resilience-fee.json) · [11.1](https://developers.novusconceptus.com/examples/invoicing/11.1-retail-receipt.json) · [11.2](https://developers.novusconceptus.com/examples/invoicing/11.2-service-receipt.json) | [Invoices & receipts](https://developers.novusconceptus.com/guides/invoices/) | | Credit notes | [5.1](https://developers.novusconceptus.com/examples/invoicing/5.1-credit-invoice-correlated.json) · [5.2](https://developers.novusconceptus.com/examples/invoicing/5.2-credit-invoice-uncorrelated.json) · [11.4](https://developers.novusconceptus.com/examples/invoicing/11.4-retail-credit-note.json) | [Credit notes](https://developers.novusconceptus.com/guides/credit-notes/) | | Taxes | [Per line](https://developers.novusconceptus.com/examples/invoicing/taxes-line-level.json) · [At document level](https://developers.novusconceptus.com/examples/invoicing/taxes-document-level.json) | [Taxes, fees, deductions](https://developers.novusconceptus.com/guides/taxes/) | | Card / IRIS | [11.1 by card](https://developers.novusconceptus.com/examples/pos/11.1-card-payment.json) · [Completion](https://developers.novusconceptus.com/examples/pos/completion.json) · [8.4](https://developers.novusconceptus.com/examples/pos/8.4-pos-collection-receipt.json) · [8.5](https://developers.novusconceptus.com/examples/pos/8.5-pos-refund-receipt.json) | [Card / IRIS payment](https://developers.novusconceptus.com/guides/card-payments/) | | Food service | [Order](https://developers.novusconceptus.com/examples/food/1-new-order-8.6.json) · [Item cancellation](https://developers.novusconceptus.com/examples/food/2-partial-cancellation-8.6.json) · [Closing with 11.1](https://developers.novusconceptus.com/examples/food/3-close-table-11.1.json) · [Full cancellation](https://developers.novusconceptus.com/examples/food/4-cancel-whole-order-8.6.json) | [Food service](https://developers.novusconceptus.com/guides/food-service/) | | Goods movement | [1.1 - Delivery note](https://developers.novusconceptus.com/examples/delivery/1.1-sales-invoice-delivery-note.json) · [11.1 - Delivery note](https://developers.novusconceptus.com/examples/delivery/11.1-retail-receipt-delivery-note.json) · [9.3](https://developers.novusconceptus.com/examples/delivery/9.3-delivery-note.json) · [1.1 closing delivery notes](https://developers.novusconceptus.com/examples/delivery/1.1-invoice-closing-delivery-notes.json) | [Goods movement](https://developers.novusconceptus.com/guides/delivery/) | | B2G | [1.1](https://developers.novusconceptus.com/examples/b2g/1.1-sales-invoice.json) · [1.1 VAT exemption](https://developers.novusconceptus.com/examples/b2g/1.1-sales-invoice-vat-exemption.json) · [1.1 fuel](https://developers.novusconceptus.com/examples/b2g/1.1-fuel-invoice.json) · [1.1 - Delivery note](https://developers.novusconceptus.com/examples/b2g/1.1-sales-invoice-delivery-note.json) · [2.1](https://developers.novusconceptus.com/examples/b2g/2.1-service-invoice.json) · [5.2](https://developers.novusconceptus.com/examples/b2g/5.2-credit-invoice.json) | [Public sector (B2G)](https://developers.novusconceptus.com/guides/b2g/) | | OSS | [11.1 OSS](https://developers.novusconceptus.com/examples/oss/11.1-oss-retail-receipt.json) | [OSS](https://developers.novusconceptus.com/guides/oss/) | | Onboarding | [New request](https://developers.novusconceptus.com/examples/onboarding/create-request.json) · [New webhook](https://developers.novusconceptus.com/examples/onboarding/create-webhook.json) | [Onboarding API](https://developers.novusconceptus.com/onboarding-api/) | **Warning: Test data** The company names, emails and MARKs in the examples are **fictitious**. `123456789` stands for your own issuer VAT number: change it. ## For AI tools The whole documentation is also available as **one text file** (Markdown), to hand to AI tools such as Claude, ChatGPT, Copilot or Cursor, e.g. "read this and build the SendInvoices integration". It is generated on every release, so it is always current. | File | Contents | |:---|:---| | [/llms-full.txt](https://developers.novusconceptus.com/llms-full.txt) | Every page in English, with the JSON examples inlined. This is the file to give the tool. | | [/llms.txt](https://developers.novusconceptus.com/llms.txt) | Index: one line per page, with link and description. | | [/el/llms-full.txt](https://developers.novusconceptus.com/el/llms-full.txt) · [/el/llms.txt](https://developers.novusconceptus.com/el/llms.txt) | The same in Greek. | Along with the file, give the tool the [OpenAPI (YAML)](https://developers.novusconceptus.com/tools/#the-files) of the API you use. Source: https://developers.novusconceptus.com/tools/ --- # FAQ The questions developers ask us most often, with a short answer and a link to the related guide. Click a question to open it. For something specific, use the **search** at the top right: it also searches inside the answers. - **[Getting started & account](https://developers.novusconceptus.com/faq/start/)** Sandbox account, API keys, many clients on one key, credits. 10 questions - **[Certification & production](https://developers.novusconceptus.com/faq/go-live/)** From testing to the production API key. 6 questions - **[Onboarding & clients](https://developers.novusconceptus.com/faq/onboarding/)** Client activation, contracts, Provider declaration. 26 questions - **[Issuing documents](https://developers.novusconceptus.com/faq/invoices/)** Document types, numbering, classifications, PDF, email to the recipient. 20 questions - **[Credit notes & cancellations](https://developers.novusconceptus.com/faq/credit-notes/)** How to "cancel" a document. 5 questions - **[Errors](https://developers.novusconceptus.com/faq/errors/)** What each error means and what to do. 10 questions - **[Card / POS](https://developers.novusconceptus.com/faq/card-payments/)** Provider signature, NSP, special cases. 16 questions - **[Food service](https://developers.novusconceptus.com/faq/food-service/)** Order slips (8.6) and tables. 4 questions - **[Goods movement](https://developers.novusconceptus.com/faq/delivery/)** Delivery notes and digital goods movement. 7 questions - **[B2G (public sector)](https://developers.novusconceptus.com/faq/b2g/)** Invoices to public sector bodies. 8 questions - **[General](https://developers.novusconceptus.com/faq/general/)** Limits, archiving, legal framework. 5 questions Source: https://developers.novusconceptus.com/faq/ --- # Getting started & account Sandbox account, API keys, many clients on one key, credits. ### How do I get access to the sandbox and the API documentation? The documentation (guides, OpenAPI and a Postman collection with ready-made scenarios and JSON) is published on the developer site. You open a sandbox account yourself by signing up on the developer portal (email and VAT number, ΑΦΜ). After confirmation, you find your API key in the portal, and the VAT number you signed up with is automatically activated as an issuer. Test calls go to `https://provider-dev.timologisi.online` with the key in the `API-KEY` header. Sandbox documents are deleted after 30 days. See: [Environments & API key](https://developers.novusconceptus.com/start/account/#create-an-account-sandbox) ### Which recipient VAT number can I use on test invoices in the sandbox? As the issuer, use the VAT number you signed up with. As the recipient, use a **fictitious VAT number** that passes the check digit validation, as in the ready-made examples. Do not use the VAT number of a real business: AADE (the Greek tax authority) returns the receiving emails that each recipient has registered, and the certified e-invoicing provider sends the PDF to them even from the sandbox. See: [Environments & API key](https://developers.novusconceptus.com/start/account/) ### Does the Provider store the documents I issue, or is archiving my responsibility? Yes, the Provider stores them. After transmitting the document to myDATA, the Provider generates the PDF and archives it. In production, archiving is permanent. You can get the PDF and the details of each document through `invoiceUrl`, `GetInvoice/{uid}/{fileType}` or `RequestTransmittedDocs`. In the sandbox, documents are deleted after 30 days. It is good practice to also keep the MARK, UID, Authentication Code and `invoiceUrl` in your application. See: [How it works](https://developers.novusconceptus.com/start/how-it-works/) ### Does the API also have a web interface for issuing documents manually? No. The Provider API is built for system-to-system communication and has no issuing screen. In your account portal you can view and search the documents you issued, but you cannot create new ones. For manual issuing, Novus has a separate e-invoicing application, independent of the API. See: [Environments & API key](https://developers.novusconceptus.com/start/account/) ### Can I connect my own system (custom backend, e-shop or ERP) directly to the API, without middleware or a Novus platform? Yes. Novus is itself the certified Provider, and you work with it directly, with no reseller or ERP in between. Your system calls the REST API with JSON, e.g. when an order is completed in the e-shop, and gets the MARK, UID, Authentication Code and PDF in the same response. Novus provides the Provider layer, that is, the API and the connection to AADE. You handle the issuing logic (document types, VAT, classifications, numbering) and the implementation in your system. See: [How it works](https://developers.novusconceptus.com/start/how-it-works/) ### Can I move documents I have already issued through another provider to Novus by sending them again? No. Documents already transmitted to myDATA are not sent again, because a new submission creates a conflict in myDATA (e.g. a duplicate, error 228). Also, through a Provider, the `issueDate` must be today's date. Keep the history in your own application or with your previous provider, and issue only new documents through Novus. See: [Errors & statusCode](https://developers.novusconceptus.com/provider-api/errors/#statuscode) ### Can I change the email of an account I have already activated on the developer portal? No, the email of an activated account cannot be changed. Sign up again on the developer portal with the correct email. The sandbox account and the API key are created after you confirm the email and set a password. The email and VAT number you enter at sign-up are also used in the certification request, so check them before you submit. See: [Environments & API key](https://developers.novusconceptus.com/start/account/#create-an-account-sandbox) ### Does Novus build the integration into my ERP, or provide a ready-made module for any ERP? No. Novus provides the REST API (Provider API and Onboarding API) and the technical documentation. The integration is built by your own development team, your software vendor or an external partner. Your application remains the user's working environment and calls the API for every document it issues. It is responsible for correct amounts, VAT, classifications, numbering and error handling. To get started, there are ready-made JSON examples, OpenAPI and a Postman collection. See: [How it works](https://developers.novusconceptus.com/start/how-it-works/) ### Can I share my account's credits freely across all the clients (VAT numbers) I serve? Yes. One API key can hold many client VAT numbers with a **shared credit balance**: every document, for any VAT number, is charged to the same balance, which you can check with `GET /api/v1/Provider/GetCreditsBalance`. If you prefer, you can also create a separate sign-up (a separate API key, with its own credits) for each VAT number. In either case, every new VAT number is activated with a contract and Novus approval, through the Onboarding API or the portal. See: [Charges (credits)](https://developers.novusconceptus.com/provider-api/credits/) ### How many credits does each document cost, and are failed submissions charged? Invoices (1.x, 2.x, 3.x, 5.x, 6.x, 7.1, 8.1, 8.2) and goods movement documents (9.x, 10.x) cost 1 credit, while retail receipts (11.1–11.5), POS receipts 8.4/8.5 and 8.6 cost 0.5. The provider signature for card/IRIS payments costs an extra 0.25 per payment line, as do cancellations of delivery notes and receiving notes. Only successful calls are charged: rejections by the Provider's checks and AADE `ValidationError` responses are not charged. The credits of each call are returned in the `credits` field, and the balance with `GetCreditsBalance`. See: [Charges (credits)](https://developers.novusconceptus.com/provider-api/credits/) Source: https://developers.novusconceptus.com/faq/start/ --- # Certification & production From testing to the production API key. ### How does certification work to get a production key? Do I need an appointment, a form or to send MARKs? From your application, in the sandbox, you run the basic scenarios B1–B5: a document with two VAT rates, a credit note for it, printing, a deliberate error, and the same document again (error 228). Then you submit the certification request online, within 30 days. You need no appointment, no Word file and no MARKs: we can see your documents ourselves. Card payments, food service, goods movement, B2G, OSS and Onboarding are not certified; you simply declare them in the request. **Certification is free of charge.** See: [Certification & going to production](https://developers.novusconceptus.com/start/go-live/#request) ### Are the certification scenarios run in the sandbox or in production? In the sandbox. Certification is the check before you move to production, and a production key is issued only after it is approved. Because sandbox documents are deleted after 30 days, you must submit the request within that period after running the scenarios. See: [Certification & going to production](https://developers.novusconceptus.com/start/go-live/#scenarios) ### How is production activated, and how do I get the production key after certification? Once your certification request is approved, we send you the instructions for the production account and key in the same request. Production is a completely separate environment, with its own base URL (`https://provider.timologisi.online`), account and API key. There you buy credits and activate your clients. The sandbox key does not work in production (HTTP 401). See: [Certification & going to production](https://developers.novusconceptus.com/start/go-live/#after) ### Does the API cover both B2B invoices and B2C receipts, and can I start with B2B only and add B2C later? Yes. The API covers all document types from 1.1 to 11.5 with the same `SendInvoices` call, so you can start with B2B invoices only and add retail receipts later. For clients with retail (B2C) sales, the Onboarding API request also needs `ispDetails`. See: [Certification & going to production](https://developers.novusconceptus.com/start/go-live/#scenarios) ### Are card payments certified (EFT/POS scenario)? No. With the new process only the basic scenarios B1–B5 are certified. Card / IRIS payments, like the other modules (food service, goods movement, B2G, OSS, Onboarding), are not certified: you declare them in the request and check them yourself with the guide and Postman (folder 4). See: [Certification & going live](https://developers.novusconceptus.com/start/go-live/#modules) ### Is a separate certification test needed for 11.2 or for an 11.1 with goods movement (`isDeliveryNote`)? No. In B1 you send an 11.1 for retail or a 1.1 for wholesale. The 11.2 (service provision receipt) follows the same logic and needs no separate test. An 11.1 with `isDeliveryNote: true` belongs to goods movement, which you declare in the request but which is not certified. See: [Certification & going live](https://developers.novusconceptus.com/start/go-live/#scenarios) Source: https://developers.novusconceptus.com/faq/go-live/ --- # Onboarding & clients Client activation, contracts, Provider declaration. ### What is the process to activate a new client (VAT number, ΑΦΜ) so that they can issue documents through my application? With the Onboarding API you send `POST /api/v1/requests` with the client's details: legal name, VAT number, tax office (ΔΟΥ), `transactionTypes` (B2B/B2C), address, contact email and phone, legal representative and, for B2C, `ispDetails`. The client receives the contract by email and uploads it signed (or you upload it with `signed-contract`). Novus reviews it. On approval, the VAT number is activated on your key and the Provider declaration is submitted, which the client accepts in myAADE within 10 days. The client must also authorize Novus as their certified e-invoicing provider in myAADE. You issue for the client when `provisioning.status = COMPLETED`. You can also do the whole process from the portal. See: [Onboarding API: how it works](https://developers.novusconceptus.com/onboarding-api/) ### Can I automate the activation request for a VAT number and get automatic updates on its status? Yes, with the Onboarding API: you create the request with `POST /api/v1/requests`, read the status (`PENDING_SIGNATURE`, `UNDER_REVIEW`, `ACTION_REQUIRED`, `APPROVED`, `REJECTED`, `CANCELLED`) with `GET /api/v1/requests/{requestId}` and the history with `/history`. To avoid polling, register a webhook with `POST /api/v1/webhooks` for the `request.status_changed` and `request.provisioned` events, and always verify the `X-Novus-Signature` signature. Before you enable issuing for the client, confirm the status with `GET`. See: [Webhooks](https://developers.novusconceptus.com/onboarding-api/webhooks/#events) ### Which signature types are accepted on the client's contract, and can I handle signing inside my application? Any legible signature is accepted: a scanned handwritten signature, a gov.gr signature or a digital signature. The file must be a PDF of up to 15 MB, with all pages upright and clear; otherwise the request goes to `ACTION_REQUIRED`. You can download the contract with `GET /api/v1/requests/{requestId}/contract`, show it to the client, and upload the signed contract yourself with `POST /api/v1/requests/{requestId}/signed-contract` (field `contractFile`). The link in the email is an alternative, not a required step. For the client, gov.gr is usually the simplest option. See: [Onboarding API: endpoints](https://developers.novusconceptus.com/onboarding-api/endpoints/#upload) ### What is the maximum file size for the signed contract? The signed contract must be a real PDF (not corrupted or password-protected) of up to **15 MB**. Above that, the Onboarding API returns `413 FILE_TOO_LARGE`. If a scanned file is over the limit, scan at a lower resolution or compress the PDF. See: [Onboarding API: endpoints](https://developers.novusconceptus.com/onboarding-api/endpoints/#upload) ### Does the client need their own myDATA credentials, or an authorization to the Provider, to issue through my application? The client's myDATA credentials (user id / subscription key) are not needed. What is required: the contract with Novus, the client's authorization of Novus as their Provider in myAADE, and the Provider declaration, which Novus submits after approval and the client accepts in myAADE within 10 days (otherwise it is deemed accepted). The authorization is still required when activation goes through the Onboarding API. See: [Certification & go-live](https://developers.novusconceptus.com/start/go-live/#clients) ### Can a client who has already authorized another Provider also use Novus at the same time? Yes, a business can use more than one Provider. For Novus, the contract, the authorization and the Provider declaration are needed as usual. If the client already has a contract with Novus through another software house, the Onboarding API creates a `LINK_EXISTING` request, with no new contract. See: [Onboarding API: how it works](https://developers.novusconceptus.com/onboarding-api/#two-request-types-the-system-decides) ### How long does it take to activate a new client until they can issue documents? It depends mainly on how fast the client signs and uploads the contract and grants the authorization. Once there is a signed contract, the Novus review (`UNDER_REVIEW`) usually takes up to 1 business day, often a few hours. The client can issue when the request is `APPROVED` and `provisioning.status = COMPLETED`. See: [Onboarding API: how it works](https://developers.novusconceptus.com/onboarding-api/#request-statuses) ### Why might a client's signed Provider contract be rejected? The contract must be complete: all details properly filled in (not just stamped), with the contract date and number, all pages upright and legible, as a PDF of up to 15 MB. A scanned handwritten, gov.gr or digital signature is accepted. If the contract is not accepted, the request moves to `ACTION_REQUIRED` with the reason in `message`, and you upload a new signed contract. With the Onboarding API, the contract is generated already filled in with its number and date, which avoids such errors. See: [Onboarding API: how it works](https://developers.novusconceptus.com/onboarding-api/#the-contract) ### What does the message 'the requested contract is not readable' mean on a client activation request? The signed contract did not pass the Novus review, and the request moved to `ACTION_REQUIRED`, with the reason in `message`. The file is usually the problem: pages upside down or skewed, a blurry scan, or missing pages. Upload a new PDF with all pages upright and clear (up to 15 MB), with `POST /api/v1/requests/{requestId}/signed-contract` or from the link the client received, and the request returns to `UNDER_REVIEW`. See: [Onboarding API: how it works](https://developers.novusconceptus.com/onboarding-api/#the-contract) ### How do I know whether the client declared retail (B2C), wholesale (B2B) or both in the contract? With the Onboarding API, you declare the transaction types yourself in the request, in `companyDetails.transactionTypes` (`B2B`, `B2C` or both; `B2G` is not accepted), and the contract is generated from them. For `B2C`, `ispDetails` is also required. Agree with the client before the request, so that your application's settings match what is declared in the contract and in myDATA. See: [Onboarding API: endpoints](https://developers.novusconceptus.com/onboarding-api/endpoints/#create) ### Is it mandatory to fill in Annex A of the Provider contract? Yes, when the client issues retail (B2C) documents, either retail only or retail and wholesale, because AADE requires it. In the Onboarding API, the matching information is the client's internet service provider (`ispDetails.providerName`, `contractNumber`, `contractDate`), which is required when `transactionTypes` includes `B2C`. For B2B only, you leave it out. See: [Onboarding API: how it works](https://developers.novusconceptus.com/onboarding-api/#the-contract) ### Must each client (VAT number) sign their own contract with Novus, even if I serve them as a reseller? Yes. The contract is between Novus and the client and is signed by the legal representative of each business. The authorization of Novus in myAADE and the Provider declaration are also required. The contract and the declaration are done once per client, no matter how many software houses serve them. The reseller model concerns credits, not the contract. See: [Certification & go-live](https://developers.novusconceptus.com/start/go-live/#clients) ### What is the email 'Οδηγίες διασύνδεσης Παρόχου Ηλεκτρονικής τιμολόγησης' (e-invoicing provider connection instructions) that the client receives, and what should they do? It is part of the client's activation with the Provider. It is sent in response to a connection request and contains a link to the portal to complete the connection, that is, the contract with Novus. The client follows the link and completes the process. If they did not ask for e-invoicing services, they ignore the message. After approval the VAT number is activated, and the client must accept the Provider declaration in myAADE within 10 days. See: [Onboarding API: how it works](https://developers.novusconceptus.com/onboarding-api/) ### Why does the request for a client with B2C sales ask for 'provider' details (name, contract number and date), and what should I fill in? When the client declares B2C (retail) sales, AADE requires the details of their internet service provider (alternative connection provider), not of Novus as the e-invoicing provider. In the Onboarding API you give them in `ispDetails` with `providerName`, `contractNumber` and `contractDate` (not in the future). If the client only does B2B, you leave out `ispDetails`. Because the contract is generated already filled in, you must have these details before you make the request. A B2C request without internet provider details does not proceed. See: [Onboarding API: endpoints](https://developers.novusconceptus.com/onboarding-api/endpoints/#create) ### A client who already issues retail (B2C) only through Novus wants to add wholesale (B2B) or declare the Provider again: what needs to happen? A new contract (from the portal) that covers all transaction types is needed, and a change to the Provider declaration in myDATA. The client, usually through their accountant, revokes the existing declaration with the day of the change as its end date (the revocation must be submitted no later than 10 days after). Then Novus, based on the new contract, submits a new start declaration with all active transaction types (existing and new), which the client approves in myAADE. If the new request returns `409 CLIENT_ALREADY_LINKED`, the client must first be removed from your account and a new request made, with the revocation and the acceptance by Novus on the same day. Before any change, the client should consult their accountant. See: [Onboarding API: endpoints](https://developers.novusconceptus.com/onboarding-api/endpoints/#create) ### The client asks for the number and date of their contract with the Provider, to declare the Provider to AADE. Where do they find them? Novus submits the Provider declaration to AADE after the contract is approved. The client only accepts it in myAADE within 10 days; otherwise it is deemed accepted. The contract number and date are in the `contract` (`contractNumber`, `contractDate`) of the request in the Onboarding API, and you download the PDF with `GET /api/v1/requests/{requestId}/contract`. For older contracts not made through the API, request a copy from Novus. See: [Onboarding API: endpoints](https://developers.novusconceptus.com/onboarding-api/endpoints/#get) ### For a sole proprietor or a farmer, what do I fill in the `administrator` fields of the onboarding request? For a sole proprietor, the legal representative is the business owner. Send their full name in `administrator.fullName`, and in `administrator.vatNumber` the same VAT number as in `companyDetails.vatNumber`. No check rejects two identical VAT numbers; the VAT number just needs a valid check digit. See: [Onboarding API: endpoints](https://developers.novusconceptus.com/onboarding-api/endpoints/#create) ### If the client already has a Novus contract through another software house (`LINK_EXISTING`), is their link with that software house cut after approval? No. A VAT number can be linked to several software houses at the same time, while the contract and the Provider declaration are done once per client. When a `LINK_EXISTING` request is approved, the VAT number is simply added to your API key, with no new signature, and the link with the previous software house stays active. The client can issue from both applications. See: [Onboarding API: how it works](https://developers.novusconceptus.com/onboarding-api/#two-request-types-the-system-decides) ### Can I disable or resend the automatic contract email to the client, and does its link expire? The email with the contract and the upload link is always sent to `contactInfo.email` and cannot be disabled, because the contract is between Novus and the client. The link does not expire and always shows the current status of the request. Resending is not available: if a new email is needed, cancel the request with `DELETE /api/v1/requests/{requestId}` (only before approval) and create a new one, with a new `Idempotency-Key`. See: [Onboarding API: how it works](https://developers.novusconceptus.com/onboarding-api/#the-contract) ### How do I test the onboarding flow in the sandbox? Is a real contract or Provider declaration created, and are emails sent? In the sandbox, no real contract is created and no Provider declaration is submitted. You can use real VAT numbers or any nine-digit number with a valid check digit. The flow: create a request, download the PDF, upload a signed PDF, send Novus the `requestId` so that they approve it, and track `provisioning` until `COMPLETED`. Also test the `409 DUPLICATE_OPEN_REQUEST` and `422` errors. **Emails are really sent**, so only put your own addresses in `contactInfo.email`. See: [Onboarding API: how it works](https://developers.novusconceptus.com/onboarding-api/) ### When can the new client start issuing: at `provisioning.status = COMPLETED`, or must I wait until the Provider declaration is accepted? As soon as `provisioning.status` becomes `COMPLETED` (or you receive the `request.provisioned` webhook), the VAT number is active on your API key and you issue normally through the Provider API. You do not need to wait for `aadeStatement.status` to become `ACCEPTED`; `SUBMITTED` is enough. The client accepts the declaration in myAADE in parallel. If they do not, it is deemed accepted after 10 days (`PRESUMED_ACCEPTED`). See: [Onboarding API: endpoints](https://developers.novusconceptus.com/onboarding-api/endpoints/#get) ### What should my application do when it receives the `client.statement_recalled` webhook? For now, Novus recommends that you do not stop issuing automatically because of this event, since AADE is still defining the revocation process. On the Novus side, a revocation happens when the client's transaction types change significantly (e.g. B2C is added for a B2B-only client). The old declaration is then revoked and a new one is submitted, so the event alone does not mean there is a problem. Always confirm the status with `GET /api/v1/requests/{requestId}` and wait for instructions from Novus. See: [Webhooks](https://developers.novusconceptus.com/onboarding-api/webhooks/#events) ### How do I disconnect an active client from my software house after `APPROVED`? After approval, the request cannot be cancelled through the API (`DELETE` returns `409 INVALID_TRANSITION`). Disconnection is only done in agreement with Novus, because it has contractual consequences. It only removes your link: it does not cancel the client's contract with Novus or revoke the Provider declaration, if the client continues through another software house. If a client comes to you from another software house, you simply send a request and get `LINK_EXISTING`. See: [Onboarding API: endpoints](https://developers.novusconceptus.com/onboarding-api/endpoints/#cancel) ### The client's accountant says that Provider declarations are missing in myAADE, although the client issues through Novus. Who submits what? For each issuer VAT number, three things are needed: a contract with Novus, the authorization of Novus as Provider by the client themselves in myAADE, and the Provider declaration to AADE (A.1112/2025). The client does their part when they start using the Provider. Novus submits the Provider declaration only after the VAT number has been activated with its own contract, from the portal or the Onboarding API, and the client accepts it in myAADE within 10 days. If a software house serves the client, the process goes through the software house. See: [Certification & go-live](https://developers.novusconceptus.com/start/go-live/#clients) ### Does the API also work for clients I activated before I started using the Onboarding API? Every VAT number that is already active on your API key issues normally through the Provider API, however it was activated. If you send an Onboarding API request for a VAT number that is already active on your key, you get `409 CLIENT_ALREADY_LINKED`. No new request is needed. See: [Environments & API key](https://developers.novusconceptus.com/start/account/#one-key-many-customers) ### How can the client or their accountant confirm that Novus Conceptus is an AADE-licensed e-invoicing provider? Novus Conceptus is a licensed e-invoicing provider (ΥΠΑΗΕΣ) with provider code `005`. It is on the public list of licensed providers on the AADE website, where the accountant can verify it. The license details (number, licensing date and renewal date) are in the "Who we are" section of the documentation. See: [Issue tax documents from your application with a single call](https://developers.novusconceptus.com/#novus) Source: https://developers.novusconceptus.com/faq/onboarding/ --- # Issuing documents Types, numbering, classifications, PDF, email to the recipient. ### Is the income classification for E3 (`incomeClassification`) sent with the document, or is it a separate step after issuing? It is sent with the document itself, in the same `SendInvoices` call, and it is your application's responsibility. Each income line has an `incomeClassification` (`classificationType`, `classificationCategory` and an `amount` equal to `netValue`), and `invoiceSummary.incomeClassification` holds the totals per type and category. For expenses (e.g. self-billing) you use `expensesClassification`. The values (e.g. `E3_561_001` with `category1_1`) come from AADE's classification tables, depending on the business activity. See: [Invoices & receipts](https://developers.novusconceptus.com/guides/invoices/#the-6-rules-that-prevent-most-errors) ### Can I send income classifications retroactively for documents already issued through the Provider without a classification? Not through the Provider API: through a certified e-invoicing provider, the classification is transmitted only together with the document, at the time of issue. For the old documents, the accountant can add the classifications in their accounting software or directly in myDATA. Alternatively, you need a separate integration with AADE's ERP channel (`SendIncomeClassification` method) with the client's myDATA credentials, outside Novus. For new documents, fix the payload so that it includes the classifications. ### What does the API return after a document is issued, and can I print my own document with this data? The response is synchronous, in the same `SendInvoices` call. With `statusCode = Success` you get `invoiceMark` (MARK), `invoiceUid`, `authenticationCode`, `invoiceUrl`/`qrUrl` (link to the PDF, printed as a QR code) and `aadeQrUrl`. On error, you get the `statusCode` and the `errors`. You can give the customer the Provider's PDF or print your own document. If you print your own, it must show at least the Provider's name and website, the QR code, the MARK, UID and Authentication Code, and the date and time of issue. See: [SendInvoices](https://developers.novusconceptus.com/provider-api/send-invoices/#response) ### Who sets the series and number (`series`, `aa`), are Greek letters accepted, and can I continue the numbering I used before the Provider? `series` and `aa` are set only by your application, and the Provider transmits them unchanged. You make sure the numbering has no gaps and no duplicates. Greek characters in the series are supported (string up to 50 characters, `"0"` if there is no series). The Provider does not restrict how numbering continues, so you can continue from the number you had reached. Note: the same issuer, date, branch, type, series and number give the same UID, and the second submission is rejected as a duplicate. See: [SendInvoices](https://developers.novusconceptus.com/provider-api/send-invoices/#invoiceheader) ### Are the fields `lineUnitPrice`, `totalNetPriceBeforeDiscount` and `vatCategoryPercent` required on document lines? Yes. They are not sent to AADE, but they are data for the PDF (unit price, value before discount, VAT rate), and you send them on every line. When prices do not include VAT, show the net value in the value column. See: [SendInvoices](https://developers.novusconceptus.com/provider-api/send-invoices/#invoicedetails) ### Can I print or send the document with my own template instead of the Provider's PDF? Yes. The API always returns a ready-made Provider PDF (`invoiceUrl`) along with the document data, but you can produce your own PDF or printout. In that case, the document must show the Provider's name and website, the QR code (from `invoiceUrl` / `qrUrl`), MARK, UID, Authentication Code, the date and time of issue, the POS payment details where they exist, and the lost-connection notice for an offline issue. During certification you submit a sample of your printout (scenario B3), unless you give the customer the Provider's PDF. See: [Certification & go-live](https://developers.novusconceptus.com/start/go-live/#kanones-ektyposis) ### Which issue date and time do I print on my own document, when the PDF is generated later than the issue? Print the local date and time when the document was created (issued) in your system, not the moment the PDF is later generated or reprinted. The date must match the `issueDate` you sent, which through the Provider is today's date (except in the `transmissionFailure = 1` case). The date and time must be legible. See: [Certification & go-live](https://developers.novusconceptus.com/start/go-live/#kanones-ektyposis) ### Why is the proof of expenditure (type 3.1) I send rejected? Type `3.1` is a purchase document, so for the issuer it is an expense. That is why, both on the lines (`invoiceDetails`) and in the summary (`invoiceSummary`), you send `expensesClassification` with `category2_…` categories, not `incomeClassification`. See the ready-made 3.1 example in the guide. See: [Invoices & receipts](https://developers.novusconceptus.com/guides/invoices/) ### Can I issue retail receipts through the API without a fiscal cash register or fiscal device? Yes. Through the Provider you issue retail documents (11.x) and, in food service, the 8.6 order slips with the receipt that closes them, without a fiscal cash register (ΦΗΜ) or fiscal signature device (ΕΑΦΔΣΣ). The solution runs entirely in the cloud. The Provider transmits the documents to myDATA and produces a PDF with a QR code and all the required details. If your client makes B2C sales, the activation request also declares their internet service provider (`ispDetails`). See: [Invoices & receipts](https://developers.novusconceptus.com/guides/invoices/) ### How do I show a preview of the document PDF in the browser, since the endpoint returns it as a download (attachment)? The PDF endpoint (`invoiceUrl` / `GetInvoicePdf`) deliberately returns the file as an attachment, so that ERPs download and store it. There is no parameter (e.g. `?preview=true`) and no alternative header. For a preview, read the file on your side. Either serve it from your backend with `Content-Disposition: inline`, or in the frontend get it with `fetch`, read it as a `Blob` and open a local object URL. See: [Other endpoints](https://developers.novusconceptus.com/provider-api/other-endpoints/#getinvoicepdf) ### How do I send a type 1.5 invoice (settlement of third-party sales – fee from third-party sales)? You send it with `SendInvoices` and `invoiceType` = `1.5`, with the same JSON structure as any invoice (`issuer`, `counterpart`, `invoiceHeader`, `paymentMethods`, `invoiceDetails`, `invoiceSummary`, `providerAdditionalInvoiceDetails`). The difference is in the lines: each line declares `invoiceDetailType` `1` (settlement of third-party sales) or `2` (fee from third-party sales), and AADE requires at least one line of each (error `246`). Classifications follow AADE's combinations for type 1.5, and the summary holds the totals of the line classifications (income and expenses, where present). See: [Lines & payments](https://developers.novusconceptus.com/aade/lines-payments/#invoice-detail-type) ### Is issuing a document synchronous, or does the result come by webhook? Synchronous. `SendInvoices` returns the result in the same call: `statusCode`, MARK, UID, Authentication Code, QR and PDF link, or the errors. You do not need a webhook. The only exception is `statusCode = Offline`: the document has been issued and the Provider transmits it as soon as AADE is back. You find the MARK later with `RequestTransmittedDocs`. See: [How it works](https://developers.novusconceptus.com/start/how-it-works/) ### Who emails the document to the recipient, and can I customize the sender, subject and text? The Provider sends the PDF to `providerAdditionalInvoiceDetails.additionalDetails.recipients.email`, if you fill it in, and to the addresses that AADE returns for the recipient, if the recipient has declared that they receive documents electronically. If there is neither, no email is sent. The sender, subject and text are fixed. You can also send your own email from your application with the `invoiceUrl`. See: [SendInvoices](https://developers.novusconceptus.com/provider-api/send-invoices/#additionaldetails-required) ### Can a subscription platform or e-shop automatically issue a document through the API after each successful card charge on a payment gateway? Yes. Your platform charges the card through the payment gateway, receives the confirmation, and then calls `SendInvoices` to issue the document (e.g. 11.2 for a consumer, 2.1 for a business), with no manual step. Novus does not connect directly to the payment gateway. Your developer builds the gateway → platform → Provider API flow. As the payment method you declare `type` 7 (POS / e-POS). The provider signature (`skipSignature=false`) is only needed when the terminal is "locked" under A.1155/2023, so confirm whether this applies to your gateway. See: [How it works](https://developers.novusconceptus.com/start/how-it-works/) ### Does the API accept AADE codes directly (document types, VAT, classifications, payment methods), and which document types does it support? Yes, the API accepts the official myDATA codes directly: `invoiceType` (e.g. `2.1`, `11.2`, `5.1`), `vatCategory`, `vatExemptionCategory` (required when `vatCategory` = 7), `incomeClassification` / `expensesClassification` and `paymentMethods[].type`. Through a Provider, however, only types 1.1 to 11.5 are transmitted. Types 12.x to 17.x (recipient documents, expenses, adjustment entries) are never sent by a Provider. All codes are in the "AADE code tables" section of the documentation, and there are ready-made JSON examples for the main types. See: [Document types](https://developers.novusconceptus.com/aade/documents/#invoice-types) ### How do I declare the Climate Crisis Resilience Fee for accommodation? The fee is issued as a type `8.2` document (climate crisis resilience fee). On the line, it is declared as an other tax with an amount: `otherTaxesPercentCategory` from 20 to 30, depending on the type of accommodation, and `otherTaxesAmount` = amount per night × nights, with `netValue` 0, `vatCategory` 8 and classification `category1_95`. `totalOtherTaxesAmount`, `totalGrossValue` and the payment method equal the fee amount. A ready-made JSON is included in the examples of the "Invoices & receipts" guide. See: [Invoices & receipts](https://developers.novusconceptus.com/guides/invoices/#ready-made-examples) ### Can I transmit documents with an earlier issue date through the Provider, if they were not sent on the right day? No. Through the Provider, `issueDate` must be today's date (otherwise AADE rejects it with error 238), because the Provider only transmits in real time. The only exception is when your application could not reach the Provider: then you send with `"transmissionFailure": 1` and the original date, but only within 1 day of the `issueDate`. Documents that were never sent cannot be transmitted retroactively, so check that every submission actually went through, and ask the accountant how to handle such documents. See: [SendInvoices](https://developers.novusconceptus.com/provider-api/send-invoices/#invoiceheader) ### Are there ready-made JSON examples for an intra-community supply invoice (1.2) and a supplementary document (1.6)? The current documentation has no ready-made JSON for 1.2 and 1.6 (there are examples for 1.1, 2.1, 3.1, 5.1, 5.2, 8.2 and 11.x). Both are issued with the same `SendInvoices`, by changing `invoiceType` and the related fields. In a 1.2, the recipient is foreign (with `name` and `address`) and the usual classification is `E3_561_005`. A 1.6 does not accept `multipleConnectedMarks`. You can request samples for 1.2 and 1.6 from Novus. See: [Invoices & receipts](https://developers.novusconceptus.com/guides/invoices/#ready-made-examples) ### Can I issue a document through the Provider that is not transmitted to AADE, e.g. for a pre-payment in a tax-free process run by a third-party service? No. Every document issued through the Provider gets a MARK and is transmitted to myDATA at the time of issue. There is no "non-transmitted" document, just as there is none on a cash register. For tax free run by an external service, confirm with the accountant how to document the pre-payment and the retail credit note for the refunded VAT. See: [How it works](https://developers.novusconceptus.com/start/how-it-works/) ### How do I send a document (e.g. a simplified 11.3 without VAT) so that the amount is classified in myDATA as informational and not as income? The classification is not set by the series or by the Provider. It comes from the `incomeClassification` that your application sends in `SendInvoices`. On the lines (`invoiceDetails[].incomeClassification`), send `classificationCategory` = `category1_95` (other informational income data) without a `classificationType` (E3 code), with an amount equal to `netValue`. Make the same change in `invoiceSummary.incomeClassification`, with the total net value as the amount. Lines with real income keep the normal classification (`category1_x` with E3). The accountant decides which case applies. See: [Income / expense classifications](https://developers.novusconceptus.com/aade/classifications/#income-classification-category) Source: https://developers.novusconceptus.com/faq/invoices/ --- # Credit notes & cancellations How a document is "cancelled". ### Which credit document do I issue to cancel a document: retail or wholesale? It depends on the original document: | Original document | Cancelled with | |:---|:---| | **Retail:** 11.1 (retail sales receipt), 11.2 (service receipt), 11.3 (simplified invoice), 11.5 | **11.4** retail credit note | | **Wholesale:** invoice to a business (1.x, 2.x, etc.) | **5.2** credit invoice *(recommended)* or **5.1** correlated with the original | In both cases the amounts are **positive**, with the same VAT rates and classifications as the original. For a partial cancellation (e.g. one item returned), include only the lines you credit. See: [Credit notes & correlations](https://developers.novusconceptus.com/guides/credit-notes/#which-credit-note) ### How do I cancel a retail receipt (e.g. an 11.1) with an 11.4 credit note? Issue an `11.4` retail credit note with the lines being returned: - **positive** amounts, the same `vatCategory` and the same income classification as the receipt (e.g. `E3_561_003` / `category1_1`), - no `counterpart`, as in the receipt, - in `paymentMethods`, how the money is paid back: cash `3`, or card / IRIS `7` / `8` with `skipSignature=false`, so that the terminal performs the refund, - optionally `correlatedInvoices` with the MARK of the original receipt, together with `correlatedInvoicesLabel` for the PDF. If you cannot trace the original receipt, AADE provides [special invoice category](https://developers.novusconceptus.com/aade/documents/#special-invoice-category) `13` "Correlation difficulty indicator" (`specialInvoiceCategory`) for the 11.4. See: [Credit notes & correlations](https://developers.novusconceptus.com/guides/credit-notes/#ready-made-examples) · [Card / IRIS payments](https://developers.novusconceptus.com/guides/card-payments/#special-cases) ### How do I cancel an invoice (e.g. 1.1 or 2.1) that has already been issued through a certified e-invoicing provider? An issued document cannot be deleted or cancelled through the API. You reverse it with the proper credit note, with the same amounts and classifications. For invoices to businesses, **5.2 is recommended**: a 5.1 with `correlatedInvoices` can be rejected if the original has not yet been synced to AADE (up to 24 hours). For retail: 11.4. If the original was self-billed, the credit note is also issued as self-billing. The `CancelDeliveryNote` / `CancelReceivingNote` calls only apply to delivery and receiving notes (9.x / 10.x). See: [Credit notes & correlations](https://developers.novusconceptus.com/guides/credit-notes/#cancel) ### How do I correct a wrong self-billing document (e.g. a 3.1 proof of expenditure or a self-billed 1.1 invoice), since it cannot be cancelled? With a credit note that is **also issued as self-billing** (`selfPricing: true`), so that the reversal has the correct signs. As with any credit note to a business, 5.2 is recommended. Confirm the classification with the client's accountant. See: [Credit notes & correlations](https://developers.novusconceptus.com/guides/credit-notes/#cancel) ### What is the correct format of the correlation field in a 5.1 credit invoice? The field is `invoiceHeader.correlatedInvoices` (camelCase). It is an array with the MARKs of the original documents as numbers (long), e.g. `[]`, not as strings. When you send it, `correlatedInvoicesLabel` is also required, with the reference text printed on the PDF. If the original was issued `Offline` and has no MARK yet, wait until it gets one and find it with `RequestTransmittedDocs` and `uid`. See: [Credit notes & correlations](https://developers.novusconceptus.com/guides/credit-notes/#correlation) Source: https://developers.novusconceptus.com/faq/credit-notes/ --- # Errors What each error means and what to do. ### What does the 401 error 'You don't have the authority to send for this vat numbers' mean, and how do I fix it? The API key is correct, but the issuer's VAT number (ΑΦΜ, `issuer.vatNumber`) is not activated on your account, so the document is not sent and not charged. In the sandbox, only the VAT number you registered with is activated automatically. In production, each client VAT number is activated after onboarding (`provisioning.status = COMPLETED`). Check that you are sending the correct issuer VAT number and, if it should be active, contact Novus. See: [Environments & API key](https://developers.novusconceptus.com/start/account/#authentication) ### When `SendInvoices` returns `statusCode = Offline`, do I need to resend the document, and how do I get the MARK, Authentication Code and QR later? No, do not resend it: the document has been issued with a UID, and the certified e-invoicing provider will send it to AADE automatically once AADE is back. At first you get `invoiceMark = 0`, an empty `authenticationCode` and a PDF with the notice "Απώλεια Διασύνδεσης Παρόχου - ΑΑΔΕ" (loss of connection between Provider and AADE). You get the final MARK, the Authentication Code and the new PDF with `RequestTransmittedDocs`, filtering by `uid` (no webhook is documented for this). If you need to reference the document before it gets a MARK (e.g. to close a table), use the UID. See: [Offline & retries](https://developers.novusconceptus.com/guides/offline/#b-the-provider-cannot-reach-aade) ### How do I check whether an `Offline` document was finally transmitted to AADE? With `RequestTransmittedDocs` and `uid=`. Until it is transmitted, there is one record with `mark` 0. Once it is transmitted, a second record with AADE's MARK appears. While AADE is not responding, only the provider's checks run, so a document with a data error may not be accepted once it is transmitted. If after 24 hours there is still only the record with `mark` 0, contact us with the `invoiceUid`. See: [Offline & retries](https://developers.novusconceptus.com/guides/offline/#check-offline) ### Why is a services invoice to a foreign customer rejected with the message 'Classification type E3_561_001 is forbidden ...'? The code `E3_561_001` is for wholesale sales to domestic businesses, and AADE does not accept it on a foreign-customer document such as `2.2`. Change the `classificationType` according to the recipient's country: `E3_561_005` for a customer in an EU country (type `2.2`, category `category1_3`), or `E3_561_006` for a customer in a non-EU country, where the correct type is usually `2.3`. Change the classification both on the lines and in `invoiceSummary`. See: [Income / expense classifications](https://developers.novusconceptus.com/aade/classifications/#income-classification-type) ### Why is my self-billing invoice rejected when I send `selfPricing` with the value true in quotes? `selfPricing` is a boolean and is sent as a JSON boolean (`true`), without quotes. With a quoted value (a string), the document is rejected and not issued. The same applies to all boolean fields, e.g. `isDeliveryNote` and `fuelInvoice`. See: [SendInvoices](https://developers.novusconceptus.com/provider-api/send-invoices/#invoiceheader) ### Why do I get AADE errors 207, 208 and 312 when the amounts look correct? Errors 207, 208 and 312 mean that the line sums (net value, gross value, classifications) do not match the totals in `invoiceSummary`. Rounding is usually the cause: even a difference of a few cents, e.g. €0.03, is rejected. Calculate the totals by adding up the already rounded line values (2 decimals), so that `totalNetValue`, `totalGrossValue` and the classification amounts match exactly. See: [AADE error codes](https://developers.novusconceptus.com/provider-api/aade-errors/) ### What does error 202 'Invalid Greek VAT number' mean, when the client insists the VAT number is correct? The error is returned by AADE (myDATA), not by the Provider, and it means that the VAT number is not a valid Greek VAT number. Check for a typo or a wrong check digit, e.g. by looking up the VAT number in a registry. The Provider forwards the data as it receives it and does not correct VAT numbers. See: [AADE error codes](https://developers.novusconceptus.com/provider-api/aade-errors/) ### What does HTTP 400 'The invoicesDocRequest field is required' or 'The JSON value could not be converted to …' mean when I send a document? The request body cannot be read (deserialized) with the API schema, so the Provider rejects it with HTTP 400 and the document does not reach AADE. The most common cause is a field that must be an array but was sent as a single object or left empty: `invoice`, `invoiceDetails`, `paymentMethods` and `incomeClassification` / `expensesClassification` always go inside `[ ]`, even with one item. The same happens with a code value that is not recognized or is empty (e.g. in the classification). The `Path` in the message (e.g. `$.invoice[0].invoiceDetails`) shows which field is wrong. Fix it and resend with the same series/number (`aa`), since the document was not issued. See: [SendInvoices](https://developers.novusconceptus.com/provider-api/send-invoices/#request-body) ### What do I do on HTTP 5xx, a timeout or a connection failure, when I don't know if the document was received, so that it is not issued twice? Treat the status as unknown. First check with `RequestTransmittedDocs` (e.g. by series/number or UID) whether the document exists and has a MARK. If it does not, resend exactly the same payload (same series, number and date). If the first submission went through, AADE returns error 228 with the original MARK and Authentication Code, which you keep as "already issued". Do not retry immediately: allow a reasonable delay (e.g. exponential backoff), because two requests a few milliseconds apart can bypass AADE's duplicate check. If the Provider stays unreachable, issue locally and send within 1 day with `transmissionFailure: 1`. See: [Offline & retries](https://developers.novusconceptus.com/guides/offline/#a-you-cannot-reach-the-provider) ### Why do I get HTTP 401 Unauthorized on `SendInvoices` in production, when the same API key works on another installation? Do I need a key per client? You do not need a key per client: one API key serves all your activated VAT numbers, and the client is identified by `issuer.vatNumber`. A 401 without an `errors` message means that the `API-KEY` header is missing or not arriving correctly, that the key is wrong or inactive, or that you are sending a sandbox key to production (or the other way round). If the issuer's VAT number is not activated, the 401 comes with `errors` "You don't have the authority to send for this vat numbers ...". Check the configuration of that specific installation (header, environment URL, spaces or hidden characters in the key). If the problem persists, send Novus the JSON of the request and the response. See: [Environments & API key](https://developers.novusconceptus.com/start/account/#authentication) Source: https://developers.novusconceptus.com/faq/errors/ --- # Card / POS Provider signature, NSP, special cases. ### How does the Provider API fit into card or IRIS payments via POS, and when is a provider signature returned? For a POS that is "locked" under A.1155/2023, you send the document with `SendInvoices?skipSignature=false` and payment `type` 7 (card) or 8 (IRIS), with `terminalId` and `posNspId`. The response includes `providerSignature` (`token`, `data`). You pass the token unchanged to the POS/NSP and, after the charge, call `CompletionPosInvoices` with `signatureToken`, `transactionId`, `paymentAmount` and the final `paymentType`. The document is then transmitted and you get a MARK. With `skipSignature=true` (the default), the document is issued immediately without a signature. Each payment line with a signature costs an extra 0.25 credits. See: [Card / IRIS payments](https://developers.novusconceptus.com/guides/card-payments/) ### Who connects my application to the bank's POS terminal for card payments? Your application does, using the API and the sandbox that the bank or payment provider (NSP, e.g. Viva, Mellon, Cardlink, Worldline, Nexi, Euronet, EDPS) gives you. It is a separate integration from the one with the certified e-invoicing provider, which only supplies the provider signature. You send `SendInvoices?skipSignature=false` with `terminalId` and `posNspId`, pass the token to the POS, and after the charge you complete with `CompletionPosInvoices`. The flow is the same for every NSP. See: [Card / IRIS payments](https://developers.novusconceptus.com/guides/card-payments/#two-integrations) ### Does Novus provide a test POS or a POS simulator for testing card payments? No. For the charge, use the sandbox or test terminal of your NSP (e.g. Viva, Mellon, Cardlink, Worldline, Nexi, Euronet, EDPS). The provider sandbox returns a real signature, in the format the NSP expects (HEX or BASE64), and in the sandbox `CompletionPosInvoices` also accepts a test `transactionId`. So you can test the whole flow on the provider side without a terminal, with ready-made steps in Postman (folder 4). See: [Card / IRIS payments](https://developers.novusconceptus.com/guides/card-payments/#testing) ### What do I do if the POS payment fails, is cancelled or times out? Until `CompletionPosInvoices` the document stays pending and has not been transmitted. If the customer tries the card again, charge again with the same token while it is valid (24 hours, 2 hours for food service), and complete when it succeeds. If the customer finally pays another way, resend the same document, with the same number, with the new payment method. On a timeout, first check on the POS / NSP whether the charge went through. Call the completion only after a successful charge. See: [Card / IRIS payments](https://developers.novusconceptus.com/guides/card-payments/#failed-payment) ### If `CompletionPosInvoices` fails with an AADE error, the customer has already paid. How do I avoid it, and what do I do if it happens? In Flow 1 (issue and pay together) the signature means the Provider accepted the document, not AADE: the transmission happens at the completion, after the charge. If AADE rejects it, the document is not issued while the card has been charged. To avoid it, test in the sandbox every combination you will send with a card, check totals and classifications before you ask for a signature, and for unusual documents use Flow 2 (issue first, charge afterwards). If it happens, how it is settled is an accounting matter: agree it in advance with your customer's accountant. See: [Card / IRIS payments](https://developers.novusconceptus.com/guides/card-payments/#flow-1-issue-and-pay-together-checkout) ### Is a separate test or certification scenario needed for IRIS payments (`paymentType` 8)? No. IRIS follows the same flow as a card: provider signature, charge on the terminal, `CompletionPosInvoices`. If the customer switches method on the terminal (e.g. from card to IRIS), declare 8 as the final `paymentType` in the completion. Card / IRIS payments are not certified: you declare them in the certification request. See: [Card / IRIS payments](https://developers.novusconceptus.com/guides/card-payments/#flow-1-issue-and-pay-together-checkout) ### What happens if I resend the same document with a different payment method, when the first submission was by card with `skipSignature=false`? With a card or IRIS payment and `skipSignature=false`, the document is not transmitted immediately: it stays pending and the response carries a provider signature, until you call `CompletionPosInvoices`. If in the meantime you resend the same number with a different payment method (e.g. on credit), the second call is issued normally and the first stays pending. This is also the right thing to do when the card charge did not go through and the customer pays another way: same number, new payment method, no completion for the unused signature. But if the card was charged, do not resend the document: complete with `CompletionPosInvoices`, where you also declare the final payment type (7 or 8). See: [Card / IRIS payments](https://developers.novusconceptus.com/guides/card-payments/#failed-payment) ### Which `posNspId` do I use for a POS terminal, and in which format (HEX or BASE64) will I get the token? `posNspId` tells which NSP the terminal belongs to and sets the format and field order of the signature, e.g. `2` Viva: BASE64. For an NSP that is not on the list, ask it which protocol (format and field order) it requires and pick the matching code, e.g. `98` Other (HEX) or `99` Other (BASE64). The `token` is already returned in the NSP's format, so you pass it as is, without conversion. See: [Lines & payments](https://developers.novusconceptus.com/aade/lines-payments/#pos-nsp) ### Why is the VAT field in the provider signature `data` for Viva always 2400, whatever the document? This field is now legacy. Internal handling also covers documents with several VAT rates, so the NSP and AADE are informed with a fixed value of 24.00% (2400), regardless of the actual VAT. This value does not affect the charge or the completion of the payment. Pass `token` and `data` exactly as the Provider returns them. See: [Card / IRIS payments](https://developers.novusconceptus.com/guides/card-payments/#special-cases) ### What is the correct body format for the `CompletionPosInvoices` and `AskSignatureForOldInvoice` calls? In `CompletionPosInvoices` the body is an array of objects with `signatureToken`, `transactionId`, `paymentAmount` and, optionally, `tipAmount` and `paymentType`. A bare object is rejected. In `AskSignatureForOldInvoice` the body is just the document's MARK as a JSON number, and `terminalId` and `posNspId` go in the query string. `CompletionAskSignatureForOldInvoice` takes the same body (the MARK). If an example differs from the API's behavior, the Swagger of each environment prevails. See: [Other endpoints](https://developers.novusconceptus.com/provider-api/other-endpoints/#completionposinvoices) ### Which `aadeProviderId` value do I send to the NSP for Novus: 005 or 105? AADE has two identifiers for Novus Conceptus: `provider_id` **005** and `license_id` **105**. Each bank / NSP asks for one of the two in its own field (e.g. `aadeProviderId`). Check the NSP's documentation to see which one it expects, and test first in its sandbox. See: [Card / IRIS payments](https://developers.novusconceptus.com/guides/card-payments/#special-cases) ### For an online card payment in an e-shop (no physical POS), is a provider signature needed? Usually not. Under AADE circular **E.2044/2024**, distance sales (e-commerce) and payments by payment link are outside the POS integration obligation. You send `SendInvoices` with `skipSignature=true` (the default) and payment method `type` 7, and the document is issued immediately. If the same business also has a physical POS that must be integrated, the signature flow applies there. For each client's specific case, confirm with their accountant. See: [Card / IRIS payments](https://developers.novusconceptus.com/guides/card-payments/) ### Can I settle several unpaid documents of a customer with a single card charge on the POS? Yes, with one aggregate 8.4 document (POS receipt) for the total amount. In the 8.4 you must put the MARKs of the unpaid documents being settled in `invoiceHeader.multipleConnectedMarks`, so that AADE knows which invoices the payment covers. You send it with `skipSignature=false` and payment `type` 7 or 8, get one provider signature, charge once on the POS and complete with `CompletionPosInvoices`. To settle a single old document, there is also the `AskSignatureForOldInvoice` flow. See: [Card / IRIS payments](https://developers.novusconceptus.com/guides/card-payments/#pos-receipts-84--85) ### How do I charge a deposit by card on a 'locked' POS, when the main document will be issued later (e.g. a booking invoiced at check-out)? At the time of the deposit, the application issues an 8.4 (POS receipt) for the amount, with `skipSignature=false`. It gets the provider signature, the POS charges the card, and the flow closes with `CompletionPosInvoices`. In the 8.4 you do not declare related documents, since the main document has not been issued yet. When the final invoice or receipt is issued, put the MARK of the 8.4 in `multipleConnectedMarks`. See: [Card / IRIS payments](https://developers.novusconceptus.com/guides/card-payments/#special-cases) ### How do I refund a card through a 'locked' POS that requires a provider signature? There is no separate endpoint for a "refund signature". You issue the proper credit document (e.g. 11.4 or a credit invoice) with a POS payment method (`type` 7 or 8) and `skipSignature=false`, as in the original sale. With the provider signature you get, the terminal refunds the card, and you close the flow with `CompletionPosInvoices`. For a refund made only on the POS that does not match an issued sales document (e.g. a deposit refund), you issue an 8.5 (POS refund receipt) and use its signature. See: [Card / IRIS payments](https://developers.novusconceptus.com/guides/card-payments/) ### For POS transactions such as mail order, instalments, preloaded or pre-authorization completion, do I need a different provider signature? No. You use the same signature that `SendInvoices` returns with `skipSignature=false` and pass it to the terminal as in a simple sale. The specifics of each transaction type (mail order, instalments, pre-authorization, etc.) only concern the communication between your application and the terminal through the NSP's protocol. They do not affect the provider signature. See: [Card / IRIS payments](https://developers.novusconceptus.com/guides/card-payments/) Source: https://developers.novusconceptus.com/faq/card-payments/ --- # Food service Order slips 8.6 and tables. ### Why does a table (8.6 order slips) stay open after the payment receipt has been issued? The certified e-invoicing provider closes the 8.6 slips when the closing document (e.g. `11.1` with `specialInvoiceCategory` 12) has all the table's MARKs, both orders and cancellations, in `invoiceHeader.multipleConnectedMarks`. If the receipt was issued without this correlation, the slips still appear in `GetOpenTables` and, after 24 hours, issuing is blocked for the branch. Close them with a full cancellation (an 8.6 with `totalCancelDeliveryOrders: true` and the MARKs in `multipleConnectedMarks`). See: [Food service: order slip 8.6](https://developers.novusconceptus.com/guides/food-service/) ### What does it mean when an 8.6 order slip has MARK 0, and how do I close its table? MARK 0 means the slip was issued **offline** (`statusCode = Offline`): it has a UID but has not yet been transmitted to AADE. The Provider sends it as soon as the connection is back. If you need to close the table before the slip gets a MARK, put its UID in `multipleConnectedUids` instead of a MARK in `multipleConnectedMarks`. The Provider does the conversion. See: [Food service: order slip 8.6](https://developers.novusconceptus.com/guides/food-service/#closing-the-table) ### Why doesn't `GetOpenOrdersForTable` return the open slips of a table that appears in `GetOpenTables`? The call is `GET /api/v1/Provider/GetOpenOrdersForTable?TableId=…&VatNumber=…&Branch=…`. For each open 8.6 it returns `mark`, `uid`, `quantityProducts` and `totalNet` (or 404 if the table has no open slips). Check that you send the `TableId` as `GetOpenTables` returned it, the same VAT number (ΑΦΜ) and the same branch (`Branch`) as the 8.6 slips, with the GET method, and that the key and the base URL belong to the same environment (sandbox or production). You can verify the call from Swagger and look up the slip by its MARK in the portal. See: [Other endpoints](https://developers.novusconceptus.com/provider-api/other-endpoints/#getopenordersfortable) ### Where can I find the technical specifications for transmitting food service order slips (8.6) and closing tables through the Provider? In the Food service guide. Each table order is sent as an 8.6 with `tableAA` (the table's GUID), classification `category1_95` and no `paymentMethods`. Item cancellations are made with a new 8.6 and `recType: 7`, and the table is closed with an 11.1 or 1.1 that has `specialInvoiceCategory: 12` and all the table's MARKs in `multipleConnectedMarks`. Each 8.6 must be closed within 24 hours. Ready-made JSON examples and Postman folder 5 are available. See: [Food service: order slip 8.6](https://developers.novusconceptus.com/guides/food-service/) Source: https://developers.novusconceptus.com/faq/food-service/ --- # Goods movement Delivery notes and digital goods movement. ### Must delivery notes (9.3) be transmitted through a certified e-invoicing provider, or can they go directly to AADE? This is a tax and accounting question that depends on the business's obligations, and it must be confirmed with its accountant. In Novus's view, once a client has declared a Provider, it should issue everything through the Provider. The Provider API supports notes 9.1, 9.2, 9.3 and 10.x, as well as an invoice or receipt that is also a delivery note (`isDeliveryNote`), at 1 credit per note. See: [Goods movement: delivery notes](https://developers.novusconceptus.com/guides/delivery/) ### With the digital delivery note, does issuing notes through the Provider change? Can the Provider call the transport methods (`/RegisterTransfer` to `/ConfirmDeliveryReturn`) on my behalf? Issuing and transmitting movement documents (9.x, 10.x, invoice/receipt – delivery note) continues as before through the Provider, with MARK and QR, with no change to the integration. The transport events (pickup/transshipment, delivery, confirmation or rejection by the recipient, return completion) are declared by the ERP directly to AADE, through the myDATA ERP channel. It uses the credentials (`aade-user-id`, `ocp-apim-subscription-key`) of the business acting each time: issuer, carrier or recipient. These methods do not exist in the provider channel, so the Provider cannot call them. As a reference, use the MARK / `qrUrl` of the note that the Provider returns to you. See: [Goods movement: delivery notes](https://developers.novusconceptus.com/guides/delivery/#what-changed-with-mydata-20-digital-delivery-note) ### Why does a sales invoice – delivery note (1.1 with `isDeliveryNote: true`) appear in `RequestTransmittedDocs` with `isDeliveryNote = false`? Usually because the movement fields are not inside the `invoiceHeader` object. `isDeliveryNote`, `dispatchDate`, `dispatchTime`, `vehicleNumber`, `movePurpose` and `otherDeliveryNoteHeader` (with `loadingAddress` and `deliveryAddress`) all belong in `invoiceHeader`. If `invoiceHeader` closes too early (e.g. right after `currency`), the fields end up at the root of the document, are not recognized, and the document goes through as a plain invoice. Compare your structure with the ready-made example "1.1 — Sales invoice - delivery note". See: [Goods movement: delivery notes](https://developers.novusconceptus.com/guides/delivery/#goods-movement-fields) ### Why is a delivery note with `movePurpose = 6` rejected, and which movement purpose do I use instead? Movement purpose `6` (Safekeeping) has been abolished by AADE and is no longer accepted, even if the sender and the recipient have the same VAT number (ΑΦΜ). The same applies to `15`, `16`, `17` and `18`. Choose an active code from the "Movement purpose" table according to the actual transaction, e.g. `14` (Storage at third parties) or `19` (Other movements, with `otherMovePurposeTitle`). Which code fits a consignment is decided by the business with its accountant. See: [Goods movement](https://developers.novusconceptus.com/aade/movement/#move-purpose) ### Can I retrieve through the Provider API the incoming documents (e.g. delivery notes) issued to the business's VAT number? No. The Provider API has no endpoint for incoming documents, and `RequestTransmittedDocs` only returns documents that you issued through your account. Your software retrieves incoming documents for a VAT number directly from AADE's myDATA API, with the business's myDATA credentials. See: [Other endpoints](https://developers.novusconceptus.com/provider-api/other-endpoints/#requesttransmitteddocs) ### Is a TARIC / Combined Nomenclature code per line supported for the unified item coding? Yes. The line field `invoiceDetails[].TaricNo` (10 characters) is accepted and transmitted to myDATA, together with `itemCode` / `itemDescr`. For unified item coding on all documents, we will announce anything needed in the Changelog once AADE publishes the final specifications. See: [SendInvoices](https://developers.novusconceptus.com/provider-api/send-invoices/#invoicedetails) ### Does the Provider support the new myDATA 2.0.2 movement types (9.1, 9.2, 10.1, 10.2), or do I need to wait for a new version of the integration? They are all supported already: 9.1, 9.2, 9.3, 10.1 and 10.2, as well as 1.1 / 11.1 as invoice/receipt – delivery note (`isDeliveryNote: true` with `otherDeliveryNoteHeader`). They are issued with the same `SendInvoices`, and you get the MARK and UID in the response, without sending them separately to myDATA. In 10.1 / 10.2, `receivingNotePurpose` is required. The current documentation (version 3.0) is aligned with myDATA 2.0.2, and every new AADE change is announced in the changelog before it takes effect. See: [Goods movement: delivery notes](https://developers.novusconceptus.com/guides/delivery/) Source: https://developers.novusconceptus.com/faq/delivery/ --- # B2G (public sector) Invoices to public sector bodies. ### Where do I find the Contracting Authority code, and how do I check the contract details (ΑΔΑΜ, ΑΔΑ, CPV)? You find the **Contracting Authority code** in the [GSIS register of contracting authorities](https://webapps.gsis.gr/dsae2/foreisreg/faces/pages/mainmenu/anOikYpList.xhtml), searching by the public body's VAT number or its ΑΑΗΤ code. It goes in `buyerIdentifiers[].buyerIdentifier`, and it is what routes the invoice. You check the **contract** details in [ΚΗΜΔΗΣ](https://cerpp.eprocurement.gov.gr/upgkimdis/unprotected/home.xhtml) (the Greek public procurement register), menu "Συμβάσεις" (contracts), searching by ΑΔΑΜ: it shows the ΑΔΑ, the CPV codes of the items and the ΠΔΕ project code (Ενάριθμος). The ΑΔΑΜ goes in `contractReference` and the CPV on every line, in `itemClassificationIdentifiers`. If something does not match, your client sorts it out with the public body before issuing. See: [Public sector (B2G)](https://developers.novusconceptus.com/guides/b2g/#providerb2gadditionalinvoicedetails) ### Which budget type (`budget.type`) do I use, and what goes in `budget.identifier`? The type decides which public-sector system the invoice goes to for payment, so confirm it with the public body: | `budget.type` | When | `budget.identifier` | Goes to | |:---:|:---|:---|:---| | `1` | Central Administration body (article 14, law 4270/2014), expense of the Regular Budget | ΑΔΑ of the commitment decision | ΟΠΣΔΠ | | `2` | Expense of the Public Investment Programme (ΠΔΕ) | The project code (Ενάριθμος), as in the ΣΑ and the contract | e-ΠΔΕ | | `3` | Expense of the body's own budget (e.g. a municipality, a public-law entity) | ΑΔΑ of the commitment decision | The body's own information system | In a 5.2 credit note, for type 1 or 3, `budget.identifier` stays empty. See: [Public sector (B2G)](https://developers.novusconceptus.com/guides/b2g/#providerb2gadditionalinvoicedetails) ### What are the ΑΔΑ and the Ενάριθμος? What do I do if there is no contract? - **ΑΔΑ:** the unique number of the commitment decision (ΑΑΥ) posted on Diavgeia. With the ΑΑΥ the public body reserves the funds before the expense, and the ΑΔΑ is stated in the contract. Multi-year expenses have more than one ΑΑΥ: if the contract does not say which one applies, ask the department of the body that runs the contract. - **Ενάριθμος:** the 14-digit code of a ΠΔΕ project, from the e-ΠΔΕ system. The first 4 digits are the year the project was first included, followed by the code of the collective decision (ΣΑ) and the project's serial number. It is stated in the contract as the source of funding; if you cannot find it, ask the Contracting Authority. - **No contract:** put `"0"` in `contractReference`. For `budget.identifier`, contact the public body. See: [Public sector (B2G)](https://developers.novusconceptus.com/guides/b2g/#providerb2gadditionalinvoicedetails) ### What do the errors BR-CL-23, BT-158-EMPTY-VALUES and 222 mean on a B2G invoice? | Error | What it means | What to do | |:---|:---|:---| | `BR-CL-23` "Unit code MUST be coded according to the UN/ECE Recommendation 20…" | The unit of measure is not a UN/ECE Rec. 20 code | Map your units to a UBL code in `QuantityUnitsUblCode`, e.g. `H87` or `EA` (piece / unit), `KGM` (kilogram), `LTR` (litre), `HUR` (hour). | | `BT-158-EMPTY-VALUES` | A line has no CPV code | Fill in `itemClassificationIdentifiers[].classificationIdentifier` on every line. The CPV is in the contract. | | `222` "NetValue per line must have value greater than 0…" | A line with zero net value | Every line needs a `netValue` greater than 0. | `BR-…` / `BT-…` errors come from the public sector e-invoicing platform (ΚΕΔ). For anything you cannot fix on your side, the contact details are on the [GSIS e-invoicing page](https://gsis.gr/polites-epiheiriseis/pliromes-kai-eispraxeis/e-invoice). `222` is an [AADE error](https://developers.novusconceptus.com/provider-api/aade-errors/). See: [Public sector (B2G)](https://developers.novusconceptus.com/guides/b2g/#per-line) ### Which API fields hold the B2G invoice data (e.g. BT-10 'Buyer reference', BT-9, BT-70), and what do I need to fill in for the invoice to be issued? The EN 16931 data goes in `providerB2gAdditionalInvoiceDetails`. BT-10 is `buyerReference`, BT-9 is `dueDate` (payment due date; for partial payments, the first one) and BT-70 is `partyName`: the unit of the public body that physically receives the goods or services, without being the Contracting Authority itself (e.g. "Medical supplies warehouse"). You also need `contractReference`, `budget`, the Contracting Authority code in `buyerIdentifiers`, and on every line `QuantityUnitsUblCode`, `itemClassificationIdentifiers` (CPV) and `itemCodification`. The payment method is always `5` (on credit), with the bank account to be paid into in `credits[]`. If required fields are missing, the invoice is not issued, so start from the ready-made B2G examples. See: [Public sector (B2G)](https://developers.novusconceptus.com/guides/b2g/) ### Do I need a separate API key to test public sector invoices (`SendInvoicesB2G`) in the sandbox? Yes. For `SendInvoicesB2G` you need a separate B2G sandbox key, which you request from Novus. With the regular key, the call is rejected with HTTP 401 "You don't have the authority…". In production, B2G issuing is activated separately and has its own credit balance. See: [Public sector (B2G)](https://developers.novusconceptus.com/guides/b2g/#testing-in-the-sandbox) ### Why is a 5.1 credit note to a public sector body (B2G) not accepted? In `SendInvoicesB2G` the credit note is **5.2**. Type 5.1 is not one of the allowed B2G types (1.1, 1.6, 2.1, 2.4, 3.1, 3.2, 5.2, 6.1, 6.2, 7.1). In a 5.2, `contractReference` stays empty, and for budget type 1 or 3, `budget.identifier` also stays empty. See: [SendInvoicesB2G](https://developers.novusconceptus.com/provider-api/send-invoices-b2g/) ### Why does B2G invoicing fail for one client, while their other documents are issued normally? The B2G service is activated separately for each client and is charged from a separate B2G balance (1 credit per invoice). If the client's B2G service is not active or has not been renewed, invoices to the public sector are not issued, while other documents continue normally. Contact Novus for activation or renewal, and resend once it is confirmed. See: [SendInvoicesB2G](https://developers.novusconceptus.com/provider-api/send-invoices-b2g/) Source: https://developers.novusconceptus.com/faq/b2g/ --- # General Limits, archiving, legal framework. ### Are there rate limits on the number of API calls? For now, there is a limit only on the **Onboarding API**: 60 calls per minute per key, with the `X-RateLimit-Remaining` header. Above that, it returns `429 RATE_LIMITED` with `Retry-After`. On the Provider API, the certified e-invoicing provider sets no limit, but calls such as `RequestTransmittedDocs` also depend on AADE (the Greek tax authority), so do not poll more often than you need to. See: [Onboarding API: endpoints](https://developers.novusconceptus.com/onboarding-api/endpoints/) ### How do I stay informed about myDATA changes and new versions of the API documentation? We announce the changes that affect you (new myDATA versions, new fields, API changes) on the **Changelog** page of the documentation, before they take effect. Novus Conceptus, as a certified Provider, adapts its infrastructure to AADE's changes. For official announcements and specifications, the source is the myDATA section of the AADE website. See: [Changelog](https://developers.novusconceptus.com/changelog/) ### I found a document that shows as transmitted in myDATA but is missing from the Provider's documents. What do I do? To reconcile, use `RequestTransmittedDocs` with the issuer VAT number (ΑΦΜ) and a date range, or with `invoiceMark`/`uid`, to see what the Provider has recorded. To investigate a mismatch, Novus needs the `invoiceUid`, or the request and response JSON of that specific submission. This is why your application should keep the request and response of every submission, together with the MARK, UID, Authentication Code and `invoiceUrl`. See: [Other calls](https://developers.novusconceptus.com/provider-api/other-endpoints/#requesttransmitteddocs) ### Does the API offer a lookup of business details (name, address) by VAT number? No. The Provider API has no lookup of business name or address by VAT number. Your application sends the recipient's details. For lookups, AADE offers the "Αναζήτηση Βασικών Στοιχείων Μητρώου" service (basic registry data lookup), with your own access credentials. ### Can I send only some documents through the Provider (e.g. only invoices) and transmit the rest another way? Technically, the Provider transmits only the documents your application sends to `SendInvoices`. Anything you do not send does not go through it. However, the law, not the Provider, defines which documents must be issued through a Provider: from 1 October 2026 the obligation also covers the last group of businesses for B2B and B2G invoices, which are issued either through a Provider or through AADE's free applications. For each client, confirm with their accountant which documents can stay outside the Provider. Source: https://developers.novusconceptus.com/faq/general/ --- # Changelog Every AADE myDATA update is implemented in the Provider API. Each entry shows the documentation version (`v3.0`) and the myDATA version it covers (`myDATA 2.0.2`). Newest first: click an entry to open it. **Current:** documentation v3.0 · myDATA 2.0.2 · Official source: [AADE technical specifications](https://www.aade.gr/epiheiriseis/mydata-ilektronika-biblia-aade/tehnikes-prodiagrafes-ekdoseis) ## 2026 ### September 2026 update `v3.0` `myDATA 2.0.2` **New documentation site**, replacing the Word files: - **Two APIs, fully documented:** [Provider API](https://developers.novusconceptus.com/provider-api/) and [Onboarding API](https://developers.novusconceptus.com/onboarding-api/) (with [webhooks](https://developers.novusconceptus.com/onboarding-api/webhooks/)), each with [OpenAPI and a Postman collection](https://developers.novusconceptus.com/tools/). The Provider collection runs 9 scenarios in sequence, with tests on every call. - **32 ready-made JSON examples**, checked automatically (amounts, VAT, totals, classifications). The 25 AADE tables are grouped into [6 pages](https://developers.novusconceptus.com/aade/). - **[FAQ](https://developers.novusconceptus.com/faq/):** more than 100 questions from real developer cases. - **New [certification](https://developers.novusconceptus.com/start/go-live/):** no appointment, basic scenarios only, online request. Modules (card, food service, goods movement, B2G, OSS, Onboarding) are declared, not certified. - **Stated explicitly:** only types **1.1 to 11.5** are issued through a Provider. - **Newly documented:** `multipleConnectedUids`, `correlatedInvoicesUids`, `CancelReceivingNote`, `GetInvoice/{uid}/{fileType}`, `GetInvoicePdfByAuthenticationCode`, `GetCreditsBalance`, the [Provider validation rules](https://developers.novusconceptus.com/provider-api/send-invoices/#provider-validation-before-aade) and the [AADE error codes](https://developers.novusconceptus.com/provider-api/aade-errors/). - **Corrections:** `SendInvoices` takes **one** document per call · `GetOpenTables` / `GetOpenOrdersForTable` are **GET** · HEX/BASE64 per NSP fixed (Viva, Cardlink, Worldline, Other HEX) · `digitsItemPrice` defaults to `2`. **myDATA 2.0.2:** - **Fields:** `receivingNotePurpose` (required on 10.1 / 10.2, [table 8.24](https://developers.novusconceptus.com/aade/movement/#receiving-note-purpose)), `otherReceivingNotePurposeTitle`, `nonObligatedRecipient`, `withoutDigitalTransportTracking`. AADE error `290`. - `ConfirmDeliveryReturn` (return declared by the issuer) is an ERP-channel method: no change to your Provider integration. ### March 2026 update `myDATA 2.0.1` - AADE spelling fixes only (`invoiceDeliveryStatus`, `EndToEndReferenceID` with a Latin E). No change to your requests. ## 2025 ### December 2025 update `v2.3` `myDATA 2.0.0` **Digital delivery note** (myDATA 1.0.12 and 2.0.0). See [Goods movement: delivery notes](https://developers.novusconceptus.com/guides/delivery/#what-changed-with-mydata-20-digital-delivery-note). - **Types:** 9.1, 9.2, 10.1, 10.2. - **Fields:** `reverseDeliveryNote`, `reverseDeliveryNotePurpose` ([table 8.21](https://developers.novusconceptus.com/aade/movement/#reverse-delivery-purpose)), `packingsDeclarations` (packaging types, table 8.23), `toWeigh`, `movePurposeLine`, `otherMovePurposeLineTitle`. AADE errors `288`, `289`, `409`. - **Changed:** `dispatchDate`, `dispatchTime` and `vehicleNumber` now mean the *planned* transport. The actual events (`RegisterTransfer`, delivery, rejection) are declared through the ERP channel, not the Provider. - **Removed:** `otherTransportDetails`. - **Provider API:** new call `CancelDeliveryNote`. `invoiceUrl` and `qrUrl` are now the same; new field `aadeQrUrl`. The Provider sends `downloadingInvoiceUrl` to AADE ([`GetInvoice`](https://developers.novusconceptus.com/provider-api/other-endpoints/#getinvoice), A.1128/2025). ### April 2025 update `myDATA 1.0.11` - **Renamed:** «Χαρτόσημο» (stamp duty) became [Ψηφιακό Τέλος Συναλλαγής](https://developers.novusconceptus.com/aade/taxes/#digital-transaction-fee) (digital transaction fee). Name only: the JSON fields stay the same. - **VAT exemptions:** re-mapped to the new VAT Code, law 5144/2024. Same codes, new articles. See [VAT exemption](https://developers.novusconceptus.com/aade/vat/#vat-exemption). - **Goods movement:** [purposes](https://developers.novusconceptus.com/aade/movement/#move-purpose) 6, 15, 16, 17, 18 are no longer accepted; new purpose 20. New special invoice category 13. - `transmissionFailure` extended by AADE up to `4`; through the Provider you still send only `1`. AADE errors `281` to `287`. ## 2024 ### December 2024 update `myDATA 1.0.10` - Fuel documents (`fuelInvoice`, `fuelCode`) are now accepted from ERP too. No change for the Provider channel. ### July 2024 update `v2.2` `myDATA 1.0.9` - **Fields:** `tid` (POS terminal), `multipleConnectedMarks`, `tableAA` and `totalCancelDeliveryOrders` ([food service](https://developers.novusconceptus.com/guides/food-service/)), `notVAT195` (line outside VAT). - **Codes:** [VAT category](https://developers.novusconceptus.com/aade/vat/#vat-category) 10 (4%, art. 31 L.5057/2023); [other taxes](https://developers.novusconceptus.com/aade/taxes/#other-taxes) 19 to 30; expense type `NOT_VAT_295`; payment method 8, IRIS instant payments. - **Changed:** type 8.2 renamed to "Climate crisis resilience fee". AADE errors `280`, `341`. - **Provider API:** updated Provider validation rules. ### May 2024 update `v2.1` - Developer account registration guide. New client activation process. ### March 2024 update `v2.0` `myDATA 1.0.8` - **Types:** 8.4 / 8.5 (POS receipts), 8.6 ([food service order slip](https://developers.novusconceptus.com/guides/food-service/)), 9.3 (delivery note). - **Card payments (A.1155/2023):** provider signature for interconnected POS terminals. See [Card / IRIS payments](https://developers.novusconceptus.com/guides/card-payments/). - **Invoice – delivery note:** `isDeliveryNote` with `otherDeliveryNoteHeader`, `otherMovePurposeTitle`, `thirdPartyCollection`. Movement purposes 9 to 19. - **Lines:** `TaricNo`, `itemCode`, `otherMeasurementUnitQuantity`, `otherMeasurementUnitTitle`. New units: metres, m², m³, pieces (other). - **Codes:** VAT category 9 (3%); income classification `category3`; new special invoice categories. ## 2023 ### October 2023 update `myDATA 1.0.7` - **Fields:** `countryDocumentId`, `otherCorrelatedEntities` (with the correlated entity categories, table 8.20). - **Codes:** new special invoice categories. ## 2022 ### June 2022 update `myDATA 1.0.6` - **Fields:** `documentIdNo`, `supplyAccountNo`, `specialInvoiceCategory`, `invoiceVariationType`, `quantity15`, `itemDescr`. - **Codes:** new VAT exemption, withholding, other tax and fee categories; new fuel code. - **Changed:** `recType` value `7` (negative sign of values). ### February 2022 update `myDATA 1.0.5` - New fuel codes. ## 2021 ### December 2021 update `myDATA 1.0.4` - **Codes:** new fee categories, income and expense classification types, payment methods. Expense types `E3_598_001` and `E3_598_003` removed. ### June 2021 update `myDATA 1.0.3` - **Fuel documents:** `fuelInvoice`, `fuelCode` and the fuel codes table. - **Codes:** new VAT exemption, withholding, other tax, stamp duty and fee categories. [Other taxes](https://developers.novusconceptus.com/aade/taxes/#other-taxes) 1 and 2 (fire insurance premiums) no longer accepted. ### January 2021: first release `myDATA 1.0.2` - First release of the Provider API, with every AADE change up to November 2020. - Versions 1.1 to 1.9 (2021 – 2023) added step by step: credits, fuel documents, logos, print sizes, special characters, `taxesTotals`, tax free. Source: https://developers.novusconceptus.com/changelog/