# Wrapp API Documentation

> AI-friendly Markdown version of the Wrapp API Documentation.
> HTML version: https://wrapp.ai/api/documentation
> Base URL: `https://wrapp.ai/api/v1/`

## GET STARTED

The Wrapp API Service provides programmatic access and management of the client’s financial data. From accessing the client’s billing books to issuing all supported invoices to myDATA.

An AI-friendly **Markdown** version of this documentation, ideal for LLMs and coding agents, is available at [`https://wrapp.ai/api/documentation.md`](/api/documentation.md)

**API Endpoint**

```
https://wrapp.ai/api/v1/
```

## LOGIN

To use the API, first log in with the correct credentials by making a **POST** call to:
`https://wrapp.ai/api/v1/login`

Notice: The JWT Token expires after **24 hours**

### QUERY PARAMETERS

| Field | Type | Description |
| --- | --- | --- |
| api_key | String | (required) Your API key. |
| email | String | (required if no wrapp_user_id is provided) The email address of the client |
| wrapp_user_id | String | (required if no email is provided) The ID of wrapp user |

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/login' \
-H 'Content-Type: application/json' \
-d '{
     "email": "tenant@example.com",
     "api_key": "xxxxxxxx"
}'
```

**Response Success:**

```json
{
 "data": {
   "type": "jwt",
   "attributes": {
     "jwt": "eyJhbGciOi...QZCe8F9xd3Xqu0"
   }
 }
}
```

**Response Error:**

```json
{
 "errors": [
   {
     "title": "Not valid user"
   }
 ]
}
```

## VAT > SEARCH

Search company details using vat number **GET** call to:
`https://wrapp.ai/api/v1/vat_search`

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Accept: | "application/json" |
| Authorization: | "Bearer JWT" |

### QUERY PARAMETERS

| Key | Value |
| --- | --- |
| vat | (required) Company vat number |
| country_code | (required) Country ISO2, for example for Greece is EL |

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/vat_search?vat=xxxxxxxxx&country_code=EL' \
-H 'Content-Type: application/json'
```

**Response Success:**

```
 {
  "vat_no": "xxxxxxxxx",
  "name": "Company name",
  "city": "City",
  "address": "Address",
  "postal_code": "11111",
  "street_number": "11"
 }
```

**Response Error:**

```
 {
  "errors": [
    {
      "title": "Vat not found"
    }
  ]
 }
```

## User Details

To get a user's details make a **GET** call to:
`https://wrapp.ai/api/v1/tenant_details`

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Accept: | "application/json" |
| Authorization: | "Bearer JWT" |

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/tenant_details' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
```

**Response Success:**

```json
{
 "wrapp_user_id": "xxxxx-xxxxx-xxxxx-xxxxx",
 "partner_user_id": "some-id-123",
 "issue_invoice_status": true,
 "email": "some-test999@email.com",
 "has_plan": true
}
```

## VAT EXEMPTIONS > INDEX

To retrieve a list of all available VAT exemptions, make a **GET** call to:
`https://wrapp.ai/api/v1/vat_exemptions`

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Accept: | "application/json" |
| Authorization: | "Bearer JWT" |

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/vat_exemptions' \
-H 'Content-Type: application/json'
```

**Response Success:**

```json
[
 {
   "1": "Άρθρο 2 & 3",
 },
{
  "2": "Άρθρο 5 (Παράδοση αγαθών)",
 },
  ...
]
```

## BRANCHES > INDEX

To retrieve a list of all available branches for the authenticated user's company, make a **GET** call to:
`https://wrapp.ai/api/v1/branches`

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Accept: | "application/json" |
| Authorization: | "Bearer JWT" |

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/branches' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
```

**Response Success:**

```json
[
 {
  "id": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "name": "Main Branch",
  "code": "001"
  },
 {
  "id": "yyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy",
  "name": "Secondary Branch",
  "code": "002"
  },
  ...
]
```

**Response Error:**

```json
{
 "errors": [
   {
     "status": "401"
     "title": "Unauthorized"
   }
 ]
}
```

## BILLING BOOKS > INDEX

To retrieve a list of all available billing books, make a **GET** call to:
`https://wrapp.ai/api/v1/billing_books`

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Accept: | "application/json" |
| Authorization: | "Bearer JWT" |

For simplicity and automation, some invoice_type_codes are universal:
• Billing books with invoice_type_code 1.1 cover types 1.x
• Billing books with invoice_type_code 2.1 cover types 2.x

Example: Billing books with invoice_type_code **1.2** will default to **1.1**.

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/billing_books' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
```

**Response Success:**

```json
[
 {
   "id": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
   "name": "Τιμ Παροχης",
   "series": "ΤΠΑ",
   "invoice_type_code": "2.1",
   "number": 3
 },
{
  "id": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "name": "Απ Παροχης",
  "series": "ΕΑΠΑΡ",
  "invoice_type_code": "11.2",
  "number": 123
 },
  ...
]
```

**Response Error:**

```json
{
 "errors": [
   {
     "status": "401"
     "title": "Unauthorized"
   }
 ]
}
```

## BILLING BOOKS > CREATE

To create a new billing book, make a **POST** call to:
`https://wrapp.ai/api/v1/billing_books`

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Accept: | "application/json" |
| Authorization: | "Bearer JWT" |

### QUERY PARAMETERS

| Field | Type | Description |
| --- | --- | --- |
| name | String | (required) The name of the billing book. |
| series | String | (required) The serial identifier of the billing book. |
| number | Integer | (required) The unique number associated with the new billing book entry. |
| invoice_type_code | String | (required) The invoice type code for the invoices this billing book will handle. Examples include 1.1, 9.3 etc. |

For simplicity and automation, some invoice_type_codes are universal:
• Billing books with invoice_type_code 1.1 cover types 1.x
• Billing books with invoice_type_code 2.1 cover types 2.x

Example: Billing books with invoice_type_code **1.2** will default to **1.1**.

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/billing_books' \
-X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx' \
-d '{
   "name": "Τιμολόγιο",
   "series": "ΕΤΠΑ",
   "number": 1,
   "invoice_type_code": "2.1"
}'
```

**Response Success:**

```json
{
 "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
 "name": "Τιμολόγιο",
 "series": "ΕΤΠΑ",
 "invoice_type_code": "2.1"
}
```

**Response Error:**

```json
{
 "errors": [
   {
     "title": "Name το έχουν ήδη χρησιμοποιήσει"
   },
   {
     "title": "Series το έχουν ήδη χρησιμοποιήσει"
   },
 ]
}
```

## BILLING BOOKS > UPDATE

To update a billing book's number, make a **PUT** call to:
`https://wrapp.ai/api/v1/billing_books/:id`

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Accept: | "application/json" |
| Authorization: | "Bearer JWT" |

### QUERY PARAMETERS

| Field | Type | Description |
| --- | --- | --- |
| :id | Integer | (required) The unique number associated with the new billing book entry. |

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/billing_books/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx' \
-d '{
   "number": 123
}'
```

**Response Success:**

```json
{
 "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
 "name": "Τιμολόγιο",
 "series": "ΕΤΠΑ",
 "number": 123,
 "invoice_type_code": "2.1"
}
```

## INVOICES > CREATE

To issue a new invoice, make a **POST** call to:
`https://wrapp.ai/api/v1/invoices`

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Accept: | "application/json" |
| Authorization: | "Bearer JWT" |

### QUERY PARAMETERS

**Example codes of invoice types 8.2 and 8.6 are included separately on the side section**

| Field | Type | Description |
| --- | --- | --- |
| branch | String | Branch id |
| counterpart | Object | (required) Contains customer information for the invoice. |
| billing_book_id | String | (required) The ID of the billing book to be used for this invoice. |
| catering_table_id | String | (required for opening / closing / canceling catering order notes) The ID of the **open** catering table to be used for this invoice. |
| catering_table_name | String | Issuing the first catering order note and creating & opening the catering table.<br>*Notes:*<br>- catering_table_id parameter should be omitted<br>- catering_table_name value must not belong to an existing open table<br>- if catering_table_id parameter is omitted then a random name will be assigned |
| invoice_type_code | String | (required) The invoice type code, as specified by myDATA documentation (e.g., "1.1", "9.3"). |
| payment_method_type | Integer | (required) The payment method type identifier. |
| payment_details | String | Contains details about the payment. Accepts special characters, for example \n for new line. |
| currency | String | The currency code. For example "USD", "NOK", etc. |
| exchange_rate | Float | (required if currency is defined) The exchange rate of the currency defined, rounded to a maximum of 2 decimal places. |
| other_taxes_amount | Float | (required for invoice type 8.2) Rounded to a maximum of 2 decimal places. |
| net_total_amount | Float | (required) The total net amount of the invoice, rounded to a maximum of 2 decimal places. |
| vat_total_amount | Float | (required) The total VAT amount of the invoice, rounded to a maximum of 2 decimal places. |
| total_amount | Float | (required) The total invoice amount, rounded to a maximum of 2 decimal places. |
| payable_total_amount | Float | (required) The total payable amount of the invoice, rounded to a maximum of 2 decimal places. |
| notes | String | This are the notes related with the invoice |
| correlated_invoices | Array | An array containing the myDATA marks of any correlated invoices.<br>*Example: [ ] for none or [ 'xxxxxxxxx', 'xxxxxxxxxx' ].* |
| is_delivery_note | Boolean | (mandatory for invoice type 9.3 or when sending delivery_detail) Whether the invoice is a delivery note or not. |
| delivery_detail | Object | (requires is_delivery_note true) An object representing delivery details. |
|  |  |  |
| invoice_lines | Array | (required) An array of objects representing individual invoice line items. |
| withholding_total_amount | Float | The total withhold amount of the invoice, rounded to a maximum of 2 decimal places. |
| total_stamp_duty_amount | Float | The total stamp duty amount, rounded to a maximum of 2 decimal places. |
| b2g | Boolean | This must be true for B2G invoice |
| customer_emails | Array of Strings | (Optional) This array will send a mail to every customer on the array, it can be empty.<br>To set the email locale you can use the email_locale attribute. |
| email_locale | String | (Optional) Sets the email locale, available values are "el" (Greek - default) and "en" (English). Also it can be used for pdf language, see generate_pdf field. |
| delivery_address_city | String | (required for B2G) Πόλη |
| delivery_address_street | String | (required for B2G) Οδός |
| delivery_address_street_number | String | (required for B2G) Αριθμός |
| delivery_address_postal_code | String | (required for B2G) Τ.Κ. |
| delivery_address_party_name | String | (required for B2G) Ονομασία ΑΑΗΤ (BT-44) |
| b2g_contracting_authority_id | String | (required for B2G) Κωδικός ΑΑΗΤ (BT-46) |
| b2g_contract_identifier | String | (required for B2G) ΑΔΑΜ |
| b2g_budget_type | Integer | (required for B2G) Τύπος Προϋπολογισμού - Valid values are 1: Regular Budget, 2: e-PDE, 3: Other Budget |
| b2g_budget_identifier | String | (required for B2G) ΑΔΑ |
| b2g_payment_details | String | (required for B2G) Πληροφορίες Πληρωμής |
| b2g_due_date | String | (required for B2G) Καταληκτική Ημ/νία Πληρωμής - Valid format "2026-01-01" |
| b2g_buyer_reference | String | Στοιχείο Αναφοράς Αγοραστή (BT-10) |
| b2g_bt_70 | String | Όνομα Παραλ. Μέρους (BT-70) |
| deductions_total_amount | Float | (required when deductions present) Total of all deductions amount, rounded to a maximum of 2 decimal places |
| num | Integer | Specific invoice number |
| self_pricing | Boolean | Sends the invoice as self pricing |
| pos_device_id | String | (required when pos payments are made) The id of the pos device. Required only in case of a pos transaction related issuance |
| aade_preloaded | String | (optional when pos payments are made) If set, the invoice will be issued as a credit type and a preloaded transaction will be sent to the pos device. When this transaction is completed, the invoice will be updated with card/pos payment and its mark will also be updated. |
| refund_invoice_id | String | (required in case of a pos credit invoice) The id of the invoice to be credited. Required only in case of issuing invoices crediting a pos transaction related invoice |
| generate_pdf | Boolean | When true it initiates a generation of invoice pdf and the link will be send upon completion via webhook. Declare the language of the pdf using the email_locale field. |
| draft | Boolean | When true it saves the invoice as draft and does not submit it to myData. |
| installments | Boolean | Valid only when pos_device_id presents and it's a VIVA terminal. When true it indicates that the pos payment will give installments option. |
| taxes_totals | Array | This object is used to pass taxes on invoice level.<br>When this object is used invoice line level taxes must be omitted.<br>See Taxes Totals Object for more details. |
| fees_amount | Float | (required when fees present) Total of all fees amount, rounded to a maximum of 2 decimal places |
| stamp_duty_amount | Float | (required when stamp duty present) Total of all stamp duty amount, rounded to a maximum of 2 decimal places |
| tip_amount | Float | (optional) The tip amount |
| mark_as_paid | Boolean | (optional) When true, the invoice will be marked as fully paid upon issuance |
| other_correlated_entities | Array | (optional) List of other correlated entities related to the invoice. This is mainly used for delivery notes. Check the Other Correlated Entities Object for more details. |

### COUNTERPART OBJECT

