NAV

Introduction

The 2invoice API is organized around REST: predictable, resource-oriented URLs, conventional HTTP response codes, and JSON for all responses, including errors. All requests must be made over HTTPS with a valid access token.

Request Limits

The API accepts 60 requests per second per user. The limits are also communicated in the response headers: X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset.

Errors

Codes in the 2xx range indicate success, 4xx an error caused by the request, and 5xx an error on 2invoice's servers.

CodeDescription
200Everything worked as expected.
400Bad request, often a missing required parameter.
401No valid API key provided.
402The parameters were valid but the request failed.
404The requested resource doesn't exist.
422Validation failed (invalid or missing values).
429Too many requests. Use exponential backoff.
500, 502, 503, 504Something went wrong on 2invoice's end.

Authentication

  1. In your 2invoice account, create an API user.
  2. Using that username and password, generate an access token.
  3. Send the token in the Authorization header with the Bearer scheme.

Tokens expire after one year. It's recommended to run a script every few months that revokes the current token and generates a new one.

Generate token POST /auth/generate-token

Example request:

curl -X POST "https://api.2invoice.ro/auth/generate-token" \
-H "Accept: application/json" \
-d '{"username": "api_user", "password": "secret"}'

Example response:

{
    "status": "OK",
    "created_at": "2018-09-19 11:59:07",
    "expires_at": "2019-09-19 11:59:07",
    "token_type": "Bearer",
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImQxNDU0Zjk4MDA...."
}

Token information GET /auth/token-information

Example request:

curl -X GET "https://api.2invoice.ro/auth/token-information" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"

Example response:

{
    "status": "OK",
    "token": {
        "created_at": "2018-09-19 11:59:07",
        "expires_at": "2019-09-19 11:59:07",
        "revoked": false
    }
}

Revoke token GET /auth/revoke-token

Revokes the token that made the request.

Example request:

curl -X GET "https://api.2invoice.ro/auth/revoke-token" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"

Example response:

{ "status": "OK" }

Revoke all tokens GET /auth/revoke-all-tokens

Revokes all tokens for this user.

Example request:

curl -X GET "https://api.2invoice.ro/auth/revoke-all-tokens" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"

Example response:

{ "status": "OK" }

Clients

List GET /clients

Returns a list of clients.

Example request:

curl -X GET "https://api.2invoice.ro/clients" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"

Example response:

{
    "status": "OK",
    "clients": [
        {
            "id": 139881,
            "company_type_id": 1,
            "client_name": "Clientul Demo",
            "company_name": "Clientul Demo",
            "ssn_fiscal_code": "654321",
            "trade_register_number": "J21/4321/4321",
            "address": "str. Bulevard. nr. 10",
            "country_iso": "RO",
            "county_id": 40,
            "city_id": 11925,
            "email": "contact@client2invoice.ro",
            "phone": "0787654321",
            "bank_details": "Banca: Numele Bancii\nCont: RO00AAAA1B31007593840000",
            "delegates": [
                {
                    "id": 31329,
                    "first_name": "Popescu",
                    "last_name": "Ionescu",
                    "phone": "0712345678",
                    "email": "delegat@client2invoice.ro"
                }
            ]
        }
    ]
}

Create POST /clients

Creates a new client.

Example request:

curl -X POST "https://api.2invoice.ro/clients" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token" \
-d '{"company_type_id": 1, "company_name": "Clientul Demo", "ssn_fiscal_code": "654321"}'

Example response:

{
    "status": "OK",
    "client_id": 12345,
    "delegates_ids": [12345, 12346]
}

Parameters

