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 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

curl -L 'https://wrapp.ai/api/v1/login' \
-H 'Content-Type: application/json' \
-d '{
     "email": "[email protected]",
     "api_key": "xxxxxxxx"
}'

Response Success:

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

Response Error:

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

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

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

Response Success:

{
 "wrapp_user_id": "xxxxx-xxxxx-xxxxx-xxxxx",
 "partner_user_id": "some-id-123",
 "issue_invoice_status": true,
 "email": "[email protected]",
 "has_plan": true
}

VAT EXEMPTIONS > INDEX Top

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

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

Response Success:

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

BRANCHES > INDEX Top

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

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

Response Success:

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

Response Error:

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

BILLING BOOKS > INDEX Top

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

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

Response Success:

[
 {
   "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:

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

BILLING BOOKS > CREATE Top

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

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:

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

Response Error:

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

BILLING BOOKS > UPDATE Top

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

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:

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

INVOICES > CREATE Top

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.
Notes:
  • catering_table_id parameter should be omitted
  • catering_table_name value must not belong to an existing open table
  • 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.
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.
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.
When this object is used invoice line level taxes must be omitted.
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.
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.
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.
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.
You can also pass multiple classification types & categories using the classifications field.
The classifications field overrides the classification_type and classification_category fields.
classification_type String (required) The appropriate classification type according to myDATA specifications.
You can also pass multiple classification types & categories using the classifications field.
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.
It overrides the classification_type and classification_category fields.
This array consists of these attributes:
- category (String) (required)
- type (String) (required)
- 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

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": ["[email protected]"],
    "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": "[email protected]"
    },
    "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

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

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.

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

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

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"
    }
  ]
}

INVOICES > STATUS Top

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

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

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": "Record not found" }
 ]
}

INVOICES > CANCEL Top

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

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

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": "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 Top

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

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

Response Success:

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

Response Success with existing PDF:

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

Response Error:

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

INVOICES > GENERATE THERMAL PDF Top

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

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

Response Success:

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

Response Success with existing PDF:

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

Response Error:

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

INVOICES > ISSUED COUNT Top

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

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

Response Success:

{
  "issued_count": 800
}

INVOICES > ISSUE DRAFT Top

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.
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

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 Top

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

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

Response Success:

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

Response Error - Invoice Not Found:

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

INVOICES > CANCEL CATERING ORDER NOTE Top

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

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:

{
  "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:

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

Response Error - Billing Book Not Found:

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

INVOICES > LIST OPEN CATERING ORDER NOTES Top

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

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:

{
  "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 Top

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

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

Response Success:

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

POS DEVICES > CREATE Top

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

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:

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

Response Error:

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

WEBHOOKS > INVOICE ISSUED Top

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):

{
  "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 Top

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):

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

WEBHOOKS > INVOICE PDF Top

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):

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

WEBHOOKS > INVOICE THERMAL PDF Top

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):

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

CATERING TABLES > INDEX Top

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.
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

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:

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

Response Error:

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

CATERING TABLES > CREATE Top

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.
* If it's not specified, a number will be assigned.
# Here is a curl example

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:

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

Response Error:

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

CATERING TABLES > UPDATE Top

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

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:

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

Response Error:

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

CATERING TABLES > SHOW Top

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

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:

{
   "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:

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

CATERING TABLES > OPEN Top

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.
* It is required unless name is specified.
name String (required) The name of the table.
* It is required unless id is specified.
# Here is a curl example

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:

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

CATERING TABLES > CLOSE Top

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

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:

{
   "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:

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

CATERING TABLES > DELETE Top

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

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

Response Success:

{
   "status": "Catering table deleted"
}

Response Error:

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

CATERING TABLES > TRANSFER Top

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.
Note: If it is omitted then the whole set of open catering order notes will be transfered.
# Here is a curl example

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:

{
   "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:

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

POS SESSIONS > ABORT SESSION Top

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

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:

{
   "message": "Session aborted successfully"
}

Response Error:

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

Digital Clienteles > SHOW Top

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.
entity_vat_number String The VAT number of the entity.
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

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:

{
  "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:

{
  "error": "DigitalClientele not found"
}

Digital Clienteles > CREATE Top

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.
entity_vat_number String (optional) The VAT number of the entity.
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

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:

{
  "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:

{
  "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 Top

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

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:

{
  "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:

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

Digital Clienteles > CORRELATE BY MARK Top

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

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:

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

Response Error:

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

Digital Clienteles > CORRELATE BY FIM Top

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

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:

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

Response Error:

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

Digital Clienteles > CANCEL Top

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

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:

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

Response Error:

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

Digital Transports > INDEX Top

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.
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

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:

{
  "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:

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

Digital Transports > CREATE Top

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

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:

{
  "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:

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

Digital Transports > SHOW Top

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

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:

{
  "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:

{
  "error": "DigitalTransport not found"
}

Digital Transports > REFRESH Top

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

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:

{
  "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:

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

Digital Transports > REJECT Top

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

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:

{
  "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:

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

Digital Transports > CONFIRM DELIVERY Top

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.
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
1Pallet (Παλέτα)
2Box (Κούτα)
3Crate (Κιβώτιο)
4Barrel (Βαρέλι)
5Sack (Σάκος)
6Other (Λοιπά)
# Here is a curl example

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:

{
  "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:

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

Digital Transports > IMPORT BY MARK Top

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

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:

{
  "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:

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

Digital Transports > IMPORT BY QR URL Top

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

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:

{
  "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:

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

Frequently asked questions

What is a myDATA (ΥΠΑΗΕΣ) e-invoicing provider?

A ΥΠΑΗΕΣ provider is an AADE-authorized service that issues invoices and transmits them to Greece's myDATA platform on a business's behalf, returning the official mark (MARK), UID and QR. Wrapp is an authorized provider (code 029, ISO/IEC 27001) and exposes this through a REST API.

How do I connect my app to the myDATA REST API with Wrapp?

Authenticate with POST /api/v1/login using your API key to receive a JWT, then call POST /api/v1/invoices to issue and transmit a myDATA-compliant invoice. Wrapp returns the MARK, UID and QR. Most teams integrate the core flow in under a day.

Is there a myDATA sandbox or test environment?

Yes. Wrapp offers a sandbox with parity to production, so you can issue test invoices and receive webhooks before going live. Request your sandbox key via the sandbox form to get staging credentials.

Who is the legal issuer of the invoice when using a provider?

The business remains the legal issuer. The AADE-authorized provider (ΥΠΑΗΕΣ) transmits the document and applies the official marking (MARK) on its behalf, and that is what makes the e-invoice myDATA-compliant.

How long does myDATA API integration take?

Most teams implement the core flow (login, issue an invoice, handle the webhook) in under a day using the REST API and sandbox, with live engineer support available if needed.