| Field | Type | Description |
| --- | --- | --- |
| name | String | (required) Name of the company for B2B invoices. For retail invoices could be first and last name separated by space |
| country_code | String | (required for B2B invoices) Code of the client's country.<br>*Example: "GR" for Greece* |
| vat | String | (required for B2B invoices) The client's tax id number. |
| city | String | (required for B2B invoices) The client's city name. |
| street | String | (required for B2B invoices) The client's street address. |
| number | String | (required for B2B invoices) The client's street number. |
| postal_code | String | (required for B2B invoices) The client's postal code. |
| email | String | Client's email |

### OTHER CORRELATED ENTITIES OBJECT

| Field | Type | Description |
| --- | --- | --- |
| entity_type | Integer | (required) The type of the correlated entity. |
| vat_number | String | (required) The entity's tax id number (VAT). |
| country_code | String | (required) Code of the entity's country.<br>*Example: "GR" for Greece* |
| branch_code | Integer | (required) The entity's branch code. |
| name | String | (required) Name of the entity. |
| street | String | (required) The entity's street address. |
| number | String | (required) The entity's street number. |
| postal_code | String | (required) The entity's postal code. |
| city | String | (required) The entity's city name. |

### PAYMENT METHOD TYPES

| Code | Description |
| --- | --- |
| 0 | Cash |
| 1 | Credit |
| 2 | Local bank account |
| 3 | Card |
| 4 | Cheque |
| 5 | Overseas bank account |
| 6 | Web banking transfer |
| 7 | Iris payment |

### INVOICE LINE OBJECT

| Field | Type | Description |
| --- | --- | --- |
| line_number | Integer | (required) The index number of the invoice line |
| name | String | (required) The name of the product or service.<br>*Example: "Product 1"* |
| description | String | Description of the product or service. |
| quantity | Integer | (required) The quantity number of the product or service. |
| quantity_type | Integer | The corresponding quantity code for the specific product / service according to myDATA specification |
| unit_price | Float | (required) The price per unit for the corresponding product / service. Maximum 2 digits. |
| net_total_price | Float | (required) The net total price of the invoice line. |
| vat_rate | Integer | (required) The corresponding vat rate according to myDATA specifications. |
| vat_total | Float | (required) The total price if the invoice line for the specified vat rate. Maximum 2 digits. |
| subtotal | Float | (required) The sub total price of the invoice line. Maximum 2 digits. |
| vat_exemption_code | Integer | (required when vat_rate is zero) The appropriate vat exemption code according to myDATA specifications when vat_rate is zero. |
| classification_category | String | (required) The appropriate classification category according to myDATA specifications.<br>You can also pass multiple classification types & categories using the classifications field.<br>The classifications field overrides the classification_type and classification_category fields. |
| classification_type | String | (required) The appropriate classification type according to myDATA specifications.<br>You can also pass multiple classification types & categories using the classifications field.<br>The classifications field overrides the classification_type and classification_category fields. |
| other_taxes_amount | Float | (required for invoice type code 8.2) Rounded to a maximum of 2 decimal places. |
| accommodation_tax | Float | (required for invoice type code 8.2) Rounded to a maximum of 2 decimal places. |
| other_taxes_percent_category | String | (required for invoice type code 8.2) Valid values are: '6', '7', '8', '9', '10', '17', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30' |
| withhold_tax_rate | Integer | Rate of withhold tax, example for 20% the value must be 20 |
| withhold_tax_code | String | myData withhold category code as string for example "3" |
| withholding_total | Float | Rounded to a maximum of 2 decimal places. |
| stamp_duty_tax_code | String | myData stamp duty code 1-4. Example "1" |
| stamp_duty_amount | Float | Rounded to a maximum of 2 decimal places. |
| cpv_code | String | (required for B2G) |
| deductions_amount | Float | (required when deductions present) Rounded to a maximum of 2 decimal places. |
| deductions | Array | Array of objects with **title** (string), **amount** (required - float, up to 2 decimals), **informational** (boolean - default false) |
| expenses_vat_classification | String | (required when self_pricing is true) myData expense vat classification |
| classifications | Array | This attribute is used to specify multiple classification types & categories.<br>It overrides the classification_type and classification_category fields.<br>This array consists of these attributes:<br>- **category** (String) (required)<br>- **type** (String) (required)<br>- **amount** (Float) (required) |
| invoice_detail_type | Integer | Invoice detail type identifier |
| expense | Boolean | Indicates if the invoice line is an expense |
| rec_type | Integer | Indicates type of fees. For Τέλη the valid value is 2 |
| fees_category | Integer | Indicates exact fees category used |

### DELIVERY DETAIL OBJECT

| Field | Type | Description |
| --- | --- | --- |
| dispatch_date | String | (required) The dispatch date in format "DD-MMM-YYYY" (e.g., "12-Nov-2025") |
| dispatch_time | String | (required) The dispatch time in format "HH:MM" (e.g., "02:30") |
| vehicle_number | String | (required) The vehicle registration number |
| purpose_of_movement | String | (required) The purpose of movement code according to myDATA specifications (1-20, excluding 6, 15, 16, 17, 18) |
| purpose_of_movement_custom_title | String | (required when purpose_of_movement is 19) The custom title for the purpose of movement |
| issuer_of_movement | String | (required) The name or identifier of the movement issuer |
| from_address | String | (required) The street address of the origin location |
| from_number | String | (required) The street number of the origin location |
| from_city | String | (required) The city of the origin location |
| from_zipcode | String | (required) The postal code of the origin location |
| from_branch | Integer | The branch ID of the origin location |
| to_address | String | (required) The street address of the destination location |
| to_number | String | (required) The street number of the destination location |
| to_city | String | (required) The city of the destination location |
| to_zipcode | String | (required) The postal code of the destination location |
| to_branch | Integer | The branch ID of the destination location |
| reverse_delivery_note | Boolean | Default: false |
| reverse_delivery_note_purpose | Integer | (required when reverse_delivery_note is true) The purpose of the reverse delivery note |

### TAXES TOTALS OBJECT

This object is used to pass taxes on invoice level.
When this object is used invoice line level taxes must be omitted.