ParameterTypeStatusDescription
company_type_idnumericrequired1 - Company, 2 - Person, 3 - Authorized person, 4 - Non-Profit Organization
company_namestring-Required if company_type_id is not 2
last_namestring-Required if company_type_id is 2
first_namestringoptional
country_isostring[2]optionalISO 3166-1 alpha-2. Default: RO.
county_idnumericoptionalIf country_iso is RO. Valid county ID.
city_idnumericoptionalIf country_iso is RO. Valid city ID.
countystringoptionalIf country_iso isn't RO.
citystringoptionalIf country_iso isn't RO.
addressstringoptional
postal_codestringoptional
phonestringoptional
faxstringoptional
emailstringoptional
websitestringoptional
bank_detailstextoptional
delegates.*.last_namestringrequiredWhen delegates are sent
delegates.*.first_namestringoptional
delegates.*.phonestringoptional
delegates.*.emailstringoptional
delegates.*.ssnstringoptional
delegates.*.id_seriesstringoptional
delegates.*.id_numbernumericoptional
delegates.*.transportstringoptional
delegates.*.transport_numberstringoptional
delegates.*.mentionsstringoptional

Show GET /clients/{client}

Gets information for a specified client.

Example request:

curl -X GET "https://api.2invoice.ro/clients/{client}" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"

Example response:

{
    "status": "OK",
    "client": {
        "id": 139881,
        "company_type_id": 1,
        "client_name": "Clientul Demo",
        "company_name": "Clientul Demo",
        "ssn_fiscal_code": "654321",
        "address": "str. Bulevard. nr. 10",
        "country_iso": "RO",
        "email": "contact@client2invoice.ro",
        "delegates": [ ... ]
    }
}

Update PUT /clients/{client}

Updates an existing client. PATCH is also accepted. Same parameters as Create.

Example request:

curl -X PUT "https://api.2invoice.ro/clients/{client}" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token" \
-d '{"company_type_id": 1, "company_name": "Clientul Demo (updated)"}'

Example response:

{
    "status": "OK",
    "client_id": 12345,
    "delegates_ids": [12345, 12346]
}

Company branch offices

List GET /branch-offices

Returns a list of branch offices.

Example request:

curl -X GET "https://api.2invoice.ro/branch-offices" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"

Example response:

{
    "status": "OK",
    "branch_offices": [],
    "default": null
}

Custom statuses

Custom statuses are defined per account and enabled per document type. Accepted document_type values: invoice, delivery_note, reception_note, supplier_orders and picking (hyphenated variants such as delivery-note are also accepted). An invalid type returns 404.

List GET /custom-statuses/{document_type}

Returns the statuses enabled for a document type, ordered by the position of that type.

Example request:

curl -X GET "https://api.2invoice.ro/custom-statuses/supplier_orders" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"

Example response:

{
    "status": "OK",
    "document_type": "supplier_orders",
    "custom_statuses": [
        {"id": 3, "name": "In lucru", "color": "#742b43", "position": 2},
        {"id": 4, "name": "Livrata", "color": "#356ca7", "position": 5}
    ]
}

Get document status GET /custom-statuses/{document_type}/{document_id}

Returns the status currently set on a document. custom_status is null when no status is set or the referenced status no longer exists; custom_status_id always contains the stored value. custom_status_user_id is only present for document types that track it (invoice, supplier_orders).

Example request:

curl -X GET "https://api.2invoice.ro/custom-statuses/supplier_orders/67944" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"

Example response:

{
    "status": "OK",
    "document_type": "supplier_orders",
    "document_id": 67944,
    "custom_status": {"id": 3, "name": "In lucru", "color": "#742b43", "position": 2},
    "custom_status_id": 3,
    "custom_status_updated_at": "2026-10-26 09:12:00",
    "custom_status_user_id": 1839
}

Set document status PUT|POST /custom-statuses/{document_type}/{document_id}

Sets the status of a document. The status must be enabled for the given document type, otherwise 422 is returned. Sending custom_status: 0 clears the status.

Example request:

curl -X PUT "https://api.2invoice.ro/custom-statuses/supplier_orders/67944" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer generated_access_token" \
-d '{"custom_status": 3}'

Example response:

{
    "status": "OK",
    "message": "Statusul a fost actualizat cu succes.",
    "document_type": "supplier_orders",
    "document_id": 67944,
    "custom_status": {"id": 3, "name": "In lucru", "color": "#742b43", "position": 2},
    "custom_status_id": 3,
    "custom_status_updated_at": "2026-10-26 09:12:00",
    "custom_status_user_id": 1839
}

Parameters

