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
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. |
| 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 |
curl -L 'https://wrapp.ai/api/v1/login' \
-H 'Content-Type: application/json' \
-d '{
"email": "[email protected]",
"api_key": "xxxxxxxx"
}'
{
"data": {
"type": "jwt",
"attributes": {
"jwt": "eyJhbGciOi...QZCe8F9xd3Xqu0"
}
}
}
{
"errors": [
{
"title": "Not valid user"
}
]
}
VAT > SEARCH Top
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 |
curl -L 'https://wrapp.ai/api/v1/vat_search?vat=xxxxxxxxx&country_code=EL' \
-H 'Content-Type: application/json'
{
"vat_no": "xxxxxxxxx",
"name": "Company name",
"city": "City",
"address": "Address",
"postal_code": "11111",
"street_number": "11"
}
{
"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" |
curl -L 'https://wrapp.ai/api/v1/tenant_details' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
{
"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" |
curl -L 'https://wrapp.ai/api/v1/vat_exemptions' \
-H 'Content-Type: application/json'
[
{
"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" |
curl -L 'https://wrapp.ai/api/v1/branches' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
[
{
"id": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"name": "Main Branch",
"code": "001"
},
{
"id": "yyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy",
"name": "Secondary Branch",
"code": "002"
},
...
]
{
"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.
curl -L 'https://wrapp.ai/api/v1/billing_books' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
[
{
"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
},
...
]
{
"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.
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"
}'
{
"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"name": "Τιμολόγιο",
"series": "ΕΤΠΑ",
"invoice_type_code": "2.1"
}
{
"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. |
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
}'
{
"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:
|
| 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. |
| 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"
}]
}'
{
"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'
{
"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
{
"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'
{
"status": "PDF generation started, webhook will be send upon completion"
}
{
"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'
{
"status": "PDF generation started, webhook will be send upon completion"
}
{
"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'
{
"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'
{
"status": "Invoice marked as paid"
}
{
"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"]
}'
{
"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"
}
{
"errors": [
{
"title": "correlated_invoices is required"
}
]
}
{
"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'
{
"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" |
curl -L 'https://wrapp.ai/api/v1/pos_devices' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
[
{
"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 |
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"
}'
{
"id": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"name": "some-name",
"terminal_id": "160xxxxx",
"merchant_id": "xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"
}
{
"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. |
{
"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. |
{
"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. |
{
"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. |
{
"invoice_id": "xxxx-xxxx-xxxx-xxxx-xxxx"
"download_url": "url"
}
VIVA PAYMENT LINK > CREATE Top
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. |
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
}'
{
"pay_link": "https://demo.vivapayments.com/web/checkout?ref=1234567890987654",
"order_code": "1234567890987654"
}
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.
curl -L 'https://wrapp.ai/api/v1/catering_tables' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
-d '{
"status": "open",
"name": "table1"
}'
[
{
"id": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "open",
"name": "table1",
"total": "140.0"
},
...
]
{
"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. |
curl -L 'https://wrapp.ai/api/v1/catering_tables' \
-X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
-d '{
"name": "table1"
}'
{
"id": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "available",
"name": "table1",
"total": "0.0",
"invoices": [],
"error_message": null
}
{
"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 |
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",
}'
{
"id": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "available",
"name": "table-A1",
"total": "0.0",
"invoices": [],
"error_message": null
}
{
"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. |
curl -L 'https://wrapp.ai/api/v1/catering_tables/xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
{
"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
}
{
"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. |
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"
}'
{
"id": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "open",
"name": "table1",
"total": "0.0",
"invoices": [],
"error_message": null
}
{
"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. |
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'
{
"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
}
{
"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. |
curl -L 'https://wrapp.ai/api/v1/catering_tables/:id' \
-X DELETE \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
{
"status": "Catering table deleted"
}
{
"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. |
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"]
}'
{
"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
}
{
"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. |
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'
{
"message": "Session aborted successfully"
}
{
"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 |
curl -L 'https://wrapp.ai/api/v1/digital_clienteles/xxxx-xxxxx-xxxxx-xxxxx' \
-X GET \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
{
"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" ,
}
{
"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 |
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": "",
}
{
"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": ""
}
{
"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
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": "",
}
{
"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": ""
}
{
"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. |
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"
}'
{
"notice": "Correlation of mark 12344567890 was successful."
}
{
"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. |
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"
}'
{
"notice": "Correlation by FIM 12344567890 with number 1 was successful."
}
{
"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" |
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"
}'
{
"notice": "Cancelled successfully.",
"cancellation_id": "100000000717999"
}
{
"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. |
curl -L 'https://wrapp.ai/api/v1/digital_transports?category=shipping&page=1' \
-X GET \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
{
"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
}
{
"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 |
|---|---|
| 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 (Καμία) |
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"
}'
{
"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": { ... }
}
}
{
"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" |
curl -L 'https://wrapp.ai/api/v1/digital_transports/xxxx-xxxxx-xxxxx-xxxxx' \
-X GET \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxx'
{
"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": { ... }
}
}
{
"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" |
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'
{
"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": { ... }
}
}
{
"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. |
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"
}'
{
"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": { ... }
}
}
{
"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 |
|---|---|
| 1 | Pallet (Παλέτα) |
| 2 | Box (Κούτα) |
| 3 | Crate (Κιβώτιο) |
| 4 | Barrel (Βαρέλι) |
| 5 | Sack (Σάκος) |
| 6 | Other (Λοιπά) |
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" }
]
}'
{
"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": { ... }
}
}
{
"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. |
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"
}'
{
"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": { ... }
}
}
{
"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). |
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"
}'
{
"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": { ... }
}
}
{
"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.