| Field | Type | Description |
| --- | --- | --- |
| tax_type | Integer | (required) The type of tax applied. |
| tax_category | Integer | (required) The category of tax applied. |
| tax_amount | Float | (required) The amount of tax applied. |
| underlying_value | Float | The underlying value for the tax calculation. |

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/invoices' \
-X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx' \
-d '{
    "invoice_type_code": "2.1",
    "billing_book_id": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "branch": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "payment_method_type": 1,
    "payment_details": "Bank: xxxxxxxxx, iban: xxxxxxxxxxx",
    "currency": "USD",
    "exchange_rate": 0.80,
    "net_total_amount": 20.00,
    "vat_total_amount": 4.80,
    "total_amount": 24.80,
    "payable_total_amount": 24.80,
    "tip_amount": 2.00,
    "notes": "Don't ring the bell",
    "correlated_invoices": [],
    "withholding_total_amount": 0.50,
    "total_stamp_duty_amount": 2.50,
    "customer_emails": ["xxxxxx@mail.xom"],
    "email_locale": "el",
    "b2g": false,
    "delivery_address_city": "city",
    "delivery_address_street": "street",
    "delivery_address_street_number": "2",
    "delivery_address_postal_code": "11111",
    "delivery_address_party_name": "test name",
    "b2g_contracting_authority_id": "123123123-11",
    "b2g_contract_identifier": "12345",
    "b2g_budget_type": 1,
    "b2g_budget_identifier": "123123",
    "b2g_payment_details": "test details",
    "b2g_due_date": "2026-01-01",
    "b2g_buyer_reference": "Buyer reference",
    "b2g_bt_70": "Text here",
    "deductions_total_amount": 10.00,
    "num": 11,
    "self_pricing": false,
    "pos_device_id": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "aade_preloaded": true,
    "draft": true,
    "installments": false,
    "counterpart": {
      "name": "Γιάννης Ιωάννου",
      "country_code": "GR",
      "vat": "123456789",
      "city": "Αθήνα",
      "street": "Ερμού",
      "number": "0",
      "postal_code": "12345",
      "email": "xxxx@xxxxx.xxx"
    },
    "is_delivery_note": true,
    "delivery_detail": {
      "dispatch_date": "12-12-2025",
      "dispatch_time": "02:30",
      "vehicle_number": "ABC1234",
      "purpose_of_movement": "1",
      "issuer_of_movement": "Company Name",
      "from_address": "Main Street",
      "from_number": "10",
      "from_city": "Athens",
      "from_zipcode": "12345",
      "from_branch": "1",
      "to_address": "Second Street",
      "to_number": "20",
      "to_city": "Thessaloniki",
      "to_zipcode": "54321",
      "to_branch": "2",
      "reverse_delivery_note": true,
      "reverse_delivery_note_purpose": 2
    },
    "invoice_lines": [{
      "line_number": 1,
      "name": "Name",
      "description": "Description",
      "quantity": 1,
      "quantity_type": 1,
      "unit_price": 20.00,
      "net_total_price": 20.00,
      "vat_rate": 24,
      "vat_total": 4.80,
      "subtotal": 24.80,
      "vat_exemption_code": "",
      "withhold_tax_rate": 20,
      "withhold_tax_code": "2",
      "withholding_total": 0.50,
      "classification_category": "category1_3",
      "classification_type": "E3_561_001",
      "stamp_duty_tax_code": "1",
      "stamp_duty_amount": 2.50,
      "cpv_code": "111111111",
      "deductions_amount": 10.00,
      "expenses_vat_classification": "VAT_361",
      "deductions": [{
        "title": "Name 1",
        "amount": 5.00,
        "informational": false
    }, {
        "title": "Name 2",
        "amount": 5.00,
        "informational": false
      }]
    }]
}'
```

**# Here is a curl example for invoice type code 8.2**

```bash
curl -L 'https://wrapp.ai/api/v1/invoices' \
-X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx' \
-d '{
  "invoice_type_code": "8.2",
  "billing_book_id": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "payment_method_type": 1,
  "net_total_amount": 0,
  "vat_total_amount": 0,
  "total_amount": 1.50,
  "payable_total_amount": 1.50,
  "other_taxes_amount": 1.50,
  "counterpart": {
    "name": "Γιάννης Ιωάννου",
    "country_code": "GR",
    "vat": "123456789",
    "city": "Αθήνα",
    "street": "Ερμού",
    "number": "0",
    "postal_code": "12345"
  },
  "invoice_lines": [{
    "line_number": 1,
    "accommodation_tax": 1.50,
    "other_taxes_percent_category": "7",
    "other_taxes_amount": 1.50,
    "classification_category": "category1_95"
    }]
}'
```

**# Here is a curl example for opening an invoice type code 8.6**

```bash
curl -L 'https://wrapp.ai/api/v1/invoices' \
-X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx' \
-d '{
  "invoice_type_code": "8.6",
  "billing_book_id": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "catering_table_id": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "payment_method_type": 0,
  "net_total_amount": 6.05,
  "vat_total_amount": 1.45,
  "total_amount": 7.50,
  "payable_total_amount": 7.50,
  "invoice_lines": [{
    "line_number": 1,
    "name": "product 1",
    "quantity": 1,
    "quantity_type": 1,
    "unit_price": 3.63,
    "net_total_price": 3.63,
    "vat_rate": 24,
    "vat_total": 0.87,
    "subtotal": 4.50,
    "classification_category": "category1_95",
    "classification_type": "_",
    },
  {
    "line_number": 2,
    "name": "product 2",
    "quantity": 1,
    "quantity_type": 1,
    "unit_price": 2.42,
    "net_total_price": 2.42,
    "vat_rate": 24,
    "vat_total": 0.58,
    "subtotal": 3.0,
    "classification_category": "category1_95",
    "classification_type": "_",
    }]
}'
```

**# Here is a curl example for opening the first invoice type code 8.6 # and opening the catering table at the same time. # We omit catering_table_id parameter and specify the catering_table_name # otherwise a random catering table name will be assigned.**

```bash
curl -L 'https://wrapp.ai/api/v1/invoices' \
-X POST \
-Η 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx' \
-d '{
  "invoice_type_code": "8.6",
  "billing_book_id": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "catering_table_name": "table-1",
  "payment_method_type": 0,
  "net_total_amount": 3.63,
  "vat_total_amount": 0.87,
  "total_amount": 4.50,
  "payable_total_amount": 4.50,
  "invoice_lines": [{
    "line_number": 1,
    "name": "product 1",
    "quantity": 1,
    "quantity_type": 1,
    "unit_price": 3.63,
    "net_total_price": 3.63,
    "vat_rate": 24,
    "vat_total": 0.87,
    "subtotal": 4.50,
    "classification_category": "category1_95",
    "classification_type": "_",
    }]
}'
```

**# Here is a curl example for cancelling an invoice type code 8.6**

```bash
curl -L 'https://wrapp.ai/api/v1/invoices' \
-X POST \
-Η 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx' \
-d '{
  "invoice_type_code": "8.6",
  "billing_book_id": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "catering_table_id": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "correlated_invoices": ["xxxxxxxxxxxxxxx", "xxxxxxxxxxxxxxx"],
  "payment_method_type": 0,
  "net_total_amount": 0,
  "vat_total_amount": 0,
  "total_amount": 0,
  "payable_total_amount": 0,
  "invoice_lines": [{
    "line_number": 1,
    "name": "Canceling Catering Order",
    "quantity": 1,
    "quantity_type": 1,
    "unit_price": 0,
    "net_total_price": 0,
    "vat_rate": 0,
    "vat_total": 0,
    "subtotal": 0,
    "classification_category": "category1_95",
    "classification_type": "_"
  }]
}'
```

**# Here is a curl example for closing one or more catering # order notes (8.6) # Also check the cancel_catering_order_note endpoint # for cancelling catering order notes**

```bash
curl -L 'https://wrapp.ai/api/v1/invoices' \
-X POST \
-Η 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx' \
-d '{
  "invoice_type_code": "11.1",
  "payment_method_type": 0,
  "net_total_amount": 12.1,
  "vat_total_amount": 2.9,
  "total_amount": 15.0,
  "payable_total_amount": 15.0,
  "correlated_invoices": ["400001948426203","400001948428878"],
  "billing_book_id": "8bda4154-3956-4774-b2ff-4eea1d08ac59",
  "catering_table_id": "786037d7-1f2c-44dd-b581-c5d45d535dd8",
  "invoice_lines": [{
    "line_number": 1,
    "name": "Club Sandwhich",
    "quantity": 1,
    "quantity_type": 1,
    "unit_price": 3.63,
    "net_total_price": 3.63,
    "vat_rate": 24,
    "vat_total": 0.87,
    "subtotal": 4.50,
    "classification_category": "category1_2",
    "classification_type": "E3_561_003"
    },
  {
    "line_number": 2,
    "name": "Καφές",
    "quantity": 1,
    "quantity_type": 1,
    "unit_price": 2.42,
    "net_total_price": 2.42,
    "vat_rate": 24,
    "vat_total": 0.58,
    "subtotal": 3.0,
    "classification_category": "category1_2",
    "classification_type": "E3_561_003"
  },
  {
    "line_number": 3,
    "name": "Club Sandwhich",
    "quantity": 1,
    "quantity_type": 1,
    "unit_price": 3.63,
    "net_total_price": 3.63,
    "vat_rate": 24,
    "vat_total": 0.87,
    "subtotal": 4.50,
    "classification_category": "category1_2",
    "classification_type": "E3_561_003"
  },
  {
    "line_number": 4,
    "name": "Καφές",
    "quantity": 1,
    "quantity_type": 1,
    "unit_price": 2.42,
    "net_total_price": 2.42,
    "vat_rate": 24,
    "vat_total": 0.58,
    "subtotal": 3.0,
    "classification_category": "category1_2",
    "classification_type": "E3_561_003"
  }]
}'   Response Success:    {
  "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "my_data_mark": "xxxxxxxxxxxxxx",
  "my_data_uid": "xxxxxxxxxxxxxxx",
  "my_data_qr_url": "https://mydataapidev.aade.gr/TimologioQR/QRInfo?q=xxxxxxxxx",
  "series": "a",
  "num": 1,
  "cancelled_by_mark": null,
  "wrapp_invoice_url": "https://wrapp.ai/el/customer_portal/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "wrapp_invoice_url_en": "https://wrapp.ai/en/customer_portal/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}    Response Error:    {
 "errors": [
   {
     "title": "Name το έχουν ήδη χρησιμοποιήσει"
   },
   {
     "title": "Series το έχουν ήδη χρησιμοποιήσει"
   },
 ]
}   Response Pending: # To check if the invoice has been issued succesfully to myDATA,
# we need to make a call to invoices status.   {
  "status": "pending",
  "invoice_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}   Response Model Errors:   {
  "status": "Invoice Errors",
  "errors": [
    { "title": "Invoice type δεν συμπεριλαμβάνεται στη λίστα" },
    { "title": "Invoice Type does not match selected Billing Book Invoice Type" }
  ]
}   Response myDATA Errors:   {
  "status": "myDATA Errors",
  "errors": [
    {
       "code": "313",
       "message": "Classification type E3_561_003 is forbidden for Classification category category1_3 combined with invoice type Item2_1"
    }
  ]
}
```

**Response Success:**

```json
{
  "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "my_data_mark": "xxxxxxxxxxxxxx",
  "my_data_uid": "xxxxxxxxxxxxxxx",
  "my_data_qr_url": "https://mydataapidev.aade.gr/TimologioQR/QRInfo?q=xxxxxxxxx",
  "series": "a",
  "num": 1,
  "cancelled_by_mark": null,
  "wrapp_invoice_url": "https://wrapp.ai/el/customer_portal/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "wrapp_invoice_url_en": "https://wrapp.ai/en/customer_portal/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
```

**Response Error:**

```json
{
 "errors": [
   {
     "title": "Name το έχουν ήδη χρησιμοποιήσει"
   },
   {
     "title": "Series το έχουν ήδη χρησιμοποιήσει"
   },
 ]
}
```

**Response Pending:**

```json
{
  "status": "pending",
  "invoice_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
```

**Response Model Errors:**

```json
{
  "status": "Invoice Errors",
  "errors": [
    { "title": "Invoice type δεν συμπεριλαμβάνεται στη λίστα" },
    { "title": "Invoice Type does not match selected Billing Book Invoice Type" }
  ]
}
```

**Response myDATA Errors:**

```json
{
  "status": "myDATA Errors",
  "errors": [
    {
       "code": "313",
       "message": "Classification type E3_561_003 is forbidden for Classification category category1_3 combined with invoice type Item2_1"
    }
  ]
}
```

### Είδη Φόρων (Tax Types)

| Κωδικός | Περιγραφή |
| --- | --- |
| 1 | Παρακρατούμενοι φόροι |
| 2 | Τέλη |
| 3 | Λοιποί φόροι |
| 4 | Ψηφιακό τέλος συναλλαγής |
| 5 | Κρατήσεις |

### Είδη Παραστατικών (Invoice Type Code)

#### Αντικριζόμενα Παραστατικά Εκδότη ημεδαπής / αλλοδαπής

| Κωδικός | Περιγραφή |
| --- | --- |
| Τιμολόγιο Πώλησης |  |
| 1.1 | Τιμολόγιο Πώλησης |
| 1.2 | Τιμολόγιο Πώλησης / Ενδοκοινοτητες Παραδόσεις |
| 1.3 | Τιμολόγιο Πώλησης / Παραδόσεις Τρίτων Χωρών |
| 1.4 | Τιμολόγιο Πώλησης / Πώληση για Λογαριασμό Τρίτων |
| 1.5 | Τιμολόγιο Πώλησης / Εκκαθάριση Πωλήσεων Τρίτων - Αμοιβή από Πωλήσεις Τρίτων |
| 1.6 | Τιμολόγιο Πώλησης / Συμπληρωματικό Παραστατικό |
| Τιμολόγιο Παροχής Υπηρεσιών |  |
| 2.1 | Τιμολόγιο Παροχής Υπηρεσιών |
| 2.2 | Τιμολόγιο Παροχής / Ενδοκοινοτική Παροχή Υπηρεσιών |
| 2.3 | Τιμολόγιο Παροχής / Παροχή Υπηρεσιών Τρίτων Χωρών |
| 2.4 | Τιμολόγιο Παροχής / Συμπληρωματικό Παραστατικό |
| Τίτλος Κτήσης |  |
| 3.1 | Τίτλος Κτήσης (μη υπόχρεος Εκδότης) |
| 3.2 | Τίτλος Κτήσης (άρνηση έκδοσης από υπόχρεο Εκδότη) |
| Πιστωτικό Τιμολόγιο |  |
| 5.1 | Πιστωτικό Τιμολόγιο / Συσχετιζόμενο |
| 5.2 | Πιστωτικό Τιμολόγιο / Μη Συσχετιζόμενο |
| Στοιχείο Αυτοπαράδοσης - Ιδιοχρησιμοποίησης |  |
| 6.1 | Στοιχείο Αυτοπαράδοσης |
| 6.2 | Στοιχείο Ιδιοχρησιμοποίησης |
| Συμβόλαιο - Έσοδο |  |
| 7.1 | Συμβόλαιο - Έσοδο |
| Ειδικό Στοιχείο (Έσοδο) – Απόδειξη Είσπραξης |  |
| 8.1 | Ενοίκια - Έσοδο |
| 8.2 | Τέλος ανθεκτικότητας κλιματικής κρίσης |
| 8.4 | Απόδειξη Είσπραξης POS |
| 8.5 | Απόδειξη Επιστροφής POS |
| Δελτίο Παραγγελίας |  |
| 8.6 | Δελτίο Παραγγελίας Εστίασης |
| Παραστατικά Διακίνησης |  |
| 9.3 | Δελτίο Αποστολής |

#### Μη Αντικριζόμενα Παραστατικά Εκδότη ημεδαπής / αλλοδαπής

| Κωδικός | Περιγραφή |
| --- | --- |
| Παραστατικά Λιανικής |  |
| 11.1 | Απόδειξη Λιανικής Πώλησης (ΑΛΠ) |
| 11.2 | Απόδειξη Παροχής Υπηρεσιών (ΑΠΥ) |
| 11.3 | Απλοποιημένο Τιμολόγιο |
| 11.4 | Πιστωτικό Στοιχ. Λιανικής |
| 11.5 | Απόδειξη Λιανικής Πώλησης για Λογ/σμό Τρίτων |

#### Μη Αντικριζόμενα Παραστατικά Λήπτη ημεδαπής / αλλοδαπής

| Κωδικός | Περιγραφή |
| --- | --- |
| Λήψη Παραστατικών Λιανικής |  |
| 13.1 | Έξοδα - Αγορές Λιανικών Συναλλαγών ημεδαπής / αλλοδαπής |
| 13.2 | Παροχή Λιανικών Συναλλαγών ημεδαπής / αλλοδαπής |
| 13.3 | Κοινόχρηστα |
| 13.4 | Συνδρομές |
| 13.30 | Παραστατικά Οντότητας ως Αναγράφονται από την ίδια (Δυναμικό) |
| 13.31 | Πιστωτικό Στοιχ. Λιανικής ημεδαπής / αλλοδαπής |

#### Αντικριζόμενα Παραστατικά Λήπτη ημεδαπής / αλλοδαπής

| Κωδικός | Περιγραφή |
| --- | --- |
| Παραστ. Εξαιρ. Οντοτήτων ημεδαπής / αλλοδαπής |  |
| 14.1 | Τιμολόγιο / Ενδοκοινοτικές Αποκτήσεις |
| 14.2 | Τιμολόγιο / Αποκτήσεις Τρίτων Χωρών |
| 14.3 | Τιμολόγιο / Ενδοκοινοτική Λήψη Υπηρεσιών |
| 14.4 | Τιμολόγιο / Λήψη Υπηρεσιών Τρίτων Χωρών |
| 14.5 | ΕΦΚΑ και λοιποί Ασφαλιστικοί Οργανισμοί |
| 14.30 | Παραστατικά Οντότητας ως Αναγράφονται από την ίδια (Δυναμικό) |
| 14.31 | Πιστωτικό ημεδαπής / αλλοδαπής |
| Συμβόλαιο - Έξοδο |  |
| 15.1 | Συμβόλαιο - Έξοδο |
| Ειδικό Στοιχείο (Έξοδο) – Απόδειξη Πληρωμής |  |
| 16.1 | Ενοίκιο Έξοδο |

#### Εγγραφές Τακτοποίησης Εσόδων- Εξόδων

| Κωδικός | Περιγραφή |
| --- | --- |
| Εγγραφές Οντότητας |  |
| 17.1 | Μισθοδοσία |
| 17.2 | Αποσβέσεις |
| 17.3 | Λοιπές Εγγραφές Τακτοποίησης Εσόδων - Λογιστική Βάση |
| 17.4 | Λοιπές Εγγραφές Τακτοποίησης Εσόδων - Φορολογική Βάση |
| 17.5 | Λοιπές Εγγραφές Τακτοποίησης Εξόδων - Λογιστική Βάση |
| 17.6 | Λοιπές Εγγραφές Τακτοποίησης Εξόδων - Φορολογική Βάση |

### Κατηγορία Αιτίας Εξαίρεσης ΦΠΑ (Vat Exemption Code)

| Κωδικός | Περιγραφή |
| --- | --- |
| 1 | Άρθρο 2 & 3 |
| 2 | Άρθρο 5 (Παράδοση αγαθών) |
| 3 | Άρθρο 17 (Τόπος Παράδοσης Αγαθών) |
| 4 | Άρθρο 18 (Τόπος Παροχής) |
| 5 | Άρθρο 21 |
| 6 | Άρθρο 24 |
| 7 | Άρθρο 27 (Απαλλαγές στο εσωτερικό της χώρας) |
| 8 | Άρθρο 29 |
| 9 | Άρθρο 30 (Απαλλαγές στη διεθνή διακίνηση αγαθών) |
| 10 | Άρθρο 31 |
| 11 | Άρθρο 32 (Ειδικές Απαλλαγές) |
| 12 | Άρθρο 32 - Πλοία Ανοικτής Θαλάσσης |
| 13 | Άρθρο 32 1γ - Πλοία Ανοιχτής Θαλάσσης |
| 14 | Άρθρο 33 |
| 15 | Άρθρο 44 (Μικρών επιχειρήσεων) |
| 16 | Άρθρο 45 |
| 17 | Άρθρο 47 του Κώδικα ΦΠΑ (Ειδικό καθεστώς κατ' αποκοπή καταβολής του φόρου) |
| 18 | Άρθρο 48 (Ειδικό καθεστώς αγροτών) |
| 19 | Άρθρο 54 του Κώδικα ΦΠΑ (Ειδικό καθεστώς επενδυτικού χρυσού) |
| 20 | Άρθρο 50 (Ειδικό καθεστώς πρακτορείων ταξιδιών) |
| 21 | Άρθρο 51 του Κώδικα ΦΠΑ (Ειδικό καθεστώς φορολογίας βιομηχανοποιημένων καπνών) |
| 22 | Άρθρο 52 - ΦΠΑ εμπεριεχόμενος |
| 23 | Άρθρο 53 του Κώδικα ΦΠΑ (Ειδικό καθεστώς φορολογίας για τις πωλήσεις σε δημοπρασία) |
| 24 | Άρθρο 6 του Κώδικα ΦΠΑ (Παράδοση ακινήτων) |
| 25 | ΠΟΛ.1029/1995 |
| 26 | ΠΟΛ 1167/2015 |
| 27 | Λοιπές Εξαιρέσεις ΦΠΑ |
| 28 | Άρθρο 29 περ.β' παρ.1 του Κώδικα ΦΠΑ, (Tax Free) |
| 29 | Άρθρο 56, του Κώδικα ΦΠΑ (OSS μη ενωσιακό καθεστώς) |
| 30 | Άρθρο 57, του Κώδικα ΦΠΑ (OSS ενωσιακό καθεστώς) |
| 31 | Άρθρο 58, του Κώδικα ΦΠΑ (IOSS) |

### Είδη Ποσότητας (Quantity Type)

| Κωδικός | Περιγραφή |
| --- | --- |
| 1 | Τεμάχια |
| 2 | Κιλά |
| 3 | Λίτρα |
| 4 | Μέτρα |
| 5 | Τετραγωνικά Μέτρα |
| 6 | Κυβικά Μέτρα |

### Κωδικοί Κατηγορίας Χαρακτηρισμού (Classification Category)

#### Έσοδα

| Κωδικός | Περιγραφή |
| --- | --- |
| 1.1 | Έσοδα από Πώληση Εμπορευμάτων |
| 1.2 | Έσοδα από Πώληση Προϊόντων |
| 1.3 | Έσοδα από Παροχή Υπηρεσιών |
| 1.4 | Έσοδα από Πώληση Παγίων |
| 1.5 | Λοιπά Έσοδα/ Κέρδη |
| 1.6 | Αυτοπαραδόσεις / Ιδιοχρησιμοποιήσεις |
| 1.7 | Έσοδα για λ/σμο τρίτων |
| 1.8 | Έσοδα προηγούμενων χρήσεων |
| 1.9 | Έσοδα επομένων χρήσεων |
| 1.10 | Λοιπές Εγγραφές Τακτοποίησης Εσόδων |
| 1.95 | Λοιπά Πληροφοριακά Στοιχεία Εσόδων |

#### Έξοδα

| Κωδικός | Περιγραφή |
| --- | --- |
| 2.1 | Αγορές Εμπορευμάτων |
| 2.2 | Αγορές Α`-Β` Υλών |
| 2.3 | Λήψη Υπηρεσιών |
| 2.4 | Γενικά Έξοδα με δικαίωμα έκπτωσης Φ.Π.Α. |
| 2.5 | Γενικά Έξοδα χωρίς δικαίωμα έκπτωσης Φ.Π.Α. |
| 2.6 | Αμοιβές και Παροχές Προσωπικού |
| 2.7 | Αγορές Παγίων |
| 2.8 | Αποσβέσεις Παγίων |
| 2.9 | Έξοδα για λογαριασμό Τρίτων |
| 2.10 | Έξοδα προηγούμενων χρήσεων |
| 2.11 | Έξοδα επόμενων χρήσεων |
| 2.12 | Λοιπές Εγγραφές Τακτοποίησης Εξόδων |
| 2.13 | Αποθέματα Έναρξης Περιόδου |
| 2.14 | Αποθέματα Λήξης Περιόδου |
| 2.95 | Λοιπά Πληροφοριακά Στοιχεία Εξόδων |

### Κωδικοί Τύπου Χαρακτηρισμού Εσόδων / Εξόδων (Classification Type)

#### Έσοδα

| Κωδικός | Περιγραφή |
| --- | --- |
| 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 | Πωλήσεις για λογαριασμό αγροτών μέσω αγροτικού συνεταιρισμού κ.λ.π. |

#### Έξοδα

| Κωδικός | Περιγραφή |
| --- | --- |
| 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_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 | Αγορές μη ενσώματων παγίων χρήσης/Εξωτερικού Τρίτες Χώρες |
| AT_361 | Αγορές & δαπάνες στο εσωτερικό της χώρας |
| AT_362 | Αγορές & εισαγωγές επενδ. Αγαθών (πάγια) |
| AT_363 | Λοιπές εισαγωγές εκτός επενδ. Αγαθών (πάγια) |
| AT_364 | Ενδοκοινοτικές αποκτήσεις αγαθών |
| AT_365 | Ενδοκοινοτικές λήψεις υπηρεσιών άρθρ. 14.2.α |
| AT_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 | Αγορές αγαθών που υπάγονται σε ΕΦΚ |

### Κατηγορίες Λοιπόν Φόρων (Other Taxes Percent Category)

| Κωδικός | Περιγραφή |
| --- | --- |
| 3 | Ασφάλιστρα κλάδου ζωής 4% |
| 4 | Ασφάλιστρα λοιπών κλάδων 15% |
| 5 | Απαλλασσόμενα φόρου ασφαλίστρων 0% |
| 6 | Ξενοδοχεία 1-2 αστέρων 0,50€ |
| 7 | Ξενοδοχεία 3 αστέρων 1,50€ |
| 8 | Ξενοδοχεία 4 αστέρων 3,00€ |
| 9 | Ξενοδοχεία 4 αστέρων 4,00€ |
| 10 | Ενοικιαζόμενα - επιπλωμένα δωμάτια - διαμερίσματα 0,50€ |
| 11 | Ειδικός Φόρος στις διαφημίσεις που προβάλλονται από την τηλεόραση (ΕΦΤΔ) 5% |
| 12 | 3.1 Φόρος πολυτελείας 10% επί της φορολογητέας αξίας για τα ενδοκοινοτικώς αποκτούμενα και εισαγόμενα από τρίτες χώρες 10% |
| 13 | 3.2 Φόρος πολυτελείας 10% επί της τιμής πώλησης προ Φ.Π.Α. για τα εγχωρίως παραγόμενα είδη 10% |
| 14 | Δικαίωμα του Δημοσίου στα εισιτήρια των καζίνο (80% επί του εισιτηρίου) |
| 15 | Ασφάλιστρα κλάδου πυρός 20% |
| 16 | Λοιποί Τελωνειακοί Δασμοί-Φόροι |
| 17 | Λοιποί Φόροι |
| 18 | Επιβαρύνσεις Λοιπών Φόρων |
| 19 | ΕΦΚ |
| 20 | Ξενοδοχεία 1-2 αστέρων 2,00€ (ανά Δωμ./Διαμ.) |
| 21 | Ξενοδοχεία 3 αστέρων 5,00€ (ανά Δωμ./Διαμ.) |
| 22 | Ξενοδοχεία 4 αστέρων 10,00€ (ανά Δωμ./Διαμ.) |
| 23 | Ξενοδοχεία 5 αστέρων 15,00€ (ανά Δωμ./Διαμ.) |
| 24 | Ενοικιαζόμενα επιπλωμένα δωμάτια – διαμερίσματα 2,00€ (ανά Δωμ./Διαμ.) |
| 25 | Ακίνητα βραχυχρόνιας μίσθωσης 8,00€ |
| 26 | Ακίνητα βραχυχρόνιας μίσθωσης μονοκατοικίες άνω των 80 τ.μ. 15,00€ |
| 27 | Αυτοεξυπηρετούμενα καταλύματα – τουριστικές επιπλωμένες επαύλεις (βίλες) 15,00€ |
| 28 | Ακίνητα βραχυχρόνιας μίσθωσης 2,00€ |
| 29 | Ακίνητα βραχυχρόνιας μίσθωσης μονοκατοικίες άνω των 80 τ.μ. 4,00€ |
| 30 | Αυτοεξυπηρετούμενα καταλύματα – τουριστικές επιπλωμένες επαύλεις (βίλες) 4,00€ |

### Κατηγορίες Παρακράτησης Φόρου (Withhold Tax Code)

| Κωδικός | Περιπτώσεις % Παρακράτησης - Προκαταβολής Φόρου | Παρακράτηση Φόρου |
| --- | --- | --- |
| 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 | ποσό |

### Κατηγορίες Συντελεστή Χαρτοσήμου (Stamp Duty Tax Code)

| Κωδικός | Περιπτώσεις % Χαρτοσήμων | Χαρτόσημο |
| --- | --- | --- |
| 1 | Συντελεστής 1,2% | 1,20% |
| 2 | Συντελεστής 2,4% | 2,40% |
| 3 | Συντελεστής 3,6% | 3,60% |
| 4 | Λοιπές περιπτώσεις Χαρτοσήμου | ποσό |

### Σκοπός Διακίνησης

| Κωδικός | Περιγραφή |
| --- | --- |
| 1 | Πώληση |
| 2 | Πώληση για Λογαριασμό Τρίτων |
| 3 | Δειγματισμός |
| 4 | Έκθεση |
| 5 | Επιστροφή |
| 7 | Επεξεργασία - Συναρμολόγηση - Αποσυναρμολόγηση |
| 8 | Ενδοδιακίνηση (Προηγούμενη Περιγραφή: Μεταξύ Εγκαταστάσεων Οντότητας) |
| 9 | Αγορά |
| 10 | Εφοδιασμός πλοίων και αεροσκαφών |
| 11 | Δωρεάν διάθεση |
| 12 | Εγγύηση |
| 13 | Χρησιδανεισμός |
| 14 | Αποθήκευση σε Τρίτους |
| 19 | Λοιπές Διακινήσεις |
| 20 | Μεταφορές – Ταχυμεταφορές |

## INVOICES > STATUS

To get information about a specific invoice object make a **GET** call to:
`https://wrapp.ai/api/v1/invoices/:id`

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Authorization: | "Bearer JWT" |

### REST URL PARAMETERS

| Key | Value |
| --- | --- |
| :id | (required) The id of the invoice. |

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/invoices/123456-1234-1234-123456789012' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
```

**Response Success:**

```json
{
  "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "my_data_mark": "xxxxxxxxxxxxxx",
  "my_data_uid": "xxxxxxxxxxxxxxx",
  "my_data_qr_url": "https://mydataapidev.aade.gr/TimologioQR/QRInfo?q=xxxxxxxxx",
  "series": "a",
  "num": 1,
  "cancelled_by_mark": null,
  "wrapp_invoice_url": "https://wrapp.ai/el/customer_portal/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "wrapp_invoice_url_en": "https://wrapp.ai/en/customer_portal/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
```

**Response Error:**

```json
{
  "errors": [
    { "title": "Record not found" }
 ]
}
```

## INVOICES > CANCEL

**This endpoint can be used only for delivery notes (Δελτία Αποστολής)**
To cancel an invoice you need to send a **DELETE** call to:
`https://wrapp.ai/api/v1/invoices/:id/cancel`

**Note:** Invoices sent from provider can't be cancelled

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Authorization: | "Bearer JWT" |

### REST URL PARAMETERS

| Key | Value |
| --- | --- |
| :id | (required) The id of the invoice. |

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/invoices/123456-1234-1234-123456789012/cancel' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx' -X DELETE
```

**Response Success:**

```json
{
  "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "my_data_mark": "xxxxxxxxxxxxxx",
  "my_data_uid": "xxxxxxxxxxxxxxx",
  "my_data_qr_url": "https://mydataapidev.aade.gr/TimologioQR/QRInfo?q=xxxxxxxxx",
  "series": "a",
  "num": 1,
  "cancelled_by_mark": "xxxxxxxxxxxxx",
  "wrapp_invoice_url": "https://wrapp.ai/el/customer_portal/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "wrapp_invoice_url_en": "https://wrapp.ai/en/customer_portal/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
```

## INVOICES > GENERATE PDF

To request pdf generation for a specific invoice make a **GET** call to:
`https://wrapp.ai/api/v1/invoices/:id/generate_pdf`
On first call the pdf generation will be queued and a webhook will be sent to the tenant once the pdf is ready to be downloaded. If the pdf was already generated it will return a download url.

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Accept: | "application/json" |
| Authorization: | "Bearer JWT" |

### REST URL PARAMETERS

| Key | Value |
| --- | --- |
| id | (required) The id of the invoice. |
| locale | Possible values are 'el' and 'en'. If skipped 'el' will be used by default |

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/invoices/123456-1234-1234-123456789012/generate_pdf' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
```

**Response Success:**

```json
{
  "status": "PDF generation started, webhook will be send upon completion"
}
```

**Response Success with existing PDF:**

```json
{
  "download_url": "https://xxxxxxxxxxxxxxxxxxxxxxxxxx"
}
```

**Response Error:**

```json
{
  "errors": [
    { "title": "Please check your parameters" }
 ]
}
```

## INVOICES > GENERATE THERMAL PDF

To request thermal pdf generation for a specific invoice make a **GET** call to:
`https://wrapp.ai/api/v1/invoices/:id/generate_thermal_pdf`
On first call the thermal pdf generation will be queued and a webhook will be sent to the tenant once the pdf is ready to be downloaded. If the thermal pdf was already generated it will return a download url.

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Accept: | "application/json" |
| Authorization: | "Bearer JWT" |

### REST URL PARAMETERS

| Key | Value |
| --- | --- |
| id | (required) The id of the invoice. |

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/invoices/123456-1234-1234-123456789012/generate_thermal_pdf' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
```

**Response Success:**

```json
{
  "status": "PDF generation started, webhook will be send upon completion"
}
```

**Response Success with existing PDF:**

```json
{
  "download_url": "https://xxxxxxxxxxxxxxxxxxxxxxxxxx"
}
```

**Response Error:**

```json
{
  "errors": [
    { "title": "Please check your parameters" }
 ]
}
```

## INVOICES > ISSUED COUNT

To get the total number of issued invoices you need to send a **GET** call to:
`https://wrapp.ai/api/v1/invoices/issued_count`

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Authorization: | "Bearer JWT" |

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/invoices/issued_count' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
```

**Response Success:**

```json
{
  "issued_count": 800
}
```

## INVOICES > ISSUE DRAFT

To issue a draft invoice, make a **POST** call to:
`https://wrapp.ai/api/v1/invoices/:id/issue_draft`

**Note:** In case of myData errors invoice can be edited and resend only via UI.

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Accept: | "application/json" |
| Authorization: | "Bearer JWT" |

### QUERY PARAMETERS

| Field | Type | Description |
| --- | --- | --- |
| pos_device_id | String | (required when pos payments are made) The id of the pos device. Required only in case of a pos transaction related issuance |
| customer_emails | Array of Strings | (Optional) This array will send a mail to every customer on the array, it can be empty.<br>To set the email locale you can use the email_locale attribute. |
| email_locale | String | (Optional) Sets the email locale, available values are "el" (Greek - default) and "en" (English). Also it can be used for pdf language, see generate_pdf field. |
| generate_pdf | Boolean | When true it initiates a generation of invoice pdf and the link will be send upon completion via webhook. Declare the language of the pdf using the email_locale field. |

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/invoices/xxxx-xxxx-xxxx-xxxx/issue_draft' \
-X POST \
-Η 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
```

## INVOICES > MARK AS PAID

To mark an invoice as paid, you need to send a **GET** call to:
`https://wrapp.ai/api/v1/invoices/:invoice_id/mark_as_paid`

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Authorization: | "Bearer JWT" |

### REST URL PARAMETERS

| Key | Value |
| --- | --- |
| :invoice_id | (required) The id of the invoice to mark as paid. |

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/invoices/123456-1234-1234-123456789012/mark_as_paid' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
```

**Response Success:**

```json
{
  "status": "Invoice marked as paid"
}
```

**Response Error - Invoice Not Found:**

```json
{
  "errors": [
    {
      "title": "Invoice not found"
    }
  ]
}
```

## INVOICES > CANCEL CATERING ORDER NOTE

To cancel a catering order note, make a **POST** call to:
`https://wrapp.ai/api/v1/invoices/cancel_catering_order_note`
This endpoint issues an 8.6 invoice which cancels the catering order note(s) specified in the request.

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Accept: | "application/json" |
| Authorization: | "Bearer JWT" |

### QUERY PARAMETERS

| Field | Type | Description |
| --- | --- | --- |
| billing_book_id | String | (required) The id of the billing book to use for the cancellation invoice. Invoice type will be 8.6 |
| correlated_invoices | Array | (required) An array of myData marks of the catering order note(s) to cancel. |
| catering_table_id | String | (optional) The id of the catering table. If not provided, it will be resolved from the correlated invoices. |

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/invoices/cancel_catering_order_note' \
-X POST \
-H 'Accept: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx' \
-H 'Content-Type: application/json' \
-d '{
  "billing_book_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "correlated_invoices": ["400001925671835", "400001925671836"]
}'
```

**Response Success:**

```json
{
  "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "my_data_mark": "xxxxxxxxxxxxxx",
  "my_data_uid": "xxxxxxxxxxxxxxx",
  "my_data_qr_url": "xxxxxxxxxxxxxxx",
  "series": "a",
  "num": 1,
  "wrapp_invoice_url": "https://wrapp.ai/el/customer_portal/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "wrapp_invoice_url_en": "https://wrapp.ai/en/customer_portal/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
```

**Response Error - Missing correlated_invoices:**

```json
{
  "errors": [
    {
      "title": "correlated_invoices is required"
    }
  ]
}
```

**Response Error - Billing Book Not Found:**

```json
{
  "errors": [
    {
      "title": "Billing book not found"
    }
  ]
}
```

## INVOICES > LIST OPEN CATERING ORDER NOTES

To list all open catering order notes, make a **GET** call to:
`https://wrapp.ai/api/v1/invoices/list_open_catering_order_notes`

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Accept: | "application/json" |
| Authorization: | "Bearer JWT" |

### QUERY PARAMETERS

| Field | Type | Description |
| --- | --- | --- |
| page | Integer | (optional) Page number for pagination. Defaults to 1. Returns 20 records per page. |

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/invoices/list_open_catering_order_notes?page=1' \
-X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
```

**Response Success:**

```json
{
  "invoices": [
    {
      "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "my_data_mark": "400001925671835",
      "issued_at": "2026-05-13T10:00:00.000Z",
      "catering_table_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    }
  ],
  "total_pages": 3,
  "current_page": 1
}
```

## POS DEVICES > INDEX

In order to enable pos transactions with an invoice issuance, you need to create a POS device.
The following returns a list with all the pos devices a user has registered to his account.

To retrieve a list of all available POS devices, make a **GET** call to:
`https://wrapp.ai/api/v1/pos_devices`

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Accept: | "application/json" |
| Authorization: | "Bearer JWT" |

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/pos_devices' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
```

**Response Success:**

```json
[
 {
  "id": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "name": "some-name",
  "terminal_id": "160xxxxx",
  "merchant_id": "xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"
  },
  ...
]
```

## POS DEVICES > CREATE

In order to enable pos transactions with an invoice issuance, you need to create a POS device.
The following creates a pos device for a given merchant id.

To create a pos device for a given merchant id, make a **POST** call to:
`https://wrapp.ai/api/v1/pos_devices`

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Accept: | "application/json" |
| Authorization: | "Bearer JWT" |

### QUERY PARAMETERS

| Field | Type | Description |
| --- | --- | --- |
| name | String | (required) The name of the pos device. |
| pos_type | String | (required) The type of the pos device according to the table below(see POS DEVICE TYPES). |
| terminal_id | String | (required) The terminal id of the pos device. |
| merchant_id | String | (Optional*) The merchant id of the account assotiated with the pos device. |
| authorization_code | String | (Optional*) The authorization code for the account associated with the pos device. |

***Optional**
The `merchant_id` field should be provided only in case of `pos_type` equals to `viva`.
In all other `pos_type` cases the `authorization_code` should be provided.

### POS DEVICE TYPES

| Type | Description |
| --- | --- |
| viva | Viva POS device type. This type requires a `merchant_id` to be provided. |
| epay | Epay pos devices. Should be used along with an `authorization_code` |
| worldline | Worldline pos devices. Should be used along with an `authorization_code` |
| nbg | Nbg pos devices. Should be used along with an `authorization_code` |
| cosmote | Cosmote pos devices. Should be used along with an `authorization_code` |
| jcc | Jcc pos devices. Should be used along with an `authorization_code` |
| attica | Attica pos devices. Should be used along with an `authorization_code` |
| pancreta | Pancreta pos devices. Should be used along with an `authorization_code` |
| tora | Tora pos devices. Should be used along with an `authorization_code` |
| pbt | Pbt pos devices. Should be used along with an `authorization_code` |
| mypos | Mypos pos devices. Should be used along with an `authorization_code` |
| nexi-mellon | Nexi-mellon pos devices. Should be used along with an `authorization_code` |
| nexi | Nexi pos devices. Should be used along with an `authorization_code` |

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/pos_devices' \
-X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
-d '{
   "name": "some-name"
   "pos_type": "viva"
  "terminal_id": "160xxxxx"
  "merchant_id": "xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"
}'
```

**Response Success:**

```json
{
  "id": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "name": "some-name",
  "terminal_id": "160xxxxx",
  "merchant_id": "xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"
}
```

**Response Error:**

```json
{
  "errors": {
    "pos_devices.name": [
      "has already been taken"
    ],
    "pos_devices.terminal_id": [
      "has already been taken"
    ],
    "authorization_code": [
      "Ο κωδικός εξουσιοδότησης που εισάγατε δεν είναι σωστός ή έχει ήδη χρησιμοποιηθεί. Παρακαλώ ελέξτε και προσπαθήστε ξανά"
    ]
  }
}
```

## WEBHOOKS > INVOICE ISSUED

Navigating to **Settings** and then **Account Settings** the first panel will contain an entry called **Webhook Endpoint**.
There you can set any link that will expect messages from our service. This message will be send when an invoice is issued via the API. The message will be a POST request with the body described in the right panel. The headers are like bellow where TOKEN is your login token. Additionally the **Account Settings** panel has an other entry called **Webhook Delay** there you can set the response time in seconds that the webhook will wait before sending the message. The default value is 120 seconds.

For example:
`https://example.com/webhook`

### Header Parameters

| Field | Description |
| --- | --- |
| Content-Type | application/json |
| Event-Type: | issued-invoice |
| X-Webhook-Secret: | HMAC-SHA256 hex digest of the raw request body, computed with your API Key as the key. Optionally recompute it, e.g. OpenSSL::HMAC.hexdigest('sha256', api_key, raw_body), and compare to verify the request originated from Wrapp. |

**Webhook POST message data (JSON):**

```json
{
  "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "my_data_mark": "xxxxxxxxxxxxxx",
  "my_data_uid": "xxxxxxxxxxxxxxx",
  "my_data_qr_url": "https://mydataapidev.aade.gr/TimologioQR/QRInfo?q=xxxxxxxxx",
  "series": "a",
  "num": 1,
  "cancelled_by_mark": null,
  "wrapp_invoice_url": "https://wrapp.ai/el/customer_portal/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "wrapp_invoice_url_en": "https://wrapp.ai/en/customer_portal/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
```

## WEBHOOKS > POS ERRORS

If a pos payment session fails, an error message will be send to the webhook endpoint.

Navigating to **Settings** and then **Account Settings** the first panel will contain an entry called **Webhook Endpoint**.
There you can set any link that will expect messages from our service. This message will be send when an invoice is issued via the API.

For example:
`https://example.com/webhook`

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Content-Type: | application/json |
| Event-Type: | pos-payment |
| X-Webhook-Secret: | HMAC-SHA256 hex digest of the raw request body, computed with your API Key as the key. Optionally recompute it, e.g. OpenSSL::HMAC.hexdigest('sha256', api_key, raw_body), and compare to verify the request originated from Wrapp. |

**Webhook message data (JSON):**

```json
{
  "errors": "Η συναλλαγή ακυρώθηκε από τον χρήστη (1000)",
  "invoice_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
```

## WEBHOOKS > INVOICE PDF

When pdf generation has been requested and the pdf link is ready

Navigating to **Settings** and then **Account Settings** the first panel will contain an entry called **Webhook Endpoint**.
There you can set any link that will expect messages from our service. This message will be send when an invoice is issued via the API.

For example:
`https://example.com/webhook`

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Content-Type: | application/json |
| Event-Type: | invoice-pdf |
| X-Webhook-Secret: | HMAC-SHA256 hex digest of the raw request body, computed with your API Key as the key. Optionally recompute it, e.g. OpenSSL::HMAC.hexdigest('sha256', api_key, raw_body), and compare to verify the request originated from Wrapp. |

**Webhook message data (JSON):**

```json
{
  "invoice_id": "xxxx-xxxx-xxxx-xxxx-xxxx"
  "download_url": "url"
}
```

## WEBHOOKS > INVOICE THERMAL PDF

When thermal pdf generation has been requested and the pdf link is ready

Navigating to **Settings** and then **Account Settings** the first panel will contain an entry called **Webhook Endpoint**.
There you can set any link that will expect messages from our service. This message will be send when an invoice is issued via the API.

For example:
`https://example.com/webhook`

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Content-Type: | application/json |
| Event-Type: | thermal-print-pdf |
| X-Webhook-Secret: | HMAC-SHA256 hex digest of the raw request body, computed with your API Key as the key. Optionally recompute it, e.g. OpenSSL::HMAC.hexdigest('sha256', api_key, raw_body), and compare to verify the request originated from Wrapp. |

**Webhook message data (JSON):**

```json
{
  "invoice_id": "xxxx-xxxx-xxxx-xxxx-xxxx"
  "download_url": "url"
}
```

## VIVA PAYMENT LINK > CREATE

You can create a viva payment link for an invoice that has been created with a payment method of 5 ('credit','επί πιστώσει').

**POST** call to:
`https://wrapp.ai/api/v1/create_viva_smart_pay_link`

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Accept: | "application/json" |
| Authorization: | "Bearer JWT" |

### QUERY PARAMETERS

| Field | Type | Description |
| --- | --- | --- |
| :invoice_id | String | (required) The id of the relevant invoice that the payment link will be created for. |

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/create_viva_smart_pay_link' \
-X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx' \
-d '{
   "invoice_id": 123
}'
```

**Response Success:**

```json
{
 "pay_link": "https://demo.vivapayments.com/web/checkout?ref=1234567890987654",
 "order_code": "1234567890987654"
}
```

## CATERING TABLES > INDEX

To retrieve a list of the catering tables, make a **GET** call to:
`https://wrapp.ai/api/v1/catering_tables`

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Accept: | "application/json" |
| Authorization: | "Bearer JWT" |

### QUERY PARAMETERS

| Field | Type | Description |
| --- | --- | --- |
| status | String | The status of the catering table.<br>Available options: availableopenclosedalert. |
| name | String | The name of the table. |

* If no parameter is specified, the query will return the index of all tables.

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/catering_tables' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
-d '{
   "status": "open",
   "name": "table1"
}'
```

**Response Success:**

```json
[
 {
   "id": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
   "status": "open",
   "name": "table1",
   "total": "140.0"
 },
  ...
]
```

**Response Error:**

```json
{
 "errors": [
   {
     "status": "401"
     "title": "Unauthorized"
   }
 ]
}
```

## CATERING TABLES > CREATE

To create a new catering table, make a **POST** call to:
`https://wrapp.ai/api/v1/catering_tables`

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Accept: | "application/json" |
| Authorization: | "Bearer JWT" |

### QUERY PARAMETERS

| Field | Type | Description |
| --- | --- | --- |
| name | String | The name of the table.<br>** If it's not specified, a number will be assigned.* |

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/catering_tables' \
-X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
-d '{
   "name": "table1"
}'
```

**Response Success:**

```json
{
   "id": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
   "status": "available",
   "name": "table1",
   "total": "0.0",
   "invoices": [],
   "error_message": null
}
```

**Response Error:**

```json
{
 "errors": [
   {
     "status": "401"
     "title": "Unauthorized"
   }
 ]
}
```

## CATERING TABLES > UPDATE

To update an available catering table, make a **PATCH** call to:
`https://wrapp.ai/api/v1/catering_tables/:id`

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Accept: | "application/json" |
| Authorization: | "Bearer JWT" |

### REST URL PARAMETERS

| Key | Value |
| --- | --- |
| :id | (required) The id of the catering table. |

### QUERY PARAMETERS

| Field | Type | Description |
| --- | --- | --- |
| name | String | (required) The new name of the table |

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/catering_tables/xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' \
-X PATCH \ -H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
-d '{
   "name": "table-A1",
}'
```

**Response Success:**

```json
{
   "id": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
   "status": "available",
   "name": "table-A1",
   "total": "0.0",
   "invoices": [],
   "error_message": null
}
```

**Response Error:**

```json
{
 "errors": [
   {
     "status": "401"
     "title": "Unauthorized"
   }
 ]
}
```

## CATERING TABLES > SHOW

To show the details of a catering table, make a **GET** call to:
`https://wrapp.ai/api/v1/catering_tables/:id`

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Accept: | "application/json" |
| Authorization: | "Bearer JWT" |

### REST URL PARAMETERS

| Key | Value |
| --- | --- |
| :id | (required) The id of the catering table. |

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/catering_tables/xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
```

**Response Success:**

```json
{
   "id": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
   "status": "closed",
   "name": "table-A1",
   "total": "0.0",
   "invoices": [
      "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
   ],
   "error_message": null
}
```

**Response Error:**

```json
{
 "errors": [
   {
     "status": "401"
     "title": "Unauthorized"
   }
 ]
}
```

## CATERING TABLES > OPEN

To open a catering table, make a **POST** call to:
`https://wrapp.ai/api/v1/catering_tables/open_table`

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Accept: | "application/json" |
| Authorization: | "Bearer JWT" |

### QUERY PARAMETERS

| Field | Type | Description |
| --- | --- | --- |
| id | String | (required) The id of the catering table.<br>** It is required unless name is specified.* |
| name | String | (required) The name of the table.<br>** It is required unless id is specified.* |

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/catering_tables/open_table' \
-X POST
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
-d '{
   "id": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}'