ParameterTypeStatusDescription
custom_statusnumericrequiredCustom status ID, or 0 to clear the status. Must be enabled for the document type.

Delivery notes

List GET /delivery-notes

Returns a paginated list of delivery notes.

Example request:

curl -X GET "https://api.2invoice.ro/delivery-notes" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"

Example response:

{
    "status": "OK",
    "delivery_notes": {
        "current_page": 1,
        "per_page": 20,
        "last_page": 1,
        "total": 1,
        "data": [
            {
                "id": 2997,
                "issue_date": "2018-09-18",
                "document_series": "A",
                "document_series_delimiter": "/",
                "document_number": "1",
                "currency": "RON",
                "total_price": 100,
                "client": {"id": 2997, "client_name": "Clientul Demo"}
            }
        ]
    }
}

Create POST /delivery-notes

Creates a new delivery note. Same parameters as Invoices > Create, except add_receipt, due_date and show_due_date.

Example request:

curl -X POST "https://api.2invoice.ro/delivery-notes" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token" \
-d '{"client_id": 139881, "currency": "RON", "products": [{"name": "Produsul A", "quantity": 1, "unit_price": 100}]}'

Example response:

{ "status": "OK", "delivery_note_id": 12345 }

Show GET /delivery-notes/{delivery_note}

Gets information for a specified delivery note, including its products.

Example request:

curl -X GET "https://api.2invoice.ro/delivery-notes/{delivery_note}" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"

Example response:

{
    "status": "OK",
    "delivery_note": {
        "id": 2997,
        "client_id": 139881,
        "issue_date": "2018-09-18",
        "document_series": "A",
        "document_number": "1",
        "currency": "RON",
        "total_price": 100,
        "client": {"company_name": "Clientul Demo", "address": "str. Bulevard. nr. 10, Timisoara, Timis, 654321"},
        "products": [
            {
                "id": 22551,
                "name": "Produsul A",
                "quantity": 1,
                "unit_price": "100",
                "total_price": "100",
                "um": "buc",
                "vat_value": "0.00"
            }
        ]
    }
}

Update PUT /delivery-notes/{delivery_note}

Updates an existing delivery note. PATCH is also accepted. Same parameters as Create.

Example response:

{ "status": "OK", "delivery_note_id": 12345 }

Remove DELETE /delivery-notes/{delivery_note}

Removes an existing delivery note.

Example response:

{ "status": "OK", "message": "Factura a fost stearsa cu succes." }

Base64 (PDF) GET /delivery-notes/{delivery_note}/base64

Returns the base64 code of the PDF file for the requested delivery note.

Example response:

{
    "status": "OK",
    "base64": "JVBERi0xLjQKMSAwIG9iago8PAovVGl0bGUg..."
}

Document series

List GET /document-series

Returns a list of document series.

Example request:

curl -X GET "https://api.2invoice.ro/document-series" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"

Example response:

{
    "status": "OK",
    "document_series": [
        {"id": 20587, "name": "F", "delimiter": "/", "start_number": "1", "type": "invoice"},
        {"id": 20588, "name": "P", "delimiter": "/", "start_number": "1", "type": "proform"},
        {"id": 20589, "name": "C", "delimiter": "/", "start_number": "1", "type": "receipt"},
        {"id": 20590, "name": "A", "delimiter": "/", "start_number": "1", "type": "delivery_note"}
    ],
    "default": null
}

Next number GET /document-series/{document_series}/next-number

Returns the next number for the specified document series.

Example request:

curl -X GET "https://api.2invoice.ro/document-series/{document_series}/next-number" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"

Example response:

{ "status": "OK", "number": 2 }

Emails

Default inputs GET /emails/default-informations/{document_type}/{document_id}

Predefined values for from, to, subject and body when emailing a document.

Example request:

curl -X GET "https://api.2invoice.ro/emails/default-informations/invoice/401802" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"

Example response:

{
    "status": "OK",
    "froms": [
        {"type": "company", "name": "Demo 2invoice", "email": "contact@2invoice.ro"},
        {"type": "user", "name": "Demo 2invoice", "email": "george.dragnea@demo2invoice.ro"}
    ],
    "default_from": "user",
    "to": "delegat@client2invoice.ro",
    "subject": "Factura F/1",
    "body": "Acest mesaj contine factura F/1 din data de 19.09.2018.",
    "document_url": "http://.../document/inv4130dc.../download-pdf"
}

Send POST /emails/send

Sends an email with a document attached.

Example request:

curl -X POST "https://api.2invoice.ro/emails/send" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer generated_access_token" \
-d '{"from": "user", "to": "delegat@client2invoice.ro", "subject": "Factura F/1", "body": "Buna ziua", "document_type": "invoice", "document_id": 401802}'

Parameters

ParameterTypeStatusDescription
fromstringrequiredcompany or user - who the email is sent on behalf of
tostringrequiredValid email address
subjectstringrequired
bodystringrequired
document_typestringrequiredinvoice, proform, delivery_note or receipt
document_idnumericrequiredThe document ID to attach

Inventories

List GET /inventories

Returns a list of inventories.

Example request:

curl -X GET "https://api.2invoice.ro/inventories" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"

Example response:

{
    "status": "OK",
    "inventories": [
        {
            "id": 577,
            "name": "Depozit A",
            "branch_office_id": null,
            "type": 1,
            "administrator": "Ionescu Popescu",
            "decimals": 4,
            "download": "FIFO"
        }
    ]
}

Invoices

List GET /invoices

Returns a paginated list of invoices.

Example request:

curl -X GET "https://api.2invoice.ro/invoices" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"

Example response:

{
    "status": "OK",
    "invoices": {
        "current_page": 1,
        "per_page": 20,
        "last_page": 1,
        "total": 1,
        "data": [
            {
                "id": 401802,
                "issue_date": "2018-09-19",
                "document_series": "F",
                "document_series_delimiter": "/",
                "document_number": "1",
                "currency": "RON",
                "total_price": 166.6,
                "api_key": "inv4130dc1604b7f2a1cff70dddd9647d891537350859",
                "client": {"id": 402113, "client_name": "Clientul Demo"}
            }
        ]
    }
}

Create POST /invoices

Creates a new invoice.

Example request:

curl -X POST "https://api.2invoice.ro/invoices" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token" \
-d '{"client_id": 139881, "currency": "RON", "products": [{"name": "Produsul A", "quantity": 2, "unit_price": 20}]}'

Example response:

{
    "status": "OK",
    "invoice_id": 12345,
    "api_key": "inv4130dc1604b7f2a1cff70dddd9647d891537350859"
}

Parameters

ParameterTypeStatusDescription
client_idnumericrequired*Must be a valid client ID. *Or pass a client object with the fields from Clients > Create
document_series_idnumericoptionalValid document series ID. If not set, the account's default invoice series is used.
document_numbernumericoptionalIf not set, the next number for the series is used.
issue_datedateoptionalIf not set, the current day is used.
additional_texttextoptionalText shown above the products table.
observationtextoptionalText shown below the products table.
delegate_idnumericoptionalValid delegate ID belonging to the client.
representant_idnumericoptionalValid user ID. If not set, no representant appears on the document.
branch_office_idnumericoptionalValid branch office ID.
currencystring[3]requiredISO 4217 currency code, e.g. RON, EUR.
currency_displaystring-Required if currency is not RON: ron, currency, ron_currency, currency_ron
currency_ratenumericoptionalIf not set, the last BNR rate is used.
due_datedate-Required if show_due_date is true.
show_due_datebooleanoptionalShow the due date on the document.
inventory_idnumericoptionalValid inventory ID.
update_stockbooleanoptionalDefault false. Update the inventory stock.
products.*.codestringoptionalProduct code, when working with inventories.
products.*.nametextoptional
products.*.descriptionstringoptional
products.*.umstringoptionalUnit of measure.
products.*.quantitynumericoptional
products.*.unit_pricenumericoptional
products.*.total_pricenumericoptional
products.*.vat_idnumericoptionalValid VAT ID. If not set, the default VAT is used.
products.*.discount_descriptiontextoptional
products.*.discount_percentnumericoptional
products.*.discount_unit_pricenumericoptional
products.*.discount_total_pricenumericoptional
accept_credit_cardbooleanoptionalThe payment method must be enabled in your account.
accept_paypalbooleanoptionalThe payment method must be enabled in your account.
accept_bank_transferbooleanoptionalThe payment method must be enabled in your account.
language_idnumericoptionalValid language ID.
template_idnumericoptionalValid template ID.
add_receiptbooleanoptionalAutomatically add a receipt for this invoice.