```

**Response Success:**

```
 {
   "id": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
   "status": "open",
   "name": "table1",
   "total": "0.0",
   "invoices": [],
   "error_message": null
 }
```

**Response Error:**

```json
{
 "errors": [
   {
     "status": "401"
     "title": "Unauthorized"
   }
 ]
}
```

## CATERING TABLES > CLOSE

To close a catering table, make a **POST** call to:
`https://wrapp.ai/api/v1/catering_tables/:id/close`

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Accept: | "application/json" |
| Authorization: | "Bearer JWT" |

### REST URL PARAMETERS

| Key | Value |
| --- | --- |
| :id | (required) The id of the catering table. |

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/catering_tables/xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/close' \
-X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
```

**Response Success:**

```json
{
   "id": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
   "status": "closed",
   "name": "table-A1",
   "total": "0.0",
   "invoices": [
      "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
   ],
   "error_message": null
}
```

**Response Error:**

```json
{
 "errors": [
   {
     "status": "401"
     "title": "Unauthorized"
   }
 ]
}
```

## CATERING TABLES > DELETE

To delete an available catering table, make a **DELETE** call to:
`https://wrapp.ai/api/v1/catering_tables/:id`

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Accept: | "application/json" |
| Authorization: | "Bearer JWT" |

### REST URL PARAMETERS

| Key | Value |
| --- | --- |
| :id | (required) The id of the catering table. |

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/catering_tables/:id' \
-X DELETE \ -H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
```

**Response Success:**

```json
{
   "status": "Catering table deleted"
}
```

**Response Error:**

```json
{
 "errors": [
   {
     "status": "401"
     "title": "Unauthorized"
   }
 ]
}
```

## CATERING TABLES > TRANSFER

To transfer individual or a set of open catering order notes, make a **GET** call to:
`https://wrapp.ai/api/v1/catering_tables/transfer`

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Accept: | "application/json" |
| Authorization: | "Bearer JWT" |

### QUERY PARAMETERS

| Field | Type | Description |
| --- | --- | --- |
| current_table | String | (required) The ID of the catering table to be transfered from. |
| target_table | String | (required) The ID of the catering table to be transfered to. |
| marks | Array | An array containing the myDATA marks of the open catering order notes to be transfered.<br>Note: If it is omitted then the whole set of open catering order notes will be transfered. |

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/catering_tables/transfer' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
-d '{
   "current_table": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
   "target_table": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
   "marks": ["xxxxxxxxxxxx", "xxxxxxxxxxxx"]
}'
```

**Response Success:**

```json
{
   "id": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
   "status": "open",
   "name": "tableA1",
   "total": "140.0",
   "invoices": [
      "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
   ],
   "error_message": null
}
```

**Response Error:**

```json
{
 "errors": [
   {
     "status": "401"
     "title": "Unauthorized"
   }
 ]
}
```

## POS SESSIONS > ABORT SESSION

To abort a pending POS session for an invoice, make a **POST** call to:
`https://wrapp.ai/api/v1/pos_sessions/:id/abort_session`

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Accept: | "application/json" |
| Authorization: | "Bearer JWT" |