Show GET /invoices/{invoice}

Gets information for a specified invoice, including its products.

Example request:

curl -X GET "https://api.2invoice.ro/invoices/{invoice}" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"

Example response:

{
    "status": "OK",
    "invoice": {
        "id": 401802,
        "client_id": 139881,
        "issue_date": "2018-09-19",
        "document_series": "F",
        "document_number": "1",
        "currency": "RON",
        "total_price": 166.6,
        "client": {"company_name": "Clientul Demo", "address": "str. Bulevard. nr. 10, Timisoara, Timis, 654321"},
        "products": [
            {
                "id": 925028,
                "code": "P123",
                "name": "P123 Produs din gestiune",
                "quantity": 2,
                "unit_price": "20",
                "total_price": "47.6",
                "um": "buc",
                "vat_value": "7.6",
                "vat_id": 133659
            }
        ]
    }
}

Update PUT /invoices/{invoice}

Updates an existing invoice. PATCH is also accepted. Same parameters as Create.

Example response:

{ "status": "OK", "invoice_id": 12345 }

Remove DELETE /invoices/{invoice}

Removes an existing invoice.

Example response:

{ "status": "OK", "message": "Factura a fost stearsa cu succes." }

Base64 (PDF) GET /invoices/{invoice}/base64

Returns the base64 code of the PDF file for the requested invoice.

Example response:

{
    "status": "OK",
    "base64": "JVBERi0xLjQKMSAwIG9iago8PAovVGl0bGUg..."
}

Unpaid amount GET /invoices/{invoice}/amount-due

Returns the unpaid amount for the requested invoice.

Example request:

curl -X GET "https://api.2invoice.ro/invoices/{invoice}/amount-due" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"

Example response:

{
    "status": "OK",
    "amount_due": 0,
    "amount_due_ron": 0,
    "currency": "RON",
    "currency_display": "ron"
}

Languages

List GET /languages

Returns a list of languages.

Example request:

curl -X GET "https://api.2invoice.ro/languages" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"

Example response:

{
    "status": "OK",
    "languages": [
        {"id": 127788, "name": "romana"},
        {"id": 127789, "name": "engleza"},
        {"id": 127790, "name": "romana/engleza"}
    ]
}

Map

Countries GET /map/countries

Returns a list of countries with their ISO codes.

Example request:

curl -X GET "https://api.2invoice.ro/map/countries" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"

Example response:

{
    "status": "OK",
    "countries": [
        {"iso": "RO", "name": "Romania"},
        {"iso": "DE", "name": "Germany"}
    ]
}

Counties GET /map/counties

Returns a list of Romanian counties.

Example request:

curl -X GET "https://api.2invoice.ro/map/counties" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"

Example response:

{
    "status": "OK",
    "counties": [
        {"id": 1, "name": "Alba"},
        {"id": 40, "name": "Timis"}
    ]
}

Cities GET /map/cities/{county?}

Returns a list of cities. Pass a county ID (e.g. /map/cities/11) to get the cities of one county.

Example request:

curl -X GET "https://api.2invoice.ro/map/cities/{county?}" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"

Example response:

{
    "status": "OK",
    "cities": [
        {"id": 3479, "county_id": 11, "name": "Bucuresti"}
    ]
}

Products

List GET /products

Returns a paginated list of products, sorted by code. Without inventory_id the account products are returned; with it, the products of that inventory (including price, stock and custom fields).

Example request:

curl -X GET "https://api.2invoice.ro/products?inventory_id=577&page=1&per_page=50" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"

Example response:

{
    "status": "OK",
    "current_page": 1,
    "total_pages": 1,
    "per_page": 50,
    "total": 1,
    "products": [
        {
            "inventory_id": 577,
            "inventory_product_id": 22646,
            "code": "P123",
            "manufacturer": "",
            "category": "",
            "name": "P123 Produs din gestiune",
            "description": "Descrierea produsului",
            "price": "14.38",
            "price_with_vat": "",
            "currency": "RON",
            "quantity": 10,
            "type": 0,
            "um": "buc",
            "ums": [{"um": "buc"}],
            "vat": 19,
            "first_price": 1,
            "pu_acquisition": "10.00",
            "pu_with_vat_acquisition": "12.10",
            "inventory_fields": []
        }
    ]
}

Account products (no inventory_id) have a simpler shape: {"id": 123, "name": "Produs A", "code": "P123", "description": "", "from_inventory": "no"}.

Parameters

ParameterTypeStatusDescription
inventory_idnumericoptionalReturn the products of that inventory instead of the account products.
pagenumericoptionalPage number, starting at 1. Default 1.
per_pagenumericoptionalResults per page. Default 500, max 1000.

Returns products whose name or code contains the keyword. Hard cap: 30 account products + 30 inventory products. An empty query returns {"status": "OK", "data": []}.

Example request:

curl -X GET "https://api.2invoice.ro/products/search?query=P123&inventory_id=577" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"

Example response:

{
    "status": "OK",
    "products": [
        {"id": 123, "name": "Produs A", "code": "P123", "from_inventory": "no"},
        {"id": 22646, "name": "Produs B", "code": "P456", "from_inventory": "yes"}
    ]
}

Parameters

ParameterTypeStatusDescription
querystringoptionalKeyword matched against the product name or code. Empty query returns an empty list.
inventory_idnumericoptionalAlso search the products of that inventory.

Show GET /products/show/{from_inventory}/{id_or_code}/{parameterType?}

Returns a product with its name and description processed for documents, plus stock (quantity) for inventory products.

Example request:

curl -X GET "https://api.2invoice.ro/products/show/yes/22646" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"

Example response:

{
    "status": "OK",
    "product": {
        "inventory_id": 577,
        "inventory_product_id": 22646,
        "code": "P123",
        "manufacturer": "",
        "category": "",
        "name": "P123 Produs din gestiune",
        "description": "Descrierea produsului",
        "price": "14.38",
        "currency": "RON",
        "quantity": 10,
        "type": 0,
        "um": "buc",
        "vat": 19,
        "first_price": 1,
        "pu_acquisition": "10.00",
        "pu_with_vat_acquisition": "12.10",
        "inventory_fields": []
    }
}

Parameters

ParameterTypeStatusDescription
from_inventorystringrequiredyes or no
id_or_codestringrequiredProduct ID, or product code when parameterType is cod
parameterTypestringoptionalid (default) or cod. Only used when from_inventory is yes.

Show processed GET /products/processed/{from_inventory}/{product}

Returns a product with its name and description processed, as configured in the document display settings.

Example request:

curl -X GET "https://api.2invoice.ro/products/processed/yes/22646" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"

Example response:

{
    "status": "OK",
    "product": {
        "inventory_id": 577,
        "inventory_product_id": 22646,
        "code": "P123",
        "manufacturer": "",
        "category": "",
        "price": "",
        "currency": "RON",
        "quantity": 1,
        "type": 0,
        "um": "buc",
        "ums": [],
        "vat": 19,
        "first_price": 1,
        "name": "P123 Produs din gestiune",
        "description": "Descrierea produsului din gestiune"
    }
}

Parameters

ParameterTypeStatusDescription
from_inventorystringrequiredyes or no
productnumericrequiredProduct ID (account product for no, inventory product ID for yes)

Proforms

List GET /proforms

Returns a paginated list of proforms.

Example request:

curl -X GET "https://api.2invoice.ro/proforms" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"

Example response:

{
    "status": "OK",
    "proforms": {
        "current_page": 1,
        "per_page": 20,
        "last_page": 1,
        "total": 1,
        "data": [
            {
                "id": 28749,
                "issue_date": "2018-09-19",
                "document_series": "P",
                "document_number": "1",
                "currency": "RON",
                "total_price": 166.6,
                "client": {"id": 28745, "client_name": "Clientul Demo"}
            }
        ]
    }
}