### REST URL PARAMETERS

| Key | Value |
| --- | --- |
| :id | (required) The id of the invoice whose pending POS session will be aborted. |

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/pos_sessions/xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/abort_session' \
-X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
```

**Response Success:**

```json
{
   "message": "Session aborted successfully"
}
```

**Response Error:**

```json
{
 "errors": [
   {
     "title": "POS session not found"
   }
 ]
}
```

## Digital Clienteles > SHOW

To show a digital clientele service make a **GET** call to:
`https://wrapp.ai/api/v1/digital_clienteles/:id`

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Accept: | "application/json" |
| Authorization: | "Bearer JWT" |

### RESPONSE (DIGITAL CLIENTELE OBJECT)

| Field | Type | Description |
| --- | --- | --- |
| id | String | The ID of the digital clientele. |
| iddcl | String | The ID of the digital clientele as registered in MYDATA. |
| client_service_type | String | The type of the digital clientele according to the table below(see DIGITAL CLIENTELE TYPES). |
| creation_date_time | DateTime | The creation date and time of the digital clientele in MYDATA. |
|  |  |  |
| branch | String | The branch number. |
| recurring_service | Boolean | Whether the service is recurring. |
| continuous_service | Boolean | Whether the service is continuous. |
| continuous_lease_service | Boolean | Whether the service is continuous lease. |
| from_agreed_period_date | Date | The start date of the agreed period for **continous_service** |
| to_agreed_period_date | Date | The end date of the agreed period for **continous_service** |
| mixed_service | Boolean | Whether the service is mixed. Applies only for **parkingcarwash** services |
| customer_vat_number | String | The VAT number of the customer. |
| customer_country | String | The country of the customer. |
| status | String | The status of the digital clientele. |
| transmission_failure | Boolean | Whether there was a transmission failure. |
| correlated_dc_id | String | The correlated digital clientele ID. |
| comments | String | Additional comments. |
| vehicle_registration_number | String | The vehicle registration number. Either this or **foreign_vehicle_registration_number** should have a value |
| foreign_vehicle_registration_number | String | The foreign vehicle registration number. Either this or **vehicle_registration_number** should have a value |
| vehicle_category | String | The category of the vehicle. |
| vehicle_factory | String | The factory of the vehicle. |
| vehicle_movement_purpose | String | The purpose of vehicle movement according to the table below(see VEHICLE MOVEMENT PURPOSES). |
| is_diff_veh_pickup_location | Boolean | Whether the vehicle pickup location is different. |
| vehicle_pickup_location | String | The vehicle pickup location. |
| periodicity | String | The periodicity of the service. |
| periodicity_other | String | The periodicity of the service (other cases). |
| entry_completion | Boolean | The entry completion of the service. |
| non_issue_invoice | Boolean | Whether to issue an invoice. |
| amount | Decimal | The amount of the transaction. |
| completion_date_time | DateTime | The completion date and time of the digital clientele in MYDATA. |
| is_diff_veh_return_location | Boolean | Whether the vehicle return location is different. |
| vehicle_return_location | String | The vehicle return location. |
| provided_service_category | String | The category of the provided service according to the table below (see PROVIDED SERVICE CATEGORIES). |
| provided_service_category_other | String | Other category of the provided service. |
| invoice_kind | String | The kind of invoice according to the table below (see INVOICE KINDS). |
| off_site_provided_service | Int | Whether the service is provided off-site according to the table below (see OFF-SITE PROVIDED SERVICES). |
| cooperating_vat_number | String | The VAT number of the cooperating entity. |
| other_branch | String | Other branch identifier. |
| reason_non_issue_type | String | The reason for not issuing type according to the table below (see REASON NON ISSUE TYPES). |
| invoice_counterparty | String | The counterparty of the invoice. |
| invoice_counterparty_country | String | The country of the invoice counterparty. |
| updated_iddcl | String | The updated id in MYDATA if it has been updated |
| cancellation_id | String | The cancellation id in MYDATA if its been cancelled |

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/digital_clienteles/xxxx-xxxxx-xxxxx-xxxxx' \
-X GET \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
```

**Response Success:**

```json
{
  "id": "xxxx-xxxxx-xxxxx-xxxxx" ,
  "iddcl": "100000999717223" ,
  "client_service_type": "rental" ,
  "creation_date_time": "" ,
  "entity_vat_number": "" ,
  "branch": "0" ,
  "recurring_service": "true" ,
  "continuous_service": "true" ,
  "continuous_lease_service": "" ,
  "from_agreed_period_date": "2026-02-05" ,
  "to_agreed_period_date": "2026-02-07" ,
  "mixed_service": "false" ,
  "customer_vat_number": "123456789" ,
  "customer_country": "GR" ,
  "status": "cancelled" ,
  "transmission_failure": "" ,
  "correlated_dc_id": "" ,
  "comments": "" ,
  "vehicle_registration_number": "ab1234" ,
  "foreign_vehicle_registration_number": "" ,
  "vehicle_category": "bus" ,
  "vehicle_factory": "seat" ,
  "vehicle_movement_purpose": "vmp_rental" ,
  "is_diff_veh_pickup_location": "true" ,
  "vehicle_pickup_location": "patras" ,
  "periodicity": "" ,
  "periodicity_other": ""
  "entry_completion": "true" ,
  "non_issue_invoice": "false" ,
  "amount": "1.0" ,
  "completion_date_time": "" ,
  "is_diff_veh_return_location": "true" ,
  "vehicle_return_location": "athens" ,
  "provided_service_category": "" ,
  "provided_service_category_other": "" ,
  "invoice_kind": "retail_sales_receipt" ,
  "off_site_provided_service": "" ,
  "exit_date_time": "" ,
  "cooperating_vat_number": "" ,
  "other_branch": "" ,
  "reason_non_issue_type": "" ,
  "invoice_counterparty": "" ,
  "invoice_counterparty_country": "" ,
  "updated_iddcl": "100000999717224" ,
  "cancellation_id": "100000999717225" ,
}
```

**Response Error:**

```json
{
  "error": "DigitalClientele not found"
}
```

## Digital Clienteles > CREATE

To create a new digital clientele service make a **POST** call to:
`https://wrapp.ai/api/v1/digital_clienteles`

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Accept: | "application/json" |
| Authorization: | "Bearer JWT" |

### QUERY PARAMETERS

| Field | Type | Description |
| --- | --- | --- |
| client_service_type | String | (required) The type of the digital clientele according to the table below(see DIGITAL CLIENTELE TYPES). |
| creation_date_time | DateTime | (optional*) The creation date and time of the digital clientele. Applies only when **transmission_failure** is set to true |
|  |  |  |
| transmission_failure | Boolean | (optional) Whether there was a transmission failure. |
| branch | String | (required) The branch number. |
| recurring_service | Boolean | (optional) Whether the service is recurring. |
| continuous_service | Boolean | (optional) Whether the service is continuous. |
| continuous_lease_service | Boolean | (optional) Whether the service is continuous lease. |
| from_agreed_period_date | Date | (optional*) The start date of the agreed period. Required only if **continous_service** is set to true |
| to_agreed_period_date | Date | (optional*) The end date of the agreed period. Required only if **continous_service** is set to true |
| periodicity | String | (optional) The periodicity of the service. Applies only if **continous_lease_service** is set to true |
| periodicity_other | String | (optional) The periodicity of the service (other cases). Applies only if **continous_lease_service** is set to true |
| mixed_service | Boolean | (optional) Whether the service is mixed. Applies only for **parkingcarwash** services |
| customer_vat_number | String | (optional*) The VAT number of the customer. Required only when recurring service is set to true |
| customer_country | String | (optional*) The country of the customer. Required only when recurring service is set to true |
| correlated_dc_id | String | (optional) The correlated digital clientele ID. |
| comments | String | (optional) Additional comments. |
| vehicle_registration_number | String | (optional*) The vehicle registration number. Either this or **foreign_vehicle_registration_number** should have a value |
| foreign_vehicle_registration_number | String | (optional*) The foreign vehicle registration number. Either this or **vehicle_registration_number** should have a value |
| vehicle_category | String | (optional*) The category of the vehicle. Required if **foreign_vehicle_registration_number** has a value |
| vehicle_factory | String | (optional*) The factory of the vehicle. Required if **foreign_vehicle_registration_number** has a value |
| vehicle_movement_purpose | String | (optional*) The purpose of vehicle movement according to the table below(see VEHICLE MOVEMENT PURPOSES). Required only for **rental** service |
| is_diff_veh_pickup_location | Boolean | (optional*) Whether the vehicle pickup location is different. Applies only if **rental** service |
| vehicle_pickup_location | String | (optional) The vehicle pickup location. Applies only for **rental** service and if **is_diff_veh_pickup_location** is set to true |

***Optional**
optional* cases apply to certain scenarios

### DIGITAL CLIENTELE TYPES

| Type | Description |
| --- | --- |
| rental | Vehicle Rental |
| parkingcarwash | Car Wash/Parking |
| garage | Car Repair |

### VEHICLE MOVEMENT PURPOSES

| Type | Description |
| --- | --- |
| vmp_rental | Rental |
| vmp_self_use | Self Use |
| vmp_free_service | Free Service |

### PROVIDED SERVICE CATEGORIES

| Type | Description |
| --- | --- |
| with_parts | Work using spare parts |
| with_client_parts | Work using client's spare parts |
| without_parts | Work without spare parts |
| free_service | Free service |
| other | Other |
| warranty_compensation | Warranty compensation |
| by_price_list | Service based on price list |
| by_agreement | Service by agreement |
| self_use | Self-use |

### INVOICE KINDS

| Type | Description |
| --- | --- |
| retail_sales_receipt | Sales Receipt |
| receipt | Service Receipt |
| invoice | Service Invoice |
| sales_invoice | Sales Invoice |

### OFFSITE PROVIDED SERVICES

| Type | Description |
| --- | --- |
| to_partner_entity | Transfer to a cooperating entity |
| to_internal_location | Transfer to an internal location of the same entity |

### REASON NON ISSUE TYPES

| Type | Description |
| --- | --- |
| no_invoice_free_service | Free service |
| no_invoice_self_use | Self-use |
| no_invoice_compensation | Compensation |

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/digital_clienteles' \
-X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
-d {
   "client_service_type": "rental",
   "transmission_failure": "true",
   "creation_date_time": "2026-02-05T10:00:00Z",
   "branch": "0",
   "recurring_service": "true",
   "continuous_service": "true",
   "continuous_lease_service": "false",
   "from_agreed_period_date": "2026-02-05T10:00:00Z",
   "to_agreed_period_date": "2026-02-07T10:00:00Z",
   "mixed_service": "false",
   "customer_vat_number": "123456789",
   "customer_country": "GR",
   "correlated_dc_id": "",
   "comments": "",
   "vehicle_category": "bus",
   "vehicle_registration_number": "ab1234",
   "vehicle_movement_purpose": "vmp_rental",
   "vehicle_factory": "seat",
   "periodicity": "",
}
```

**Response Success:**

```json
{
  "id": "c94f69ab-e0f9-498f-9065-e8e727f3919c" ,
  "iddcl": "100000000716495" ,
  "client_service_type": "rental" ,
  "creation_date_time": "2026-02-05T12:00:00.000+02:00" ,
  "entity_vat_number": "" ,
  "branch": "0" ,
  "recurring_service": "true" ,
  "continuous_service": "true" ,
  "from_agreed_period_date": "2026-02-05" ,
  "to_agreed_period_date": "2026-02-07" ,
  "mixed_service": "false" ,
  "customer_vat_number": "123456789" ,
  "customer_country": "GR" ,
  "type": "" ,
  "status": "pending" ,
  "transmission_failure": "true" ,
  "correlated_dc_id": "" ,
  "comments": "" ,
  "vehicle_registration_number": "ab1234" ,
  "foreign_vehicle_registration_number": "" ,
  "vehicle_category": "bus" ,
  "vehicle_factory": "seat" ,
  "vehicle_movement_purpose": "vmp_rental" ,
  "is_diff_veh_pickup_location": "" ,
  "vehicle_pickup_location": "" ,
  "periodicity": "" ,
  "entry_completion": "" ,
  "non_issue_invoice": "" ,
  "amount": "" ,
  "completion_date_time": "" ,
  "is_diff_veh_return_location": "" ,
  "vehicle_return_location": "" ,
  "provided_service_category": "" ,
  "provided_service_category_other": "" ,
  "invoice_kind": "" ,
  "off_site_provided_service": "" ,
  "exit_date_time": "" ,
  "cooperating_vat_number": "" ,
  "other_branch": "" ,
  "reason_non_issue_type": "" ,
  "invoice_counterparty": "" ,
  "invoice_counterparty_country": "" ,
  "continuous_lease_service": "false" ,
  "periodicity_other": ""
}
```

**Response Error:**

```json
{
  "errors": [
    {
      "code":"204",
      "message":"Element continuousService can not be sent at the same time with Element continuousLeaseService"
    }
    {
      "code":"203",
      "message":"periodicity or periodicityOther is mandatory for continuousLeaseService"
    }
  ]
}
```

## Digital Clienteles > UPDATE

To create a new digital clientele service make a **POST** call to:
`https://wrapp.ai/api/v1/digital_clienteles/:id`

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Accept: | "application/json" |
| Authorization: | "Bearer JWT" |

### QUERY PARAMETERS

| Field | Type | Description |
| --- | --- | --- |
| entry_completion | Boolean | (optional) Whether the entry is completed. |
| non_issue_invoice | Boolean | (optional) Whether to issue an invoice. |
| amount | Decimal | (optional) The amount of the transaction. |
| is_diff_veh_return_location | Boolean | (optional) Whether the vehicle return location is different. |
| vehicle_return_location | String | (optional) The vehicle return location. |
| provided_service_category | String | (optional) The category of the provided service according to the table below (see PROVIDED SERVICE CATEGORIES). Required only for **parkingcarwash** and **garage** services |
| provided_service_category_other | String | (optional*) Other category of the provided service. Applies only for **garage** services if **provided_service_category** is set to other |
| invoice_kind | String | (optional) The kind of invoice according to the table below (see INVOICE KINDS). |
| off_site_provided_service | Int | (optional) Whether the service is provided off-site according to the table below (see OFF-SITE PROVIDED SERVICES). |
| cooperating_vat_number | String | (optional*) The VAT number of the cooperating entity. |
| other_branch | String | (optional) Other branch identifier. |
| reason_non_issue_type | String | (optional) The reason for not issuing type according to the table below (see REASON NON ISSUE TYPES). |
| comments | String | (optional) Additional comments. |
| invoice_counterparty | String | (optional) The counterparty of the invoice. |
| invoice_counterparty_country | String | (optional) The country of the invoice counterparty. |

***Optional**
optional* cases apply to certain scenarios

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/digital_clienteles/xxxx-xxxxx-xxxxx-xxxxx' \
-X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
-d {
   "entry_completion": "false",
   "non_issue_invoice": "false",
   "amount": "1",
   "is_diff_veh_return_location": "true",
   "vehicle_return_location": "athens",
   "invoice_kind": "retail_sales_receipt",
   "reason_non_issue_type": "",
}
```

**Response Success:**

```json
{
  "id": "ca18abd0-24a8-4b89-b668-649cd6d8e3e1" ,
  "iddcl": "100000000716532" ,
  "client_service_type": "rental" ,
  "creation_date_time": "" ,
  "entity_vat_number": "" ,
  "branch": "0" ,
  "recurring_service": "true" ,
  "continuous_service": "true" ,
  "from_agreed_period_date": "2026-02-05" ,
  "to_agreed_period_date": "2026-02-07" ,
  "mixed_service": "false" ,
  "customer_vat_number": "095200230" ,
  "customer_country": "GR" ,
  "type": "" ,
  "status": "pending" ,
  "transmission_failure": "" ,
  "correlated_dc_id": "" ,
  "comments": "" ,
  "vehicle_registration_number": "ai1999" ,
  "foreign_vehicle_registration_number": "" ,
  "vehicle_category": "bus" ,
  "vehicle_factory": "seat" ,
  "vehicle_movement_purpose": "vmp_rental" ,
  "is_diff_veh_pickup_location": "true" ,
  "vehicle_pickup_location": "thessaloniki" ,
  "periodicity": "" ,
  "entry_completion": "false" ,
  "non_issue_invoice": "false" ,
  "amount": "1.0" ,
  "completion_date_time": "" ,
  "is_diff_veh_return_location": "true" ,
  "vehicle_return_location": "athens" ,
  "provided_service_category": "" ,
  "provided_service_category_other": "" ,
  "invoice_kind": "retail_sales_receipt" ,
  "off_site_provided_service": "" ,
  "exit_date_time": "" ,
  "cooperating_vat_number": "" ,
  "other_branch": "" ,
  "reason_non_issue_type": "" ,
  "invoice_counterparty": "" ,
  "invoice_counterparty_country": "" ,
  "continuous_lease_service": "" ,
  "periodicity_other": ""
}
```

**Response Error:**

```json
{
  "errors": [
    {
      "code":"205",
      "message":"vehicleReturnLocation is allowed only when isDiffVehReturnLocation = true "
    }
  ]
}
```

## Digital Clienteles > CORRELATE BY MARK

To correlate a digital clientele entry by mark make a **POST** call to:
`https://wrapp.ai/api/v1/digital_clienteles/:id/correlate_by_mark`

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Accept: | "application/json" |
| Authorization: | "Bearer JWT" |

### QUERY PARAMETERS

| Field | Type | Description |
| --- | --- | --- |
| correlate_mark | String | (required) The mark of the invoice to correlate. |

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/digital_clienteles/xxxx-xxxxx-xxxxx-xxxxx/correlate_by_mark' \
-X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
-d '{
   "correlate_mark": "12344567890"
}'
```

**Response Success:**

```json
{
  "notice": "Correlation of mark 12344567890 was successful."
}
```

**Response Error:**

```json
{
  "errors": "Correlation for mark 12344567890 already exists"
}
```

## Digital Clienteles > CORRELATE BY FIM

To correlate a digital clientele entry by FIM make a **POST** call to:
`https://wrapp.ai/api/v1/digital_clienteles/:id/correlate_by_fim`

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Accept: | "application/json" |
| Authorization: | "Bearer JWT" |

### QUERY PARAMETERS

| Field | Type | Description |
| --- | --- | --- |
| correlate_fim_number | String | (required) The FIM number to correlate. |
| correlate_fim_aa | String | (required) The FIM AA to correlate. |

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/digital_clienteles/xxxx-xxxxx-xxxxx-xxxxx/correlate_by_fim' \
-X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
-d '{
   "correlate_fim_number": "12344567890"
   "correlate_fim_aa": "999"
}'
```

**Response Success:**

```json
{
  "notice": "Correlation by FIM 12344567890 with number 1 was successful."
}
```

**Response Error:**

```json
{
  "errors": "Fim Registry Number and serial number are required"
}
```

## Digital Clienteles > CANCEL

To cancel a digital clientele make a **POST** call to:
`https://wrapp.ai/api/v1/digital_clienteles/:id/cancel`

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Accept: | "application/json" |
| Authorization: | "Bearer JWT" |

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/digital_clienteles/xxxx-xxxxx-xxxxx-xxxxx/correlate_by_mark' \
-X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
-d '{
   "correlate_mark": "12344567890"
}'
```

**Response Success:**

```json
{
  "notice": "Cancelled successfully.",
  "cancellation_id": "100000000717999"
}
```

**Response Error:**

```json
{
  "errors": "DigitalClientele needs to be complete before cancellation"
}
```

## Digital Transports > INDEX

To retrieve a paginated list of digital transports (delivery notes) make a **GET** call to:
`https://wrapp.ai/api/v1/digital_transports`

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Accept: | "application/json" |
| Authorization: | "Bearer JWT" |