Create POST /proforms

Creates a new proform. Same parameters as Invoices > Create, except add_receipt.

Example request:

curl -X POST "https://api.2invoice.ro/proforms" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token" \
-d '{"client_id": 139881, "currency": "RON", "products": [{"name": "Produsul A", "quantity": 2, "unit_price": 20}]}'

Example response:

{ "status": "OK", "proform_id": 12345 }

Show GET /proforms/{proform}

Gets information for a specified proform, including its products.

Example request:

curl -X GET "https://api.2invoice.ro/proforms/{proform}" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"

Example response:

{
    "status": "OK",
    "proform": {
        "id": 28749,
        "client_id": 139881,
        "issue_date": "2018-09-19",
        "document_series": "P",
        "document_number": "1",
        "currency": "RON",
        "total_price": 166.6,
        "client": {"company_name": "Clientul Demo"},
        "products": [ ... ]
    }
}

Update PUT /proforms/{proform}

Updates an existing proform. PATCH is also accepted. Same parameters as Create.

Example response:

{ "status": "OK", "proform_id": 12345 }

Remove DELETE /proforms/{proform}

Removes an existing proform.

Example response:

{ "status": "OK", "message": "Factura a fost stearsa cu succes." }

Base64 (PDF) GET /proforms/{proform}/base64

Returns the base64 code of the PDF file for the requested proform.

Example response:

{
    "status": "OK",
    "base64": "JVBERi0xLjQKMSAwIG9iago8PAovVGl0bGUg..."
}

Receipts

List GET /receipts

Returns a paginated list of receipts.

Example request:

curl -X GET "https://api.2invoice.ro/receipts" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"

Example response:

{
    "status": "OK",
    "receipts": {
        "current_page": 1,
        "per_page": 15,
        "last_page": 1,
        "total": 1,
        "data": [
            {
                "id": 74202,
                "issue_date": "2018-09-19",
                "document_series": "C",
                "document_number": "1",
                "currency": "RON",
                "total": "166.6",
                "client": {"id": 74194, "client_name": "Clientul Demo"}
            }
        ]
    }
}

Create POST /receipts

Creates a new receipt.

Example request:

curl -X POST "https://api.2invoice.ro/receipts" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token" \
-d '{"issue_date": "2018-09-19", "document_series_id": 20589, "associate_invoice": true, "client_id": 139881, "invoices": [{"invoice_id": 401802}], "total": 166.6, "currency": "RON"}'

Example response:

{ "status": "OK", "receipt_id": 12345 }

Parameters

ParameterTypeStatusDescription
issue_datedaterequired
document_series_idnumericrequiredValid receipt series ID.
document_numbernumericoptionalIf not set, the next number for the series is used.
associate_invoicebooleanrequiredWhether the receipt is associated with invoices.
totalnumericrequired
currencystring[3]requiredISO 4217 currency code.
client_idnumeric-Required if associate_invoice is true.
invoices.*.invoice_idnumeric-Required if associate_invoice is true.
company_namestring-Required if associate_invoice is false (receipt without an invoice).
branch_office_idnumericoptionalValid branch office ID.
language_idnumericoptionalValid language ID.
template_idnumericoptionalValid template ID.

Show GET /receipts/{receipt}

Gets information for a specified receipt.

Example request:

curl -X GET "https://api.2invoice.ro/receipts/{receipt}" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"

Example response:

{
    "status": "OK",
    "receipt": {
        "id": 74202,
        "client_id": 139881,
        "issue_date": "2018-09-19",
        "document_series": "C",
        "document_number": "1",
        "currency": "RON",
        "total": "166.6",
        "representing": "contravaloare factura: F/1",
        "invoices": [
            {"id": 401802, "document_series": "F", "document_number": "1", "amount_due": 0, "currency": "RON"}
        ],
        "client": {"client_name": "Clientul Demo"}
    }
}

Update PUT /receipts/{receipt}

Updates an existing receipt. PATCH is also accepted. Same parameters as Create.

Example response:

{ "status": "OK", "receipt_id": 12345 }

Remove DELETE /receipts/{receipt}

Removes an existing receipt.

Example response:

{ "status": "OK", "message": "Chitanta a fost stearsa cu succes." }

Base64 (PDF) GET /receipts/{receipt}/base64

Returns the base64 code of the PDF file for the requested receipt.

Example response:

{
    "status": "OK",
    "base64": "JVBERi0xLjQKMSAwIG9iago8PAovVGl0bGUg..."
}

Supplier orders

Supplier orders are the orders placed to suppliers. Recurring orders are excluded from the list. They use the custom statuses of the supplier_orders document type (see Custom statuses).

List GET /supplier_orders

Returns a paginated list of supplier orders, most recent first. custom_status is null when no status is set or the referenced status no longer exists; custom_status_id always contains the stored value.

Example request:

curl -X GET "https://api.2invoice.ro/supplier_orders?supplier_id=30116&date_from=2026-01-01" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"

Example response:

{
    "status": "OK",
    "supplier_orders": {
        "current_page": 1,
        "per_page": 20,
        "last_page": 1,
        "total": 1,
        "data": [
            {
                "id": 67944,
                "top_number": "64694",
                "date_on": "2026-10-26",
                "delivery_date": null,
                "supplier_id": 30116,
                "supplier_name": "SC Ex. SRL",
                "user_id": 1839,
                "order_type": "manual",
                "proces_logistic_name": null,
                "custom_status_id": 7095,
                "custom_status": {"id": 7095, "name": "In lucru", "color": "#742b43", "position": 2},
                "custom_status_updated_at": "2026-10-26 09:12:00",
                "custom_status_user_id": 1839,
                "reception_note_id": null
            }
        ]
    }
}

Parameters

ParameterTypeStatusDescription
supplier_idnumericoptionalFilter by supplier.
date_fromdateoptionalFilter by order date (date_on >=).
date_todateoptionalFilter by order date (date_on <=).
custom_statusnumericoptionalFilter by custom status ID.
keywordstringoptionalMatches the order number, the supplier name or a product code from the order items.
sortstringoptionaldate (default) or position (by custom status position).
pagenumericoptionalPage number, starting at 1. Default 1.
per_pagenumericoptionalResults per page. Default 20, max 1000.

Items GET /supplier_orders/{supplier_order}/items

Returns the items of a supplier order (deleted items are excluded). Item status is the reception status: 0 = nothing received, 1 = fully received, >1 = partially received (null when not set). The received quantity is quantity when status = 1 and quantity_received when status > 1.

Example request:

curl -X GET "https://api.2invoice.ro/supplier_orders/67944/items" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"

Example response:

{
    "status": "OK",
    "supplier_order_id": 67944,
    "items": [
        {
            "id": 123456,
            "code": "1234567890123",
            "product_name": "Produs X",
            "um": "buc",
            "quantity": "10",
            "quantity_received": 5,
            "pu": "14.38",
            "currency": "RON",
            "status": 2,
            "inventory_id": 736,
            "inventory_product_id": 98765
        }
    ]
}

Templates

List GET /templates

Returns a list of templates.

Example request:

curl -X GET "https://api.2invoice.ro/templates" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"

Example response:

{
    "status": "OK",
    "templates": [
        {"id": 15459, "name": "Servicii 3"}
    ]
}

Users (Representants)

List GET /users

Returns a list of users.

Example request:

curl -X GET "https://api.2invoice.ro/users" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"

Example response:

{
    "status": "OK",
    "users": [
        {
            "id": 16449,
            "first_name": "Demo",
            "last_name": "2invoice",
            "phone": "0746310333",
            "email": "george.dragnea@demo2invoice.ro"
        }
    ]
}

VATs

List GET /vats

Returns a list of VATs.

Example request:

curl -X GET "https://api.2invoice.ro/vats" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"

Example response:

{
    "status": "OK",
    "vats": [
        {"id": 133659, "name": "19%", "value": 19, "notice": null},
        {"id": 133660, "name": "9%", "value": 9, "notice": ""},
        {"id": 133665, "name": "Inversa", "value": 0, "notice": "Taxa inversa"}
    ]
}