### QUERY PARAMETERS

| Field | Type | Description |
| --- | --- | --- |
| category | String | (optional) The category of the transports to list.<br>Available options: shippingreceiving. Defaults to **shipping**. |
| page | Integer | (optional) The page number to retrieve. Results are paginated by 10 per page. Defaults to **1**. |

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/digital_transports?category=shipping&page=1' \
-X GET \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
```

**Response Success:**

```json
{
  "digital_transports": [
    {
      "invoice_issued_at": "2026-06-01T10:00:00.000+03:00",
      "invoice_code": "ΔΑΠ-1024",
      "status": "pending",
      "last_status_update_at": "2026-06-08T09:30:00.000+03:00",
      "my_data_response": { ... }
    },
    ...
  ],
  "total_pages": 3,
  "current_page": 1
}
```

**Response Error:**

```json
{
  "errors": [
    {
      "status": "401",
      "title": "Unauthorized"
    }
  ]
}
```

## Digital Transports > CREATE

To register a new digital transport (delivery note) for an existing invoice, make a **POST** call to:
`https://wrapp.ai/api/v1/digital_transports`

The invoice must already be issued and transmitted to MYDATA (it must have a MARK). The transport is registered with category **shipping**.

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Accept: | "application/json" |
| Authorization: | "Bearer JWT" |

### QUERY PARAMETERS

| Field | Type | Description |
| --- | --- | --- |
| invoice_id | String | (required) The ID of the invoice the delivery note refers to. |
| vehicle_number | String | (optional) The registration number of the vehicle used for the transport. |
| transport_type | Integer | (optional) The means of transport according to the table below (see TRANSPORT TYPES). |
| carrier_vat_number | String | (optional) The VAT number of the carrier performing the transport. |

### TRANSPORT TYPES

| Type | Description |
| --- | --- |
| 1 | Public-use truck (Φ.Δ.Χ.) |
| 2 | Private-use truck (Φ.Ι.Χ.) |
| 3 | Ship (Πλοίο) |
| 4 | Train (Τρένο) |
| 5 | Airplane (Αεροπλάνο) |
| 6 | Other means of transport, e.g. two-wheelers (Άλλο μέσο μεταφοράς, π.χ. δίκυκλο) |
| 7 | None (Καμία) |

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/digital_transports' \
-X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
-d '{
  "invoice_id": "c94f69ab-e0f9-498f-9065-e8e727f3919c",
  "vehicle_number": "ABC1234",
  "transport_type": 2,
  "carrier_vat_number": "123456789"
}'
```

**Response Success:**

```json
{
  "digital_transport": {
    "invoice_issued_at": "2026-06-01T10:00:00.000+03:00",
    "invoice_code": "ΔΑΠ-1024",
    "status": "pending",
    "last_status_update_at": "2026-06-08T09:30:00.000+03:00",
    "my_data_response": { ... }
  }
}
```

**Response Error:**

```json
{
  "errors": [
    {
      "message": "..."
    }
  ]
}
```

## Digital Transports > SHOW

To show a single digital transport (delivery note) make a **GET** call to:
`https://wrapp.ai/api/v1/digital_transports/:id`

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Accept: | "application/json" |
| Authorization: | "Bearer JWT" |

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/digital_transports/xxxx-xxxxx-xxxxx-xxxxx' \
-X GET \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
```

**Response Success:**

```json
{
  "digital_transport": {
    "invoice_issued_at": "2026-06-01T10:00:00.000+03:00",
    "invoice_code": "ΔΑΠ-1024",
    "status": "delivered",
    "last_status_update_at": "2026-06-08T09:30:00.000+03:00",
    "my_data_response": { ... }
  }
}
```

**Response Error:**

```json
{
  "error": "DigitalTransport not found"
}
```

## Digital Transports > REFRESH

To refresh the MYDATA status of a digital transport (delivery note) make a **POST** call to:
`https://wrapp.ai/api/v1/digital_transports/:id/refresh`

The transport status is re-fetched from MYDATA and the stored record is updated. The related invoice must have a MARK.

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Accept: | "application/json" |
| Authorization: | "Bearer JWT" |

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/digital_transports/xxxx-xxxxx-xxxxx-xxxxx/refresh' \
-X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
```

**Response Success:**

```json
{
  "digital_transport": {
    "invoice_issued_at": "2026-06-01T10:00:00.000+03:00",
    "invoice_code": "ΔΑΠ-1024",
    "status": "delivered",
    "last_status_update_at": "2026-06-08T09:35:00.000+03:00",
    "my_data_response": { ... }
  }
}
```

**Response Error:**

```json
{
  "errors": [
    {
      "message": "Refresh failed"
    }
  ]
}
```

## Digital Transports > REJECT

To reject a received digital transport (delivery note) make a **POST** call to:
`https://wrapp.ai/api/v1/digital_transports/:id/reject`

The rejection is transmitted to MYDATA and the stored record is refreshed. The related invoice must have a MARK.

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Accept: | "application/json" |
| Authorization: | "Bearer JWT" |

### QUERY PARAMETERS

| Field | Type | Description |
| --- | --- | --- |
| reject_reason | String | (optional) The reason for rejecting the delivery note. |

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/digital_transports/xxxx-xxxxx-xxxxx-xxxxx/reject' \
-X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
-d '{
  "reject_reason": "Goods not received"
}'
```

**Response Success:**

```json
{
  "digital_transport": {
    "invoice_issued_at": "2026-06-01T10:00:00.000+03:00",
    "invoice_code": "ΔΑΠ-1024",
    "status": "rejected",
    "last_status_update_at": "2026-06-08T09:40:00.000+03:00",
    "my_data_response": { ... }
  }
}
```

**Response Error:**

```json
{
  "errors": [
    {
      "message": "Reject failed"
    }
  ]
}
```

## Digital Transports > CONFIRM DELIVERY

To confirm the delivery outcome of a digital transport (delivery note) make a **POST** call to:
`https://wrapp.ai/api/v1/digital_transports/:id/confirm_delivery`

The delivery outcome is transmitted to MYDATA and the stored record is refreshed.

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Accept: | "application/json" |
| Authorization: | "Bearer JWT" |

### QUERY PARAMETERS

| Field | Type | Description |
| --- | --- | --- |
| outcome | String | (required) The delivery outcome.<br>Available options: FULLPARTIALNONE. |
| delivered_packaging | Array | (optional) A list of the delivered packaging items. Each item has the fields below. |
| delivered_packaging[].packaging_type | Integer | (required) The type of packaging according to the table below (see PACKAGING TYPES). |
| delivered_packaging[].quantity | Integer | (required) The number of delivered packages of this type. |
| delivered_packaging[].other_packaging_title | String | (optional) A free-text description of the packaging. Applies when **packaging_type** is **6** (Other). |

### PACKAGING TYPES

| Type | Description |
| --- | --- |
| 1 | Pallet (Παλέτα) |
| 2 | Box (Κούτα) |
| 3 | Crate (Κιβώτιο) |
| 4 | Barrel (Βαρέλι) |
| 5 | Sack (Σάκος) |
| 6 | Other (Λοιπά) |

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/digital_transports/xxxx-xxxxx-xxxxx-xxxxx/confirm_delivery' \
-X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
-d '{
  "outcome": "PARTIAL",
  "delivered_packaging": [
    { "packaging_type": 1, "quantity": 3 },
    { "packaging_type": 6, "quantity": 2, "other_packaging_title": "Big bag" }
  ]
}'
```

**Response Success:**

```json
{
  "digital_transport": {
    "invoice_issued_at": "2026-06-01T10:00:00.000+03:00",
    "invoice_code": "ΔΑΠ-1024",
    "status": "delivered",
    "last_status_update_at": "2026-06-08T09:45:00.000+03:00",
    "my_data_response": { ... }
  }
}
```

**Response Error:**

```json
{
  "errors": [
    {
      "message": "Invalid outcome"
    }
  ]
}
```

## Digital Transports > IMPORT BY MARK

To import a received digital transport (delivery note) by its MYDATA MARK make a **POST** call to:
`https://wrapp.ai/api/v1/digital_transports/import_by_mark`

The related invoice is imported from MYDATA if it does not already exist, and a digital transport with category **receiving** is created. If a transport for that MARK has already been imported, the existing record is returned with **already_imported** set to true.

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Accept: | "application/json" |
| Authorization: | "Bearer JWT" |

### QUERY PARAMETERS

| Field | Type | Description |
| --- | --- | --- |
| mark | String | (required) The MYDATA MARK of the delivery note to import. |

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/digital_transports/import_by_mark' \
-X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
-d '{
  "mark": "400001234567890"
}'
```

**Response Success:**

```json
{
  "digital_transport": {
    "invoice_issued_at": "2026-06-01T10:00:00.000+03:00",
    "invoice_code": "ΔΑΠ-1024",
    "status": "pending",
    "last_status_update_at": "2026-06-08T09:30:00.000+03:00",
    "my_data_response": { ... }
  }
}
```

**Response Error:**

```json
{
  "errors": [
    {
      "message": "Mark is required"
    }
  ]
}
```

## Digital Transports > IMPORT BY QR URL

To import a received digital transport (delivery note) by its QR url make a **POST** call to:
`https://wrapp.ai/api/v1/digital_transports/import_by_qr_url`

The MARK is resolved from the QR url, the related invoice is imported from MYDATA if it does not already exist, and a digital transport with category **receiving** is created. If a transport for that invoice has already been imported, the existing record is returned with **already_imported** set to true.

### HEADER PARAMETERS

| Key | Value |
| --- | --- |
| Accept: | "application/json" |
| Authorization: | "Bearer JWT" |

### QUERY PARAMETERS

| Field | Type | Description |
| --- | --- | --- |
| qr_url | String | (required) The QR url printed on the delivery note (AADE or provider url). |

**# Here is a curl example**

```bash
curl -L 'https://wrapp.ai/api/v1/digital_transports/import_by_qr_url' \
-X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
-d '{
  "qr_url": "https://www1.aade.gr/tameiakes/myweb/q18.php?q=xxxx"
}'
```

**Response Success:**

```json
{
  "digital_transport": {
    "invoice_issued_at": "2026-06-01T10:00:00.000+03:00",
    "invoice_code": "ΔΑΠ-1024",
    "status": "pending",
    "last_status_update_at": "2026-06-08T09:30:00.000+03:00",
    "my_data_response": { ... }
  }
}
```

**Response Error:**

```json
{
  "errors": [
    {
      "message": "QR url is required"
    }
  ]
}
```

## Συχνές ερωτήσεις

Τι είναι ο πάροχος ηλεκτρονικής τιμολόγησης myDATA (ΥΠΑΗΕΣ);

Ο πάροχος ΥΠΑΗΕΣ είναι μια εξουσιοδοτημένη από την ΑΑΔΕ υπηρεσία που εκδίδει και διαβιβάζει τα παραστατικά στην πλατφόρμα myDATA για λογαριασμό της επιχείρησης, επιστρέφοντας το επίσημο σήμα (MARK), UID και QR. Η Wrapp είναι πιστοποιημένος πάροχος (κωδικός 029, ISO/IEC 27001) και το προσφέρει μέσω REST API.

Πώς συνδέω την εφαρμογή μου με το myDATA REST API μέσω Wrapp;

Κάνεις authenticate με POST /api/v1/login χρησιμοποιώντας το API key σου για να λάβεις ένα JWT και έπειτα καλείς POST /api/v1/invoices για να εκδώσεις και να διαβιβάσεις ένα παραστατικό συμβατό με το myDATA. Η Wrapp επιστρέφει MARK, UID και QR. Οι περισσότερες ομάδες ολοκληρώνουν τη βασική ροή σε λιγότερο από μία ημέρα.

Υπάρχει δοκιμαστικό περιβάλλον (sandbox) myDATA;

Ναι. Η Wrapp προσφέρει sandbox με αντιστοιχία με το production, ώστε να εκδίδεις δοκιμαστικά παραστατικά και να λαμβάνεις webhooks πριν τη μετάβαση σε παραγωγή. Ζήτησε το sandbox key σου από τη [φόρμα sandbox](/el/api/becomeapartner#contact) για να λάβεις credentials του staging.

Ποιος θεωρείται νομικά εκδότης του παραστατικού όταν χρησιμοποιείς πάροχο;

Η επιχείρηση παραμένει ο νόμιμος εκδότης. Ο πιστοποιημένος πάροχος (ΥΠΑΗΕΣ) διαβιβάζει το παραστατικό και εφαρμόζει την επίσημη σήμανση (MARK) για λογαριασμό της, και αυτό καθιστά το ηλεκτρονικό παραστατικό συμβατό με το myDATA.

Πόσο χρόνο παίρνει η διασύνδεση με το myDATA API;

Οι περισσότερες ομάδες υλοποιούν τη βασική ροή (login, έκδοση παραστατικού, διαχείριση webhook) σε λιγότερο από μία ημέρα μέσω του REST API και του sandbox, με υποστήριξη από μηχανικό εφόσον χρειαστεί.
